3
! MPFUN-90 translation modules.
5
! IEEE Fortran-90 version
6
! David H Bailey 2010-07-16
10
! NERSC, Lawrence Berkeley Lab
13
! Email: dhbailey@lbl.gov
15
! This work was supported by the Director, Office of Science, Division
16
! of Mathematical, Information, and Computational Sciences of the
17
! U.S. Department of Energy under contract number DE-AC03-76SF00098.
18
! See README file accompanying this software for other legal details.
20
! A detailed description of this package, and instructions for compiling
21
! and testing this program on various specific systems are included in the
22
! README file that accompanies this file.
24
! The following notational scheme is used to designate datatypes below:
26
! A Alphabetic [i.e. ASCII]
27
! D Double precision or real*8 [i.e. REAL (KIND (0.D0))]
31
! X Double complex or real*16 [i.e. COMPLEX (KIND (0.D0))]
34
! Note that ordinary real*4 and complex*8 types are not included -- if
35
! you have code with these datatypes, convert them to real*8 and complex*16.
37
! The following parameters are all that need to be changed in normal usage:
39
! MPIPL Initial precision level, in digits.
40
! MPIOU Initial output precision level, in digits.
41
! MPIEP Log_10 of initial MP epsilon level.
45
integer mpipl, mpiou, mpiep, mpwds
46
parameter (mpipl = 2005, mpiou = 56, mpiep = 10 - mpipl)
48
!----------------------------------------------------------------------------
50
! *** No code below this point needs to be altered in normal usage.
52
parameter (mpwds = mpipl / 7.224719896d0 + 2.d0)
53
integer, private:: kdb, mp4, mp24, mp41
54
parameter (kdb = kind (0.d0), mp4 = mpwds + 4, mp24 = 2 * mp4, mp41 = mp4 + 1)
67
type (mp_real), public:: mpl02, mpl10, mppic, mpeps, mplrg, mpsml
68
integer, public:: mpnwx, mpoud, new_mpipl, new_mpwds
72
subroutine mpinit (n_mpipl)
74
! MPINIT must be called at the start of execution in the user's main program.
75
! It sets the numeric precision level, the MP epsilon level, the output
76
! precision level, and computes the constants Pi, Log(2) and Log(10) and
77
! trigonometric factors for the cos/sin routine. Note that the numeric
78
! precision level MPNW is temporarily set to MPNWX + 1, in order to permit
79
! extra-accurate calculations of the constants, and then is reset to MPNWX.
81
integer, optional:: n_mpipl
83
real*4 t0(mp4+1), t1(mp4+1), t2(mp4+1), t3(mp4+1), t4(mp4+1)
85
if (present (n_mpipl)) then
86
if (n_mpipl > mpipl) then
87
write (mpldb, *) 'mpinit: argument too large'
91
new_mpwds = n_mpipl / 7.224719896d0 + 2.d0
99
! Compute log2, log10 and pi.
104
call mpdmc (2.d0, 0, t0)
105
call mplog (t0, t2, t2, mpnw)
106
call mpdmc (10.d0, 0, t0)
107
call mplog (t0, t2, t3, mpnw)
108
call mpnpwr (t0, mpiep, t4, mpnw)
110
call mpeq (t1, mppic%mpr, mpnw)
111
call mpeq (t2, mpl02%mpr, mpnw)
112
call mpeq (t3, mpl10%mpr, mpnw)
113
call mpeq (t4, mpeps%mpr, mpnw)
115
! Allocate and compute the mpcosq and mpsinq arrays, needed for cos and sin.
117
call mpiniq (mpwds, mpnw)
119
! Set mpoud, mplrg and mpsml.
133
subroutine mpsetprec (num_digits)
135
if (num_digits > new_mpipl) then
136
write (mpldb, *) 'mpsetprec: invalid argument; precision set to ', &
140
mpnwx = num_digits / 7.224719896d0 + 2.d0
144
subroutine mpgetprec (num_digits)
146
num_digits = (mpnwx - 2) * 7.224719896d0
149
subroutine mpsetprecwords (num_words)
151
if (num_words > new_mpwds) then
152
write (mpldb, *) 'mpsetprecwords: invalid argument; precision set to ', &
160
subroutine mpgetprecwords (num_words)
165
subroutine mpsetoutputprec (num_digits)
167
if (num_digits > new_mpipl) then
169
'mpsetoutputprec: invalid argument; output precision set to ', &
177
subroutine mpgetoutputprec (num_digits)
182
subroutine mpgetpar (s, n, k)
183
! MPGETPAR retrieves some ARPREC C++ integer parameters.
184
character*(*), intent(in) :: s
185
integer, intent(out) :: n
186
integer, intent(in), optional :: k
188
if (s == 'mpnw') then
190
elseif (s == 'mpidb') then
192
elseif (s == 'mpndb') then
194
elseif (s == 'mpmcr') then
196
elseif (s == 'mpird') then
198
elseif (s == 'mpier') then
200
elseif (s == 'mpker') then
204
1 format ('mpgetpar: invalid parameter name: ',a)
209
subroutine mpsetpar (s, n, k)
210
! MPSETPAR sets some ARPREC C++ integer parameters.
211
character*(*), intent(in) :: s
212
integer, intent(in) :: n
213
integer, intent(in), optional :: k
215
if (s == 'mpnw') then
217
elseif (s == 'mpidb') then
219
elseif (s == 'mpndb') then
221
elseif (s == 'mpmcr') then
223
elseif (s == 'mpird') then
225
elseif (s == 'mpier') then
227
elseif (s == 'mpker') then
231
1 format ('mpsetpar: invalid parameter name: ',a)
235
subroutine mpeform (a, n1, n2, b)
241
call mpeformx (a%mpr, n1, n2, b, mpnw)
245
subroutine mpfform (a, n1, n2, b)
251
call mpfformx (a%mpr, n1, n2, b, mpnw)
255
subroutine mpdexc (a, l, b, mpnw)
257
! This routine converts the character*1 string A, which
258
! represents a multiprecision number in Fortran style, i.e.
259
! '1234567890' or '1.23456789D-21', into standard MP binary format.
260
! This routine is not intended to be called directly by the user.
262
integer i, i1, l, l1, l2, mpnw
263
character*1 a(l), c(mpipl+100)
267
if (a(i) .eq. 'D' .or. a(i) .eq. 'E' .or. a(i) .eq. 'd' &
268
.or. a(i) .eq. 'e') goto 100
271
call mpinpc (a, l, b, mpnw)
291
call mpinpc (c, l1 + l2 + 4, b, mpnw)
295
subroutine mpinp (iu, a, cs, mpnw)
297
! This routine reads the MP number A from logical unit IU. CS is a scratch
298
! array of type CHARACTER*1. CS must be dimensioned at least 7.225*MPNW
299
! + 100. The digits of A may span more than one line. A comma at the end
300
! of the last line denotes the end of the MP number. The input lines may not
301
! exceed 200 characters in length. Embedded blanks are allowed anywhere.
302
! However, if the input number contains more than 80 embedded blanks, then
303
! the dimension of CS must be increased by a corresponding amount. The
304
! exponent is optional in the input number, but if present it must appear
305
! first. Two examples:
308
! 10 ^ -4 x 3.14159 26535 89793 23846 26433 83279
309
! 50288 41971 69399 37510,
311
! Max SP space for A: MPNW + 4 cells.
313
integer i, iu, l, l1, mpnw, nn
318
if (mpier .ne. 0) then
319
if (mpier .eq. 99) call mpabrt
328
read (iu, '(A)', end = 200) line
331
if (line(i:i) .ne. ' ') goto 110
341
if (line(i:i) == ',') goto 150
342
if (l + 1 <= nn) then
352
call mpinpc (cs, l, a, mpnw)
357
if (mpker(72) .ne. 0) then
359
1 format ('*** MPINP: End-of-file encountered.')
361
if (mpker(mpier) .eq. 2) call mpabrt
367
subroutine mpinpc (a, n, b, mpnw)
369
! Converts the CHARACTER*1 array A of length N into the MP number B. The
370
! string A must be in the format '10^s a x tb.c' where a, b and c are digit
371
! strings; s and t are '-', '+' or blank; x is either 'x' or '*'. Blanks may
372
! be embedded anywhere. The digit string a is limited to nine digits and
373
! 80 total characters, including blanks. The exponent portion (i.e. the
374
! portion up to and including x) and the period may optionally be omitted.
375
! Debug output starts with MPIDB = 7.
377
! Max SP space for B: MPNW + 4 cells.
379
! The following example shows how this routine may be used to input a MP
382
! CHARACTER*1 CX(800)
383
! READ (1, '(80A1)') (CX(I), I = 1, ND)
384
! CALL MPINPC (CX, ND, B)
386
integer i, ib, id, ier, ip, is, it, i1, i2, k0, k1, k2, l1, mpnw, n, nb, &
392
parameter (dig = '0123456789')
393
real b(mpnw+4), f(8), s(3*mpnw+15)
396
if (mpier .ne. 0) then
397
if (mpier .eq. 99) call mpabrt
402
if (mpidb .ge. 7) then
403
no = min (n, int (7.225 * mpndb) + 20)
404
write (mpldb, 1) (a(i), i = 1, no)
405
1 format ('MPINPC I'/(78a1))
417
! Find the carat, period, plus or minus sign, whichever comes first.
421
if (ai .eq. '^') goto 110
422
if (ai .eq. '.' .or. ai .eq. '+' .or. ai .eq. '-') goto 160
427
! Make sure number preceding the carat is 10.
440
if (ai .eq. ' ') then
442
elseif (index (dig, ai) .eq. 0) then
450
nn = mpdigin (ca, 80)
461
if (ai .eq. 'x' .or. ai .eq. '*') goto 140
467
! Convert the exponent.
481
if (ai .eq. ' ' .or. ai .eq. '+') then
483
elseif (ai .eq. '-' .and. id .eq. 0) then
488
if (index (dig, ai) .eq. 0) then
498
nn = is * mpdigin (ca, 80)
501
! Find the next nonblank character.
504
if (a(i) .ne. ' ') goto 180
510
! Check if the nonblank character is a plus or minus sign.
515
if (a(i1) .eq. '+') then
518
elseif (a(i1) .eq. '-') then
539
! Scan for digits, looking for the period also. On the first pass we just
540
! count, so that on the second pass it will come out right.
544
if (ai .eq. ' ') then
545
elseif (ai .eq. '.') then
551
elseif (index (dig, ai) .eq. 0) then
559
if (ib .eq. 6 .or. i .eq. n .and. ib .ne. 0) then
562
bi = mpdigin (ca(1:6), 6)
563
call mpmuld (s(k2), 1.d6, 0, s(k0), mpnw)
570
call mpadd (s(k0), f, s(k2), mpnw)
579
if (ib .eq. 6) ib = 0
583
if (is .eq. -1) s(k2) = - s(k2)
584
if (ip .eq. 0) ip = id
588
call mpnpwr (f, nn, s(k0), mpnw)
589
call mpmul (s(k2), s(k0), s(k1), mpnw)
590
call mpeq (s(k1), b, mpnw)
592
call mproun (b, mpnw)
594
if (mpidb .ge. 7) then
595
no = min (int (abs (b(1))), mpndb) + 2
596
write (mpldb, 2) (b(i), i = 1, no)
597
2 format ('MPINPC O'/(6f12.0))
603
if (mpker(41) .ne. 0) then
605
3 format ('*** MPINPC: Syntax error in literal string.')
607
if (mpker(mpier) .eq. 2) call mpabrt
614
subroutine mpout (iu, a, la, cs, mpnw)
616
! This routine writes the exponent plus LA mantissa digits of the MP number
617
! A to logical unit IU. CS is a scratch array of type CHARACTER*1. CS must
618
! be dimensioned at least LA + 25. The digits of A may span more than one
619
! line. A comma is placed at the end of the last line to denote the end of
620
! the MP number. Here is an example of the output:
622
! 10 ^ -4 x 3.14159265358979323846264338327950288419716939937510,
624
integer i, iu, l, la, ll, mpnw, nws
625
character*1 cs(la+25)
628
if (mpier .ne. 0) return
631
ll = la / log10 (mpbdx) + 2.d0
632
mpnw = min (mpnw, ll)
633
call mpoutc (a, cs, l, mpnw)
635
l = min (l, la + 20) + 1
637
write (iu, '(78A1)') (cs(i), i = 1, l)
642
subroutine mpoutc (a, b, n, mpnw)
644
! Converts the MP number A into character form in the CHARACTER*1 array B.
645
! N (an output parameter) is the length of the output. In other words, B is
646
! contained in B(1), ..., B(N). The format is analogous to the Fortran
647
! exponential format (E format), except that the exponent is placed first.
648
! Debug output starts with MPIDB = 7.
650
! Max CHARACTER*1 space for B: 7.225 * MPNW + 30 cells.
652
! This routine is called by MPOUT, but it may be directly called by the user
653
! if desired for custom output. Example:
655
! CHARACTER*1 CX(800)
656
! CALL MPOUTC (A, CX, ND)
657
! WRITE (1, '(20A1/(72A1))') (CX(I), I = 1, ND)
659
integer i, ia, ix, j, k0, k1, l, mpnw, na, nl, n5, nws, n, no, nx
662
real*8 aa, al2, con, t1
663
parameter (al2 = 0.301029995663981195d0, con = 0.8304820235d0)
664
real a(mpnw+2), f(8), s(2*mpnw+10)
666
! character*16 mpdigout
668
if (mpier .ne. 0) then
669
if (mpier .eq. 99) call mpabrt
674
if (mpidb .ge. 7) then
675
no = min (int (abs (a(1))), mpndb) + 2
676
write (mpldb, 1) (a(i), i = 1, no)
677
1 format ('MPOUTC I'/(6f12.0))
681
na = min (int (abs (a(1))), mpnw)
691
! Determine exact power of ten for exponent.
695
if (na .ge. 2) aa = aa + mprdx * a(4)
696
if (na .ge. 3) aa = aa + mprx2 * a(5)
697
if (na .ge. 4) aa = aa + mprdx * mprx2 * a(6)
698
t1 = al2 * mpnbt * a(2) + log10 (aa)
699
if (t1 .ge. 0.d0) then
704
call mpnpwr (f, nx, s(k0), mpnw)
705
call mpdiv (a, s(k0), s(k1), mpnw)
707
! If we didn't quite get it exactly right, multiply or divide by 10 to fix.
711
if (s(k1+1) .lt. 0.) then
713
call mpmuld (s(k1), 10.d0, 0, s(k0), mpnw)
714
call mpeq (s(k0), s(k1), mpnw)
716
elseif (s(k1+2) .ge. 10.) then
718
call mpdivd (s(k1), 10.d0, 0, s(k0), mpnw)
719
call mpeq (s(k0), s(k1), mpnw)
727
! Place exponent first instead of at the very end as in Fortran.
733
ca = mpdigout (dble (nx), 10)
743
! Insert sign and first digit.
755
ca = mpdigout (an, 1)
759
if (na .eq. 0) goto 190
761
call mpsub (s(k1), f, s(k0), mpnw)
762
if (s(k0) .eq. 0) goto 190
763
call mpmuld (s(k0), 1.d6, 0, s(k1), mpnw)
764
nl = max (mpnw * log10 (mpbdx) / 6.d0 - 1.d0, 1.d0)
765
nl = min (nl, mpoud/6 + 1)
767
! Insert the digits of the remaining words.
770
if (s(k1+1) .eq. 0.) then
778
ca = mpdigout (an, 6)
781
if (ca(i:i) == ' ') ca(i:i) = '0'
786
call mpsub (s(k1), f, s(k0), mpnw)
787
call mpmuld (s(k0), 1.d6, 0, s(k1), mpnw)
788
if (s(k1) .eq. 0.) goto 140
791
! Check if trailing zeroes should be trimmed.
796
if (b(l) .eq. '0' .and. b(l-1) .eq. '0' .or. (j .gt. nl .and. b(l-2) .eq. '0' &
797
.and. b(l-3) .eq. '0')) then
802
if (b(i) .ne. '0') then
811
! Check if trailing nines should be rounded up.
813
elseif (j .gt. nl .and. b(l-2) .eq. '9' .and. b(l-3) .eq. '9') then
818
if (b(i) .ne. '9') goto 180
822
! We have rounded away all digits to the right of the decimal point, and the
823
! digit to the left of the digit is a 9. Set the digit to 1 and increase
824
! the exponent by one.
827
if (b(19) .eq. '9') then
829
ca = mpdigout (dble (nx+1), 10)
837
ca = mpdigout (an + 1.d0, 1)
846
ca = mpdigout (an + 1.d0, 1)
853
n = min (ix, mpoud + 20)
855
if (mpidb .ge. 7) then
856
no = min (n, 6 * mpndb + 20)
857
write (mpldb, 2) (b(i), i = 1, no)
858
2 format ('MPOUTC O'/(78a1))
863
recursive subroutine mpoutcx (a, b, n, mpnw)
865
! Converts the MP number A into character form in the CHARACTER*1 array B.
866
! N (an output parameter) is the length of the output. In other words, B is
867
! contained in B(1), ..., B(N). The format is analogous to the Fortran
868
! exponential format (E format), except that the exponent is placed first.
869
! Before calling MPOUTX, the arrays UU1 and UU2 must be initialized by
870
! calling MPINIX. For modest levels of precision, use MPOUTC. Debug output
871
! starts with MPIDB = 7.
873
! Max CHARACTER*1 space for B: 7.225 * MPNW + 30 cells.
876
integer i, ia, ie, ie1, ie2, i1, i2, k0, k1, k2, k3, k4, m1, m2, &
877
mpnw, mpnws, n, na, nb1, nb2, ncr, no, n4
878
double precision al2, t1, t2, t3
879
character*1 b(*), b1(8*mpnw+30), b2(8*mpnw+30)
882
parameter (al2 = 0.301029995663981195d0, dig = '0123456789')
883
real a(mpnw+2), s(5*mpnw+20)
885
if (mpier .ne. 0) then
886
if (mpier .eq. 99) call mpabrt
891
if (mpidb .ge. 7) then
892
no = min (int (abs (a(1))), mpndb) + 2
893
write (mpldb, 1) (a(i), i = 1, no)
894
1 format ('MPOUTCX I'/(6f12.0))
898
na = min (int (abs (a(1))), mpnw)
907
! Check if actual precision level of argument is too low to justify the
910
if (na .le. ncr) then
911
call mpoutc (a, b, n, mpnw)
915
! Normalize input to an integer by multiplying by a suitable power of 10.
917
t1 = a(3) + mprdx * a(4) + mprx2 * a(5)
919
m1 = max (al2 * mpnbt * (abs (a(1)) - a(2)) - t2, 0.d0)
920
call mpdmc (10.d0, 0, s(k0))
921
call mpnpwx (s(k0), m1, s(k2), mpnw)
922
call mpmulx (a, s(k2), s(k1), mpnw)
925
! Split large integer into two approximately equal decimal sections.
927
call mpmdc (s(k1), t1, i1)
928
call dpdec (t1, i1, t2, i2)
930
call mpnpwx (s(k0), m2, s(k3), mpnw)
931
call mpdivx (s(k1), s(k3), s(k0), mpnw)
932
call mpinfr (s(k0), s(k2), s(k4), mpnw)
933
call mpmulx (s(k2), s(k3), s(k0), mpnw)
934
call mpsub (s(k1), s(k0), s(k3), mpnw)
936
! Recursively convert each section.
940
call mpoutcx (s(k2), b1, nb1, mpnw)
942
call mpoutcx (s(k3), b2, nb2, mpnw)
945
! Obtain decimal exponents from each section.
955
read (c1, '(I10)') ie1
956
read (c2, '(I10)') ie2
958
! Set exponent of result.
961
write (c1, '(I14)') ie
971
! Copy mantissa of first section.
977
i1 = ie1 + m2 - ie2 + 19
979
! If first section is too long, then round trailing digits (probably 9s).
981
if (nb1 .gt. i1) then
982
i2 = index (dig, b(i1+1)) - 1
985
if (b(i) .ne. '9') goto 100
990
2 format ('*** MPOUTCX: Exceptional case -- contact DHB.')
993
100 i2 = index (dig, b(i)) - 1
994
write (c1, '(I1)') i2 + 1
997
elseif (nb1 .lt. i1) then
999
! If first section is too short, then insert zeroes in gap.
1006
! Copy mantissa of second section.
1009
n = min (i1 + nb2 - 19, int (7.225 * mpnw + 30))
1017
if (ia .eq. -1) b(18) = '-'
1021
if (mpidb .ge. 7) then
1022
no = min (n, 6 * mpndb + 20)
1023
write (mpldb, 3) (b(i), i = 1, no)
1024
3 format ('MPOUTCX O'/(78a1))
1030
real*8 function mpdigin (ca, n)
1036
parameter (digits = '0123456789')
1041
k = index (digits, ca(i:i)) - 1
1043
write (mpldb, *) 'mpdigin: non-digit in character string'
1044
elseif (k <= 9) then
1052
character*16 function mpdigout (a, n)
1055
character*16 ca, digits
1056
parameter (digits = '0123456789')
1064
d2 = aint (d1 / 10.d0)
1065
k = 1.d0 + (d1 - 10.d0 * d2)
1067
ca(i:i) = digits(k:k)
1068
if (d1 == 0.d0) goto 100
1075
if (is < 0 .and. i > 1) then
1077
elseif (i == 0 .or. is < 0 .and. i == 1) then
1078
ca = '****************'
1085
subroutine mpeformx (a, n1, n2, b, mpnw)
1087
! This routine converts the MP number A to E format, i.e. E N1.N2.
1088
! B is the output array (type CHARACTER*1) of size N1.
1090
integer i, j, k, lex, n, n1, n2, mpnw
1092
character*1 b(n1), c(8*mpnw+100)
1094
if (n1 > mpoud) then
1095
write (mpldb, '("*** mpeformx: mpoud must exceed n1")')
1098
call mpoutc (a, c, n, mpnw)
1100
! Find length of exponent field.
1103
if (c(i) /= ' ') goto 100
1109
k = n1 - lex - n2 - 4
1111
! Check for overflow of field length.
1121
! Copy characters to appropriate positions.
1127
do j = 1, min (n2 + 3, n - 17)
1131
do j = n - 16, n2 + 3
1138
b(j+k+n2+4) = c(i+j-1)
1146
subroutine mpfformx (a, n1, n2, b, mpnw)
1148
! This routine converts the MP number A to F format, i.e. F N1.N2.
1149
! B is the output array (type CHARACTER*1) of size N1.
1151
integer i, ix, kx, ls, lz, mpnw, mx, n, n1, n2, nx
1153
character*1 b(n1), c(8*mpnw+100)
1157
if (n1 > mpoud) then
1158
write (mpldb, '("*** mpfformx: mpoud must exceed n1")')
1162
call mpoutc (a, c, n, mpnw)
1169
ix = mpdigin (chr16, 16)
1170
if (a(1) .ge. 0.) then
1175
if (ix .ge. 0 .and. a(1) .ne. 0.) then
1182
! Check for overflow of field length.
1184
if (ls + lz + mx + n2 + 2 .gt. n1) then
1192
! Check if a zero should be output.
1194
if (a(1) .eq. 0 .or. -ix .gt. n2) then
1195
do i = 1, n1 - n2 - 2
1209
! Process other cases.
1211
do i = 1, n1 - n2 - mx - 2
1215
if (a(1) .lt. 0.) b(n1-n2-mx-2) = '-'
1217
b(n1-n2-ix-1) = c(19)
1218
kx = min (n - 20, ix)
1221
b(i+n1-n2-ix-1) = c(i+20)
1225
b(i+n1-n2-ix-1) = '0'
1229
kx = max (min (n - ix - 20, n2), 0)
1232
b(i+n1-n2) = c(i+ix+20)
1248
kx = min (n - 20, n2 - nx)
1251
b(i+n1-n2+nx) = c(i+20)
1254
do i = kx + 1, n2 - nx
1264
subroutine mpdotd (n, isa, a, isb, db, c)
1265
! This routine computes the dot product of the MP vector A with the DP
1266
! vector DB, returning the MP result in C. This routine is used in the
1267
! author's customized PSLQ routine, resulting in substantial speedup.
1268
! The length of both the A and DB vectors is N, and ISA and ISB are the
1269
! skip distances between successive elements of A and DB, measured in
1270
! MP words and DP words, respectively. The DP values in DB must be
1271
! whole numbers, so for example they cannot be larger than 2^53.
1274
double precision db(isb*n)
1275
type (mp_real) a(isa*n), c
1278
call mpdotdx (n, isa * (mpwds + 4), a(1)%mpr, isb, db, c%mpr, mpnw)
1281
subroutine mpxzc (a, b)
1283
! This converts the DC variable A to the MPC variable B.
1284
! This routine is not intended to be called directly by the user.
1290
call mpdmc (da, 0, b)
1292
call mpdmc (da, 0, b(mp41))
1296
subroutine mpmzc (a, b)
1298
! This converts the MP real or MP integer variable A to the MPC variable B.
1299
! This routine is not intended to be called directly by the user.
1301
real a(mp4), b(mp24)
1304
call mpeq (a, b, mpnw)
1315
! This Fortran-90 module defines operator extensions involving the
1316
! MP_INTEGER datatype. For operations involving two MP data types,
1317
! those whose first argument is MP_INTEGER are included here.
1318
! Others are handled in other modules.
1320
! The subroutines and functions defined in this module are private
1321
! and not intended to be called directly by the user.
1325
private kdb, mp4, mp24, mp41
1326
parameter (kdb = kind (0.d0), mp4 = mpwds + 4, mp24 = 2 * mp4, mp41 = mp4 + 1)
1328
mp_eqjj, mp_eqjq, mp_eqjz, mp_eqij, mp_eqji, &
1329
mp_eqdj, mp_eqjd, mp_eqxj, mp_eqjx, mp_eqja, &
1330
mp_addjj, mp_addjq, mp_addjz, mp_addij, mp_addji, &
1331
mp_adddj, mp_addjd, mp_addxj, mp_addjx, &
1332
mp_subjj, mp_subjq, mp_subjz, mp_subij, mp_subji, &
1333
mp_subdj, mp_subjd, mp_subxj, mp_subjx, mp_negj, &
1334
mp_muljj, mp_muljq, mp_muljz, mp_mulij, mp_mulji, &
1335
mp_muldj, mp_muljd, mp_mulxj, mp_muljx, &
1336
mp_divjj, mp_divjq, mp_divjz, mp_divij, mp_divji, &
1337
mp_divdj, mp_divjd, mp_divxj, mp_divjx, &
1338
mp_expjj, mp_expjq, mp_expij, mp_expji, mp_expdj, mp_expjd, &
1339
mp_eqtjj, mp_eqtjq, mp_eqtjz, mp_eqtij, mp_eqtji, &
1340
mp_eqtdj, mp_eqtjd, mp_eqtxj, mp_eqtjx, &
1341
mp_netjj, mp_netjq, mp_netjz, mp_netij, mp_netji, &
1342
mp_netdj, mp_netjd, mp_netxj, mp_netjx, &
1343
mp_letjj, mp_letjq, mp_letij, mp_letji, mp_letdj, mp_letjd, &
1344
mp_getjj, mp_getjq, mp_getij, mp_getji, mp_getdj, mp_getjd, &
1345
mp_lttjj, mp_lttjq, mp_lttij, mp_lttji, mp_lttdj, mp_lttjd, &
1346
mp_gttjj, mp_gttjq, mp_gttij, mp_gttji, mp_gttdj, mp_gttjd
1348
! MPI operator extension interface blocks.
1350
interface assignment (=)
1351
module procedure mp_eqjj
1352
module procedure mp_eqjq
1353
module procedure mp_eqjz
1354
module procedure mp_eqij
1355
module procedure mp_eqji
1356
module procedure mp_eqdj
1357
module procedure mp_eqjd
1358
module procedure mp_eqxj
1359
module procedure mp_eqjx
1361
module procedure mp_eqja
1364
interface operator (+)
1365
module procedure mp_addjj
1366
module procedure mp_addjq
1367
module procedure mp_addjz
1368
module procedure mp_addij
1369
module procedure mp_addji
1370
module procedure mp_adddj
1371
module procedure mp_addjd
1372
module procedure mp_addxj
1373
module procedure mp_addjx
1376
interface operator (-)
1377
module procedure mp_subjj
1378
module procedure mp_subjq
1379
module procedure mp_subjz
1380
module procedure mp_subij
1381
module procedure mp_subji
1382
module procedure mp_subdj
1383
module procedure mp_subjd
1384
module procedure mp_subxj
1385
module procedure mp_subjx
1387
module procedure mp_negj
1390
interface operator (*)
1391
module procedure mp_muljj
1392
module procedure mp_muljq
1393
module procedure mp_muljz
1394
module procedure mp_mulij
1395
module procedure mp_mulji
1396
module procedure mp_muldj
1397
module procedure mp_muljd
1398
module procedure mp_mulxj
1399
module procedure mp_muljx
1402
interface operator (/)
1403
module procedure mp_divjj
1404
module procedure mp_divjq
1405
module procedure mp_divjz
1406
module procedure mp_divij
1407
module procedure mp_divji
1408
module procedure mp_divdj
1409
module procedure mp_divjd
1410
module procedure mp_divxj
1411
module procedure mp_divjx
1414
interface operator (**)
1415
module procedure mp_expjj
1416
module procedure mp_expjq
1417
module procedure mp_expij
1418
module procedure mp_expji
1419
module procedure mp_expdj
1420
module procedure mp_expjd
1423
interface operator (.eq.)
1424
module procedure mp_eqtjj
1425
module procedure mp_eqtjq
1426
module procedure mp_eqtjz
1427
module procedure mp_eqtij
1428
module procedure mp_eqtji
1429
module procedure mp_eqtdj
1430
module procedure mp_eqtjd
1431
module procedure mp_eqtxj
1432
module procedure mp_eqtjx
1435
interface operator (.ne.)
1436
module procedure mp_netjj
1437
module procedure mp_netjq
1438
module procedure mp_netjz
1439
module procedure mp_netij
1440
module procedure mp_netji
1441
module procedure mp_netdj
1442
module procedure mp_netjd
1443
module procedure mp_netxj
1444
module procedure mp_netjx
1447
interface operator (.le.)
1448
module procedure mp_letjj
1449
module procedure mp_letjq
1450
module procedure mp_letij
1451
module procedure mp_letji
1452
module procedure mp_letdj
1453
module procedure mp_letjd
1456
interface operator (.ge.)
1457
module procedure mp_getjj
1458
module procedure mp_getjq
1459
module procedure mp_getij
1460
module procedure mp_getji
1461
module procedure mp_getdj
1462
module procedure mp_getjd
1465
interface operator (.lt.)
1466
module procedure mp_lttjj
1467
module procedure mp_lttjq
1468
module procedure mp_lttij
1469
module procedure mp_lttji
1470
module procedure mp_lttdj
1471
module procedure mp_lttjd
1474
interface operator (.gt.)
1475
module procedure mp_gttjj
1476
module procedure mp_gttjq
1477
module procedure mp_gttij
1478
module procedure mp_gttji
1479
module procedure mp_gttdj
1480
module procedure mp_gttjd
1485
! MPI assignment routines.
1487
subroutine mp_eqjj (ja, jb)
1488
implicit real*8 (d), type (mp_integer) (j), &
1489
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1494
call mpeq (jb%mpi, ja%mpi, mpnw)
1498
subroutine mp_eqjq (ja, qb)
1499
implicit real*8 (d), type (mp_integer) (j), &
1500
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1503
type (mp_real) q1, q2
1506
call mpeq (qb%mpr, q1%mpr, mpnw)
1507
call mpinfr (q1%mpr, ja%mpi, q2%mpr, mpnw)
1511
subroutine mp_eqjz (ja, zb)
1512
implicit real*8 (d), type (mp_integer) (j), &
1513
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1516
type (mp_real) q1, q2
1519
call mpeq (zb%mpc, q1%mpr, mpnw)
1520
call mpinfr (q1%mpr, ja%mpi, q2%mpr, mpnw)
1524
subroutine mp_eqij (ia, jb)
1525
implicit real*8 (d), type (mp_integer) (j), &
1526
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1531
call mpmdc (jb%mpi, db, ib)
1532
ia = db * 2.d0 ** ib
1536
subroutine mp_eqji (ja, ib)
1537
implicit real*8 (d), type (mp_integer) (j), &
1538
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1544
call mpdmc (db, 0, ja%mpi)
1548
subroutine mp_eqdj (da, jb)
1549
implicit real*8 (d), type (mp_integer) (j), &
1550
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1555
call mpmdc (jb%mpi, db, ib)
1556
da = db * 2.d0 ** ib
1560
subroutine mp_eqjd (ja, db)
1561
implicit real*8 (d), type (mp_integer) (j), &
1562
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1565
type (mp_real) q1, q2
1568
call mpdmc (db, 0, q1%mpr)
1569
call mpinfr (q1%mpr, ja%mpi, q2%mpr, mpnw)
1573
subroutine mp_eqxj (xa, jb)
1574
implicit real*8 (d), type (mp_integer) (j), &
1575
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1580
call mpmdc (jb%mpi, db, ib)
1581
xa = db * 2.d0 ** ib
1585
subroutine mp_eqjx (ja, xb)
1586
implicit real*8 (d), type (mp_integer) (j), &
1587
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1590
type (mp_real) q1, q2
1594
call mpdmc (db, 0, q1%mpr)
1595
call mpinfr (q1%mpr, ja%mpi, q2%mpr, mpnw)
1599
subroutine mp_eqja (ja, ab)
1600
implicit real*8 (d), type (mp_integer) (j), &
1601
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1602
character*(*), intent (in):: ab
1604
character*1 az(mpipl+100)
1605
type (mp_real) q1, q2
1612
call mpdexc (az, l, q1%mpr, mpnw)
1613
call mpinfr (q1%mpr, ja%mpi, q2%mpr, mpnw)
1619
function mp_addjj (ja, jb)
1620
implicit real*8 (d), type (mp_integer) (j), &
1621
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1622
type (mp_integer):: mp_addjj
1623
intent (in):: ja, jb
1624
type (mp_real) q1, q2
1627
call mpadd (ja%mpi, jb%mpi, q1%mpr, mpnw)
1628
call mpinfr (q1%mpr, mp_addjj%mpi, q2%mpr, mpnw)
1632
function mp_addjq (ja, qb)
1633
implicit real*8 (d), type (mp_integer) (j), &
1634
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1635
type (mp_real):: mp_addjq
1636
intent (in):: ja, qb
1639
call mpadd (ja%mpi, qb%mpr, mp_addjq%mpr, mpnw)
1643
function mp_addjz (ja, zb)
1644
implicit real*8 (d), type (mp_integer) (j), &
1645
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1646
type (mp_complex):: mp_addjz
1647
intent (in):: ja, zb
1648
type (mp_complex) z1
1651
call mpmzc (ja%mpi, z1%mpc)
1652
call mpcadd (mp4, z1%mpc, zb%mpc, mp_addjz%mpc, mpnw)
1656
function mp_addij (ia, jb)
1657
implicit real*8 (d), type (mp_integer) (j), &
1658
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1659
type (mp_integer):: mp_addij
1660
intent (in):: ia, jb
1661
type (mp_real) q1, q2, q3
1665
call mpdmc (da, 0, q1%mpr)
1666
call mpadd (q1%mpr, jb%mpi, q2%mpr, mpnw)
1667
call mpinfr (q2%mpr, mp_addij%mpi, q3%mpr, mpnw)
1671
function mp_addji (ja, ib)
1672
implicit real*8 (d), type (mp_integer) (j), &
1673
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1674
type (mp_integer):: mp_addji
1675
intent (in):: ja, ib
1676
type (mp_real) q1, q2, q3
1680
call mpdmc (db, 0, q1%mpr)
1681
call mpadd (ja%mpi, q1%mpr, q2%mpr, mpnw)
1682
call mpinfr (q2%mpr, mp_addji%mpi, q3%mpr, mpnw)
1686
function mp_adddj (da, jb)
1687
implicit real*8 (d), type (mp_integer) (j), &
1688
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1689
type (mp_real):: mp_adddj
1690
intent (in):: da, jb
1694
call mpdmc (da, 0, q1%mpr)
1695
call mpadd (q1%mpr, jb%mpi, mp_adddj%mpr, mpnw)
1699
function mp_addjd (ja, db)
1700
implicit real*8 (d), type (mp_integer) (j), &
1701
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1702
type (mp_real):: mp_addjd
1703
intent (in):: ja, db
1707
call mpdmc (db, 0, q1%mpr)
1708
call mpadd (ja%mpi, q1%mpr, mp_addjd%mpr, mpnw)
1712
function mp_addxj (xa, jb)
1713
implicit real*8 (d), type (mp_integer) (j), &
1714
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1715
type (mp_complex):: mp_addxj
1716
intent (in):: xa, jb
1717
type (mp_complex) z1, z2
1720
call mpxzc (xa, z1%mpc)
1721
call mpmzc (jb%mpi, z2%mpc)
1722
call mpcadd (mp4, z1%mpc, z2%mpc, mp_addxj%mpc, mpnw)
1726
function mp_addjx (ja, xb)
1727
implicit real*8 (d), type (mp_integer) (j), &
1728
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1729
type (mp_complex):: mp_addjx
1730
intent (in):: ja, xb
1731
type (mp_complex) z1, z2
1734
call mpmzc (ja%mpi, z1%mpc)
1735
call mpxzc (xb, z2%mpc)
1736
call mpcadd (mp4, z1%mpc, z2%mpc, mp_addjx%mpc, mpnw)
1740
! MPI subtract routines.
1742
function mp_subjj (ja, jb)
1743
implicit real*8 (d), type (mp_integer) (j), &
1744
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1745
type (mp_integer):: mp_subjj
1746
intent (in):: ja, jb
1747
type (mp_real) q1, q2
1750
call mpsub (ja%mpi, jb%mpi, q1%mpr, mpnw)
1751
call mpinfr (q1%mpr, mp_subjj%mpi, q2%mpr, mpnw)
1755
function mp_subjq (ja, qb)
1756
implicit real*8 (d), type (mp_integer) (j), &
1757
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1758
type (mp_real):: mp_subjq
1759
intent (in):: ja, qb
1762
call mpsub (ja%mpi, qb%mpr, mp_subjq%mpr, mpnw)
1766
function mp_subjz (ja, zb)
1767
implicit real*8 (d), type (mp_integer) (j), &
1768
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1769
type (mp_complex):: mp_subjz
1770
intent (in):: ja, zb
1771
type (mp_complex) z1
1774
call mpmzc (ja%mpi, z1%mpc)
1775
call mpcsub (mp4, z1%mpc, zb%mpc, mp_subjz%mpc, mpnw)
1779
function mp_subij (ia, jb)
1780
implicit real*8 (d), type (mp_integer) (j), &
1781
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1782
type (mp_integer):: mp_subij
1783
intent (in):: ia, jb
1784
type (mp_real) q1, q2, q3
1788
call mpdmc (da, 0, q1%mpr)
1789
call mpsub (q1%mpr, jb%mpi, q2%mpr, mpnw)
1790
call mpinfr (q2%mpr, mp_subij%mpi, q3%mpr, mpnw)
1794
function mp_subji (ja, ib)
1795
implicit real*8 (d), type (mp_integer) (j), &
1796
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1797
type (mp_integer):: mp_subji
1798
intent (in):: ja, ib
1799
type (mp_real) q1, q2, q3
1803
call mpdmc (db, 0, q1%mpr)
1804
call mpsub (ja%mpi, q1%mpr, q2%mpr, mpnw)
1805
call mpinfr (q2%mpr, mp_subji%mpi, q3%mpr, mpnw)
1809
function mp_subdj (da, jb)
1810
implicit real*8 (d), type (mp_integer) (j), &
1811
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1812
type (mp_real):: mp_subdj
1813
intent (in):: da, jb
1817
call mpdmc (da, 0, q1%mpr)
1818
call mpsub (q1%mpr, jb%mpi, mp_subdj%mpr, mpnw)
1822
function mp_subjd (ja, db)
1823
implicit real*8 (d), type (mp_integer) (j), &
1824
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1825
type (mp_real):: mp_subjd
1826
intent (in):: ja, db
1830
call mpdmc (db, 0, q1%mpr)
1831
call mpsub (ja%mpi, q1%mpr, mp_subjd%mpr, mpnw)
1835
function mp_subxj (xa, jb)
1836
implicit real*8 (d), type (mp_integer) (j), &
1837
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1838
type (mp_complex):: mp_subxj
1839
intent (in):: xa, jb
1840
type (mp_complex) z1, z2
1843
call mpxzc (xa, z1%mpc)
1844
call mpmzc (jb%mpi, z2%mpc)
1845
call mpcsub (mp4, z1%mpc, z2%mpc, mp_subxj%mpc, mpnw)
1849
function mp_subjx (ja, xb)
1850
implicit real*8 (d), type (mp_integer) (j), &
1851
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1852
type (mp_complex):: mp_subjx
1853
intent (in):: ja, xb
1854
type (mp_complex) z1, z2
1857
call mpmzc (ja%mpi, z1%mpc)
1858
call mpxzc (xb, z2%mpc)
1859
call mpcsub (mp4, z1%mpc, z2%mpc, mp_subjx%mpc, mpnw)
1863
! MPI negation routine.
1865
function mp_negj (ja)
1866
implicit real*8 (d), type (mp_integer) (j), &
1867
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1868
type (mp_integer):: mp_negj
1872
call mpeq (ja%mpi, mp_negj%mpi, mpnw)
1873
mp_negj%mpi(1) = - ja%mpi(1)
1877
! MPI multiply routines.
1879
function mp_muljj (ja, jb)
1880
implicit real*8 (d), type (mp_integer) (j), &
1881
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1882
type (mp_integer):: mp_muljj
1883
intent (in):: ja, jb
1884
type (mp_real) q1, q2
1887
call mpmul (ja%mpi, jb%mpi, q1%mpr, mpnw)
1888
call mpinfr (q1%mpr, mp_muljj%mpi, q2%mpr, mpnw)
1892
function mp_muljq (ja, qb)
1893
implicit real*8 (d), type (mp_integer) (j), &
1894
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1895
type (mp_real):: mp_muljq
1896
intent (in):: ja, qb
1899
call mpmul (ja%mpi, qb%mpr, mp_muljq%mpr, mpnw)
1903
function mp_muljz (ja, zb)
1904
implicit real*8 (d), type (mp_integer) (j), &
1905
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1906
type (mp_complex):: mp_muljz
1907
intent (in):: ja, zb
1908
type (mp_complex) z1
1911
call mpmzc (ja%mpi, z1%mpc)
1912
call mpcmul (mp4, z1%mpc, zb%mpc, mp_muljz%mpc, mpnw)
1916
function mp_mulij (ia, jb)
1917
implicit real*8 (d), type (mp_integer) (j), &
1918
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1919
type (mp_integer):: mp_mulij
1920
intent (in):: ia, jb
1921
type (mp_real) q1, q2
1925
call mpmuld (jb%mpi, da, 0, q1%mpr, mpnw)
1926
call mpinfr (q1%mpr, mp_mulij%mpi, q2%mpr, mpnw)
1930
function mp_mulji (ja, ib)
1931
implicit real*8 (d), type (mp_integer) (j), &
1932
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1933
type (mp_integer):: mp_mulji
1934
intent (in):: ja, ib
1935
type (mp_real) q1, q2
1939
call mpmuld (ja%mpi, db, 0, q1%mpr, mpnw)
1940
call mpinfr (q1%mpr, mp_mulji%mpi, q2%mpr, mpnw)
1944
function mp_muldj (da, jb)
1945
implicit real*8 (d), type (mp_integer) (j), &
1946
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1947
type (mp_real):: mp_muldj
1948
intent (in):: da, jb
1951
call mpmuld (jb%mpi, da, 0, mp_muldj%mpr, mpnw)
1955
function mp_muljd (ja, db)
1956
implicit real*8 (d), type (mp_integer) (j), &
1957
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1958
type (mp_real):: mp_muljd
1959
intent (in):: ja, db
1962
call mpmuld (ja%mpi, db, 0, mp_muljd%mpr, mpnw)
1966
function mp_mulxj (xa, jb)
1967
implicit real*8 (d), type (mp_integer) (j), &
1968
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1969
type (mp_complex):: mp_mulxj
1970
intent (in):: xa, jb
1971
type (mp_complex) z1, z2
1974
call mpxzc (xa, z1%mpc)
1975
call mpmzc (jb%mpi, z2%mpc)
1976
call mpcmul (mp4, z1%mpc, z2%mpc, mp_mulxj%mpc, mpnw)
1980
function mp_muljx (ja, xb)
1981
implicit real*8 (d), type (mp_integer) (j), &
1982
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1983
type (mp_complex):: mp_muljx
1984
intent (in):: ja, xb
1985
type (mp_complex) z1, z2
1988
call mpmzc (ja%mpi, z1%mpc)
1989
call mpxzc (xb, z2%mpc)
1990
call mpcmul (mp4, z1%mpc, z2%mpc, mp_muljx%mpc, mpnw)
1994
! MPI divide routines.
1996
function mp_divjj (ja, jb)
1997
implicit real*8 (d), type (mp_integer) (j), &
1998
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
1999
type (mp_integer):: mp_divjj
2000
intent (in):: ja, jb
2001
type (mp_real) q1, q2
2004
call mpdiv (ja%mpi, jb%mpi, q1%mpr, mpnw)
2005
call mpinfr (q1%mpr, mp_divjj%mpi, q2%mpr, mpnw)
2009
function mp_divjq (ja, qb)
2010
implicit real*8 (d), type (mp_integer) (j), &
2011
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2012
type (mp_real):: mp_divjq
2013
intent (in):: ja, qb
2016
call mpdiv (ja%mpi, qb%mpr, mp_divjq%mpr, mpnw)
2020
function mp_divjz (ja, zb)
2021
implicit real*8 (d), type (mp_integer) (j), &
2022
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2023
type (mp_complex):: mp_divjz
2024
intent (in):: ja, zb
2025
type (mp_complex) z1
2028
call mpmzc (ja%mpi, z1%mpc)
2029
call mpcdiv (mp4, z1%mpc, zb%mpc, mp_divjz%mpc, mpnw)
2033
function mp_divij (ia, jb)
2034
implicit real*8 (d), type (mp_integer) (j), &
2035
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2036
type (mp_integer):: mp_divij
2037
intent (in):: ia, jb
2038
type (mp_real) q1, q2, q3
2042
call mpdmc (da, 0, q1%mpr)
2043
call mpdiv (q1%mpr, jb%mpi, q2%mpr, mpnw)
2044
call mpinfr (q2%mpr, mp_divij%mpi, q3%mpr, mpnw)
2048
function mp_divji (ja, ib)
2049
implicit real*8 (d), type (mp_integer) (j), &
2050
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2051
type (mp_integer):: mp_divji
2052
intent (in):: ja, ib
2053
type (mp_real) q1, q2
2057
call mpdivd (ja%mpi, db, 0, q1%mpr, mpnw)
2058
call mpinfr (q1%mpr, mp_divji%mpi, q2%mpr, mpnw)
2062
function mp_divdj (da, jb)
2063
implicit real*8 (d), type (mp_integer) (j), &
2064
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2065
type (mp_real):: mp_divdj
2066
intent (in):: da, jb
2070
call mpdmc (da, 0, q1%mpr)
2071
call mpdiv (q1%mpr, jb%mpi, mp_divdj%mpr, mpnw)
2075
function mp_divjd (ja, db)
2076
implicit real*8 (d), type (mp_integer) (j), &
2077
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2078
type (mp_real):: mp_divjd
2079
intent (in):: ja, db
2082
call mpdivd (ja%mpi, db, 0, mp_divjd%mpr, mpnw)
2086
function mp_divxj (xa, jb)
2087
implicit real*8 (d), type (mp_integer) (j), &
2088
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2089
type (mp_complex):: mp_divxj
2090
intent (in):: xa, jb
2091
type (mp_complex) z1, z2
2094
call mpxzc (xa, z1%mpc)
2095
call mpmzc (jb%mpi, z2%mpc)
2096
call mpcdiv (mp4, z1%mpc, z2%mpc, mp_divxj%mpc, mpnw)
2100
function mp_divjx (ja, xb)
2101
implicit real*8 (d), type (mp_integer) (j), &
2102
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2103
type (mp_complex):: mp_divjx
2104
intent (in):: ja, xb
2105
type (mp_complex) z1, z2
2108
call mpmzc (ja%mpi, z1%mpc)
2109
call mpxzc (xb, z2%mpc)
2110
call mpcdiv (mp4, z1%mpc, z2%mpc, mp_divjx%mpc, mpnw)
2114
! MPI exponentiation routines.
2116
function mp_expjj (ja, jb)
2117
implicit real*8 (d), type (mp_integer) (j), &
2118
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2119
type (mp_integer):: mp_expjj
2120
intent (in):: ja, jb
2121
type (mp_real) q1, q2
2124
call mplog (ja%mpi, mpl02%mpr, q1%mpr, mpnw)
2125
call mpmul (q1%mpr, jb%mpi, q2%mpr, mpnw)
2126
call mpexp (q2%mpr, mpl02%mpr, q1%mpr, mpnw)
2127
call mpnint (q1%mpr, mp_expjj%mpi, mpnw)
2131
function mp_expjq (ja, qb)
2132
implicit real*8 (d), type (mp_integer) (j), &
2133
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2134
type (mp_real):: mp_expjq
2135
intent (in):: ja, qb
2136
type (mp_real) q1, q2
2139
call mplog (ja%mpi, mpl02%mpr, q1%mpr, mpnw)
2140
call mpmul (q1%mpr, qb%mpr, q2%mpr, mpnw)
2141
call mpexp (q2%mpr, mpl02%mpr, mp_expjq%mpr, mpnw)
2145
function mp_expij (ia, jb)
2146
implicit real*8 (d), type (mp_integer) (j), &
2147
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2148
type (mp_integer):: mp_expij
2149
intent (in):: ia, jb
2150
type (mp_real) q1, q2, q3
2154
call mpdmc (da, 0, q1%mpr)
2155
call mplog (q1%mpr, mpl02%mpr, q2%mpr, mpnw)
2156
call mpmul (q2%mpr, jb%mpi, q3%mpr, mpnw)
2157
call mpexp (q3%mpr, mpl02%mpr, q1%mpr, mpnw)
2158
call mpnint (q1%mpr, mp_expij%mpi, mpnw)
2162
function mp_expji (ja, ib)
2163
implicit real*8 (d), type (mp_integer) (j), &
2164
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2165
type (mp_integer):: mp_expji
2166
intent (in):: ja, ib
2170
call mpnpwr (ja%mpi, ib, q1%mpr, mpnw)
2171
call mpnint (q1%mpr, mp_expji%mpi, mpnw)
2175
function mp_expdj (da, jb)
2176
implicit real*8 (d), type (mp_integer) (j), &
2177
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2178
type (mp_real):: mp_expdj
2179
intent (in):: da, jb
2180
type (mp_real) q1, q2, q3
2183
call mpdmc (da, 0, q1%mpr)
2184
call mplog (q1%mpr, mpl02%mpr, q2%mpr, mpnw)
2185
call mpmul (q2%mpr, jb%mpi, q3%mpr, mpnw)
2186
call mpexp (q3%mpr, mpl02%mpr, mp_expdj%mpr, mpnw)
2190
function mp_expjd (ja, db)
2191
implicit real*8 (d), type (mp_integer) (j), &
2192
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2193
type (mp_real):: mp_expjd
2194
intent (in):: ja, db
2195
type (mp_real) q1, q2
2198
call mplog (ja%mpi, mpl02%mpr, q1%mpr, mpnw)
2199
call mpmuld (q1%mpr, db, 0, q2%mpr, mpnw)
2200
call mpexp (q2%mpr, mpl02%mpr, mp_expjd%mpr, mpnw)
2204
! MPI .EQ. routines.
2206
function mp_eqtjj (ja, jb)
2207
implicit real*8 (d), type (mp_integer) (j), &
2208
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2210
intent (in):: ja, jb
2213
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2222
function mp_eqtjq (ja, qb)
2223
implicit real*8 (d), type (mp_integer) (j), &
2224
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2226
intent (in):: ja, qb
2229
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2238
function mp_eqtjz (ja, zb)
2239
implicit real*8 (d), type (mp_integer) (j), &
2240
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2242
intent (in):: ja, zb
2243
type (mp_complex) z1
2246
call mpmzc (ja%mpi, z1%mpc)
2247
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
2248
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
2249
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
2257
function mp_eqtij (ia, jb)
2258
implicit real*8 (d), type (mp_integer) (j), &
2259
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2261
intent (in):: ia, jb
2266
call mpdmc (da, 0, q1%mpr)
2267
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2276
function mp_eqtji (ja, ib)
2277
implicit real*8 (d), type (mp_integer) (j), &
2278
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2280
intent (in):: ja, ib
2285
call mpdmc (db, 0, q1%mpr)
2286
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2295
function mp_eqtdj (da, jb)
2296
implicit real*8 (d), type (mp_integer) (j), &
2297
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2299
intent (in):: da, jb
2303
call mpdmc (da, 0, q1%mpr)
2304
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2313
function mp_eqtjd (ja, db)
2314
implicit real*8 (d), type (mp_integer) (j), &
2315
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2317
intent (in):: ja, db
2321
call mpdmc (db, 0, q1%mpr)
2322
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2331
function mp_eqtxj (xa, jb)
2332
implicit real*8 (d), type (mp_integer) (j), &
2333
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2335
intent (in):: xa, jb
2336
type (mp_complex) z1, z2
2339
call mpxzc (xa, z1%mpc)
2340
call mpmzc (jb%mpi, z2%mpc)
2341
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
2342
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
2343
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
2351
function mp_eqtjx (ja, xb)
2352
implicit real*8 (d), type (mp_integer) (j), &
2353
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2355
intent (in):: ja, xb
2356
type (mp_complex) z1, z2
2359
call mpmzc (ja%mpi, z1%mpc)
2360
call mpxzc (xb, z2%mpc)
2361
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
2362
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
2363
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
2371
! MPI .NE. routines.
2373
function mp_netjj (ja, jb)
2374
implicit real*8 (d), type (mp_integer) (j), &
2375
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2377
intent (in):: ja, jb
2380
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2389
function mp_netjq (ja, qb)
2390
implicit real*8 (d), type (mp_integer) (j), &
2391
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2393
intent (in):: ja, qb
2396
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2405
function mp_netjz (ja, zb)
2406
implicit real*8 (d), type (mp_integer) (j), &
2407
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2409
intent (in):: ja, zb
2410
type (mp_complex) z1
2413
call mpmzc (ja%mpi, z1%mpc)
2414
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
2415
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
2416
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
2424
function mp_netij (ia, jb)
2425
implicit real*8 (d), type (mp_integer) (j), &
2426
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2428
intent (in):: ia, jb
2433
call mpdmc (da, 0, q1%mpr)
2434
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2443
function mp_netji (ja, ib)
2444
implicit real*8 (d), type (mp_integer) (j), &
2445
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2447
intent (in):: ja, ib
2452
call mpdmc (db, 0, q1%mpr)
2453
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2462
function mp_netdj (da, jb)
2463
implicit real*8 (d), type (mp_integer) (j), &
2464
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2466
intent (in):: da, jb
2470
call mpdmc (da, 0, q1%mpr)
2471
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2480
function mp_netjd (ja, db)
2481
implicit real*8 (d), type (mp_integer) (j), &
2482
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2484
intent (in):: ja, db
2488
call mpdmc (db, 0, q1%mpr)
2489
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2498
function mp_netxj (xa, jb)
2499
implicit real*8 (d), type (mp_integer) (j), &
2500
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2502
intent (in):: xa, jb
2503
type (mp_complex) z1, z2
2506
call mpxzc (xa, z1%mpc)
2507
call mpmzc (jb%mpi, z2%mpc)
2508
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
2509
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
2510
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
2518
function mp_netjx (ja, xb)
2519
implicit real*8 (d), type (mp_integer) (j), &
2520
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2522
intent (in):: ja, xb
2523
type (mp_complex) z1, z2
2526
call mpmzc (ja%mpi, z1%mpc)
2527
call mpxzc (xb, z2%mpc)
2528
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
2529
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
2530
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
2538
! MPI .LE. routines.
2540
function mp_letjj (ja, jb)
2541
implicit real*8 (d), type (mp_integer) (j), &
2542
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2544
intent (in):: ja, jb
2547
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2556
function mp_letjq (ja, qb)
2557
implicit real*8 (d), type (mp_integer) (j), &
2558
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2560
intent (in):: ja, qb
2563
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2572
function mp_letij (ia, jb)
2573
implicit real*8 (d), type (mp_integer) (j), &
2574
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2576
intent (in):: ia, jb
2581
call mpdmc (da, 0, q1%mpr)
2582
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2591
function mp_letji (ja, ib)
2592
implicit real*8 (d), type (mp_integer) (j), &
2593
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2595
intent (in):: ja, ib
2600
call mpdmc (db, 0, q1%mpr)
2601
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2610
function mp_letdj (da, jb)
2611
implicit real*8 (d), type (mp_integer) (j), &
2612
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2614
intent (in):: da, jb
2618
call mpdmc (da, 0, q1%mpr)
2619
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2628
function mp_letjd (ja, db)
2629
implicit real*8 (d), type (mp_integer) (j), &
2630
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2632
intent (in):: ja, db
2636
call mpdmc (db, 0, q1%mpr)
2637
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2646
! MPI .GE. routines.
2648
function mp_getjj (ja, jb)
2649
implicit real*8 (d), type (mp_integer) (j), &
2650
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2652
intent (in):: ja, jb
2655
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2664
function mp_getjq (ja, qb)
2665
implicit real*8 (d), type (mp_integer) (j), &
2666
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2668
intent (in):: ja, qb
2671
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2680
function mp_getij (ia, jb)
2681
implicit real*8 (d), type (mp_integer) (j), &
2682
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2684
intent (in):: ia, jb
2689
call mpdmc (da, 0, q1%mpr)
2690
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2699
function mp_getji (ja, ib)
2700
implicit real*8 (d), type (mp_integer) (j), &
2701
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2703
intent (in):: ja, ib
2708
call mpdmc (db, 0, q1%mpr)
2709
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2718
function mp_getdj (da, jb)
2719
implicit real*8 (d), type (mp_integer) (j), &
2720
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2722
intent (in):: da, jb
2726
call mpdmc (da, 0, q1%mpr)
2727
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2736
function mp_getjd (ja, db)
2737
implicit real*8 (d), type (mp_integer) (j), &
2738
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2740
intent (in):: ja, db
2744
call mpdmc (db, 0, q1%mpr)
2745
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2754
! MPI .LT. routines.
2756
function mp_lttjj (ja, jb)
2757
implicit real*8 (d), type (mp_integer) (j), &
2758
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2760
intent (in):: ja, jb
2763
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2772
function mp_lttjq (ja, qb)
2773
implicit real*8 (d), type (mp_integer) (j), &
2774
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2776
intent (in):: ja, qb
2779
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2788
function mp_lttij (ia, jb)
2789
implicit real*8 (d), type (mp_integer) (j), &
2790
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2792
intent (in):: ia, jb
2797
call mpdmc (da, 0, q1%mpr)
2798
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2807
function mp_lttji (ja, ib)
2808
implicit real*8 (d), type (mp_integer) (j), &
2809
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2811
intent (in):: ja, ib
2816
call mpdmc (db, 0, q1%mpr)
2817
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2826
function mp_lttdj (da, jb)
2827
implicit real*8 (d), type (mp_integer) (j), &
2828
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2830
intent (in):: da, jb
2834
call mpdmc (da, 0, q1%mpr)
2835
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2844
function mp_lttjd (ja, db)
2845
implicit real*8 (d), type (mp_integer) (j), &
2846
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2848
intent (in):: ja, db
2852
call mpdmc (db, 0, q1%mpr)
2853
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2862
! MPI .GT. routines.
2864
function mp_gttjj (ja, jb)
2865
implicit real*8 (d), type (mp_integer) (j), &
2866
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2868
intent (in):: ja, jb
2871
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
2880
function mp_gttjq (ja, qb)
2881
implicit real*8 (d), type (mp_integer) (j), &
2882
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2884
intent (in):: ja, qb
2887
call mpcpr (ja%mpi, qb%mpr, ic, mpnw)
2896
function mp_gttij (ia, jb)
2897
implicit real*8 (d), type (mp_integer) (j), &
2898
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2900
intent (in):: ia, jb
2905
call mpdmc (da, 0, q1%mpr)
2906
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2915
function mp_gttji (ja, ib)
2916
implicit real*8 (d), type (mp_integer) (j), &
2917
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2919
intent (in):: ja, ib
2924
call mpdmc (db, 0, q1%mpr)
2925
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2934
function mp_gttdj (da, jb)
2935
implicit real*8 (d), type (mp_integer) (j), &
2936
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2938
intent (in):: da, jb
2942
call mpdmc (da, 0, q1%mpr)
2943
call mpcpr (q1%mpr, jb%mpi, ic, mpnw)
2952
function mp_gttjd (ja, db)
2953
implicit real*8 (d), type (mp_integer) (j), &
2954
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
2956
intent (in):: ja, db
2960
call mpdmc (db, 0, q1%mpr)
2961
call mpcpr (ja%mpi, q1%mpr, ic, mpnw)
2975
! This Fortran-90 module defines operator extensions involving the
2976
! MP_REAL datatype. For operations involving two MP data types,
2977
! those whose first argument is MP_REAL are included here.
2978
! Others are handled in other modules.
2980
! The subroutines and functions defined in this module are private
2981
! and not intended to be called directly by the user.
2985
private kdb, mp4, mp24, mp41
2986
parameter (kdb = kind (0.d0), mp4 = mpwds + 4, mp24 = 2 * mp4, mp41 = mp4 + 1)
2988
mp_eqqj, mp_eqqq, mp_eqqz, mp_eqiq, mp_eqqi, &
2989
mp_eqdq, mp_eqqd, mp_eqxq, mp_eqqx, mp_eqqa, &
2990
mp_addqj, mp_addqq, mp_addqz, mp_addiq, mp_addqi, &
2991
mp_adddq, mp_addqd, mp_addxq, mp_addqx, &
2992
mp_subqj, mp_subqq, mp_subqz, mp_subiq, mp_subqi, &
2993
mp_subdq, mp_subqd, mp_subxq, mp_subqx, mp_negq, &
2994
mp_mulqj, mp_mulqq, mp_mulqz, mp_muliq, mp_mulqi, &
2995
mp_muldq, mp_mulqd, mp_mulxq, mp_mulqx, &
2996
mp_divqj, mp_divqq, mp_divqz, mp_diviq, mp_divqi, &
2997
mp_divdq, mp_divqd, mp_divxq, mp_divqx, &
2998
mp_expqj, mp_expqq, mp_expiq, mp_expqi, mp_expdq, mp_expqd, &
2999
mp_eqtqj, mp_eqtqq, mp_eqtqz, mp_eqtiq, mp_eqtqi, &
3000
mp_eqtdq, mp_eqtqd, mp_eqtxq, mp_eqtqx, &
3001
mp_netqj, mp_netqq, mp_netqz, mp_netiq, mp_netqi, &
3002
mp_netdq, mp_netqd, mp_netxq, mp_netqx, &
3003
mp_letqj, mp_letqq, mp_letiq, mp_letqi, mp_letdq, mp_letqd, &
3004
mp_getqj, mp_getqq, mp_getiq, mp_getqi, mp_getdq, mp_getqd, &
3005
mp_lttqj, mp_lttqq, mp_lttiq, mp_lttqi, mp_lttdq, mp_lttqd, &
3006
mp_gttqj, mp_gttqq, mp_gttiq, mp_gttqi, mp_gttdq, mp_gttqd
3008
! MPR operator extension interface blocks.
3010
interface assignment (=)
3011
module procedure mp_eqqj
3012
module procedure mp_eqqq
3013
module procedure mp_eqqz
3014
module procedure mp_eqiq
3015
module procedure mp_eqqi
3016
module procedure mp_eqdq
3017
module procedure mp_eqqd
3018
module procedure mp_eqxq
3019
module procedure mp_eqqx
3021
module procedure mp_eqqa
3024
interface operator (+)
3025
module procedure mp_addqj
3026
module procedure mp_addqq
3027
module procedure mp_addqz
3028
module procedure mp_addiq
3029
module procedure mp_addqi
3030
module procedure mp_adddq
3031
module procedure mp_addqd
3032
module procedure mp_addxq
3033
module procedure mp_addqx
3036
interface operator (-)
3037
module procedure mp_subqj
3038
module procedure mp_subqq
3039
module procedure mp_subqz
3040
module procedure mp_subiq
3041
module procedure mp_subqi
3042
module procedure mp_subdq
3043
module procedure mp_subqd
3044
module procedure mp_subxq
3045
module procedure mp_subqx
3047
module procedure mp_negq
3050
interface operator (*)
3051
module procedure mp_mulqj
3052
module procedure mp_mulqq
3053
module procedure mp_mulqz
3054
module procedure mp_muliq
3055
module procedure mp_mulqi
3056
module procedure mp_muldq
3057
module procedure mp_mulqd
3058
module procedure mp_mulxq
3059
module procedure mp_mulqx
3062
interface operator (/)
3063
module procedure mp_divqj
3064
module procedure mp_divqq
3065
module procedure mp_divqz
3066
module procedure mp_diviq
3067
module procedure mp_divqi
3068
module procedure mp_divdq
3069
module procedure mp_divqd
3070
module procedure mp_divxq
3071
module procedure mp_divqx
3074
interface operator (**)
3075
module procedure mp_expqj
3076
module procedure mp_expqq
3077
module procedure mp_expiq
3078
module procedure mp_expqi
3079
module procedure mp_expdq
3080
module procedure mp_expqd
3083
interface operator (.eq.)
3084
module procedure mp_eqtqj
3085
module procedure mp_eqtqq
3086
module procedure mp_eqtqz
3087
module procedure mp_eqtiq
3088
module procedure mp_eqtqi
3089
module procedure mp_eqtdq
3090
module procedure mp_eqtqd
3091
module procedure mp_eqtxq
3092
module procedure mp_eqtqx
3095
interface operator (.ne.)
3096
module procedure mp_netqj
3097
module procedure mp_netqq
3098
module procedure mp_netqz
3099
module procedure mp_netiq
3100
module procedure mp_netqi
3101
module procedure mp_netdq
3102
module procedure mp_netqd
3103
module procedure mp_netxq
3104
module procedure mp_netqx
3107
interface operator (.le.)
3108
module procedure mp_letqj
3109
module procedure mp_letqq
3110
module procedure mp_letiq
3111
module procedure mp_letqi
3112
module procedure mp_letdq
3113
module procedure mp_letqd
3116
interface operator (.ge.)
3117
module procedure mp_getqj
3118
module procedure mp_getqq
3119
module procedure mp_getiq
3120
module procedure mp_getqi
3121
module procedure mp_getdq
3122
module procedure mp_getqd
3125
interface operator (.lt.)
3126
module procedure mp_lttqj
3127
module procedure mp_lttqq
3128
module procedure mp_lttiq
3129
module procedure mp_lttqi
3130
module procedure mp_lttdq
3131
module procedure mp_lttqd
3134
interface operator (.gt.)
3135
module procedure mp_gttqj
3136
module procedure mp_gttqq
3137
module procedure mp_gttiq
3138
module procedure mp_gttqi
3139
module procedure mp_gttdq
3140
module procedure mp_gttqd
3145
! MPR assignment routines.
3147
subroutine mp_eqqj (qa, jb)
3148
implicit real*8 (d), type (mp_integer) (j), &
3149
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3154
call mpeq (jb%mpi, qa%mpr, mpnw)
3158
subroutine mp_eqqq (qa, qb)
3159
implicit real*8 (d), type (mp_integer) (j), &
3160
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3165
call mpeq (qb%mpr, qa%mpr, mpnw)
3169
subroutine mp_eqqz (qa, zb)
3170
implicit real*8 (d), type (mp_integer) (j), &
3171
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3176
call mpeq (zb%mpc, qa%mpr, mpnw)
3180
subroutine mp_eqiq (ia, qb)
3181
implicit real*8 (d), type (mp_integer) (j), &
3182
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3187
call mpmdc (qb%mpr, db, ib)
3188
ia = db * 2.d0 ** ib
3192
subroutine mp_eqqi (qa, ib)
3193
implicit real*8 (d), type (mp_integer) (j), &
3194
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3200
call mpdmc (db, 0, qa%mpr)
3204
subroutine mp_eqdq (da, qb)
3205
implicit real*8 (d), type (mp_integer) (j), &
3206
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3211
call mpmdc (qb%mpr, db, ib)
3212
da = db * 2.d0 ** ib
3216
subroutine mp_eqqd (qa, db)
3217
implicit real*8 (d), type (mp_integer) (j), &
3218
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3223
call mpdmc (db, 0, qa%mpr)
3227
subroutine mp_eqxq (xa, qb)
3228
implicit real*8 (d), type (mp_integer) (j), &
3229
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3234
call mpmdc (qb%mpr, db, ib)
3235
xa = db * 2.d0 ** ib
3239
subroutine mp_eqqx (qa, xb)
3240
implicit real*8 (d), type (mp_integer) (j), &
3241
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3247
call mpdmc (db, 0, qa%mpr)
3251
subroutine mp_eqqa (qa, ab)
3252
implicit real*8 (d), type (mp_integer) (j), &
3253
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3254
character*(*), intent (in):: ab
3256
character*1 az(mpipl+100)
3263
call mpdexc (az, l, qa%mpr, mpnw)
3269
function mp_addqj (qa, jb)
3270
implicit real*8 (d), type (mp_integer) (j), &
3271
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3272
type (mp_real):: mp_addqj
3273
intent (in):: qa, jb
3276
call mpadd (qa%mpr, jb%mpi, mp_addqj%mpr, mpnw)
3280
function mp_addqq (qa, qb)
3281
implicit real*8 (d), type (mp_integer) (j), &
3282
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3283
type (mp_real):: mp_addqq
3284
intent (in):: qa, qb
3287
call mpadd (qa%mpr, qb%mpr, mp_addqq%mpr, mpnw)
3291
function mp_addqz (qa, zb)
3292
implicit real*8 (d), type (mp_integer) (j), &
3293
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3294
type (mp_complex):: mp_addqz
3295
intent (in):: qa, zb
3296
type (mp_complex) z1
3299
call mpmzc (qa%mpr, z1%mpc)
3300
call mpcadd (mp4, z1%mpc, zb%mpc, mp_addqz%mpc, mpnw)
3304
function mp_addiq (ia, qb)
3305
implicit real*8 (d), type (mp_integer) (j), &
3306
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3307
type (mp_real):: mp_addiq
3308
intent (in):: ia, qb
3313
call mpdmc (da, 0, q1%mpr)
3314
call mpadd (q1%mpr, qb%mpr, mp_addiq%mpr, mpnw)
3318
function mp_addqi (qa, ib)
3319
implicit real*8 (d), type (mp_integer) (j), &
3320
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3321
type (mp_real):: mp_addqi
3322
intent (in):: qa, ib
3327
call mpdmc (db, 0, q1%mpr)
3328
call mpadd (qa%mpr, q1%mpr, mp_addqi%mpr, mpnw)
3332
function mp_adddq (da, qb)
3333
implicit real*8 (d), type (mp_integer) (j), &
3334
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3335
type (mp_real):: mp_adddq
3336
intent (in):: da, qb
3340
call mpdmc (da, 0, q1%mpr)
3341
call mpadd (q1%mpr, qb%mpr, mp_adddq%mpr, mpnw)
3345
function mp_addqd (qa, db)
3346
implicit real*8 (d), type (mp_integer) (j), &
3347
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3348
type (mp_real):: mp_addqd
3349
intent (in):: qa, db
3353
call mpdmc (db, 0, q1%mpr)
3354
call mpadd (qa%mpr, q1%mpr, mp_addqd%mpr, mpnw)
3358
function mp_addxq (xa, qb)
3359
implicit real*8 (d), type (mp_integer) (j), &
3360
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3361
type (mp_complex):: mp_addxq
3362
intent (in):: xa, qb
3363
type (mp_complex) z1, z2
3366
call mpxzc (xa, z1%mpc)
3367
call mpmzc (qb%mpr, z2%mpc)
3368
call mpcadd (mp4, z1%mpc, z2%mpc, mp_addxq%mpc, mpnw)
3372
function mp_addqx (qa, xb)
3373
implicit real*8 (d), type (mp_integer) (j), &
3374
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3375
type (mp_complex):: mp_addqx
3376
intent (in):: qa, xb
3377
type (mp_complex) z1, z2
3380
call mpmzc (qa%mpr, z1%mpc)
3381
call mpxzc (xb, z2%mpc)
3382
call mpcadd (mp4, z1%mpc, z2%mpc, mp_addqx%mpc, mpnw)
3386
! MPR subtract routines.
3388
function mp_subqj (qa, jb)
3389
implicit real*8 (d), type (mp_integer) (j), &
3390
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3391
type (mp_real):: mp_subqj
3392
intent (in):: qa, jb
3395
call mpsub (qa%mpr, jb%mpi, mp_subqj%mpr, mpnw)
3399
function mp_subqq (qa, qb)
3400
implicit real*8 (d), type (mp_integer) (j), &
3401
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3402
type (mp_real):: mp_subqq
3403
intent (in):: qa, qb
3406
call mpsub (qa%mpr, qb%mpr, mp_subqq%mpr, mpnw)
3410
function mp_subqz (qa, zb)
3411
implicit real*8 (d), type (mp_integer) (j), &
3412
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3413
type (mp_complex):: mp_subqz
3414
intent (in):: qa, zb
3415
type (mp_complex) z1
3418
call mpmzc (qa%mpr, z1%mpc)
3419
call mpcsub (mp4, z1%mpc, zb%mpc, mp_subqz%mpc, mpnw)
3423
function mp_subiq (ia, qb)
3424
implicit real*8 (d), type (mp_integer) (j), &
3425
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3426
type (mp_real):: mp_subiq
3427
intent (in):: ia, qb
3432
call mpdmc (da, 0, q1%mpr)
3433
call mpsub (q1%mpr, qb%mpr, mp_subiq%mpr, mpnw)
3437
function mp_subqi (qa, ib)
3438
implicit real*8 (d), type (mp_integer) (j), &
3439
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3440
type (mp_real):: mp_subqi
3441
intent (in):: qa, ib
3446
call mpdmc (db, 0, q1%mpr)
3447
call mpsub (qa%mpr, q1%mpr, mp_subqi%mpr, mpnw)
3451
function mp_subdq (da, qb)
3452
implicit real*8 (d), type (mp_integer) (j), &
3453
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3454
type (mp_real):: mp_subdq
3455
intent (in):: da, qb
3459
call mpdmc (da, 0, q1%mpr)
3460
call mpsub (q1%mpr, qb%mpr, mp_subdq%mpr, mpnw)
3464
function mp_subqd (qa, db)
3465
implicit real*8 (d), type (mp_integer) (j), &
3466
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3467
type (mp_real):: mp_subqd
3468
intent (in):: qa, db
3472
call mpdmc (db, 0, q1%mpr)
3473
call mpsub (qa%mpr, q1%mpr, mp_subqd%mpr, mpnw)
3477
function mp_subxq (xa, qb)
3478
implicit real*8 (d), type (mp_integer) (j), &
3479
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3480
type (mp_complex):: mp_subxq
3481
intent (in):: xa, qb
3482
type (mp_complex) z1, z2
3485
call mpxzc (xa, z1%mpc)
3486
call mpmzc (qb%mpr, z2%mpc)
3487
call mpcsub (mp4, z1%mpc, z2%mpc, mp_subxq%mpc, mpnw)
3491
function mp_subqx (qa, xb)
3492
implicit real*8 (d), type (mp_integer) (j), &
3493
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3494
type (mp_complex):: mp_subqx
3495
intent (in):: qa, xb
3496
type (mp_complex) z1, z2
3499
call mpmzc (qa%mpr, z1%mpc)
3500
call mpxzc (xb, z2%mpc)
3501
call mpcsub (mp4, z1%mpc, z2%mpc, mp_subqx%mpc, mpnw)
3505
! MPR negation routine.
3507
function mp_negq (qa)
3508
implicit real*8 (d), type (mp_integer) (j), &
3509
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3510
type (mp_real):: mp_negq
3514
call mpeq (qa%mpr, mp_negq%mpr, mpnw)
3515
mp_negq%mpr(1) = - qa%mpr(1)
3519
! MPR multiply routines.
3521
function mp_mulqj (qa, jb)
3522
implicit real*8 (d), type (mp_integer) (j), &
3523
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3524
type (mp_real):: mp_mulqj
3525
intent (in):: qa, jb
3528
call mpmul (qa%mpr, jb%mpi, mp_mulqj%mpr, mpnw)
3532
function mp_mulqq (qa, qb)
3533
implicit real*8 (d), type (mp_integer) (j), &
3534
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3535
type (mp_real):: mp_mulqq
3536
intent (in):: qa, qb
3539
call mpmul (qa%mpr, qb%mpr, mp_mulqq%mpr, mpnw)
3543
function mp_mulqz (qa, zb)
3544
implicit real*8 (d), type (mp_integer) (j), &
3545
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3546
type (mp_complex):: mp_mulqz
3547
intent (in):: qa, zb
3548
type (mp_complex) z1
3551
call mpmzc (qa%mpr, z1%mpc)
3552
call mpcmul (mp4, z1%mpc, zb%mpc, mp_mulqz%mpc, mpnw)
3556
function mp_muliq (ia, qb)
3557
implicit real*8 (d), type (mp_integer) (j), &
3558
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3559
type (mp_real):: mp_muliq
3560
intent (in):: ia, qb
3564
call mpmuld (qb%mpr, da, 0, mp_muliq%mpr, mpnw)
3568
function mp_mulqi (qa, ib)
3569
implicit real*8 (d), type (mp_integer) (j), &
3570
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3571
type (mp_real):: mp_mulqi
3572
intent (in):: qa, ib
3576
call mpmuld (qa%mpr, db, 0, mp_mulqi%mpr, mpnw)
3580
function mp_muldq (da, qb)
3581
implicit real*8 (d), type (mp_integer) (j), &
3582
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3583
type (mp_real):: mp_muldq
3584
intent (in):: da, qb
3587
call mpmuld (qb%mpr, da, 0, mp_muldq%mpr, mpnw)
3591
function mp_mulqd (qa, db)
3592
implicit real*8 (d), type (mp_integer) (j), &
3593
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3594
type (mp_real):: mp_mulqd
3595
intent (in):: qa, db
3598
call mpmuld (qa%mpr, db, 0, mp_mulqd%mpr, mpnw)
3602
function mp_mulxq (xa, qb)
3603
implicit real*8 (d), type (mp_integer) (j), &
3604
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3605
type (mp_complex):: mp_mulxq
3606
intent (in):: xa, qb
3607
type (mp_complex) z1, z2
3610
call mpxzc (xa, z1%mpc)
3611
call mpmzc (qb%mpr, z2%mpc)
3612
call mpcmul (mp4, z1%mpc, z2%mpc, mp_mulxq%mpc, mpnw)
3616
function mp_mulqx (qa, xb)
3617
implicit real*8 (d), type (mp_integer) (j), &
3618
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3619
type (mp_complex):: mp_mulqx
3620
intent (in):: qa, xb
3621
type (mp_complex) z1, z2
3624
call mpmzc (qa%mpr, z1%mpc)
3625
call mpxzc (xb, z2%mpc)
3626
call mpcmul (mp4, z1%mpc, z2%mpc, mp_mulqx%mpc, mpnw)
3630
! MPR divide routines.
3632
function mp_divqj (qa, jb)
3633
implicit real*8 (d), type (mp_integer) (j), &
3634
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3635
type (mp_real):: mp_divqj
3636
intent (in):: qa, jb
3639
call mpdiv (qa%mpr, jb%mpi, mp_divqj%mpr, mpnw)
3643
function mp_divqq (qa, qb)
3644
implicit real*8 (d), type (mp_integer) (j), &
3645
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3646
type (mp_real):: mp_divqq
3647
intent (in):: qa, qb
3650
call mpdiv (qa%mpr, qb%mpr, mp_divqq%mpr, mpnw)
3654
function mp_divqz (qa, zb)
3655
implicit real*8 (d), type (mp_integer) (j), &
3656
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3657
type (mp_complex):: mp_divqz
3658
intent (in):: qa, zb
3659
type (mp_complex) z1
3662
call mpmzc (qa%mpr, z1%mpc)
3663
call mpcdiv (mp4, z1%mpc, zb%mpc, mp_divqz%mpc, mpnw)
3667
function mp_diviq (ia, qb)
3668
implicit real*8 (d), type (mp_integer) (j), &
3669
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3670
type (mp_real):: mp_diviq
3671
intent (in):: ia, qb
3676
call mpdmc (da, 0, q1%mpr)
3677
call mpdiv (q1%mpr, qb%mpr, mp_diviq%mpr, mpnw)
3681
function mp_divqi (qa, ib)
3682
implicit real*8 (d), type (mp_integer) (j), &
3683
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3684
type (mp_real):: mp_divqi
3685
intent (in):: qa, ib
3689
call mpdivd (qa%mpr, db, 0, mp_divqi%mpr, mpnw)
3693
function mp_divdq (da, qb)
3694
implicit real*8 (d), type (mp_integer) (j), &
3695
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3696
type (mp_real):: mp_divdq
3697
intent (in):: da, qb
3701
call mpdmc (da, 0, q1%mpr)
3702
call mpdiv (q1%mpr, qb%mpr, mp_divdq%mpr, mpnw)
3706
function mp_divqd (qa, db)
3707
implicit real*8 (d), type (mp_integer) (j), &
3708
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3709
type (mp_real):: mp_divqd
3710
intent (in):: qa, db
3713
call mpdivd (qa%mpr, db, 0, mp_divqd%mpr, mpnw)
3717
function mp_divxq (xa, qb)
3718
implicit real*8 (d), type (mp_integer) (j), &
3719
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3720
type (mp_complex):: mp_divxq
3721
intent (in):: xa, qb
3722
type (mp_complex) z1, z2
3725
call mpxzc (xa, z1%mpc)
3726
call mpmzc (qb%mpr, z2%mpc)
3727
call mpcdiv (mp4, z1%mpc, z2%mpc, mp_divxq%mpc, mpnw)
3731
function mp_divqx (qa, xb)
3732
implicit real*8 (d), type (mp_integer) (j), &
3733
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3734
type (mp_complex):: mp_divqx
3735
intent (in):: qa, xb
3736
type (mp_complex) z1, z2
3739
call mpmzc (qa%mpr, z1%mpc)
3740
call mpxzc (xb, z2%mpc)
3741
call mpcdiv (mp4, z1%mpc, z2%mpc, mp_divqx%mpc, mpnw)
3745
! MPR exponentiation routines.
3747
function mp_expqj (qa, jb)
3748
implicit real*8 (d), type (mp_integer) (j), &
3749
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3750
type (mp_real):: mp_expqj
3751
intent (in):: qa, jb
3752
type (mp_real) q1, q2
3755
call mplog (qa%mpr, mpl02%mpr, q1%mpr, mpnw)
3756
call mpmul (q1%mpr, jb%mpi, q2%mpr, mpnw)
3757
call mpexp (q2%mpr, mpl02%mpr, mp_expqj%mpr, mpnw)
3761
function mp_expqq (qa, qb)
3762
implicit real*8 (d), type (mp_integer) (j), &
3763
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3764
type (mp_real):: mp_expqq
3765
intent (in):: qa, qb
3766
type (mp_real) q1, q2
3769
call mplog (qa%mpr, mpl02%mpr, q1%mpr, mpnw)
3770
call mpmul (q1%mpr, qb%mpr, q2%mpr, mpnw)
3771
call mpexp (q2%mpr, mpl02%mpr, mp_expqq%mpr, mpnw)
3775
function mp_expiq (ia, qb)
3776
implicit real*8 (d), type (mp_integer) (j), &
3777
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3778
type (mp_real):: mp_expiq
3779
intent (in):: ia, qb
3780
type (mp_real) q1, q2, q3
3784
call mpdmc (da, 0, q1%mpr)
3785
call mplog (q1%mpr, mpl02%mpr, q2%mpr, mpnw)
3786
call mpmul (q2%mpr, qb%mpr, q3%mpr, mpnw)
3787
call mpexp (q3%mpr, mpl02%mpr, mp_expiq%mpr, mpnw)
3791
function mp_expqi (qa, ib)
3792
implicit real*8 (d), type (mp_integer) (j), &
3793
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3794
type (mp_real):: mp_expqi
3795
intent (in):: qa, ib
3798
call mpnpwr (qa%mpr, ib, mp_expqi%mpr, mpnw)
3802
function mp_expdq (da, qb)
3803
implicit real*8 (d), type (mp_integer) (j), &
3804
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3805
type (mp_real):: mp_expdq
3806
intent (in):: da, qb
3807
type (mp_real) q1, q2, q3
3810
call mpdmc (da, 0, q1%mpr)
3811
call mplog (q1%mpr, mpl02%mpr, q2%mpr, mpnw)
3812
call mpmul (q2%mpr, qb%mpr, q3%mpr, mpnw)
3813
call mpexp (q3%mpr, mpl02%mpr, mp_expdq%mpr, mpnw)
3817
function mp_expqd (qa, db)
3818
implicit real*8 (d), type (mp_integer) (j), &
3819
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3820
type (mp_real):: mp_expqd
3821
intent (in):: qa, db
3822
type (mp_real) q1, q2
3825
call mplog (qa%mpr, mpl02%mpr, q1%mpr, mpnw)
3826
call mpmuld (q1%mpr, db, 0, q2%mpr, mpnw)
3827
call mpexp (q2%mpr, mpl02%mpr, mp_expqd%mpr, mpnw)
3831
! MPR .EQ. routines.
3833
function mp_eqtqj (qa, jb)
3834
implicit real*8 (d), type (mp_integer) (j), &
3835
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3837
intent (in):: qa, jb
3840
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
3849
function mp_eqtqq (qa, qb)
3850
implicit real*8 (d), type (mp_integer) (j), &
3851
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3853
intent (in):: qa, qb
3856
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
3865
function mp_eqtqz (qa, zb)
3866
implicit real*8 (d), type (mp_integer) (j), &
3867
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3869
intent (in):: qa, zb
3870
type (mp_complex) z1
3873
call mpmzc (qa%mpr, z1%mpc)
3874
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
3875
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
3876
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
3884
function mp_eqtiq (ia, qb)
3885
implicit real*8 (d), type (mp_integer) (j), &
3886
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3888
intent (in):: ia, qb
3893
call mpdmc (da, 0, q1%mpr)
3894
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
3903
function mp_eqtqi (qa, ib)
3904
implicit real*8 (d), type (mp_integer) (j), &
3905
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3907
intent (in):: qa, ib
3912
call mpdmc (db, 0, q1%mpr)
3913
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
3922
function mp_eqtdq (da, qb)
3923
implicit real*8 (d), type (mp_integer) (j), &
3924
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3926
intent (in):: da, qb
3930
call mpdmc (da, 0, q1%mpr)
3931
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
3940
function mp_eqtqd (qa, db)
3941
implicit real*8 (d), type (mp_integer) (j), &
3942
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3944
intent (in):: qa, db
3948
call mpdmc (db, 0, q1%mpr)
3949
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
3958
function mp_eqtxq (xa, qb)
3959
implicit real*8 (d), type (mp_integer) (j), &
3960
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3962
intent (in):: xa, qb
3963
type (mp_complex) z1, z2
3966
call mpxzc (xa, z1%mpc)
3967
call mpmzc (qb%mpr, z2%mpc)
3968
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
3969
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
3970
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
3978
function mp_eqtqx (qa, xb)
3979
implicit real*8 (d), type (mp_integer) (j), &
3980
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
3982
intent (in):: qa, xb
3983
type (mp_complex) z1, z2
3986
call mpmzc (qa%mpr, z1%mpc)
3987
call mpxzc (xb, z2%mpc)
3988
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
3989
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
3990
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
3998
! MPR .NE. routines.
4000
function mp_netqj (qa, jb)
4001
implicit real*8 (d), type (mp_integer) (j), &
4002
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4004
intent (in):: qa, jb
4007
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
4016
function mp_netqq (qa, qb)
4017
implicit real*8 (d), type (mp_integer) (j), &
4018
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4020
intent (in):: qa, qb
4023
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
4032
function mp_netqz (qa, zb)
4033
implicit real*8 (d), type (mp_integer) (j), &
4034
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4036
intent (in):: qa, zb
4037
type (mp_complex) z1
4040
call mpmzc (qa%mpr, z1%mpc)
4041
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
4042
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
4043
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
4051
function mp_netiq (ia, qb)
4052
implicit real*8 (d), type (mp_integer) (j), &
4053
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4055
intent (in):: ia, qb
4060
call mpdmc (da, 0, q1%mpr)
4061
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4070
function mp_netqi (qa, ib)
4071
implicit real*8 (d), type (mp_integer) (j), &
4072
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4074
intent (in):: qa, ib
4079
call mpdmc (db, 0, q1%mpr)
4080
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4089
function mp_netdq (da, qb)
4090
implicit real*8 (d), type (mp_integer) (j), &
4091
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4093
intent (in):: da, qb
4097
call mpdmc (da, 0, q1%mpr)
4098
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4107
function mp_netqd (qa, db)
4108
implicit real*8 (d), type (mp_integer) (j), &
4109
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4111
intent (in):: qa, db
4115
call mpdmc (db, 0, q1%mpr)
4116
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4125
function mp_netxq (xa, qb)
4126
implicit real*8 (d), type (mp_integer) (j), &
4127
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4129
intent (in):: xa, qb
4130
type (mp_complex) z1, z2
4133
call mpxzc (xa, z1%mpc)
4134
call mpmzc (qb%mpr, z2%mpc)
4135
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
4136
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
4137
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
4145
function mp_netqx (qa, xb)
4146
implicit real*8 (d), type (mp_integer) (j), &
4147
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4149
intent (in):: qa, xb
4150
type (mp_complex) z1, z2
4153
call mpmzc (qa%mpr, z1%mpc)
4154
call mpxzc (xb, z2%mpc)
4155
call mpcpr (z1%mpc, z2%mpc, ic1, mpnw)
4156
call mpcpr (z1%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
4157
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
4165
! MPR .LE. routines.
4167
function mp_letqj (qa, jb)
4168
implicit real*8 (d), type (mp_integer) (j), &
4169
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4171
intent (in):: qa, jb
4174
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
4183
function mp_letqq (qa, qb)
4184
implicit real*8 (d), type (mp_integer) (j), &
4185
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4187
intent (in):: qa, qb
4190
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
4199
function mp_letiq (ia, qb)
4200
implicit real*8 (d), type (mp_integer) (j), &
4201
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4203
intent (in):: ia, qb
4208
call mpdmc (da, 0, q1%mpr)
4209
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4218
function mp_letqi (qa, ib)
4219
implicit real*8 (d), type (mp_integer) (j), &
4220
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4222
intent (in):: qa, ib
4227
call mpdmc (db, 0, q1%mpr)
4228
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4237
function mp_letdq (da, qb)
4238
implicit real*8 (d), type (mp_integer) (j), &
4239
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4241
intent (in):: da, qb
4245
call mpdmc (da, 0, q1%mpr)
4246
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4255
function mp_letqd (qa, db)
4256
implicit real*8 (d), type (mp_integer) (j), &
4257
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4259
intent (in):: qa, db
4263
call mpdmc (db, 0, q1%mpr)
4264
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4273
! MPR .GE. routines.
4275
function mp_getqj (qa, jb)
4276
implicit real*8 (d), type (mp_integer) (j), &
4277
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4279
intent (in):: qa, jb
4282
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
4291
function mp_getqq (qa, qb)
4292
implicit real*8 (d), type (mp_integer) (j), &
4293
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4295
intent (in):: qa, qb
4298
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
4307
function mp_getiq (ia, qb)
4308
implicit real*8 (d), type (mp_integer) (j), &
4309
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4311
intent (in):: ia, qb
4316
call mpdmc (da, 0, q1%mpr)
4317
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4326
function mp_getqi (qa, ib)
4327
implicit real*8 (d), type (mp_integer) (j), &
4328
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4330
intent (in):: qa, ib
4335
call mpdmc (db, 0, q1%mpr)
4336
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4345
function mp_getdq (da, qb)
4346
implicit real*8 (d), type (mp_integer) (j), &
4347
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4349
intent (in):: da, qb
4353
call mpdmc (da, 0, q1%mpr)
4354
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4363
function mp_getqd (qa, db)
4364
implicit real*8 (d), type (mp_integer) (j), &
4365
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4367
intent (in):: qa, db
4371
call mpdmc (db, 0, q1%mpr)
4372
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4381
! MPR .LT. routines.
4383
function mp_lttqj (qa, jb)
4384
implicit real*8 (d), type (mp_integer) (j), &
4385
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4387
intent (in):: qa, jb
4390
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
4399
function mp_lttqq (qa, qb)
4400
implicit real*8 (d), type (mp_integer) (j), &
4401
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4403
intent (in):: qa, qb
4406
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
4415
function mp_lttiq (ia, qb)
4416
implicit real*8 (d), type (mp_integer) (j), &
4417
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4419
intent (in):: ia, qb
4424
call mpdmc (da, 0, q1%mpr)
4425
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4434
function mp_lttqi (qa, ib)
4435
implicit real*8 (d), type (mp_integer) (j), &
4436
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4438
intent (in):: qa, ib
4443
call mpdmc (db, 0, q1%mpr)
4444
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4453
function mp_lttdq (da, qb)
4454
implicit real*8 (d), type (mp_integer) (j), &
4455
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4457
intent (in):: da, qb
4461
call mpdmc (da, 0, q1%mpr)
4462
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4471
function mp_lttqd (qa, db)
4472
implicit real*8 (d), type (mp_integer) (j), &
4473
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4475
intent (in):: qa, db
4479
call mpdmc (db, 0, q1%mpr)
4480
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4489
! MPR .GT. routines.
4491
function mp_gttqj (qa, jb)
4492
implicit real*8 (d), type (mp_integer) (j), &
4493
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4495
intent (in):: qa, jb
4498
call mpcpr (qa%mpr, jb%mpi, ic, mpnw)
4507
function mp_gttqq (qa, qb)
4508
implicit real*8 (d), type (mp_integer) (j), &
4509
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4511
intent (in):: qa, qb
4514
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
4523
function mp_gttiq (ia, qb)
4524
implicit real*8 (d), type (mp_integer) (j), &
4525
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4527
intent (in):: ia, qb
4532
call mpdmc (da, 0, q1%mpr)
4533
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4542
function mp_gttqi (qa, ib)
4543
implicit real*8 (d), type (mp_integer) (j), &
4544
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4546
intent (in):: qa, ib
4551
call mpdmc (db, 0, q1%mpr)
4552
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4561
function mp_gttdq (da, qb)
4562
implicit real*8 (d), type (mp_integer) (j), &
4563
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4565
intent (in):: da, qb
4569
call mpdmc (da, 0, q1%mpr)
4570
call mpcpr (q1%mpr, qb%mpr, ic, mpnw)
4579
function mp_gttqd (qa, db)
4580
implicit real*8 (d), type (mp_integer) (j), &
4581
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4583
intent (in):: qa, db
4587
call mpdmc (db, 0, q1%mpr)
4588
call mpcpr (qa%mpr, q1%mpr, ic, mpnw)
4602
! This Fortran-90 module defines operator extensions involving the
4603
! MP_COMPLEX datatype. For operations involving two MP data types,
4604
! those whose first argument is MP_COMPLEX are included here.
4605
! Others are handled in other modules.
4607
! The subroutines and functions defined in this module are private
4608
! and not intended to be called directly by the user.
4612
private kdb, mp4, mp24, mp41
4613
parameter (kdb = kind (0.d0), mp4 = mpwds + 4, mp24 = 2 * mp4, mp41 = mp4 + 1)
4615
mp_eqzj, mp_eqzq, mp_eqzz, mp_eqiz, mp_eqzi, &
4616
mp_eqdz, mp_eqzd, mp_eqxz, mp_eqzx, &
4617
mp_addzj, mp_addzq, mp_addzz, mp_addiz, mp_addzi, &
4618
mp_adddz, mp_addzd, mp_addxz, mp_addzx, &
4619
mp_subzj, mp_subzq, mp_subzz, mp_subiz, mp_subzi, &
4620
mp_subdz, mp_subzd, mp_subxz, mp_subzx, mp_negz, &
4621
mp_mulzj, mp_mulzq, mp_mulzz, mp_muliz, mp_mulzi, &
4622
mp_muldz, mp_mulzd, mp_mulxz, mp_mulzx, &
4623
mp_divzj, mp_divzq, mp_divzz, mp_diviz, mp_divzi, &
4624
mp_divdz, mp_divzd, mp_divxz, mp_divzx, mp_expzi, &
4625
mp_eqtzj, mp_eqtzq, mp_eqtzz, mp_eqtiz, mp_eqtzi, &
4626
mp_eqtdz, mp_eqtzd, mp_eqtxz, mp_eqtzx, &
4627
mp_netzj, mp_netzq, mp_netzz, mp_netiz, mp_netzi, &
4628
mp_netdz, mp_netzd, mp_netxz, mp_netzx
4630
! MPR operator extension interface blocks.
4632
interface assignment (=)
4633
module procedure mp_eqzj
4634
module procedure mp_eqzq
4635
module procedure mp_eqzz
4636
module procedure mp_eqiz
4637
module procedure mp_eqzi
4638
module procedure mp_eqdz
4639
module procedure mp_eqzd
4640
module procedure mp_eqxz
4641
module procedure mp_eqzx
4644
interface operator (+)
4645
module procedure mp_addzj
4646
module procedure mp_addzq
4647
module procedure mp_addzz
4648
module procedure mp_addiz
4649
module procedure mp_addzi
4650
module procedure mp_adddz
4651
module procedure mp_addzd
4652
module procedure mp_addxz
4653
module procedure mp_addzx
4656
interface operator (-)
4657
module procedure mp_subzj
4658
module procedure mp_subzq
4659
module procedure mp_subzz
4660
module procedure mp_subiz
4661
module procedure mp_subzi
4662
module procedure mp_subdz
4663
module procedure mp_subzd
4664
module procedure mp_subxz
4665
module procedure mp_subzx
4667
module procedure mp_negz
4670
interface operator (*)
4671
module procedure mp_mulzj
4672
module procedure mp_mulzq
4673
module procedure mp_mulzz
4674
module procedure mp_muliz
4675
module procedure mp_mulzi
4676
module procedure mp_muldz
4677
module procedure mp_mulzd
4678
module procedure mp_mulxz
4679
module procedure mp_mulzx
4682
interface operator (/)
4683
module procedure mp_divzj
4684
module procedure mp_divzq
4685
module procedure mp_divzz
4686
module procedure mp_diviz
4687
module procedure mp_divzi
4688
module procedure mp_divdz
4689
module procedure mp_divzd
4690
module procedure mp_divxz
4691
module procedure mp_divzx
4694
interface operator (**)
4695
module procedure mp_expzi
4698
interface operator (.eq.)
4699
module procedure mp_eqtzj
4700
module procedure mp_eqtzq
4701
module procedure mp_eqtzz
4702
module procedure mp_eqtiz
4703
module procedure mp_eqtzi
4704
module procedure mp_eqtdz
4705
module procedure mp_eqtzd
4706
module procedure mp_eqtxz
4707
module procedure mp_eqtzx
4710
interface operator (.ne.)
4711
module procedure mp_netzj
4712
module procedure mp_netzq
4713
module procedure mp_netzz
4714
module procedure mp_netiz
4715
module procedure mp_netzi
4716
module procedure mp_netdz
4717
module procedure mp_netzd
4718
module procedure mp_netxz
4719
module procedure mp_netzx
4724
! MPC assignment routines.
4726
subroutine mp_eqzj (za, jb)
4727
implicit real*8 (d), type (mp_integer) (j), &
4728
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4731
call mpmzc (jb%mpi, za%mpc)
4735
subroutine mp_eqzq (za, qb)
4736
implicit real*8 (d), type (mp_integer) (j), &
4737
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4742
call mpmzc (qb%mpr, za%mpc)
4746
subroutine mp_eqzz (za, zb)
4747
implicit real*8 (d), type (mp_integer) (j), &
4748
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4753
call mpceq (mp4, zb%mpc, za%mpc, mpnw)
4757
subroutine mp_eqiz (ia, zb)
4758
implicit real*8 (d), type (mp_integer) (j), &
4759
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4764
call mpmdc (zb%mpc, db, ib)
4765
ia = db * 2.d0 ** ib
4769
subroutine mp_eqzi (za, ib)
4770
implicit real*8 (d), type (mp_integer) (j), &
4771
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4777
call mpxzc (xb, za%mpc)
4781
subroutine mp_eqdz (da, zb)
4782
implicit real*8 (d), type (mp_integer) (j), &
4783
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4788
call mpmdc (zb%mpc, db, ib)
4789
da = db * 2.d0 ** ib
4793
subroutine mp_eqzd (za, db)
4794
implicit real*8 (d), type (mp_integer) (j), &
4795
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4801
call mpxzc (xb, za%mpc)
4805
subroutine mp_eqxz (xa, zb)
4806
implicit real*8 (d), type (mp_integer) (j), &
4807
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4812
call mpmdc (zb%mpc, db, ib)
4813
call mpmdc (zb%mpc(mp41), dc, ic)
4814
xa = cmplx (db * 2.d0 ** ib, dc * 2.d0 ** ic, kdb)
4818
subroutine mp_eqzx (za, xb)
4819
implicit real*8 (d), type (mp_integer) (j), &
4820
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4825
call mpxzc (xb, za%mpc)
4831
function mp_addzj (za, jb)
4832
implicit real*8 (d), type (mp_integer) (j), &
4833
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4834
type (mp_complex):: mp_addzj
4835
intent (in):: za, jb
4836
type (mp_complex) z1
4839
call mpmzc (jb%mpi, z1%mpc)
4840
call mpcadd (mp4, za%mpc, z1%mpc, mp_addzj%mpc, mpnw)
4844
function mp_addzq (za, qb)
4845
implicit real*8 (d), type (mp_integer) (j), &
4846
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4847
type (mp_complex):: mp_addzq
4848
intent (in):: za, qb
4849
type (mp_complex) z1
4852
call mpmzc (qb%mpr, z1%mpc)
4853
call mpcadd (mp4, za%mpc, z1%mpc, mp_addzq%mpc, mpnw)
4857
function mp_addzz (za, zb)
4858
implicit real*8 (d), type (mp_integer) (j), &
4859
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4860
type (mp_complex):: mp_addzz
4861
intent (in):: za, zb
4864
call mpcadd (mp4, za%mpc, zb%mpc, mp_addzz%mpc, mpnw)
4868
function mp_addiz (ia, zb)
4869
implicit real*8 (d), type (mp_integer) (j), &
4870
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4871
type (mp_complex):: mp_addiz
4872
intent (in):: ia, zb
4873
type (mp_complex) z1
4877
call mpxzc (xa, z1%mpc)
4878
call mpcadd (mp4, z1%mpc, zb%mpc, mp_addiz%mpc, mpnw)
4882
function mp_addzi (za, ib)
4883
implicit real*8 (d), type (mp_integer) (j), &
4884
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4885
type (mp_complex):: mp_addzi
4886
intent (in):: za, ib
4887
type (mp_complex) z1
4891
call mpxzc (xb, z1%mpc)
4892
call mpcadd (mp4, za%mpc, z1%mpc, mp_addzi%mpc, mpnw)
4896
function mp_adddz (da, zb)
4897
implicit real*8 (d), type (mp_integer) (j), &
4898
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4899
type (mp_complex):: mp_adddz
4900
intent (in):: da, zb
4901
type (mp_complex) z1
4905
call mpxzc (xa, z1%mpc)
4906
call mpcadd (mp4, z1%mpc, zb%mpc, mp_adddz%mpc, mpnw)
4910
function mp_addzd (za, db)
4911
implicit real*8 (d), type (mp_integer) (j), &
4912
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4913
type (mp_complex):: mp_addzd
4914
intent (in):: za, db
4915
type (mp_complex) z1
4919
call mpxzc (xb, z1%mpc)
4920
call mpcadd (mp4, za%mpc, z1%mpc, mp_addzd%mpc, mpnw)
4924
function mp_addxz (xa, zb)
4925
implicit real*8 (d), type (mp_integer) (j), &
4926
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4927
type (mp_complex):: mp_addxz
4928
intent (in):: xa, zb
4929
type (mp_complex) z1
4932
call mpxzc (xa, z1%mpc)
4933
call mpcadd (mp4, z1%mpc, zb%mpc, mp_addxz%mpc, mpnw)
4937
function mp_addzx (za, xb)
4938
implicit real*8 (d), type (mp_integer) (j), &
4939
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4940
type (mp_complex):: mp_addzx
4941
intent (in):: za, xb
4942
type (mp_complex) q1
4945
call mpxzc (xb, q1%mpc)
4946
call mpcadd (mp4, za%mpc, q1%mpc, mp_addzx%mpc, mpnw)
4950
! MPC subtract routines.
4952
function mp_subzj (za, jb)
4953
implicit real*8 (d), type (mp_integer) (j), &
4954
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4955
type (mp_complex):: mp_subzj
4956
intent (in):: za, jb
4957
type (mp_complex) z1
4960
call mpmzc (jb%mpi, z1%mpc)
4961
call mpcsub (mp4, za%mpc, z1%mpc, mp_subzj%mpc, mpnw)
4965
function mp_subzq (za, qb)
4966
implicit real*8 (d), type (mp_integer) (j), &
4967
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4968
type (mp_complex):: mp_subzq
4969
type (mp_complex) z1
4970
intent (in):: za, qb
4973
call mpmzc (qb%mpr, z1%mpc)
4974
call mpcsub (mp4, za%mpc, z1%mpc, mp_subzq%mpc, mpnw)
4978
function mp_subzz (za, zb)
4979
implicit real*8 (d), type (mp_integer) (j), &
4980
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4981
type (mp_complex):: mp_subzz
4982
intent (in):: za, zb
4985
call mpcsub (mp4, za%mpc, zb%mpc, mp_subzz%mpc, mpnw)
4989
function mp_subiz (ia, zb)
4990
implicit real*8 (d), type (mp_integer) (j), &
4991
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
4992
type (mp_complex):: mp_subiz
4993
intent (in):: ia, zb
4994
type (mp_complex) z1
4998
call mpxzc (xa, z1%mpc)
4999
call mpcsub (mp4, z1%mpc, zb%mpc, mp_subiz%mpc, mpnw)
5003
function mp_subzi (za, ib)
5004
implicit real*8 (d), type (mp_integer) (j), &
5005
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5006
type (mp_complex):: mp_subzi
5007
intent (in):: za, ib
5008
type (mp_complex) z1
5012
call mpxzc (xb, z1%mpc)
5013
call mpcsub (mp4, za%mpc, z1%mpc, mp_subzi%mpc, mpnw)
5017
function mp_subdz (da, zb)
5018
implicit real*8 (d), type (mp_integer) (j), &
5019
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5020
type (mp_complex):: mp_subdz
5021
intent (in):: da, zb
5022
type (mp_complex) z1
5026
call mpxzc (xa, z1%mpc)
5027
call mpcsub (mp4, z1%mpc, zb%mpc, mp_subdz%mpc, mpnw)
5031
function mp_subzd (za, db)
5032
implicit real*8 (d), type (mp_integer) (j), &
5033
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5034
type (mp_complex):: mp_subzd
5035
intent (in):: za, db
5036
type (mp_complex) z1
5040
call mpxzc (xb, z1%mpc)
5041
call mpcsub (mp4, za%mpc, z1%mpc, mp_subzd%mpc, mpnw)
5045
function mp_subxz (xa, zb)
5046
implicit real*8 (d), type (mp_integer) (j), &
5047
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5048
type (mp_complex):: mp_subxz
5049
intent (in):: xa, zb
5050
type (mp_complex) z1
5053
call mpxzc (xa, z1%mpc)
5054
call mpcsub (mp4, z1%mpc, zb%mpc, mp_subxz%mpc, mpnw)
5058
function mp_subzx (za, xb)
5059
implicit real*8 (d), type (mp_integer) (j), &
5060
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5061
type (mp_complex):: mp_subzx
5062
intent (in):: za, xb
5063
type (mp_complex) z1
5066
call mpxzc (xb, z1%mpc)
5067
call mpcsub (mp4, za%mpc, z1%mpc, mp_subzx%mpc, mpnw)
5071
! MPC negation routine.
5073
function mp_negz (za)
5074
implicit real*8 (d), type (mp_integer) (j), &
5075
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5076
type (mp_complex):: mp_negz
5080
call mpceq (mp4, za%mpc, mp_negz%mpc, mpnw)
5081
mp_negz%mpc(1) = - za%mpc(1)
5082
mp_negz%mpc(mp41) = - za%mpc(mp41)
5086
! MPC multiply routines.
5088
function mp_mulzj (za, jb)
5089
implicit real*8 (d), type (mp_integer) (j), &
5090
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5091
type (mp_complex):: mp_mulzj
5092
intent (in):: za, jb
5093
type (mp_complex) z1
5096
call mpmzc (jb%mpi, z1%mpc)
5097
call mpcmul (mp4, za%mpc, z1%mpc, mp_mulzj%mpc, mpnw)
5101
function mp_mulzq (za, qb)
5102
implicit real*8 (d), type (mp_integer) (j), &
5103
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5104
type (mp_complex):: mp_mulzq
5105
intent (in):: za, qb
5106
type (mp_complex) z1
5109
call mpmzc (qb%mpr, z1%mpc)
5110
call mpcmul (mp4, za%mpc, z1%mpc, mp_mulzq%mpc, mpnw)
5114
function mp_mulzz (za, zb)
5115
implicit real*8 (d), type (mp_integer) (j), &
5116
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5117
type (mp_complex):: mp_mulzz
5118
intent (in):: za, zb
5121
call mpcmul (mp4, za%mpc, zb%mpc, mp_mulzz%mpc, mpnw)
5125
function mp_muliz (ia, zb)
5126
implicit real*8 (d), type (mp_integer) (j), &
5127
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5128
type (mp_complex):: mp_muliz
5129
intent (in):: ia, zb
5130
type (mp_complex) z1
5134
call mpxzc (xa, z1%mpc)
5135
call mpcmul (mp4, z1%mpc, zb%mpc, mp_muliz%mpc, mpnw)
5139
function mp_mulzi (za, ib)
5140
implicit real*8 (d), type (mp_integer) (j), &
5141
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5142
type (mp_complex):: mp_mulzi
5143
intent (in):: za, ib
5144
type (mp_complex) z1
5148
call mpxzc (xb, z1%mpc)
5149
call mpcmul (mp4, za%mpc, z1%mpc, mp_mulzi%mpc, mpnw)
5153
function mp_muldz (da, zb)
5154
implicit real*8 (d), type (mp_integer) (j), &
5155
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5156
type (mp_complex):: mp_muldz
5157
intent (in):: da, zb
5158
type (mp_complex) z1
5162
call mpxzc (xa, z1%mpc)
5163
call mpcmul (mp4, z1%mpc, zb%mpc, mp_muldz%mpc, mpnw)
5167
function mp_mulzd (za, db)
5168
implicit real*8 (d), type (mp_integer) (j), &
5169
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5170
type (mp_complex):: mp_mulzd
5171
intent (in):: za, db
5172
type (mp_complex) z1
5176
call mpxzc (xb, z1%mpc)
5177
call mpcmul (mp4, za%mpc, z1%mpc, mp_mulzd%mpc, mpnw)
5181
function mp_mulxz (xa, zb)
5182
implicit real*8 (d), type (mp_integer) (j), &
5183
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5184
type (mp_complex):: mp_mulxz
5185
intent (in):: xa, zb
5186
type (mp_complex) z1
5189
call mpxzc (xa, z1%mpc)
5190
call mpcmul (mp4, z1%mpc, zb%mpc, mp_mulxz%mpc, mpnw)
5194
function mp_mulzx (za, xb)
5195
implicit real*8 (d), type (mp_integer) (j), &
5196
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5197
type (mp_complex):: mp_mulzx
5198
intent (in):: za, xb
5199
type (mp_complex) z1
5202
call mpxzc (xb, z1%mpc)
5203
call mpcmul (mp4, za%mpc, z1%mpc, mp_mulzx%mpc, mpnw)
5207
! MPC divide routines.
5209
function mp_divzj (za, jb)
5210
implicit real*8 (d), type (mp_integer) (j), &
5211
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5212
type (mp_complex):: mp_divzj
5213
intent (in):: za, jb
5214
type (mp_complex) z1
5217
call mpmzc (jb%mpi, z1%mpc)
5218
call mpcdiv (mp4, za%mpc, z1%mpc, mp_divzj%mpc, mpnw)
5222
function mp_divzq (za, qb)
5223
implicit real*8 (d), type (mp_integer) (j), &
5224
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5225
type (mp_complex):: mp_divzq
5226
intent (in):: za, qb
5227
type (mp_complex) z1
5230
call mpmzc (qb%mpr, z1%mpc)
5231
call mpcdiv (mp4, za%mpc, z1%mpc, mp_divzq%mpc, mpnw)
5235
function mp_divzz (za, zb)
5236
implicit real*8 (d), type (mp_integer) (j), &
5237
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5238
type (mp_complex):: mp_divzz
5239
intent (in):: za, zb
5242
call mpcdiv (mp4, za%mpc, zb%mpc, mp_divzz%mpc, mpnw)
5246
function mp_diviz (ia, zb)
5247
implicit real*8 (d), type (mp_integer) (j), &
5248
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5249
type (mp_complex):: mp_diviz
5250
intent (in):: ia, zb
5251
type (mp_complex) z1
5255
call mpxzc (xa, z1%mpc)
5256
call mpcdiv (mp4, z1%mpc, zb%mpc, mp_diviz%mpc, mpnw)
5260
function mp_divzi (za, ib)
5261
implicit real*8 (d), type (mp_integer) (j), &
5262
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5263
type (mp_complex):: mp_divzi
5264
intent (in):: za, ib
5265
type (mp_complex) z1
5269
call mpxzc (xb, z1%mpc)
5270
call mpcdiv (mp4, za%mpc, z1%mpc, mp_divzi%mpc, mpnw)
5274
function mp_divdz (da, zb)
5275
implicit real*8 (d), type (mp_integer) (j), &
5276
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5277
type (mp_complex):: mp_divdz
5278
intent (in):: da, zb
5279
type (mp_complex) z1
5283
call mpxzc (xa, z1%mpc)
5284
call mpcdiv (mp4, z1%mpc, zb%mpc, mp_divdz%mpc, mpnw)
5288
function mp_divzd (za, db)
5289
implicit real*8 (d), type (mp_integer) (j), &
5290
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5291
type (mp_complex):: mp_divzd
5292
intent (in):: za, db
5293
type (mp_complex) z1
5297
call mpxzc (xb, z1%mpc)
5298
call mpcdiv (mp4, za%mpc, z1%mpc, mp_divzd%mpc, mpnw)
5302
function mp_divxz (xa, zb)
5303
implicit real*8 (d), type (mp_integer) (j), &
5304
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5305
type (mp_complex):: mp_divxz
5306
intent (in):: xa, zb
5307
type (mp_complex) z1
5310
call mpxzc (xa, z1%mpc)
5311
call mpcdiv (mp4, z1%mpc, zb%mpc, mp_divxz%mpc, mpnw)
5315
function mp_divzx (za, xb)
5316
implicit real*8 (d), type (mp_integer) (j), &
5317
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5318
type (mp_complex):: mp_divzx
5319
intent (in):: za, xb
5320
type (mp_complex) z1
5323
call mpxzc (xb, z1%mpc)
5324
call mpcdiv (mp4, za%mpc, z1%mpc, mp_divzx%mpc, mpnw)
5328
! MPC exponentiation routines.
5330
function mp_expzi (za, ib)
5331
implicit real*8 (d), type (mp_integer) (j), &
5332
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5333
type (mp_complex):: mp_expzi
5334
intent (in):: za, ib
5337
call mpcpwr (mp4, za%mpc, ib, mp_expzi%mpc, mpnw)
5341
! MPC .EQ. routines.
5343
function mp_eqtzj (za, jb)
5344
implicit real*8 (d), type (mp_integer) (j), &
5345
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5347
intent (in):: za, jb
5348
type (mp_complex) z1
5351
call mpmzc (jb%mpi, z1%mpc)
5352
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5353
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5354
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5362
function mp_eqtzq (za, qb)
5363
implicit real*8 (d), type (mp_integer) (j), &
5364
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5366
intent (in):: za, qb
5367
type (mp_complex) z1
5370
call mpmzc (qb%mpr, z1%mpc)
5371
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5372
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5373
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5381
function mp_eqtzz (za, zb)
5382
implicit real*8 (d), type (mp_integer) (j), &
5383
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5385
intent (in):: za, zb
5388
call mpcpr (za%mpc, zb%mpc, ic1, mpnw)
5389
call mpcpr (za%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5390
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5398
function mp_eqtiz (ia, zb)
5399
implicit real*8 (d), type (mp_integer) (j), &
5400
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5402
intent (in):: ia, zb
5403
type (mp_complex) z1
5407
call mpdmc (da, 0, z1%mpc)
5408
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5409
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5410
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5418
function mp_eqtzi (za, ib)
5419
implicit real*8 (d), type (mp_integer) (j), &
5420
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5422
intent (in):: za, ib
5423
type (mp_complex) z1
5427
call mpdmc (db, 0, z1%mpc)
5428
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5429
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5430
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5438
function mp_eqtdz (da, zb)
5439
implicit real*8 (d), type (mp_integer) (j), &
5440
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5442
intent (in):: da, zb
5443
type (mp_complex) z1
5446
call mpdmc (da, 0, z1%mpc)
5447
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5448
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5449
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5457
function mp_eqtzd (za, db)
5458
implicit real*8 (d), type (mp_integer) (j), &
5459
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5461
intent (in):: za, db
5462
type (mp_complex) z1
5465
call mpdmc (db, 0, z1%mpc)
5466
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5467
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5468
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5476
function mp_eqtxz (xa, zb)
5477
implicit real*8 (d), type (mp_integer) (j), &
5478
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5480
intent (in):: xa, zb
5481
type (mp_complex) z1
5484
call mpxzc (xa, z1%mpc)
5485
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5486
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5487
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5495
function mp_eqtzx (za, xb)
5496
implicit real*8 (d), type (mp_integer) (j), &
5497
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5499
intent (in):: za, xb
5500
type (mp_complex) z1
5503
call mpxzc (xb, z1%mpc)
5504
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5505
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5506
if (ic1 .eq. 0 .and. ic2 .eq. 0) then
5514
! MPC .NE. routines.
5516
function mp_netzj (za, jb)
5517
implicit real*8 (d), type (mp_integer) (j), &
5518
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5520
intent (in):: za, jb
5521
type (mp_complex) z1
5524
call mpmzc (jb%mpi, z1%mpc)
5525
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5526
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5527
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5535
function mp_netzq (za, qb)
5536
implicit real*8 (d), type (mp_integer) (j), &
5537
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5539
intent (in):: za, qb
5540
type (mp_complex) z1
5543
call mpmzc (qb%mpr, z1%mpc)
5544
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5545
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5546
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5554
function mp_netzz (za, zb)
5555
implicit real*8 (d), type (mp_integer) (j), &
5556
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5558
intent (in):: za, zb
5561
call mpcpr (za%mpc, zb%mpc, ic1, mpnw)
5562
call mpcpr (za%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5563
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5571
function mp_netiz (ia, zb)
5572
implicit real*8 (d), type (mp_integer) (j), &
5573
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5575
intent (in):: ia, zb
5576
type (mp_complex) z1
5580
call mpdmc (da, 0, z1%mpc)
5581
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5582
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5583
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5591
function mp_netzi (za, ib)
5592
implicit real*8 (d), type (mp_integer) (j), &
5593
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5595
intent (in):: za, ib
5596
type (mp_complex) z1
5600
call mpdmc (db, 0, z1%mpc)
5601
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5602
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5603
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5611
function mp_netdz (da, zb)
5612
implicit real*8 (d), type (mp_integer) (j), &
5613
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5615
intent (in):: da, zb
5616
type (mp_complex) z1
5619
call mpdmc (da, 0, z1%mpc)
5620
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5621
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5622
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5630
function mp_netzd (za, db)
5631
implicit real*8 (d), type (mp_integer) (j), &
5632
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5634
intent (in):: za, db
5635
type (mp_complex) z1
5638
call mpdmc (db, 0, z1%mpc)
5639
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5640
call mpcpr (za%mpc(mp41), z1%mpc(mp41), ic2, mpnw)
5641
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5649
function mp_netxz (xa, zb)
5650
implicit real*8 (d), type (mp_integer) (j), &
5651
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5653
intent (in):: xa, zb
5654
type (mp_complex) z1
5657
call mpxzc (xa, z1%mpc)
5658
call mpcpr (z1%mpc, zb%mpc, ic1, mpnw)
5659
call mpcpr (z1%mpc(mp41), zb%mpc(mp41), ic2, mpnw)
5660
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5668
function mp_netzx (za, xb)
5669
implicit real*8 (d), type (mp_integer) (j), &
5670
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5672
intent (in):: za, xb
5673
type (mp_complex) z1
5676
call mpxzc (xb, z1%mpc)
5677
call mpcpr (za%mpc, z1%mpc, ic1, mpnw)
5678
call mpcpr (za%mpc(mp41), z2%mpc(mp41), ic2, mpnw)
5679
if (ic1 .ne. 0 .or. ic2 .ne. 0) then
5692
! This Fortran-90 module defines generic functions involving all
5695
! The subroutines and functions defined in this module are private
5696
! and not intended to be called directly by the user. The generic
5697
! names (i.e. interface block names) are publicly accessible, though.
5701
private kdb, mp4, mp24, mp41
5702
parameter (kdb = kind (0.d0), mp4 = mpwds + 4, mp24 = 2 * mp4, mp41 = mp4 + 1)
5704
mp_absj, mp_absq, mp_absz, mp_acos, mp_imag, mp_aint, mp_anint, &
5705
mp_asin, mp_atan, mp_atan2, mp_jtoc, mp_qtoc, mp_ztoc, mp_conjg, &
5706
mp_cos, mp_cosz, mp_cosh, mp_jtod, mp_qtod, mp_ztod, mp_jtox, mp_qtox, &
5707
mp_ztox, mp_exp, mp_expz, mp_jtoi, mp_qtoi, mp_ztoi, mp_log, mp_logz, &
5708
mp_log10, mp_maxj, mp_maxq, mp_maxq3, mp_minj, mp_minq, mp_minq3, mp_modj, &
5709
mp_modq, mp_jtoz, mp_qtoz, mp_itoz, mp_dtoz, mp_xtoz, &
5710
mp_atoz, mp_jjtoz, mp_qqtoz, mp_iitoz, mp_ddtoz, mp_aatoz, &
5711
mp_cssh, mp_cssn, mp_qtoj, mp_ztoj, mp_itoj, mp_rtoj, mp_ctoj, mp_dtoj, &
5712
mp_xtoj, mp_atoj, mp_nrt, mp_rand, mp_inpj, mp_inpq, mp_inpz, &
5713
mp_jtoq, mp_ztoq, mp_itoq, mp_dtoq, mp_xtoq, &
5714
mp_atoq, mp_outj, mp_outq, mp_outz, mp_nint, &
5715
mp_signj, mp_signq, mp_sin, mp_sinz, mp_sinh, mp_sqrtq, &
5716
mp_sqrtz, mp_tan, mp_tanh
5718
! MP generic interface blocks.
5721
module procedure mp_absj
5722
module procedure mp_absq
5723
module procedure mp_absz
5727
module procedure mp_acos
5731
module procedure mp_imag
5735
module procedure mp_aint
5739
module procedure mp_anint
5743
module procedure mp_asin
5747
module procedure mp_atan
5751
module procedure mp_atan2
5755
module procedure mp_jtoc
5756
module procedure mp_qtoc
5757
module procedure mp_ztoc
5761
module procedure mp_conjg
5765
module procedure mp_cos
5766
module procedure mp_cosz
5770
module procedure mp_cosh
5774
module procedure mp_jtod
5775
module procedure mp_qtod
5776
module procedure mp_ztod
5780
module procedure mp_jtox
5781
module procedure mp_qtox
5782
module procedure mp_ztox
5786
module procedure mp_exp
5787
module procedure mp_expz
5791
module procedure mp_jtoi
5792
module procedure mp_qtoi
5793
module procedure mp_ztoi
5797
module procedure mp_log
5798
module procedure mp_logz
5802
module procedure mp_log10
5806
module procedure mp_maxj
5807
module procedure mp_maxq
5808
module procedure mp_maxq3
5812
module procedure mp_minj
5813
module procedure mp_minq
5814
module procedure mp_minq3
5818
module procedure mp_modj
5819
module procedure mp_modq
5823
module procedure mp_jtoz
5824
module procedure mp_qtoz
5825
module procedure mp_itoz
5826
module procedure mp_dtoz
5827
module procedure mp_xtoz
5829
module procedure mp_atoz
5831
module procedure mp_jjtoz
5832
module procedure mp_qqtoz
5833
module procedure mp_iitoz
5834
module procedure mp_ddtoz
5836
module procedure mp_aatoz
5840
module procedure mp_cssh
5844
module procedure mp_cssn
5848
module procedure mp_qtoj
5849
module procedure mp_ztoj
5850
module procedure mp_itoj
5851
module procedure mp_dtoj
5852
module procedure mp_xtoj
5854
module procedure mp_atoj
5858
module procedure mp_nrt
5862
module procedure mp_rand
5866
module procedure mp_inpj
5867
module procedure mp_inpq
5868
module procedure mp_inpz
5872
module procedure mp_jtoq
5873
module procedure mp_ztoq
5874
module procedure mp_itoq
5875
module procedure mp_dtoq
5876
module procedure mp_xtoq
5878
module procedure mp_atoq
5882
module procedure mp_outj
5883
module procedure mp_outq
5884
module procedure mp_outz
5888
module procedure mp_nint
5892
module procedure mp_signj
5893
module procedure mp_signq
5897
module procedure mp_sin
5898
module procedure mp_sinz
5902
module procedure mp_sinh
5906
module procedure mp_sqrtq
5907
module procedure mp_sqrtz
5911
module procedure mp_tan
5915
module procedure mp_tanh
5920
function mp_absj (ja)
5921
implicit real*8 (d), type (mp_integer) (j), &
5922
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5923
type (mp_integer):: mp_absj
5927
call mpeq (ja%mpi, mp_absj%mpi, mpnw)
5928
mp_absj%mpi(1) = abs (ja%mpi(1))
5932
function mp_absq (qa)
5933
implicit real*8 (d), type (mp_integer) (j), &
5934
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5935
type (mp_real):: mp_absq
5939
call mpeq (qa%mpr, mp_absq%mpr, mpnw)
5940
mp_absq%mpr(1) = abs (qa%mpr(1))
5944
function mp_absz (za)
5945
implicit real*8 (d), type (mp_integer) (j), &
5946
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5947
type (mp_real):: mp_absz
5949
type (mp_real) q1, q2, q3
5952
call mpmul (za%mpc, za%mpc, q1%mpr, mpnw)
5953
call mpmul (za%mpc(mp41), za%mpc(mp41), q2%mpr, mpnw)
5954
call mpadd (q1%mpr, q2%mpr, q3%mpr, mpnw)
5955
call mpsqrt (q3%mpr, mp_absz%mpr, mpnw)
5959
function mp_acos (qa)
5960
implicit real*8 (d), type (mp_integer) (j), &
5961
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5962
type (mp_real):: mp_acos
5964
type (mp_real) q1, q2, q3
5967
call mpdmc (1.d0, 0, q1%mpr)
5968
call mpmul (qa%mpr, qa%mpr, q2%mpr, mpnw)
5969
call mpsub (q1%mpr, q2%mpr, q3%mpr, mpnw)
5970
call mpsqrt (q3%mpr, q1%mpr, mpnw)
5971
call mpang (qa%mpr, q1%mpr, mppic%mpr, mp_acos%mpr, mpnw)
5975
function mp_aint (qa)
5976
implicit real*8 (d), type (mp_integer) (j), &
5977
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5978
type (mp_real):: mp_aint
5983
call mpinfr (qa%mpr, mp_aint%mpr, q1%mpr, mpnw)
5987
function mp_anint (qa)
5988
implicit real*8 (d), type (mp_integer) (j), &
5989
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
5990
type (mp_real):: mp_anint
5994
call mpnint (qa%mpr, mp_anint%mpr, mpnw)
5998
function mp_asin (qa)
5999
implicit real*8 (d), type (mp_integer) (j), &
6000
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6001
type (mp_real):: mp_asin
6003
type (mp_real) q1, q2, q3
6006
call mpdmc (1.d0, 0, q1%mpr)
6007
call mpmul (qa%mpr, qa%mpr, q2%mpr, mpnw)
6008
call mpsub (q1%mpr, q2%mpr, q3%mpr, mpnw)
6009
call mpsqrt (q3%mpr, q1%mpr, mpnw)
6010
call mpang (q1%mpr, qa%mpr, mppic%mpr, mp_asin%mpr, mpnw)
6014
function mp_atan (qa)
6015
implicit real*8 (d), type (mp_integer) (j), &
6016
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6017
type (mp_real):: mp_atan
6022
call mpdmc (1.d0, 0, q1%mpr)
6023
call mpang (q1%mpr, qa%mpr, mppic%mpr, mp_atan%mpr, mpnw)
6027
function mp_atan2 (qa, qb)
6028
implicit real*8 (d), type (mp_integer) (j), &
6029
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6030
type (mp_real):: mp_atan2
6031
intent (in):: qa, qb
6034
call mpang (qb%mpr, qa%mpr, mppic%mpr, mp_atan2%mpr, mpnw)
6038
function mp_jtoc (ja, jb)
6039
implicit real*8 (d), type (mp_integer) (j), &
6040
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6042
intent (in):: ja, jb
6045
call mpmdc (ja%mpi, da, ia)
6046
call mpmdc (jb%mpi, db, ib)
6047
mp_jtoc = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib)
6051
function mp_qtoc (qa, qb)
6052
implicit real*8 (d), type (mp_integer) (j), &
6053
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6055
intent (in):: qa, qb
6058
call mpmdc (qa%mpr, da, ia)
6059
call mpmdc (qb%mpr, db, ib)
6060
mp_qtoc = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib)
6064
function mp_ztoc (za)
6065
implicit real*8 (d), type (mp_integer) (j), &
6066
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6071
call mpmdc (za%mpc, da, ia)
6072
call mpmdc (za%mpc(mp41), db, ib)
6073
mp_ztoc = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib)
6077
function mp_conjg (za)
6078
implicit real*8 (d), type (mp_integer) (j), &
6079
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6080
type (mp_complex):: mp_conjg
6084
call mpceq (mp4, za%mpc, mp_conjg%mpc, mpnw)
6085
mp_conjg%mpc(mp41) = - za%mpc(mp41)
6089
function mp_cos (qa)
6090
implicit real*8 (d), type (mp_integer) (j), &
6091
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6092
type (mp_real):: mp_cos
6097
call mpcssn (qa%mpr, mppic%mpr, mp_cos%mpr, q1%mpr, mpnw)
6101
function mp_cosz (za)
6102
implicit real*8 (d), type (mp_integer) (j), &
6103
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6104
type (mp_complex):: mp_cosz
6106
type (mp_real) q1, q2, q3, q4, q5, q6
6109
call mpeq (za%mpc(mp41), q2%mpr, mpnw)
6110
q2%mpr(1) = - q2%mpr(1)
6111
call mpexp (q2%mpr, mpl02%mpr, q1%mpr, mpnw)
6112
call mpdmc (1.d0, 0, q3%mpr)
6113
call mpdiv (q3%mpr, q1%mpr, q2%mpr, mpnw)
6114
call mpcssn (za%mpc, mppic%mpr, q3%mpr, q4%mpr, mpnw)
6115
call mpadd (q1%mpr, q2%mpr, q5%mpr, mpnw)
6116
call mpmuld (q5%mpr, 0.5d0, 0, q6%mpr, mpnw)
6117
call mpmul (q6%mpr, q3%mpr, mp_cosz%mpc, mpnw)
6118
call mpsub (q1%mpr, q2%mpr, q5%mpr, mpnw)
6119
call mpmuld (q5%mpr, 0.5d0, 0, q6%mpr, mpnw)
6120
call mpmul (q6%mpr, q4%mpr, mp_cosz%mpc(mp41), mpnw)
6124
function mp_cosh (qa)
6125
implicit real*8 (d), type (mp_integer) (j), &
6126
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6127
type (mp_real):: mp_cosh
6132
call mpcssh (qa%mpr, mpl02%mpr, mp_cosh%mpr, q1%mpr, mpnw)
6136
function mp_jtod (ja)
6137
implicit real*8 (d), type (mp_integer) (j), &
6138
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6140
double precision mp_jtod
6143
call mpmdc (ja%mpi, da, ia)
6144
mp_jtod = da * 2.d0 ** ia
6148
function mp_qtod (qa)
6149
implicit real*8 (d), type (mp_integer) (j), &
6150
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6152
double precision:: mp_qtod, da
6155
call mpmdc (qa%mpr, da, ia)
6156
mp_qtod = da * 2.d0 ** ia
6160
function mp_ztod (za)
6161
implicit real*8 (d), type (mp_integer) (j), &
6162
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6164
double precision:: mp_ztod, da
6167
call mpmdc (za%mpc, da, ia)
6168
mp_ztod = da * 2.d0 ** ia
6172
function mp_jtox (ja, jb)
6173
implicit real*8 (d), type (mp_integer) (j), &
6174
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6175
complex (kdb):: mp_jtox
6176
intent (in):: ja, jb
6179
call mpmdc (ja%mpi, da, ia)
6180
call mpmdc (jb%mpi, db, ib)
6181
mp_jtox = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib, kdb)
6185
function mp_qtox (qa, qb)
6186
implicit real*8 (d), type (mp_integer) (j), &
6187
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6188
complex (kdb):: mp_qtox
6189
intent (in):: qa, qb
6192
call mpmdc (qa%mpr, da, ia)
6193
call mpmdc (qb%mpr, db, ib)
6194
mp_qtox = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib, kdb)
6198
function mp_ztox (za)
6199
implicit real*8 (d), type (mp_integer) (j), &
6200
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6201
complex (kdb):: mp_ztox
6205
call mpmdc (za%mpc, da, ia)
6206
call mpmdc (za%mpc(mp41), db, ib)
6207
mp_ztox = cmplx (da * 2.d0 ** ia, db * 2.d0 ** ib, kdb)
6211
function mp_exp (qa)
6212
implicit real*8 (d), type (mp_integer) (j), &
6213
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6214
type (mp_real):: mp_exp
6218
call mpexp (qa%mpr, mpl02%mpr, mp_exp%mpr, mpnw)
6222
function mp_expz (za)
6223
implicit real*8 (d), type (mp_integer) (j), &
6224
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6225
type (mp_complex):: mp_expz
6227
type (mp_real) q1, q2, q3
6230
call mpexp (za%mpc, mpl02%mpr, q1%mpr, mpnw)
6231
call mpcssn (za%mpc(mp41), mppic%mpr, q2%mpr, q3%mpr, mpnw)
6232
call mpmul (q1%mpr, q2%mpr, mp_expz%mpc, mpnw)
6233
call mpmul (q1%mpr, q3%mpr, mp_expz%mpc(mp41), mpnw)
6237
function mp_imag (za)
6238
implicit real*8 (d), type (mp_integer) (j), &
6239
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6240
type (mp_real):: mp_imag
6244
call mpeq (za%mpc(mp41), mp_imag%mpr, mpnw)
6248
function mp_jtoi (ja)
6249
implicit real*8 (d), type (mp_integer) (j), &
6250
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6255
call mpmdc (ja%mpi, da, ia)
6256
mp_jtoi = da * 2.d0 ** ia
6260
function mp_qtoi (qa)
6261
implicit real*8 (d), type (mp_integer) (j), &
6262
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6267
call mpmdc (qa%mpr, da, ia)
6268
mp_qtoi = da * 2.d0 ** ia
6272
function mp_ztoi (za)
6273
implicit real*8 (d), type (mp_integer) (j), &
6274
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6279
call mpmdc (za%mpc, da, ia)
6280
mp_ztoi = da * 2.d0 ** ia
6284
function mp_log (qa)
6285
implicit real*8 (d), type (mp_integer) (j), &
6286
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6287
type (mp_real):: mp_log
6291
call mplog (qa%mpr, mpl02%mpr, mp_log%mpr, mpnw)
6295
function mp_logz (za)
6296
implicit real*8 (d), type (mp_integer) (j), &
6297
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6298
type (mp_complex):: mp_logz
6300
type (mp_real) q1, q2, q3, q4
6303
call mpmul (za%mpc, za%mpc, q1%mpr, mpnw)
6304
call mpmul (za%mpc(mp41), za%mpc(mp41), q2%mpr, mpnw)
6305
call mpadd (q1%mpr, q2%mpr, q3%mpr, mpnw)
6306
call mplog (q3%mpr, mpl02%mpr, q4%mpr, mpnw)
6307
call mpmuld (q4%mpr, 0.5d0, 0, mp_logz%mpc, mpnw)
6308
call mpang (za%mpc, za%mpc(mp41), mppic%mpr, mp_logz%mpc(mp41), mpnw)
6312
function mp_log10 (qa)
6313
implicit real*8 (d), type (mp_integer) (j), &
6314
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6315
type (mp_real):: mp_log10
6320
call mplog (qa%mpr, mpl02%mpr, q1%mpr, mpnw)
6321
call mpdiv (q1%mpr, mpl10%mpr, mp_log10%mpr, mpnw)
6325
function mp_maxj (ja, jb)
6326
implicit real*8 (d), type (mp_integer) (j), &
6327
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6328
type (mp_integer):: mp_maxj
6329
intent (in):: ja, jb
6332
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
6334
call mpeq (ja%mpi, mp_maxj%mpi, mpnw)
6336
call mpeq (jb%mpi, mp_maxj%mpi, mpnw)
6341
function mp_maxq (qa, qb)
6342
implicit real*8 (d), type (mp_integer) (j), &
6343
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6344
type (mp_real):: mp_maxq
6345
intent (in):: qa, qb
6348
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
6350
call mpeq (qa%mpr, mp_maxq%mpr, mpnw)
6352
call mpeq (qb%mpr, mp_maxq%mpr, mpnw)
6357
function mp_maxq3 (qa, qb, qc)
6358
implicit real*8 (d), type (mp_integer) (j), &
6359
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6360
type (mp_real):: mp_maxq3
6361
intent (in):: qa, qb, qc
6365
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
6367
call mpeq (qa%mpr, q1%mpr, mpnw)
6369
call mpeq (qb%mpr, q1%mpr, mpnw)
6371
call mpcpr (q1%mpr, qc%mpr, ic, mpnw)
6373
call mpeq (q1%mpr, mp_maxq3%mpr, mpnw)
6375
call mpeq (qc%mpr, mp_maxq3%mpr, mpnw)
6380
function mp_minj (ja, jb)
6381
implicit real*8 (d), type (mp_integer) (j), &
6382
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6383
type (mp_integer):: mp_minj
6384
intent (in):: ja, jb
6387
call mpcpr (ja%mpi, jb%mpi, ic, mpnw)
6389
call mpeq (ja%mpi, mp_minj%mpi, mpnw)
6391
call mpeq (jb%mpi, mp_minj%mpi, mpnw)
6396
function mp_minq (qa, qb)
6397
implicit real*8 (d), type (mp_integer) (j), &
6398
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6399
type (mp_real):: mp_minq
6400
intent (in):: qa, qb
6403
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
6405
call mpeq (qa%mpr, mp_minq%mpr, mpnw)
6407
call mpeq (qb%mpr, mp_minq%mpr, mpnw)
6412
function mp_minq3 (qa, qb, qc)
6413
implicit real*8 (d), type (mp_integer) (j), &
6414
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6415
type (mp_real):: mp_minq3
6416
intent (in):: qa, qb, qc
6420
call mpcpr (qa%mpr, qb%mpr, ic, mpnw)
6422
call mpeq (qa%mpr, q1%mpr, mpnw)
6424
call mpeq (qb%mpr, q1%mpr, mpnw)
6426
call mpcpr (q1%mpr, qc%mpr, ic, mpnw)
6428
call mpeq (q1%mpr, mp_minq3%mpr, mpnw)
6430
call mpeq (qc%mpr, mp_minq3%mpr, mpnw)
6435
function mp_modj (ja, jb)
6436
implicit real*8 (d), type (mp_integer) (j), &
6437
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6438
type (mp_integer):: mp_modj
6439
intent (in):: ja, jb
6440
type (mp_real) q1, q2, q3
6443
call mpdiv (ja%mpi, jb%mpi, q1%mpr, mpnw)
6444
call mpinfr (q1%mpr, q2%mpr, q3%mpr, mpnw)
6445
call mpmul (jb%mpi, q2%mpr, q1%mpr, mpnw)
6446
call mpsub (ja%mpi, q1%mpr, mp_modj%mpi, mpnw)
6450
function mp_modq (qa, qb)
6451
implicit real*8 (d), type (mp_integer) (j), &
6452
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6453
type (mp_real):: mp_modq
6454
intent (in):: qa, qb
6455
type (mp_real) q1, q2, q3
6458
call mpdiv (qa%mpr, qb%mpr, q1%mpr, mpnw)
6459
call mpinfr (q1%mpr, q2%mpr, q3%mpr, mpnw)
6460
call mpmul (qb%mpr, q2%mpr, q1%mpr, mpnw)
6461
call mpsub (qa%mpr, q1%mpr, mp_modq%mpr, mpnw)
6465
function mp_jtoz (ja)
6466
implicit real*8 (d), type (mp_integer) (j), &
6467
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6468
type (mp_complex):: mp_jtoz
6472
call mpmzc (ja%mpi, mp_jtoz%mpc)
6476
function mp_qtoz (qa)
6477
implicit real*8 (d), type (mp_integer) (j), &
6478
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6479
type (mp_complex):: mp_qtoz
6483
call mpmzc (qa%mpr, mp_qtoz%mpc)
6487
function mp_itoz (ia)
6488
implicit real*8 (d), type (mp_integer) (j), &
6489
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6490
type (mp_complex):: mp_itoz
6495
call mpxzc (xa, mp_itoz%mpc)
6499
function mp_rtoz (ra)
6500
implicit real*8 (d), type (mp_integer) (j), &
6501
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6502
type (mp_complex):: mp_rtoz
6507
call mpxzc (xa, mp_rtoz%mpc)
6511
function mp_ctoz (ca)
6512
implicit real*8 (d), type (mp_integer) (j), &
6513
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6514
type (mp_complex):: mp_ctoz
6519
call mpxzc (xa, mp_ctoz%mpc)
6523
function mp_dtoz (da)
6524
implicit real*8 (d), type (mp_integer) (j), &
6525
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6526
type (mp_complex):: mp_dtoz
6531
call mpxzc (xa, mp_dtoz%mpc)
6535
function mp_xtoz (xa)
6536
implicit real*8 (d), type (mp_integer) (j), &
6537
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6538
type (mp_complex):: mp_xtoz
6542
call mpxzc (xa, mp_xtoz%mpc)
6546
function mp_atoz (aa)
6547
implicit real*8 (d), type (mp_integer) (j), &
6548
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6549
character*(*), intent (in):: aa
6550
type (mp_complex):: mp_atoz
6551
character*1 az(mpipl+100)
6559
call mpinpc (az, l, q1%mpr, mpnw)
6560
call mpmzc (q1%mpr, mp_atoz%mpc)
6564
function mp_jjtoz (ja, jb)
6565
implicit real*8 (d), type (mp_integer) (j), &
6566
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6567
type (mp_complex):: mp_jjtoz
6568
intent (in):: ja, jb
6571
call mpmmpc (ja%mpi, jb%mpi, mp4, mp_jjtoz%mpc, mpnw)
6575
function mp_qqtoz (qa, qb)
6576
implicit real*8 (d), type (mp_integer) (j), &
6577
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6578
type (mp_complex):: mp_qqtoz
6579
intent (in):: qa, qb
6582
call mpmmpc (qa%mpr, qb%mpr, mp4, mp_qqtoz%mpc, mpnw)
6586
function mp_iitoz (ia, ib)
6587
implicit real*8 (d), type (mp_integer) (j), &
6588
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6589
type (mp_complex):: mp_iitoz
6590
intent (in):: ia, ib
6593
xa = cmplx (ia, ib, kdb)
6594
call mpxzc (xa, mp_iitoz%mpc)
6598
function mp_ddtoz (da, db)
6599
implicit real*8 (d), type (mp_integer) (j), &
6600
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6601
type (mp_complex):: mp_ddtoz
6602
intent (in):: da, db
6605
xa = cmplx (da, db, kdb)
6606
call mpxzc (xa, mp_ddtoz%mpc)
6610
function mp_aatoz (aa, ab)
6611
implicit real*8 (d), type (mp_integer) (j), &
6612
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6613
character*(*), intent (in):: aa, ab
6614
type (mp_complex):: mp_aatoz
6615
character*1 az(mpipl+100)
6622
call mpinpc (az, l, mp_aatoz%mpc, mpnw)
6627
call mpinpc (az, l, mp_aatoz%mpc(mp41), mpnw)
6631
subroutine mp_cssh (qa, qb, qc)
6632
implicit real*8 (d), type (mp_integer) (j), &
6633
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6635
intent (out):: qb, qc
6638
call mpcssh (qa%mpr, mpl02%mpr, qb%mpr, qc%mpr, mpnw)
6642
subroutine mp_cssn (qa, qb, qc)
6643
implicit real*8 (d), type (mp_integer) (j), &
6644
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6646
intent (out):: qb, qc
6649
call mpcssn (qa%mpr, mppic%mpr, qb%mpr, qc%mpr, mpnw)
6653
function mp_qtoj (qa)
6654
implicit real*8 (d), type (mp_integer) (j), &
6655
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6656
type (mp_integer):: mp_qtoj
6658
type (mp_real) q1, q2
6661
call mpeq (qa%mpr, q1%mpr, mpnw)
6662
call mpinfr (q1%mpr, mp_qtoj%mpi, q2%mpr, mpnw)
6666
function mp_ztoj (za)
6667
implicit real*8 (d), type (mp_integer) (j), &
6668
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6669
type (mp_integer):: mp_ztoj
6671
type (mp_real) q1, q2
6674
call mpeq (za%mpc, q1%mpr, mpnw)
6675
call mpinfr (q1%mpr, mp_ztoj%mpi, q2%mpr, mpnw)
6679
function mp_itoj (ia)
6680
implicit real*8 (d), type (mp_integer) (j), &
6681
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6682
type (mp_integer):: mp_itoj
6687
call mpdmc (da, 0, mp_itoj%mpi)
6691
function mp_dtoj (da)
6692
implicit real*8 (d), type (mp_integer) (j), &
6693
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6694
type (mp_integer):: mp_dtoj
6696
type (mp_real) q1, q2
6699
call mpdmc (da, 0, q1%mpr)
6700
call mpinfr (q1%mpr, mp_dtoj%mpi, q2%mpr, mpnw)
6704
function mp_xtoj (xa)
6705
implicit real*8 (d), type (mp_integer) (j), &
6706
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6707
type (mp_integer):: mp_xtoj
6709
type (mp_real) q1, q2
6713
call mpdmc (da, 0, q1%mpr)
6714
call mpinfr (q1%mpr, mp_xtoj%mpi, q2%mpr, mpnw)
6718
function mp_atoj (aa)
6719
implicit real*8 (d), type (mp_integer) (j), &
6720
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6721
character*(*), intent (in):: aa
6722
type (mp_integer):: mp_atoj
6723
character*1 az(mpipl+100)
6724
type (mp_real) q1, q2
6731
call mpinpc (az, l, q1%mpr, mpnw)
6732
call mpinfr (q1%mpr, mp_atoj%mpi, q2%mpr, mpnw)
6736
function mp_nrt (qa, ib)
6737
implicit real*8 (d), type (mp_integer) (j), &
6738
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6739
type (mp_real):: mp_nrt
6740
intent (in):: qa, ib
6743
call mpnrt (qa%mpr, ib, mp_nrt%mpr, mpnw)
6748
implicit real*8 (d), type (mp_integer) (j), &
6749
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6750
type (mp_real):: mp_rand
6753
call mprand (mp_rand%mpr, mpnw)
6757
subroutine mp_inpj (iu, j1, j2, j3, j4, j5, j6, j7, j8, j9)
6758
implicit real*8 (d), type (mp_integer) (j), &
6759
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6760
intent (out):: j1, j2, j3, j4, j5, j6, j7, j8, j9
6761
optional:: j2, j3, j4, j5, j6, j7, j8, j9
6762
character*1 az(mpipl+100)
6765
call mpinp (iu, j1%mpi, az, mpnw)
6766
if (present (j2)) call mpinp (iu, j2%mpi, az, mpnw)
6767
if (present (j3)) call mpinp (iu, j3%mpi, az, mpnw)
6768
if (present (j4)) call mpinp (iu, j4%mpi, az, mpnw)
6769
if (present (j5)) call mpinp (iu, j5%mpi, az, mpnw)
6770
if (present (j6)) call mpinp (iu, j6%mpi, az, mpnw)
6771
if (present (j7)) call mpinp (iu, j7%mpi, az, mpnw)
6772
if (present (j8)) call mpinp (iu, j8%mpi, az, mpnw)
6773
if (present (j9)) call mpinp (iu, j9%mpi, az, mpnw)
6777
subroutine mp_inpq (iu, q1, q2, q3, q4, q5, q6, q7, q8, q9)
6778
implicit real*8 (d), type (mp_integer) (j), &
6779
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6780
intent (out):: q1, q2, q3, q4, q5, q6, q7, q8, q9
6781
optional:: q2, q3, q4, q5, q6, q7, q8, q9
6782
character*1 az(mpipl+100)
6785
call mpinp (iu, q1%mpr, az, mpnw)
6786
if (present (q2)) call mpinp (iu, q2%mpr, az, mpnw)
6787
if (present (q3)) call mpinp (iu, q3%mpr, az, mpnw)
6788
if (present (q4)) call mpinp (iu, q4%mpr, az, mpnw)
6789
if (present (q5)) call mpinp (iu, q5%mpr, az, mpnw)
6790
if (present (q6)) call mpinp (iu, q6%mpr, az, mpnw)
6791
if (present (q7)) call mpinp (iu, q7%mpr, az, mpnw)
6792
if (present (q8)) call mpinp (iu, q8%mpr, az, mpnw)
6793
if (present (q9)) call mpinp (iu, q9%mpr, az, mpnw)
6797
subroutine mp_inpz (iu, z1, z2, z3, z4, z5, z6, z7, z8, z9)
6798
implicit real*8 (d), type (mp_integer) (j), &
6799
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6800
intent (out):: z1, z2, z3, z4, z5, z6, z7, z8, z9
6801
optional:: z2, z3, z4, z5, z6, z7, z8, z9
6802
character*1 az(mpipl+100)
6805
call mpinp (iu, z1%mpc, az, mpnw)
6806
call mpinp (iu, z1%mpc(mp41), az, mpnw)
6807
if (present (z2)) call mpinp (iu, z2%mpc, az, mpnw)
6808
if (present (z2)) call mpinp (iu, z2%mpc(mp41), az, mpnw)
6809
if (present (z3)) call mpinp (iu, z3%mpc, az, mpnw)
6810
if (present (z3)) call mpinp (iu, z3%mpc(mp41), az, mpnw)
6811
if (present (z4)) call mpinp (iu, z4%mpc, az, mpnw)
6812
if (present (z4)) call mpinp (iu, z4%mpc(mp41), az, mpnw)
6813
if (present (z5)) call mpinp (iu, z5%mpc, az, mpnw)
6814
if (present (z5)) call mpinp (iu, z5%mpc(mp41), az, mpnw)
6815
if (present (z6)) call mpinp (iu, z6%mpc, az, mpnw)
6816
if (present (z6)) call mpinp (iu, z6%mpc(mp41), az, mpnw)
6817
if (present (z7)) call mpinp (iu, z7%mpc, az, mpnw)
6818
if (present (z7)) call mpinp (iu, z7%mpc(mp41), az, mpnw)
6819
if (present (z8)) call mpinp (iu, z8%mpc, az, mpnw)
6820
if (present (z8)) call mpinp (iu, z8%mpc(mp41), az, mpnw)
6821
if (present (z9)) call mpinp (iu, z9%mpc, az, mpnw)
6822
if (present (z9)) call mpinp (iu, z9%mpc(mp41), az, mpnw)
6826
function mp_jtoq (ja)
6827
implicit real*8 (d), type (mp_integer) (j), &
6828
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6829
type (mp_real):: mp_jtoq
6833
call mpeq (ja%mpi, mp_jtoq%mpr, mpnw)
6837
function mp_ztoq (za)
6838
implicit real*8 (d), type (mp_integer) (j), &
6839
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6840
type (mp_real):: mp_ztoq
6844
call mpeq (za%mpc, mp_ztoq%mpr, mpnw)
6848
function mp_itoq (ia)
6849
implicit real*8 (d), type (mp_integer) (j), &
6850
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6851
type (mp_real):: mp_itoq
6856
call mpdmc (da, 0, mp_itoq%mpr)
6860
function mp_dtoq (da)
6861
implicit real*8 (d), type (mp_integer) (j), &
6862
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6863
type (mp_real):: mp_dtoq
6867
call mpdmc (da, 0, mp_dtoq%mpr)
6871
function mp_xtoq (xa)
6872
implicit real*8 (d), type (mp_integer) (j), &
6873
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6874
type (mp_real):: mp_xtoq
6879
call mpdmc (da, 0, mp_xtoq%mpr)
6883
function mp_atoq (aa)
6884
implicit real*8 (d), type (mp_integer) (j), &
6885
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6886
character*(*), intent (in):: aa
6887
type (mp_real):: mp_atoq
6888
character*1 az(mpipl+100)
6895
call mpdexc (az, l, mp_atoq%mpr, mpnw)
6899
subroutine mp_outj (iu, j1, j2, j3, j4, j5, j6, j7, j8, j9)
6900
implicit real*8 (d), type (mp_integer) (j), &
6901
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6902
intent (in):: j1, j2, j3, j4, j5, j6, j7, j8, j9
6903
optional:: j2, j3, j4, j5, j6, j7, j8, j9
6904
character*1 az(mpipl+100)
6907
call mpout (iu, j1%mpi, mpoud, az, mpnw)
6908
if (present (j2)) call mpout (iu, j2%mpi, mpoud, az, mpnw)
6909
if (present (j3)) call mpout (iu, j3%mpi, mpoud, az, mpnw)
6910
if (present (j4)) call mpout (iu, j4%mpi, mpoud, az, mpnw)
6911
if (present (j5)) call mpout (iu, j5%mpi, mpoud, az, mpnw)
6912
if (present (j6)) call mpout (iu, j6%mpi, mpoud, az, mpnw)
6913
if (present (j7)) call mpout (iu, j7%mpi, mpoud, az, mpnw)
6914
if (present (j8)) call mpout (iu, j8%mpi, mpoud, az, mpnw)
6915
if (present (j9)) call mpout (iu, j9%mpi, mpoud, az, mpnw)
6919
subroutine mp_outq (iu, q1, q2, q3, q4, q5, q6, q7, q8, q9)
6920
implicit real*8 (d), type (mp_integer) (j), &
6921
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6922
intent (in):: q1, q2, q3, q4, q5, q6, q7, q8, q9
6923
optional:: q2, q3, q4, q5, q6, q7, q8, q9
6924
character*1 az(mpipl+100)
6927
call mpout (iu, q1%mpr, mpoud, az, mpnw)
6928
if (present (q2)) call mpout (iu, q2%mpr, mpoud, az, mpnw)
6929
if (present (q3)) call mpout (iu, q3%mpr, mpoud, az, mpnw)
6930
if (present (q4)) call mpout (iu, q4%mpr, mpoud, az, mpnw)
6931
if (present (q5)) call mpout (iu, q5%mpr, mpoud, az, mpnw)
6932
if (present (q6)) call mpout (iu, q6%mpr, mpoud, az, mpnw)
6933
if (present (q7)) call mpout (iu, q7%mpr, mpoud, az, mpnw)
6934
if (present (q8)) call mpout (iu, q8%mpr, mpoud, az, mpnw)
6935
if (present (q9)) call mpout (iu, q9%mpr, mpoud, az, mpnw)
6939
subroutine mp_outz (iu, z1, z2, z3, z4, z5, z6, z7, z8, z9)
6940
implicit real*8 (d), type (mp_integer) (j), &
6941
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6942
intent (in):: z1, z2, z3, z4, z5, z6, z7, z8, z9
6943
optional:: z2, z3, z4, z5, z6, z7, z8, z9
6944
character*1 az(mpipl+100)
6947
call mpout (iu, z1%mpc, mpoud, az, mpnw)
6948
call mpout (iu, z1%mpc(mp41), mpoud, az, mpnw)
6949
if (present (z2)) call mpout (iu, z2%mpc, mpoud, az, mpnw)
6950
if (present (z2)) call mpout (iu, z2%mpc(mp41), mpoud, az, mpnw)
6951
if (present (z3)) call mpout (iu, z3%mpc, mpoud, az, mpnw)
6952
if (present (z3)) call mpout (iu, z3%mpc(mp41), mpoud, az, mpnw)
6953
if (present (z4)) call mpout (iu, z4%mpc, mpoud, az, mpnw)
6954
if (present (z4)) call mpout (iu, z4%mpc(mp41), mpoud, az, mpnw)
6955
if (present (z5)) call mpout (iu, z5%mpc, mpoud, az, mpnw)
6956
if (present (z5)) call mpout (iu, z5%mpc(mp41), mpoud, az, mpnw)
6957
if (present (z6)) call mpout (iu, z6%mpc, mpoud, az, mpnw)
6958
if (present (z6)) call mpout (iu, z6%mpc(mp41), mpoud, az, mpnw)
6959
if (present (z7)) call mpout (iu, z7%mpc, mpoud, az, mpnw)
6960
if (present (z7)) call mpout (iu, z7%mpc(mp41), mpoud, az, mpnw)
6961
if (present (z8)) call mpout (iu, z8%mpc, mpoud, az, mpnw)
6962
if (present (z8)) call mpout (iu, z8%mpc(mp41), mpoud, az, mpnw)
6963
if (present (z9)) call mpout (iu, z9%mpc, mpoud, az, mpnw)
6964
if (present (z9)) call mpout (iu, z9%mpc(mp41), mpoud, az, mpnw)
6968
function mp_nint (qa)
6969
implicit real*8 (d), type (mp_integer) (j), &
6970
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6971
type (mp_integer):: mp_nint
6975
call mpnint (qa%mpr, mp_nint%mpi, mpnw)
6979
function mp_ztor (za)
6980
implicit real*8 (d), type (mp_integer) (j), &
6981
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6986
call mpmdc (za%mpc, da, ia)
6987
mp_ztor = da * 2.d0 ** ia
6991
function mp_signj (ja, jb)
6992
implicit real*8 (d), type (mp_integer) (j), &
6993
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
6994
type (mp_integer):: mp_signj
6995
intent (in):: ja, jb
6998
call mpeq (ja%mpi, mp_signj%mpi, mpnw)
6999
mp_signj%mpi(1) = sign (mp_signj%mpi(1), jb%mpi(1))
7003
function mp_signq (qa, qb)
7004
implicit real*8 (d), type (mp_integer) (j), &
7005
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7006
type (mp_real):: mp_signq
7007
intent (in):: qa, qb
7010
call mpeq (qa%mpr, mp_signq%mpr, mpnw)
7011
mp_signq%mpr(1) = sign (mp_signq%mpr(1), qb%mpr(1))
7015
function mp_sin (qa)
7016
implicit real*8 (d), type (mp_integer) (j), &
7017
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7018
type (mp_real):: mp_sin
7023
call mpcssn (qa%mpr, mppic%mpr, q1%mpr, mp_sin%mpr, mpnw)
7027
function mp_sinz (za)
7028
implicit real*8 (d), type (mp_integer) (j), &
7029
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7030
type (mp_complex):: mp_sinz
7032
type (mp_real) q1, q2, q3, q4, q5, q6
7035
call mpeq (za%mpc(mp41), q2%mpr, mpnw)
7036
q2%mpr(1) = - q2%mpr(1)
7037
call mpexp (q2%mpr, mpl02%mpr, q1%mpr, mpnw)
7038
call mpdmc (1.d0, 0, q3%mpr)
7039
call mpdiv (q3%mpr, q1%mpr, q2%mpr, mpnw)
7040
call mpcssn (za%mpc, mppic%mpr, q3%mpr, q4%mpr, mpnw)
7041
call mpadd (q1%mpr, q2%mpr, q5%mpr, mpnw)
7042
call mpmuld (q5%mpr, 0.5d0, 0, q6%mpr, mpnw)
7043
call mpmul (q6%mpr, q4%mpr, mp_sinz%mpc, mpnw)
7044
call mpsub (q1%mpr, q2%mpr, q5%mpr, mpnw)
7045
call mpmuld (q5%mpr, -0.5d0, 0, q6%mpr, mpnw)
7046
call mpmul (q6%mpr, q3%mpr, mp_sinz%mpc(mp41), mpnw)
7050
function mp_sinh (qa)
7051
implicit real*8 (d), type (mp_integer) (j), &
7052
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7053
type (mp_real):: mp_sinh
7058
call mpcssh (qa%mpr, mpl02%mpr, q1%mpr, mp_sinh%mpr, mpnw)
7062
function mp_sqrtq (qa)
7063
implicit real*8 (d), type (mp_integer) (j), &
7064
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7065
type (mp_real):: mp_sqrtq
7069
call mpsqrt (qa%mpr, mp_sqrtq%mpr, mpnw)
7073
function mp_sqrtz (za)
7074
implicit real*8 (d), type (mp_integer) (j), &
7075
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7076
type (mp_complex):: mp_sqrtz
7080
call mpcsqt (mp4, za%mpc, mp_sqrtz%mpc, mpnw)
7084
function mp_tan (qa)
7085
implicit real*8 (d), type (mp_integer) (j), &
7086
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7087
type (mp_real):: mp_tan
7089
type (mp_real) q1, q2
7092
call mpcssn (qa%mpr, mppic%mpr, q1%mpr, q2%mpr, mpnw)
7093
call mpdiv (q2%mpr, q1%mpr, mp_tan%mpr, mpnw)
7097
function mp_tanh (qa)
7098
implicit real*8 (d), type (mp_integer) (j), &
7099
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7100
type (mp_real):: mp_tanh
7102
type (mp_real) q1, q2
7105
call mpcssh (qa%mpr, mpl02%mpr, q1%mpr, q2%mpr, mpnw)
7106
call mpdiv (q2%mpr, q1%mpr, mp_tanh%mpr, mpnw)
7112
! This contains defines bessel, besselexp, erf, erfc and gamma functions.
7119
private mp_bessel, mp_besselexp, mp_erf, mp_erfc, mp_gamma
7120
integer, private:: kdb
7121
parameter (kdb = kind (0.d0))
7124
module procedure mp_bessel
7128
module procedure mp_besselexp
7132
module procedure mp_erf
7136
module procedure mp_erfc
7140
module procedure mp_gamma
7145
function mp_bessel (qa)
7146
implicit real*8 (d), type (mp_integer) (j), &
7147
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7148
type (mp_real):: mp_bessel
7150
call mpbessel (qa, mp_bessel)
7154
function mp_besselexp (qa)
7155
implicit real*8 (d), type (mp_integer) (j), &
7156
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7157
type (mp_real):: mp_besselexp
7159
call mpbesselexp (qa, mp_besselexp)
7163
function mp_erf (qa)
7164
implicit real*8 (d), type (mp_integer) (j), &
7165
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7166
type (mp_real):: mp_erf
7168
call mperf (qa, mp_erf)
7172
function mp_erfc (qa)
7173
implicit real*8 (d), type (mp_integer) (j), &
7174
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7175
type (mp_real):: mp_erfc
7177
call mperfc (qa, mp_erfc)
7181
function mp_gamma (qa)
7182
implicit real*8 (d), type (mp_integer) (j), &
7183
type (mp_real) (q), complex (kdb) (x), type (mp_complex) (z)
7184
type (mp_real):: mp_gamma
7186
call mpgamma (qa, mp_gamma)
7190
subroutine mpbessel (t, z)
7192
! This evaluates the function BesselI (0, t).
7195
integer i, ndp, nwords
7196
type (mp_real) eps, tsum, t, t1, t2, z
7198
call mpgetprecwords (nwords)
7199
eps = mpreal (2.d0) ** (-48 * nwords - 1)
7200
ndp = (nwords - 2) * 7.224719896d0
7202
! Select either the direct or the asymptotic series.
7204
if (0.85d0 * t < ndp) then
7209
do i = 1, 1000000000
7210
t1 = t1 * t2 / (4.d0 * dble (i) ** 2)
7211
if (t1 < eps) goto 100
7215
write (6, *) 'bessel: loop overflow 1'
7225
do i = 1, 1000000000
7227
t1 = t1 * (2.d0 * i - 1.d0) ** 2 / (8.d0 * i * t)
7229
if (t1 < eps) goto 110
7231
write (6, *) 'bessel: t1 > t2; t ='
7238
write (6, *) 'bessel: loop overflow 2'
7243
t1 = tsum * exp (t) / sqrt (2.d0 * mppic * t)
7250
subroutine mpbesselexp (t, z)
7252
! This evaluates the function BesselI (0, t) / exp (t).
7255
integer i, ndp, nwords
7256
type (mp_real) eps, tsum, t, t1, t2, z
7258
call mpgetprecwords (nwords)
7259
eps = mpreal (2.d0) ** (-48 * nwords - 1)
7260
ndp = (nwords - 2) * 7.224719896d0
7262
! Select either the direct or the asymptotic series.
7264
if (0.85d0 * t < ndp) then
7269
do i = 1, 1000000000
7270
t1 = t1 * t2 / (4.d0 * dble (i) ** 2)
7271
if (t1 < eps) goto 100
7275
write (6, *) 'besselexp: loop overflow 1'
7285
do i = 1, 1000000000
7287
t1 = t1 * (2.d0 * i - 1.d0) ** 2 / (8.d0 * i * t)
7289
if (t1 < eps) goto 110
7291
write (6, *) 'besselexp: t1 > t2; t ='
7298
write (6, *) 'besselexp: loop overflow 2'
7303
t1 = tsum / sqrt (2.d0 * mppic * t)
7310
subroutine mperf (t, z)
7312
! Computes erf = Int_0^a 2/Sqrt(pi) * e^(-t^2)
7317
type (mp_real) eps, t, t0, t1, t2, t3, t4, z
7319
if (abs (t) > 1d-4) then
7322
call mpgetprecwords (nw)
7323
eps = mpreal (0.5d0) ** (mpnbt * nw + mpnbt)
7330
do i = 1, 1000000000
7334
t4 = ds * t1 / (dble (2 * i + 1) * t3)
7336
if (abs (t4) < eps) goto 100
7339
write (6, *) 'erf: loop end error'
7344
z = 2.d0 / sqrt (mppic) * t * t0
7350
subroutine mperfc (t, z)
7352
! Computes erfc(a) = 1 - Int_0^a 2/sqrt(pi) * e^(-t^2) dt.
7354
! This algorithm is presented in Richard Crandall's book "Topics in
7355
! Advanced Scientific Computation", pg 82. Crandall in turn references
7356
! a 1968 paper by Chiarella and Reichel.
7359
integer i, j, k, n, ndp1, ndps, ntab, nwks, nwords
7360
type (mp_real) eps, f, t, t1, t2, t3, t4, t5, z
7361
real*8 alpha, d1, d2, dpi, dlog10, dlog2
7362
type (mp_real) etab (:)
7364
save ndps, ntab, nwks, alpha, etab
7367
call mpgetprecwords (nwords)
7368
eps = mpreal(2.d0) ** (-48 * nwords - 1)
7369
ndp1 = (nwords - 2) * 7.224719896d0
7371
dlog10 = log (10.d0)
7374
if (d1 > 10000.d0) then
7380
if (ntab == 0 .or. ndp1 > ndps .or. nwords > nwks .or. d2 < alpha) then
7382
! On the first call, or if working precision has been increased, or if
7383
! the argument exceeds a certain value, recalculate alpha and the etab table.
7387
if (ntab > 0) deallocate (etab)
7389
! Multiply d1 (new alpha) by 0.95 (so we won't need to recalculate so often),
7390
! then round to some nice 6-bit rational.
7392
d1 = 0.95d0 * min (dpi / sqrt (ndp1 * dlog10), d2)
7393
n = abs (int (log (d1) / dlog2)) + 1
7394
alpha = 0.5d0 ** (n + 6) * anint (d1 * 2.d0 ** (n + 6))
7395
ntab = sqrt (ndp1 * dlog10) / alpha + 1.d0
7397
! Make sure that (alpha * ntab)^2 can be represented exactly in DP.
7398
! I don't think this will ever be a problem, but check just in case.
7400
d2 = 2.d0 * (6.d0 + log (dble (ntab)) / dlog2)
7401
if (d2 > 53.d0) then
7402
write (6, *) 'mperfcx: error; contact author'
7406
! write (6, *) 'alpha, ntab, bits =', alpha, ntab, d2
7408
allocate (etab(ntab))
7410
! Calculate table of exp(-k^2*alpha^2).
7435
t5 = etab(k) / (k ** 2 * alpha ** 2 + t2)
7437
if (abs (t5) < eps) goto 110
7442
z = t3 * alpha * t / mppic * (1.d0 / t2 + 2.d0 * t1) &
7443
+ 2.d0 / (1.d0 - exp (2.d0 * mppic * t / alpha))
7450
subroutine mpgamma (t, z)
7452
! This evaluates the gamma function, using an algorithm of R. W. Potter.
7455
integer i, j, k, ndp, neps, nt, nwords
7456
double precision alpha, con1, con2, d1, d2
7457
parameter (con1 = 1.151292547d0, con2 = 1.974476770d0)
7458
type (mp_real) eps, sum1, sum2, t, t1, t2, t3, t4, tn, z
7460
call mpgetprecwords (nwords)
7461
neps = (-nwords - 1) * 7.224719896d0
7462
ndp = (nwords - 1) * 7.224719896d0
7463
eps = mpreal(2.d0) ** (-24*nwords - 24)
7465
! Handle special arguments.
7467
if (abs (t) > 1.d8) then
7468
write (6, *) 'gamma: argument too large'
7470
elseif (t == anint (t) .and. t <= 0.d0) then
7471
write (6, *) 'gamma: invalid argument'
7478
if (t == dble (nt)) nt = nt - 1
7482
t1 = t1 * (t - dble (i))
7486
if (t == aint (t)) then
7495
t1 = t1 / (t + dble (i))
7501
! Calculate alpha, then take the next highest integer value, so that
7502
! d2 = 0.25 * alpha^2 can be calculated exactly in double precision.
7504
alpha = aint (con1 * ndp + 1.d0)
7506
d2 = 0.25d0 * alpha**2
7510
! Evaluate the series with t, terminating when t3 < sum1 * epsilon.
7512
do j = 1, 1000000000
7513
t3 = t3 * d2 / (j * (t2 + j))
7515
if (abs (t3) < abs (sum1) * eps) goto 100
7518
write (6, *) 'gamma: loop overflow 1'
7523
sum1 = t2 * (0.5d0 * alpha) ** t2 * sum1
7528
! Evaluate the same series with -t, terminating when t3 < sum1 * epsilon.
7530
do j = 1, 1000000000
7531
t3 = t3 * d2 / (j * (t2 + j))
7533
if (abs (t3) < abs (sum2) * eps) goto 110
7536
write (6, *) 'gamma: loop overflow 2'
7541
sum2 = t2 * (0.5d0 * alpha) ** t2 * sum2
7543
! Conclude with this square root expression.
7545
z = t1 * sqrt (mppic * sum1 / (tn * sin (mppic * tn) * sum2))