You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.8 KiB
Fortran
88 lines
2.8 KiB
Fortran
|
|
subroutine prbnormtndpc(rho,a,b,NDF,N,abseps,IERC,HNC,PRB,BOUND,
|
|
* IFAULT)
|
|
double precision A(N),B(N),rho(N),D(N)
|
|
integer INFIN(N)
|
|
integer NDF,N,IERC
|
|
integer IFAULT
|
|
double precision HNC,EPS
|
|
double precision PRB, BOUND
|
|
double precision, parameter :: infinity = 37.0d0
|
|
Cf2py integer, intent(hide), depend(rho) :: N = len(rho)
|
|
Cf2py depend(N) a
|
|
Cf2py depend(N) b
|
|
Cf2py integer, optional :: NDF = 0
|
|
Cf2py double precision, optional :: abseps = 0.001
|
|
Cf2py double precision, optional :: HNC = 0.24
|
|
Cf2py integer, optional :: IERC =0
|
|
Cf2py double precision, intent(out) :: PRB
|
|
Cf2py double precision, intent(out) :: BOUND
|
|
Cf2py integer, intent(out) :: IFAULT
|
|
|
|
CCf2py intent(in) N,IERC
|
|
CCf2py intent(in) HINC,EPS
|
|
CCf2py intent(in) INF
|
|
CCf2py intent(in) A,B,rho
|
|
|
|
|
|
|
|
* Set INFIN INTEGER, array of integration limits flags:
|
|
* if INFIN(I) < 0, Ith limits are (-infinity, infinity);
|
|
* if INFIN(I) = 0, Ith limits are [LOWER(I), infinity);
|
|
* if INFIN(I) = 1, Ith limits are (-infinity, UPPER(I)];
|
|
* if INFIN(I) = 2, Ith limits are [LOWER(I), UPPER(I)].
|
|
Ndim = 0
|
|
DO K = 1,N
|
|
Ndim = Ndim + 1
|
|
INFIN(Ndim) = 2
|
|
D(k) = 0.0
|
|
if (A(K)-D(K).LE.-INFINITY) THEN
|
|
if (B(K)-D(K) .GE. INFINITY) THEN
|
|
Ndim = Ndim - 1
|
|
!INFIN(K) = -1
|
|
else
|
|
INFIN(Ndim) = 1
|
|
endif
|
|
else if (B(K)-D(K).GE.INFINITY) THEN
|
|
INFIN(Ndim) = 0
|
|
endif
|
|
if (ndim<k) then
|
|
RHO(Ndim) = RHO(k)
|
|
A(Ndim) = A(K)
|
|
B(Ndim) = B(K)
|
|
C D(Ndim) = D(K)
|
|
endif
|
|
ENDDO
|
|
CALL MVSTUD(NDF,B,A,RHO,ABSEPS,Ndim,INFIN,D,IERC,HNC,
|
|
& PRB,BOUND,IFAULT)
|
|
|
|
C CALL MVNPRD(A, B, BPD, EPS, N, INF, IERC, HINC, PROB, BOUND,
|
|
C * IFAULT)
|
|
return
|
|
end subroutine prbnormtndpc
|
|
|
|
subroutine prbnormndpc(prb,abserr,IFT,rho,a,b,N,abseps,releps,
|
|
& useBreakPoints, useSimpson)
|
|
use mvnProdCorrPrbMod, ONLY : mvnprodcorrprb
|
|
integer :: N
|
|
double precision,dimension(N),intent(in) :: rho,a,b
|
|
double precision,intent(in) :: abseps
|
|
double precision,intent(in) :: releps
|
|
logical, intent(in) :: useBreakPoints
|
|
logical, intent(in) :: useSimpson
|
|
double precision,intent(out) :: abserr,prb
|
|
integer, intent(out) :: IFT
|
|
|
|
Cf2py integer, intent(hide), depend(rho) :: N = len(rho)
|
|
Cf2py depend(N) a
|
|
Cf2py depend(N) b
|
|
Cf2py double precision, optional :: abseps = 0.001
|
|
Cf2py double precision, optional :: releps = 0.001
|
|
Cf2py logical, optional :: useBreakPoints =1
|
|
Cf2py logical, optional :: useSimpson = 1
|
|
|
|
CALL mvnprodcorrprb(rho,a,b,abseps,releps,useBreakPoints,
|
|
& useSimpson,abserr,IFT,prb)
|
|
|
|
end subroutine prbnormndpc
|