!The Full Polymorphic Package
!Copyright (C) Etienne Forest
! Taylor polymorphism at execution is based on an idea
! and C++ prototype developed by J. Bengtsson circa 1990
module polymorphic_taylor
use complex_taylor
implicit none
public
logical(lp),private,parameter::t=.true.,f=.false.
integer,private::NO,ND,ND2,NP,NDPT,NV !,lastmaster ! 2002.12.13
INTEGER,PRIVATE::NMAX_pol=100
! real(dp),PRIVATE::EPS=c_1d_6
! integer ent,exi
integer,private,parameter::m1=mmmmmm1,m2=mmmmmm2,m3=mmmmmm3,ms=mmmmmm4
integer,private,parameter:: m11=m1+ms*m1,m12=m1+ms*m2,m13=m1+ms*m3, &
m21=m2+ms*m1,m22=m2+ms*m2,m23=m2+ms*m3, &
m31=m3+ms*m1,m32=m3+ms*m2,m33=m3+ms*m3
logical(lp),private::old
private resetpoly,resetpolyn ,resetpoly0,resetpolyn0 ,allocpoly,allocpolyn,resetpoly_R,resetpoly_Rn
PRIVATE K_OPT,A_OPT,e_OPT,ke_OPT
private allocenv,allocenvn,resetenv,resetenvn
private equal,Dequaldacon,equaldacon,iequaldacon ,realEQUAL,singleequal
private taylorEQUAL,EQUALtaylor,complexreal_8
private real_8univ,univreal_8
PRIVATE real_8MAP,MAPREAL_8
private unaryADD,add,daddsc,dscadd,addsc,scadd,iaddsc,iscadd
private unarySUB,subs,dscsub,dsubsc,scsub,subsc,iscsub,isubsc
private mul,dmulsc,dscmul,mulsc,scmul,imulsc,iscmul
private div,ddivsc,dscdiv,divsc,scdiv,idivsc,iscdiv
private POW,POWR,POWR8
private dexpt,dcost,dcosdt,dsindt,dsint,dlogt,dsqrtt
private greaterthan,greatereq
private lessthan,dlessthansc,dsclessthan,lessthansc,sclessthan,ilessthansc,isclessthan
private igreatersc,iscgreater,dgreatersc,dscgreater,greatersc,scgreater
private dgreatereqsc,dscgreatereq,greatereqsc,scgreatereq,igreatereqsc,iscgreatereq
private abst,full_abst
private lesseq,dlesseqsc,dsclesseq,lesseqsc,sclesseq,ilesseqsc,isclesseq
private eq,deqsc,dsceq,eqsc,sceq,ieqsc,isceq
private neq,dneqsc,dscneq,neqsc,scneq,ineqsc,iscneq
PRIVATE GETCHARnd2,GETintnd2,getchar,GETint,GETORDER,CUTORDER
private real_8ENV,ENVreal_8 ,RADTAYLORENV_8, ENV_8RADTAYLOR ,beamENV_8,normal_p
private absoftdatan2dr,absoftdcosdr,absoftdsindr,absoftdtandr,absoftdatandr
!complex stuff
private datant,datanDt,datan2t,dasint,dacost,dtant,dtandt,datanht
private dcosht,dsinht,dtanht,SINX_XT,SINHX_XT,polymorpht
! PRIVATE EQUAL1D,EQUAL2D
! end complex stuff
private printpoly,printdouble,printsingle,dmulmapconcat
private line
character(120) line
!integer npol
!parameter (npol=20)
!INTEGER iasspol
!type(real_8) DUMMYpol,DUMpol(ndum)
!integer iasspol0
!private assp
PRIVATE SINH_HR
PRIVATE SIN_HR
! PROBE_8 STUFF
PRIVATE RADTAYLORprobe_8,beamprobe_8
real(dp) :: sinhx_x_min=1e-4_dp
real(dp) :: sinhx_x_minp=1.0_dp ! 1.e-9 !c_0_0001
INTERFACE assignment (=)
MODULE PROCEDURE EQUAL ! 2002.10.9
! MODULE PROCEDURE EQUAL1D ! 2004.7.10
! MODULE PROCEDURE EQUAL2D ! 2004.7.10
MODULE PROCEDURE complexreal_8
!zgoubi
MODULE PROCEDURE realEQUAL !
MODULE PROCEDURE singleequal
MODULE PROCEDURE taylorEQUAL !taylor=real_8
MODULE PROCEDURE EQUALtaylor !real_8= taylor ! here 2002.10.9
MODULE PROCEDURE Dequaldacon !
MODULE PROCEDURE equaldacon !
! For resetting
MODULE PROCEDURE Iequaldacon
MODULE PROCEDURE Iequaldaconn
! For universal_taylor
MODULE PROCEDURE real_8univ
MODULE PROCEDURE univreal_8 ! new sagan
! for damap
MODULE PROCEDURE MAPreal_8
MODULE PROCEDURE real_8MAP
! FOR RADIATION
MODULE PROCEDURE real_8ENV
MODULE PROCEDURE ENVreal_8
MODULE PROCEDURE RADTAYLORENV_8
MODULE PROCEDURE ENV_8RADTAYLOR
! allowing normalization of polymorphic arrays directly
MODULE PROCEDURE beamENV_8
MODULE PROCEDURE normal_p
MODULE PROCEDURE RADTAYLORprobe_8
MODULE PROCEDURE beamprobe_8
end INTERFACE
!@
!@
!@
!@
!@ + |
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ Real(dp) |
!@
!@
!@ Real(sp) |
!@
!@
!@ Integer |
!@
!@
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ add |
!@
!@
!@
!@ daddsc |
!@
!@
!@ ADDSC |
!@
!@
!@ IADDSC |
!@
!@
!@
!@
!@
!@ Real(dp) |
!@
!@
!@
!@ dscadd |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Real(sp) |
!@
!@
!@ SCADD |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Integer |
!@
!@
!@ ISCADD |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
INTERFACE OPERATOR (+)
MODULE PROCEDURE unaryADD !
MODULE PROCEDURE add !
MODULE PROCEDURE daddsc !
MODULE PROCEDURE dscadd !
MODULE PROCEDURE addsc !
MODULE PROCEDURE scadd !
MODULE PROCEDURE iaddsc !
MODULE PROCEDURE iscadd !
END INTERFACE
!@
!@
!@
!@
!@ - |
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ Real(dp) |
!@
!@
!@ Real(sp) |
!@
!@
!@ Integer |
!@
!@
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ SUBS |
!@
!@
!@
!@ dSUBsc |
!@
!@
!@ SUBSC |
!@
!@
!@ ISUBSC |
!@
!@
!@
!@
!@
!@ Real(dp) |
!@
!@
!@
!@ dscSUB |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Real(sp) |
!@
!@
!@ SCSUB |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Integer |
!@
!@
!@ ISCSUB |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
INTERFACE OPERATOR (-)
MODULE PROCEDURE unarySUB !
MODULE PROCEDURE subs !
MODULE PROCEDURE dscsub !
MODULE PROCEDURE dsubsc !
MODULE PROCEDURE subsc !
MODULE PROCEDURE scsub !
MODULE PROCEDURE isubsc !
MODULE PROCEDURE iscsub !
END INTERFACE
!@
!@
!@
!@
!@ * |
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ Real(dp) |
!@
!@
!@ Real(sp) |
!@
!@
!@ Integer |
!@
!@
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ MUL |
!@
!@
!@
!@ dMULsc |
!@
!@
!@ MULSC |
!@
!@
!@ IMULSC |
!@
!@
!@
!@
!@
!@ Real(dp) |
!@
!@
!@
!@ dscMUL |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Real(sp) |
!@
!@
!@ SCMUL |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Integer |
!@
!@
!@ ISCMUL |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
INTERFACE OPERATOR (*)
MODULE PROCEDURE mul !
MODULE PROCEDURE dmulsc !
MODULE PROCEDURE dscmul !
MODULE PROCEDURE mulsc !
MODULE PROCEDURE scmul !
MODULE PROCEDURE imulsc !
MODULE PROCEDURE iscmul !
MODULE PROCEDURE dmulmapconcat ! concatenation real_8*damap
END INTERFACE
!@
!@
!@
!@
!@ / |
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ Real(dp) |
!@
!@
!@ Real(sp) |
!@
!@
!@ Integer |
!@
!@
!@
!@
!@ REAL_8 |
!@
!@
!@
!@ div |
!@
!@
!@
!@ dDIVsc |
!@
!@ DIVSC |
!@
!@ IDIVSC |
!@
!@
!@
!@
!@
!@ Real(dp) |
!@
!@
!@
!@ dscDIV |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Real(sp) |
!@
!@ SCDIV |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
!@
!@
!@ Integer |
!@
!@ ISCDIV |
!@
!@ F90 |
!@
!@ F90 |
!@
!@ F90 |
!@
!@
INTERFACE OPERATOR (/)
MODULE PROCEDURE div !
MODULE PROCEDURE ddivsc !
MODULE PROCEDURE dscdiv !
MODULE PROCEDURE divsc !
MODULE PROCEDURE scdiv !
MODULE PROCEDURE idivsc !
MODULE PROCEDURE iscdiv !
END INTERFACE
INTERFACE OPERATOR (**)
MODULE PROCEDURE POW !
MODULE PROCEDURE POWR !
MODULE PROCEDURE POWR8 !
END INTERFACE
! Logical Operators
INTERFACE OPERATOR (<)
MODULE PROCEDURE lessthan
MODULE PROCEDURE dlessthansc
MODULE PROCEDURE dsclessthan
MODULE PROCEDURE lessthansc
MODULE PROCEDURE sclessthan
MODULE PROCEDURE ilessthansc
MODULE PROCEDURE isclessthan
END INTERFACE
INTERFACE OPERATOR (>)
MODULE PROCEDURE greaterthan
MODULE PROCEDURE dgreatersc
MODULE PROCEDURE dscgreater
MODULE PROCEDURE greatersc
MODULE PROCEDURE scgreater
MODULE PROCEDURE igreatersc
MODULE PROCEDURE iscgreater
END INTERFACE
INTERFACE OPERATOR (>=)
MODULE PROCEDURE greatereq
MODULE PROCEDURE dgreatereqsc
MODULE PROCEDURE dscgreatereq
MODULE PROCEDURE greatereqsc
MODULE PROCEDURE scgreatereq
MODULE PROCEDURE igreatereqsc
MODULE PROCEDURE iscgreatereq
END INTERFACE
INTERFACE OPERATOR (<=)
MODULE PROCEDURE lesseq
MODULE PROCEDURE dlesseqsc
MODULE PROCEDURE dsclesseq
MODULE PROCEDURE lesseqsc
MODULE PROCEDURE sclesseq
MODULE PROCEDURE ilesseqsc
MODULE PROCEDURE isclesseq
END INTERFACE
INTERFACE OPERATOR (==)
MODULE PROCEDURE eq
MODULE PROCEDURE deqsc
MODULE PROCEDURE dsceq
MODULE PROCEDURE eqsc
MODULE PROCEDURE sceq
MODULE PROCEDURE ieqsc
MODULE PROCEDURE isceq
END INTERFACE
INTERFACE OPERATOR (/=)
MODULE PROCEDURE neq
MODULE PROCEDURE dneqsc
MODULE PROCEDURE dscneq
MODULE PROCEDURE neqsc
MODULE PROCEDURE scneq
MODULE PROCEDURE ineqsc
MODULE PROCEDURE iscneq
END INTERFACE
! New Operators
INTERFACE OPERATOR (.SUB.)
MODULE PROCEDURE GETORDER
MODULE PROCEDURE getchar
MODULE PROCEDURE GETint
END INTERFACE
INTERFACE OPERATOR (.CUT.)
MODULE PROCEDURE CUTORDER
END INTERFACE
INTERFACE OPERATOR (.PAR.)
MODULE PROCEDURE getcharnd2
MODULE PROCEDURE GETintnd2
END INTERFACE
! Intrinsic function (some are Fortran extension not always supported)
INTERFACE exp
MODULE PROCEDURE dexpt
END INTERFACE
INTERFACE dexp
MODULE PROCEDURE dexpt
END INTERFACE
INTERFACE cexp
MODULE PROCEDURE dexpt
END INTERFACE
INTERFACE cdexp
MODULE PROCEDURE dexpt
END INTERFACE
INTERFACE cos
MODULE PROCEDURE dcost
END INTERFACE
INTERFACE ccos
MODULE PROCEDURE dcost
END INTERFACE
INTERFACE cdcos
MODULE PROCEDURE dcost
END INTERFACE
INTERFACE dcos
MODULE PROCEDURE dcost
END INTERFACE
INTERFACE atanh
MODULE PROCEDURE datanht
END INTERFACE
INTERFACE tan
MODULE PROCEDURE dtant
END INTERFACE
INTERFACE dtan
MODULE PROCEDURE dtant
END INTERFACE
INTERFACE tand
MODULE PROCEDURE dtandt
! MODULE PROCEDURE absoftdtandr ! for non PC
END INTERFACE
INTERFACE dtand
MODULE PROCEDURE dtandt
! MODULE PROCEDURE absoftdtandr ! for non PC absoft
END INTERFACE
INTERFACE cosd
MODULE PROCEDURE dcosdt
! MODULE PROCEDURE absoftdcosdr ! for non PC
END INTERFACE
INTERFACE dcosd
MODULE PROCEDURE dcosdt
! MODULE PROCEDURE absoftdcosdr ! for non PC absoft
END INTERFACE
INTERFACE sin
MODULE PROCEDURE dsint
END INTERFACE
INTERFACE cdsin
MODULE PROCEDURE dsint
END INTERFACE
INTERFACE ccsin
MODULE PROCEDURE dsint
END INTERFACE
INTERFACE dsin
MODULE PROCEDURE dsint
END INTERFACE
INTERFACE sind
MODULE PROCEDURE dsindt
! MODULE PROCEDURE absoftdsindr ! for non PC
END INTERFACE
INTERFACE dsind
MODULE PROCEDURE dsindt
! MODULE PROCEDURE absoftdsindr ! for non PC absoft
END INTERFACE
INTERFACE log
MODULE PROCEDURE dlogt
END INTERFACE
INTERFACE dlog
MODULE PROCEDURE dlogt
END INTERFACE
INTERFACE cdlog
MODULE PROCEDURE dlogt
END INTERFACE
INTERFACE clog
MODULE PROCEDURE dlogt
END INTERFACE
INTERFACE sqrt
MODULE PROCEDURE dsqrtt
END INTERFACE
INTERFACE dsqrt
MODULE PROCEDURE dsqrtt
END INTERFACE
INTERFACE abs
MODULE PROCEDURE abst
END INTERFACE
INTERFACE dabs
MODULE PROCEDURE abst
END INTERFACE
! complex stuff
INTERFACE atan
MODULE PROCEDURE datant
END INTERFACE
INTERFACE datan
MODULE PROCEDURE datant
END INTERFACE
INTERFACE atan2
MODULE PROCEDURE datan2t
END INTERFACE
INTERFACE datan2
MODULE PROCEDURE datan2t
END INTERFACE
INTERFACE atan2d
MODULE PROCEDURE datan2dt
! MODULE PROCEDURE absoftdatan2dr ! for non PC
END INTERFACE
INTERFACE datan2d
MODULE PROCEDURE datan2dt
! MODULE PROCEDURE absoftdatan2dr ! for non PC absoft
END INTERFACE
INTERFACE atand
MODULE PROCEDURE datandt
! MODULE PROCEDURE absoftdatandr ! for non PC
END INTERFACE
INTERFACE datand
MODULE PROCEDURE datandt
! MODULE PROCEDURE absoftdatandr ! for non PC absoft
END INTERFACE
INTERFACE asin
MODULE PROCEDURE dasint
END INTERFACE
INTERFACE dasin
MODULE PROCEDURE dasint
END INTERFACE
INTERFACE acos
MODULE PROCEDURE dacost
END INTERFACE
INTERFACE dacos
MODULE PROCEDURE dacost
END INTERFACE
INTERFACE cosh
MODULE PROCEDURE dcosht
END INTERFACE
INTERFACE dcosh
MODULE PROCEDURE dcosht
END INTERFACE
INTERFACE sinh
MODULE PROCEDURE dsinht
END INTERFACE
INTERFACE dsinh
MODULE PROCEDURE dsinht
END INTERFACE
INTERFACE tanh
MODULE PROCEDURE dtanht
END INTERFACE
INTERFACE dtanh
MODULE PROCEDURE dtanht
END INTERFACE
! end Intrinsic function
! Non Intrinsic function
INTERFACE full_abs
MODULE PROCEDURE full_abst
END INTERFACE
INTERFACE morph
MODULE PROCEDURE polymorpht
END INTERFACE
INTERFACE SINHX_X
MODULE PROCEDURE SINH_HR
MODULE PROCEDURE SINHX_XT
END INTERFACE
INTERFACE SINX_X
MODULE PROCEDURE SIN_HR
MODULE PROCEDURE SINX_XT
END INTERFACE
! i/o
INTERFACE daprint
MODULE PROCEDURE printpoly !
MODULE PROCEDURE printdouble
MODULE PROCEDURE printsingle
END INTERFACE
INTERFACE print
MODULE PROCEDURE printpoly !
MODULE PROCEDURE printdouble
MODULE PROCEDURE printsingle
END INTERFACE
! constructors and destructors
INTERFACE alloc
MODULE PROCEDURE A_OPT !allocpoly !
MODULE PROCEDURE allocpolyn !
!radiation
MODULE PROCEDURE e_opt !
! MODULE PROCEDURE allocenv !
MODULE PROCEDURE allocenvn !
END INTERFACE
INTERFACE kill
MODULE PROCEDURE K_OPT !resetpoly0 !
MODULE PROCEDURE Ke_OPT !resetpoly0 !
MODULE PROCEDURE resetpolyn0 !
MODULE PROCEDURE resetpoly_R
MODULE PROCEDURE resetpoly_RN
!radiation
! MODULE PROCEDURE resetenv !
MODULE PROCEDURE resetenvn !
END INTERFACE
INTERFACE reset
MODULE PROCEDURE resetpoly !
MODULE PROCEDURE resetpolyn !
!radiation
MODULE PROCEDURE resetenv !
MODULE PROCEDURE resetenvn !
END INTERFACE
! Managing
INTERFACE ass
MODULE PROCEDURE assp
END INTERFACE
contains
subroutine make_it_knob(k,i,s)
implicit none
TYPE (real_8), intent(inout) :: k
real(dp), optional :: s
integer, intent(in) :: i
k%s=1.0_dp
if(present(s)) k%s=s
k%i=i
k%kind=3
end subroutine make_it_knob
subroutine kill_knob(k)
implicit none
TYPE (real_8), intent(inout) :: k
k%s=1.0_dp
k%i=0
k%kind=1
end subroutine kill_knob
FUNCTION polymorpht( S1 )
implicit none
TYPE (real_8) polymorpht
TYPE (taylor), INTENT (IN) :: S1
integer localmaster
localmaster=master
call ass(polymorpht)
polymorpht%t= s1
master=localmaster
END FUNCTION polymorpht
FUNCTION GETCHARnd2( S1, S2 )
implicit none
TYPE (real_8) GETCHARnd2
TYPE (real_8), INTENT (IN) :: S1
CHARACTER(*) , INTENT (IN) :: S2
integer localmaster
type(taylor) t
localmaster=master
call ass(GETCHARnd2)
call alloc(t)
t=s1
t=t.par.s2
GETCHARnd2%t=t
! GETCHARnd2%kind=m2
! if(s1%kind==m2) then
! GETCHARnd2%t=s1%t.par.s2
! else
! GETCHARnd2%t=zero
! endif
call kill(t)
master=localmaster
END FUNCTION GETCHARnd2
FUNCTION GETintnd2( S1, S2 )
implicit none
TYPE (real_8) GETintnd2
TYPE (real_8), INTENT (IN) :: S1
integer, INTENT (IN) :: S2(:)
integer localmaster
type(taylor) t
localmaster=master
call ass(GETintnd2)
call alloc(t)
t=s1
! if(s1%kind==m2) then
! GETintnd2%t=s1%t.par.s2
! else
! GETintnd2%kind=m2
! GETintnd2%t=zero
!
! endif
t=t.par.s2
GETintnd2%t=t
call kill(t)
master=localmaster
END FUNCTION GETintnd2
FUNCTION GETchar( S1, S2 )
implicit none
real(dp) GETchar
TYPE (real_8), INTENT (IN) :: S1
CHARACTER(*) , INTENT (IN) :: S2
! integer localmaster
GETchar=0.0_dp
if(s1%kind==m2) then
! GETchar%t=s1%t.sub.s2 ! OLD
GETchar=s1%t.sub.s2 ! CHANGE
endif
END FUNCTION GETchar
FUNCTION GETint( S1, S2 )
implicit none
real(dp) GETint
TYPE (real_8), INTENT (IN) :: S1
integer , INTENT (IN) :: S2(:)
integer i
GETint=0.0_dp
if(s1%kind==m2) then
GETint=s1%t.sub.s2 ! CHANGE
elseif(s1%kind==m1) then
!zgoubi
GETint=s1
do i=1,size(s2)
if(S2(i)/=0) then
GETint=0.0_dp
exit
endif
enddo
endif
END FUNCTION GETint
FUNCTION GETORDER( S1, S2 )
implicit none
TYPE (real_8) GETORDER
TYPE (real_8), INTENT (IN) :: S1
integer , INTENT (IN) :: S2
integer localmaster
localmaster=master
call ass(GETORDER)
if(s1%kind==m2) then
GETORDER%t=s1%t.sub.s2
else
GETORDER%kind=m1
GETORDER%r=0.0_dp
if(s2==0) GETORDER%r=s1%r
endif
master=localmaster
END FUNCTION GETORDER
FUNCTION CUTORDER( S1, S2 )
implicit none
TYPE (real_8) CUTORDER
TYPE (real_8), INTENT (IN) :: S1
integer , INTENT (IN) :: S2
integer localmaster
localmaster=master
call ass(CUTORDER)
CUTORDER=0.0_dp
if(s1%kind==m2) then
cutorder%kind=m2
CUTORDER%t=s1%t.CUT.s2
elseif(s1%kind==m1) then
if(s2>=1) CUTORDER%r=s1%r
cutorder%kind=m1
endif
master=localmaster
END FUNCTION CUTORDER
FUNCTION greatereq( S1, S2 )
implicit none
logical(lp) greatereq
TYPE (real_8), INTENT (IN) :: S1,S2
greatereq=.FALSE.
select case(s1%kind+ms*s2%kind)
case(m11)
IF(S1%r>=S2%r) greatereq=.TRUE.
case(m12,m21,m22)
select case(s1%kind+ms*s2%kind)
case(m21)
IF((S1%t.SUB.'0')>=S2%r) greatereq=.TRUE.
case(m12)
IF(S1%r>=(S2%t.SUB.'0')) greatereq=.TRUE.
case(m22)
IF((S1%t.SUB.'0')>=(S2%t.SUB.'0')) greatereq=.TRUE.
end select
case(m13,m31,m32,m23,m33)
select case(s1%kind+ms*s2%kind)
case(m31,m13,m33)
IF(S1%r>=S2%r) greatereq=.TRUE.
case(m32)
IF(S1%r>=(S2%t.SUB.'0')) greatereq=.TRUE.
case(m23)
IF((S1%t.SUB.'0')>=S2%r) greatereq=.TRUE.
end select
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in greatereq "
w_p%c(2)= "s1%kind ,s2%kind "
w_p=(/s1%kind ,s2%kind/)
! call !write_e(0)
end select
END FUNCTION greatereq
FUNCTION dgreatereqsc( S1, S2 )
implicit none
logical(lp) dgreatereqsc
TYPE (real_8), INTENT (IN) :: S1
real(dp), INTENT (IN) :: S2
dgreatereqsc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>=S2) dgreatereqsc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>=S2) dgreatereqsc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in dgreatereqsc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION dgreatereqsc
FUNCTION dscgreatereq( S2,S1 )
implicit none
logical(lp) dscgreatereq
TYPE (real_8), INTENT (IN) :: S1
real(dp), INTENT (IN) :: S2
dscgreatereq=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>=S1%r) dscgreatereq=.TRUE.
case(m2)
IF(S2>=(S1%t.SUB.'0')) dscgreatereq=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in dscgreatereq "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION dscgreatereq
FUNCTION greatereqsc( S1, S2 )
implicit none
logical(lp) greatereqsc
TYPE (real_8), INTENT (IN) :: S1
real(sp), INTENT (IN) :: S2
if(real_warning) call real_stop
greatereqsc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>=S2) greatereqsc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>=S2) greatereqsc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in greatereqsc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION greatereqsc
FUNCTION scgreatereq( S2,S1 )
implicit none
logical(lp) scgreatereq
TYPE (real_8), INTENT (IN) :: S1
real(sp), INTENT (IN) :: S2
if(real_warning) call real_stop
scgreatereq=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>=S1%r) scgreatereq=.TRUE.
case(m2)
IF(S2>=(S1%t.SUB.'0')) scgreatereq=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in scgreatereq "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION scgreatereq
FUNCTION igreatereqsc( S1, S2 )
implicit none
logical(lp) igreatereqsc
TYPE (real_8), INTENT (IN) :: S1
integer, INTENT (IN) :: S2
igreatereqsc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>=S2) igreatereqsc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>=S2) igreatereqsc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in igreatereqsc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION igreatereqsc
FUNCTION iscgreatereq( S2,S1 )
implicit none
logical(lp) iscgreatereq
TYPE (real_8), INTENT (IN) :: S1
integer, INTENT (IN) :: S2
iscgreatereq=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>=S1%r) iscgreatereq=.TRUE.
case(m2)
IF(S2>=(S1%t.SUB.'0')) iscgreatereq=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in iscgreatereq "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION iscgreatereq
FUNCTION greaterthan( S1, S2 )
implicit none
logical(lp) greaterthan
TYPE (real_8), INTENT (IN) :: S1,S2
greaterthan=.FALSE.
select case(s1%kind+ms*s2%kind)
case(m11)
IF(S1%r>S2%r) greaterthan=.TRUE.
case(m12,m21,m22)
select case(s1%kind+ms*s2%kind)
case(m21)
IF((S1%t.SUB.'0')>S2%r) greaterthan=.TRUE.
case(m12)
IF(S1%r>(S2%t.SUB.'0')) greaterthan=.TRUE.
case(m22)
IF((S1%t.SUB.'0')>(S2%t.SUB.'0')) greaterthan=.TRUE.
end select
case(m13,m31,m32,m23,m33)
select case(s1%kind+ms*s2%kind)
case(m31,m13,m33)
IF(S1%r>S2%r) greaterthan=.TRUE.
case(m32)
IF(S1%r>(S2%t.SUB.'0')) greaterthan=.TRUE.
case(m23)
IF((S1%t.SUB.'0')>S2%r) greaterthan=.TRUE.
end select
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in greaterthan "
w_p%c(2)= "s1%kind ,s2%kind "
w_p=(/s1%kind ,s2%kind/)
! call !write_e(0)
end select
END FUNCTION greaterthan
FUNCTION igreatersc( S1, S2 )
implicit none
logical(lp) igreatersc
TYPE (real_8), INTENT (IN) :: S1
integer, INTENT (IN) :: S2
igreatersc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>S2) igreatersc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>S2) igreatersc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in igreatersc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION igreatersc
FUNCTION iscgreater( S2,S1 )
implicit none
logical(lp) iscgreater
TYPE (real_8), INTENT (IN) :: S1
integer, INTENT (IN) :: S2
iscgreater=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>S1%r) iscgreater=.TRUE.
case(m2)
IF(S2>(S1%t.SUB.'0')) iscgreater=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in iscgreater "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION iscgreater
FUNCTION dgreatersc( S1, S2 )
implicit none
logical(lp) dgreatersc
TYPE (real_8), INTENT (IN) :: S1
real(dp), INTENT (IN) :: S2
dgreatersc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>S2) dgreatersc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>S2) dgreatersc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in dgreatersc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
end select
END FUNCTION dgreatersc
FUNCTION dscgreater( S2,S1 )
implicit none
integer ipause, mypause
logical(lp) dscgreater
TYPE (real_8), INTENT (IN) :: S1
real(dp), INTENT (IN) :: S2
dscgreater=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>S1%r) dscgreater=.TRUE.
case(m2)
IF(S2>(S1%t.SUB.'0')) dscgreater=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(1((1X,i4)))'
w_p%c(1)= " trouble in dscgreater "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind/)
! call !write_e(0)
ipause=mypause(0)
end select
END FUNCTION dscgreater
FUNCTION greatersc( S1, S2 )
implicit none
logical(lp) greatersc
TYPE (real_8), INTENT (IN) :: S1
real(sp), INTENT (IN) :: S2
if(real_warning) call real_stop
greatersc=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S1%r>S2) greatersc=.TRUE.
case(m2)
IF((S1%t.SUB.'0')>S2) greatersc=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in greatersc "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION greatersc
FUNCTION scgreater( S2,S1 )
implicit none
logical(lp) scgreater
TYPE (real_8), INTENT (IN) :: S1
real(sp), INTENT (IN) :: S2
if(real_warning) call real_stop
scgreater=.FALSE.
select case(s1%kind)
case(m1,m3)
IF(S2>S1%r) scgreater=.TRUE.
case(m2)
IF(S2>(S1%t.SUB.'0')) scgreater=.TRUE.
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in scgreater "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION scgreater
FUNCTION lessthan( S1, S2 )
implicit none
logical(lp) lessthan
TYPE (real_8), INTENT (IN) :: S1,S2
lessthan=.FALSE.
select case(s1%kind+ms*s2%kind)
case(m11)
IF(S1%r0) then
write(i,*) s2%r," +",s2%s," *x_",int(s2%i)
else
write(i,*) s2%r
endif
if(s2%alloc) then
write(line,'(a41)') " weird Taylor part should be deallocated "
ipause=mypauses(0,line)
endif
end select
else
line= "Warning not defined in Printpoly (real polymorph)"
ipause=mypauses(1,line)
endif
END SUBROUTINE printpoly
SUBROUTINE printdouble(S2,i)
implicit none
real(dp),INTENT(INOUT)::S2
integer i
write(i,*) s2
END SUBROUTINE printdouble
SUBROUTINE printsingle(S2,i)
implicit none
real(sp),INTENT(INOUT)::S2
integer i
write(i,*) s2
END SUBROUTINE printsingle
SUBROUTINE resetpoly(S2)
implicit none
type (real_8),INTENT(INOUT)::S2
if(s2%alloc) call killtpsa(s2%t)
s2%alloc=f
s2%kind=0
s2%r=0.0_dp
!s2%s=one
!s2%i=0
END SUBROUTINE resetpoly
SUBROUTINE resetpolyn(S2,K)
implicit none
type (real_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call resetpoly(s2(j))
enddo
END SUBROUTINE resetpolyn
SUBROUTINE resetpoly_R(S2,FL) ! STAYS REAL
implicit none
type (real_8),INTENT(INOUT)::S2
logical(lp),INTENT(IN)::FL
if(s2%alloc) call killtpsa(s2%t)
s2%alloc=f
s2%kind=1
s2%r=0.0_dp
IF(.NOT.FL) THEN
s2%i=0
s2%s=1.0_dp
ENDIF
END SUBROUTINE resetpoly_R
SUBROUTINE resetpoly_RN(S2,FL,K)
implicit none
type (real_8),INTENT(INOUT),dimension(:)::S2
logical(lp),INTENT(IN)::FL
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call resetpoly_R(s2(j),FL)
enddo
END SUBROUTINE resetpoly_RN
SUBROUTINE resetpoly_R31(S2) ! STAYS REAL FOR PTC
implicit none
integer ipause, mypauses
type (real_8),INTENT(INOUT)::S2
if(s2%kind==3) then
if(s2%alloc) then
line= "Allocated in resetpoly_R31"
ipause=mypauses(2,line)
endif
s2%kind=1
s2%i=0
s2%s=1.0_dp
ENDIF
END SUBROUTINE resetpoly_R31
SUBROUTINE resetpoly_R31N(S2,K)
implicit none
type (real_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call resetpoly_R31(s2(j))
enddo
END SUBROUTINE resetpoly_R31N
SUBROUTINE resetpoly0(S2)
implicit none
type (real_8),INTENT(INOUT)::S2
if(s2%alloc) call killtpsa(s2%t)
s2%alloc=f
s2%kind=0
s2%r=0.0_dp
s2%i=0
s2%s=1.0_dp
END SUBROUTINE resetpoly0
SUBROUTINE K_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10)
implicit none
type (real_8),INTENT(INout)::S1
type (real_8),optional, INTENT(INout):: S2,s3,s4,s5,s6,s7,s8,s9,s10
call resetpoly0(s1)
if(present(s2)) call resetpoly0(s2)
if(present(s3)) call resetpoly0(s3)
if(present(s4)) call resetpoly0(s4)
if(present(s5)) call resetpoly0(s5)
if(present(s6)) call resetpoly0(s6)
if(present(s7)) call resetpoly0(s7)
if(present(s8)) call resetpoly0(s8)
if(present(s9)) call resetpoly0(s9)
if(present(s10))call resetpoly0(s10)
END SUBROUTINE K_OPT
SUBROUTINE Ke_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10)
implicit none
type (env_8),INTENT(INout)::S1
type (env_8),optional, INTENT(INout):: S2,s3,s4,s5,s6,s7,s8,s9,s10
call resetenv(s1)
if(present(s2)) call resetenv(s2)
if(present(s3)) call resetenv(s3)
if(present(s4)) call resetenv(s4)
if(present(s5)) call resetenv(s5)
if(present(s6)) call resetenv(s6)
if(present(s7)) call resetenv(s7)
if(present(s8)) call resetenv(s8)
if(present(s9)) call resetenv(s9)
if(present(s10))call resetenv(s10)
END SUBROUTINE Ke_OPT
! SUBROUTINE kill_c(k)
! implicit none
! integer ipause, mypauses
! integer k
! call dallsta(exi) ! Etienne checking routine
! if(exi/=ent) then
! write(line,'(3(1x,i8))') ent,exi,k
! ipause=mypauses(1999,line)
! k=k*10000
! endif
! END SUBROUTINE kill_c
SUBROUTINE resetpolyn0(S2,K)
implicit none
type (real_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call resetpoly0(s2(j))
enddo
END SUBROUTINE resetpolyn0
SUBROUTINE allocpoly(S2)
implicit none
type (real_8),INTENT(INOUT)::S2
!if(s2%alloc) call killtpsa(s2%t) ADDED ETIENNE
s2%alloc=f
s2%kind=1
s2%r=0.0_dp
s2%i=0
s2%g=0
s2%nb=0
s2%s=1.0_dp
END SUBROUTINE allocpoly
SUBROUTINE A_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10)
implicit none
type (real_8),INTENT(INout)::S1
type (real_8),optional, INTENT(INout):: S2,s3,s4,s5,s6,s7,s8,s9,s10
call allocpoly(s1)
if(present(s2)) call allocpoly(s2)
if(present(s3)) call allocpoly(s3)
if(present(s4)) call allocpoly(s4)
if(present(s5)) call allocpoly(s5)
if(present(s6)) call allocpoly(s6)
if(present(s7)) call allocpoly(s7)
if(present(s8)) call allocpoly(s8)
if(present(s9)) call allocpoly(s9)
if(present(s10))call allocpoly(s10)
END SUBROUTINE A_opt
! SUBROUTINE alloc_c
! implicit none
! Etienne checking routine
! call dallsta(ent)
! END SUBROUTINE alloc_c
SUBROUTINE allocpolyn(S2,K)
implicit none
type (real_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call allocpoly(s2(j))
enddo
END SUBROUTINE allocpolyn
subroutine init_map_p(NO1,ND1,NP1,NDPT1,log)
implicit none
integer NO1,ND1,NP1,NDPT1
logical(lp) log
call init_map_c(NO1,ND1,NP1,NDPT1,log)
call set_in_polyp(log)
end subroutine init_map_p
subroutine init_tpsa_p(NO1,NP1,log)
implicit none
integer NO1,NP1
logical(lp) log
call init_tpsa_c(NO1,NP1,log)
call set_in_polyp(log)
end subroutine init_tpsa_p
subroutine set_in_polyp(log)
implicit none
logical(lp) log
integer iia(4),icoast(4)
call liepeek(iia,icoast)
old=log
NO=iia(1)
ND=iia(3)
ND2=iia(3)*2
NP=iia(2)-nd2
NDPT=icoast(4)
NV=iia(2)
! i_ =cmplx(zero,one,kind=dp)
end subroutine set_in_polyp
SUBROUTINE EQUAL2D(S2,S1)
implicit none
type (real_8),INTENT(inOUT)::S2(:,:)
type (real_8),INTENT(IN)::S1(:,:)
integer i,J,I1(2),I2(2)
I1(1)=LBOUND(S1,DIM=1)
I1(2)=LBOUND(S1,DIM=2)
I2(1)=LBOUND(S2,DIM=1)
I2(2)=LBOUND(S2,DIM=2)
do i=I1(1),UBOUND(S1,DIM=1)
do J=I1(2),UBOUND(S1,DIM=2)
S2(I-I1(1)+I2(1),J-I1(2)+I2(2))=S1(I,J)
ENDDO
ENDDO
end SUBROUTINE EQUAL2D
SUBROUTINE EQUAL1D(S2,S1)
implicit none
type (real_8),INTENT(inOUT)::S2(:)
type (real_8),INTENT(IN)::S1(:)
integer i,I1,I2
I1=LBOUND(S1,DIM=1)
I2=LBOUND(S2,DIM=1)
do i=I1,UBOUND(S1,DIM=1)
S2(I-I1+I2)=S1(I)
ENDDO
end SUBROUTINE EQUAL1D
SUBROUTINE EQUAL(S2,S1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
if(s1%kind==0) then
line= " You are putting kind=0 into something"
ipause=mypauses(10,line)
endif
if(s2%kind==3.and.(.not.setknob)) then
line= " You are putting something into a knob kind=3"
ipause=mypauses(11,line)
endif
if (s2%kind>0) then ! S2 exist
if(S2%kind==S1%kind) then
select case(S1%kind)
case(m1)
! localmaster=master ! added because of knob problems 2001.9.19
! call check_snake ! added because of knob problems 2001.9.19
! master=0
S2%R=S1%R
! master=localmaster ! added because of knob problems 2001.9.19
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2%t=S1%t
! master=localmaster
case(m3)
s2%r=S1%r ! Knob stays a knob and real stays real 2002.10.9
! line= " You are putting kind=3 (TPSA) into another kind=3"
! ipause=mypauses(13,line)
end select
elseif(S2%kind>S1%kind ) then
if(S1%kind/=2) then
s2%r=S1%r
if(s2%kind/=3) s2%kind=1 !Knob stays a knob and real stays real 2002.10.9
else
s2%r=S1%t.sub.'0' ! setting a kind=3
endif
else
select case(s1%kind)
case(m2)
if(.not.s2%alloc) then
call alloc(s2%t)
s2%alloc=t
endif
s2%kind=2
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2%t=S1%t
! master=localmaster
case(m3)
if(.not.s2%alloc) then
call alloc(s2%t)
s2%alloc=t
endif
s2%kind=2
! localmaster=master
call check_snake
! 2002.12.26 master=0
if(knob) then
call varfk1(S1)
S2%t=varf1
else
S2%R=S1%R
s2%kind=1
endif
! master=localmaster
end select
endif
else ! S2 does not exist
if(S1%kind==1) then ! what is s1
if(s2%i==0) then
S2%R=S1%R
s2%kind=1
elseif(s2%i>0.and.s2%i<=nv) then
call alloc(s2%t)
s2%t=(/S1%R,S2%S/).var.s2%i
! call var(s2%t,S1%R,S2%S,s2%i)
! s2%i=0
s2%kind=2
s2%alloc=t
else
write(6,*) "EQUAL IN m_POLYMORPH ",s2%i,S2%KIND,S2%ALLOC
WRITE(6,*) " I "
READ(5,*) s2%i
WRITE(6,*) SQRT(FLOAT(s2%i))
stop 777
endif
else
if(insane_PTC) then
if(.not.s2%alloc) then
call alloc(s2%t)
endif
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2%t=S1%t
! master=localmaster
s2%kind=2
s2%alloc=t
else
w_p=0
w_p%nc=5
w_p%fc='(4(1X,A72,/),(1X,A72))'
write(w_p%c(1),'(A23,I4,A19)') " You are putting kind= ", s1%kind," (TPSA) in a kind=0"
w_p%c(2)= " We do not allow that anymore for safety reasons"
w_p%c(3)= " If you insist on it, modify real_polymorph and complex_polymorph"
w_p%c(4)= " at your own insane risk "
w_p%c(5)= " Etienne Forest/Frank Schmidt"
! call !write_e(778)
w_p%nc=sqrt(-float(w_p%nc))
endif
endif ! end of what is s1
endif ! S2 does not exist
END SUBROUTINE EQUAL
SUBROUTINE complexreal_8(S2,S1)
implicit none
complex(dp) ,INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
select case(S1%kind)
case(m1)
S2=S1%R
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%t.sub.'0'
! master=localmaster
case(m3)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%r
! master=localmaster
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in complexreal_8 "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END SUBROUTINE complexreal_8
SUBROUTINE realEQUAL(S2,S1)
implicit none
real(dp),INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
select case(S1%kind)
case(m1)
S2=S1%R
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%t.sub.'0'
! master=localmaster
case(m3)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%r
! master=localmaster
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in realEQUAL "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END SUBROUTINE realEQUAL
SUBROUTINE singleEQUAL(S2,S1)
implicit none
real(sp),INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
select case(S1%kind)
case(m1)
S2=S1%R
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%t.sub.'0'
! master=localmaster
case(m3)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%r
! master=localmaster
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in realEQUAL "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END SUBROUTINE singleEQUAL
SUBROUTINE taylorEQUAL(S2,S1)
implicit none
type (taylor),INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
select case(S1%kind)
case(m1)
S2=S1%R
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%t
! master=localmaster
case(m3)
! localmaster=master
call check_snake
! 2002.12.26 master=0
if(knob) then
call varfk1(S1)
S2=varf1
else
S2=S1%R
endif
! master=localmaster
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in taylorEQUAL "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END SUBROUTINE taylorEQUAL
SUBROUTINE EQUALtaylor(S2,S1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
type (taylor),INTENT(IN)::S1
! integer localmaster
IF(S2%KIND==3.and.(.not.setknob)) THEN ! 2002.10.9
line= "Forbidden in EQUALtaylor: s2 is a knob "
ipause=mypauses(0,line)
ENDIF
! localmaster=master
call check_snake
! 2002.12.26 master=0
if(s2%kind/=3) then
if(.not.s2%alloc) then
call alloc(s2%t)
s2%alloc=t
endif
S2%t=S1
s2%KIND=2
else
s2%r=S1.sub.'0' ! 2002.10.9
endif
! master=localmaster
END SUBROUTINE EQUALtaylor
SUBROUTINE real_8univ(S2,S1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
type (universal_taylor),INTENT(IN)::S1
! integer localmaster
IF(S2%KIND==M3) THEN
line= "Forbidden in real_8univ: s2 is a knob "
ipause=mypauses(0,line)
ENDIF
! localmaster=master
! call check_snake
! 2002.12.26 master=0
if(.not.s2%alloc) then
call alloc(s2%t)
s2%alloc=t
endif
S2%t=S1
s2%KIND=2
! master=localmaster
END SUBROUTINE real_8univ
SUBROUTINE univreal_8(S2,S1) ! new sagan
implicit none
type (universal_taylor),INTENT(inOUT)::S2
type (real_8),INTENT(IN)::S1
! integer localmaster
select case(S1%kind)
case(m1)
S2=S1%R
case(m2)
! localmaster=master
call check_snake
! 2002.12.26 master=0
S2=S1%t
! master=localmaster
case(m3)
! localmaster=master
call check_snake
! 2002.12.26 master=0
if(knob) then
call varfk1(S1)
S2=varf1
else
S2=S1%R
endif
! master=localmaster
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in univreal_8 "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END SUBROUTINE univreal_8
SUBROUTINE Dequaldacon(S2,R1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
real(dp),INTENT(IN)::R1
IF(S2%KIND==M3) THEN
if(setknob) then
s2%r=r1
return
else
line= "Forbidden in Dequaldacon: s2 is a knob "
ipause=mypauses(0,line)
endif
ENDIF
!localmaster=master
! call check_snake
! master=0
if (s2%kind/=0) then ! S2 exist
if(S2%kind==1.or.s2%kind==3) then
S2%R=R1
else
! S2%t=R1
s2%r=r1
s2%kind=1
! call kill(s2%t)
! s2%alloc=f
endif
else ! S2 does not exist
if(s2%i==0) then
S2%R=R1
s2%kind=1
elseif(s2%i>0.and.s2%i<=nv) then
call alloc(s2%t)
s2%t=(/R1,s2%S/).var.s2%i
! call var(s2%t,R1,s2%S,s2%i)
! s2%i=0
s2%kind=2
s2%alloc=t
else
line= "trouble in Dequaldacon in Real_polymorph"
ipause=mypauses(-788,line)
endif
endif ! S2 not allocated
! master=localmaster
END SUBROUTINE Dequaldacon
SUBROUTINE iequaldaconn(S2,R1)
implicit none
type (real_8),INTENT(inOUT),dimension(:)::S2
integer,INTENT(IN)::R1
integer i
! integer localmaster
! localmaster=master
! call check_snake
! 2002.12.26 master=0
do i=1,r1
call resetpoly(s2(i))
s2(i)%i=i
enddo
! master=localmaster
END SUBROUTINE iequaldaconn
SUBROUTINE equaldacon(S2,R1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
real(sp),INTENT(IN)::R1
if(real_warning) call real_stop
IF(S2%KIND==M3) THEN
if(setknob) then
s2%r=REAL(R1,kind=DP)
return
else
line= "Forbidden in equaldacon: s2 is a knob "
ipause=mypauses(0,line)
endif
ENDIF
!localmaster=master
! call check_snake
! master=0
if (s2%kind/=0) then ! S2 exist
if(S2%kind==1.or.s2%kind==3) then
S2%R=REAL(R1,kind=DP)
else
! S2%t=REAL(R1,kind=DP)
! S2%t=R1
s2%r=REAL(R1,kind=DP)
s2%kind=1
! call kill(s2%t)
! s2%alloc=f
endif
else ! S2 does not exist
if(s2%i==0) then
S2%R=REAL(R1,kind=DP)
s2%kind=1
elseif(s2%i>0.and.s2%i<=nv) then
call alloc(s2%t)
s2%t=(/REAL(R1,kind=DP),S2%S/).var.s2%i
! call var(s2%t,REAL(R1,kind=DP),S2%S,s2%i)
! s2%i=0
s2%kind=2
s2%alloc=t
else
stop 779
endif
endif ! S2 not allocated
! master=localmaster
END SUBROUTINE equaldacon
SUBROUTINE iequaldacon(S2,R1)
implicit none
integer ipause, mypauses
type (real_8),INTENT(inOUT)::S2
integer,INTENT(IN)::R1
IF(S2%KIND==M3) THEN
if(setknob) then
s2%r=r1
return
else
line= "Forbidden in iequaldacon: s2 is a knob "
ipause=mypauses(0,line)
endif
ENDIF
!localmaster=master
! call check_snake
! master=0
if (s2%kind/=0) then ! S2 exist
if(S2%kind==1.or.s2%kind==3) then
S2%R=REAL(R1,kind=DP)
else
! S2%t=REAL(R1,kind=DP)
s2%r=REAL(R1,kind=DP)
s2%kind=1
! call kill(s2%t)
! s2%alloc=f
endif
else ! S2 does not exist
if(s2%i==0) then
S2%R=REAL(R1,kind=DP)
s2%kind=1
elseif(s2%i>0.and.s2%i<=nv) then
call alloc(s2%t)
s2%t=(/REAL(R1,kind=DP),S2%S/).var.s2%i
! call var(s2%t,REAL(R1,kind=DP),S2%S,s2%i)
! s2%i=0
s2%kind=2
s2%alloc=t
else
stop 776
endif
endif ! S2 not allocated
! master=localmaster
END SUBROUTINE iequaldacon
subroutine assp(s1)
implicit none
TYPE (real_8) s1
integer ipause,mypauses
! lastmaster=master ! 2002.12.13
select case(master)
case(0:ndumt-1)
master=master+1
case(ndumt)
line= " cannot indent anymore "
ipause=mypauses(0,line)
end select
! write(26,*) " real polymorph ",master
call ass0(s1%t)
s1%alloc=t
s1%kind=2
s1%i=0
end subroutine ASSp
subroutine assp_no_master(s1)
implicit none
TYPE (real_8) s1
call ass0(s1%t)
s1%alloc=t
s1%kind=1
s1%i=0
end subroutine assp_no_master
subroutine assp_master(s1)
implicit none
TYPE (real_8) s1
integer ipause,mypauses
! lastmaster=master ! 2002.12.13
select case(master)
case(0:ndumt-1)
master=master+1
case(ndumt)
line= " cannot indent anymore "
ipause=mypauses(0,line)
end select
! write(26,*) " real polymorph ",master
call ass0(s1%t)
s1%alloc=t
s1%kind=1
s1%i=0
end subroutine assp_master
! complex
FUNCTION datant( S1 )
implicit none
TYPE (real_8) datant
TYPE (real_8), INTENT (IN) :: S1
TYPE (complextaylor) w
integer localmaster
select case(s1%kind)
case(m1)
datant%r=atan(s1%r)
datant%kind=1
case(m2)
localmaster=master
call ass(datant)
call alloc(w)
w%r=s1%t
w= atan(w)
datant%t=w%r
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(datant)
call alloc(w)
call varfk1(S1)
w%r=varf1
w= atan(w)
datant%t=w%r
call kill(w)
master=localmaster
else
datant%r=atan(s1%r)
datant%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in datant "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION datant
FUNCTION datanht( S1 )
implicit none
TYPE (real_8) datanht
TYPE (real_8), INTENT (IN) :: S1
integer localmaster
select case(s1%kind)
case(m1)
datanht%r=log((1+s1%r)/(1-s1%r))/2.0_dp
datanht%kind=1
case(m2)
localmaster=master
call ass(datanht)
datanht%t=atanh(s1%t)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(datanht)
call varfk1(S1)
datanht%t=atanh(varf1)
master=localmaster
else
datanht%r=log((1+s1%r)/sqrt(1-s1%r))/2.0_dp
datanht%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in datant "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION datanht
FUNCTION datanDt( S1 )
implicit none
TYPE (real_8) datanDt
TYPE (real_8), INTENT (IN) :: S1
TYPE (complextaylor) w
integer localmaster
select case(s1%kind)
case(m1)
datanDt%r=atan(s1%r)*RAD_TO_DEG_
datanDt%kind=1
case(m2)
localmaster=master
call ass(datanDt)
call alloc(w)
w%r=s1%t
w= atan(w)
datanDt%t=w%r*RAD_TO_DEG_
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(datanDt)
call alloc(w)
call varfk1(S1)
w%r=varf1
w= atan(w)
datanDt%t=w%r*RAD_TO_DEG_
call kill(w)
master=localmaster
else
datanDt%r=atan(s1%r)*RAD_TO_DEG_
datanDt%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in datanDt "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION datanDt
FUNCTION absoftdatanDr( S1 )
implicit none
real(dp) absoftdatanDr
real(dp), INTENT (IN) :: S1
absoftdatanDr=atan(s1)*RAD_TO_DEG_
END FUNCTION absoftdatanDr
FUNCTION datan2t( S2,S1 )
implicit none
integer ipause, mypauses
TYPE (real_8) datan2t
TYPE (real_8), INTENT (IN) :: S2,S1
TYPE (complextaylor) w
real(dp) ANG
integer localmaster ,si
si=1.0_dp
if(s2%kind==0.or.S1%kind==0) then
line= " Problems in datan2t "
ipause=mypauses(0,line)
endif
if(S2%kind==S1%kind) then ! 1
select case(S1%kind)
case(m1)
DATAN2T%R=ATAN2(S2%R,S1%R)
datan2t%kind=1
case(m2)
localmaster=master
call ass(datan2t)
call alloc(w)
ANG=ATAN2(S2%T.SUB.'0',S1%T.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%t/s1%t
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else
if((s2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%t**2+s1%t**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif
call kill(w)
master=localmaster
case(m3)
localmaster=master
if(knob) then !knob 1
call ass(datan2t)
call alloc(w)
call varfk1(S1)
call varfk2(S2)
ANG=ATAN2(varf2.SUB.'0',varf1.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=varf2/varf1
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(varf2**2+varf1**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif
call kill(w)
else !knob 1
DATAN2T%R=ATAN2(S2%R,S1%R)
datan2t%kind=1
endif !knob 1
master=localmaster
end select
elseif(S2%kind>S1%kind) then !1
localmaster=master
! call ass(datan2t)
call alloc(w)
if(s2%kind==2) then !
call ass(datan2t)
ANG=ATAN2(S2%T.SUB.'0',S1%R)
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%t/s1%r
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else
if((s2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%t**2+s1%r**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif
else !
if(knob) then ! knob
call ass(datan2t)
call varfk2(S2)
if(s1%kind==1) then !!
ANG=ATAN2(varf2.SUB.'0',S1%R)
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=varf2/s1%r
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%R/SQRT(varf2**2+s1%R**2) ! etienne error here????
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
else !!
ANG=ATAN2(varf2.SUB.'0',S1%t.sub.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=varf2/s1%t
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(varf2**2+s1%t**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
endif !!
else ! knob
if(s1%kind==1) then !!
DATAN2T%R=ATAN2(S2%R,S1%R)
datan2t%kind=1
else !!
call ass(datan2t)
ANG=ATAN2(S2%R,S1%t.sub.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=S2%R/s1%t
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if((S2%R)<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(S2%R**2+s1%t**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
endif !!
endif ! knob
endif !
call kill(w)
master=localmaster
ELSE ! 1
localmaster=master
! call ass(datan2t)
call alloc(w)
if(s1%kind==2) then !
call ass(datan2t)
ANG=ATAN2(S2%R,S1%T.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%r/s1%t
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else
if(s2%r<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%r**2+s1%t**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif
else !
IF(KNOB) THEN ! KNOB 2
call ass(datan2t)
if(s2%kind==1) then !!
call varfk1(S1)
ANG=ATAN2(S2%R,varf1.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=s2%r/varf1
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if(s2%r<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(s2%r**2+varf1**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
else !! s2%kind ==2
call varfk1(S1)
ANG=ATAN2(S2%t.sub.'0',varf1.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=s2%t/varf1
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if((S2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(s2%t**2+varf1**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
endif !!
ELSE !KNOB 2
if(s2%kind==1) then !!
DATAN2T%R=ATAN2(S2%R,S1%R)
datan2t%kind=1
else !! s2%kind ==2
call ass(datan2t)
ANG=ATAN2(S2%t.sub.'0',S1%r)
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=s2%t/S1%r
w=atan(w)
datan2t%t=w%r
datan2t%t=datan2t%t-(datan2t%t.SUB.'0')+ ANG
else !!!
if((S2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=S1%r/SQRT(s2%t**2+S1%r**2)
w=acos(w)
datan2t%t=w%r
datan2t%t=si*(datan2t%t-(datan2t%t.SUB.'0'))+ ANG
endif !!!
endif !!
ENDIF ! KNOB 2
endif !
call kill(w)
master=localmaster
endif
END FUNCTION datan2t
FUNCTION datan2dt( S2,S1 )
implicit none
integer ipause, mypauses
TYPE (real_8) datan2dt
TYPE (real_8), INTENT (IN) :: S2,S1
TYPE (complextaylor) w
real(dp) ANG
integer localmaster ,si
si=1.0_dp
if(s2%kind==0.or.S1%kind==0) then
line= " Problems in datand2t "
ipause=mypauses(0,line)
endif
if(S2%kind==S1%kind) then
select case(S1%kind)
case(m1)
datan2dt%R=ATAN2(S2%R,S1%R)*RAD_TO_DEG_
datan2dt%kind=1
case(m2)
localmaster=master
call ass(datan2dt)
call alloc(w)
ANG=ATAN2(S2%T.SUB.'0',S1%T.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%t/s1%t
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if((s2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%t**2+s1%t**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
call kill(w)
master=localmaster
case(m3)
localmaster=master
if(knob) then ! knob 1
call ass(datan2dt)
call alloc(w)
call varfk1(S1)
call varfk2(S2)
ANG=ATAN2(varf2.SUB.'0',varf1.SUB.'0') !etienne
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=varf2/varf1
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(varf2**2+varf1**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
call kill(w)
else ! knob 1
datan2dt%R=ATAN2(S2%R,S1%R)*RAD_TO_DEG_
datan2dt%kind=1
endif ! knob 1
master=localmaster
end select
elseif(S2%kind>S1%kind) then
localmaster=master
! call ass(datan2dt)
call alloc(w)
if(s2%kind==2) then !
call ass(datan2dt)
ANG=ATAN2(S2%T.SUB.'0',S1%R)
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%t/s1%r
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if((s2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%t**2+s1%r**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
else !
if(knob) then !knob 2
call ass(datan2dt)
call varfk2(S2)
if(s1%kind==1) then !!
ANG=ATAN2(varf2.SUB.'0',S1%R)
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=varf2/s1%r
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else !!!
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(varf2**2+s1%t**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif !!!
else !!
ANG=ATAN2(varf2.SUB.'0',S1%t.sub.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=varf2/s1%t
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else !!!
if((varf2.sub.'0')<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(varf2**2+s1%t**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif !!!
endif !!
else !knob 2
if(s1%kind==1) then !!
datan2dt%R=ATAN2(S2%R,S1%R)*RAD_TO_DEG_
datan2dt%kind=1
else !!
call ass(datan2dt)
ANG=ATAN2(S2%R,S1%t.sub.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then !!!
w%r=S2%R/s1%t
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else !!!
if((S2%R)<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(S2%R**2+s1%t**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif !!!
endif !!
endif !knob 2
endif !
call kill(w)
master=localmaster
ELSE !1
localmaster=master
! call ass(datan2dt)
call alloc(w)
if(s1%kind==2) then !
call ass(datan2dt)
ANG=ATAN2(S2%R,S1%T.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%r/s1%t
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if(s2%r<0.0_dp) si=-1.0_dp
w%r=s1%t/SQRT(s2%r**2+s1%t**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
else !
if(knob) then ! knob 3
call ass(datan2dt)
if(s2%kind==1) then !!
call varfk1(S1)
ANG=ATAN2(S2%R,varf1.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%r/varf1
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if(s2%r<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(s2%r**2+varf1**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
else !! s2%kind ==2
call varfk1(S1)
ANG=ATAN2(S2%t.sub.'0',varf1.SUB.'0')
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%T/varf1
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if((S2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=varf1/SQRT(s2%T**2+varf1**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
endif !!
else ! knob 3
if(s2%kind==1) then !!
datan2dt%R=ATAN2(S2%R,S1%R)*RAD_TO_DEG_
datan2dt%kind=1
else !! s2%kind ==2
call ass(datan2dt)
ANG=ATAN2(S2%t.sub.'0',S1%r)
if(pil>abs(ANG).or.abs(ANG)>pim) then
w%r=s2%T/S1%r
w=atan(w)
datan2dt%t=w%r
datan2dt%t=datan2dt%t-(datan2dt%t.SUB.'0')+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
else
if((S2%t.sub.'0')<0.0_dp) si=-1.0_dp
w%r=S1%r/SQRT(s2%T**2+S1%r**2)
w=acos(w)
datan2dt%t=w%r
datan2dt%t=si*(datan2dt%t-(datan2dt%t.SUB.'0'))+ ANG
datan2dt%t=datan2dt%t*RAD_TO_DEG_
endif
endif !!
endif ! knob 3
endif !
call kill(w)
master=localmaster
endif
END FUNCTION datan2dt
FUNCTION absoftdatan2dr( S2,S1 )
implicit none
real(dp) absoftdatan2dr
real(dp), INTENT (IN) :: S2,S1
absoftdatan2dr=ATAN2(S2,S1)*RAD_TO_DEG_
END FUNCTION absoftdatan2dr
FUNCTION dasint( S1 )
implicit none
TYPE (real_8) dasint
TYPE (real_8), INTENT (IN) :: S1
TYPE (taylor) w
integer localmaster
select case(s1%kind)
case(m1)
dasint%r=arcsin(s1%r)
! dasint%r=asin(s1%r)
dasint%kind=1
case(m2)
localmaster=master
call ass(dasint)
call alloc(w)
w=s1%t
w= asin(w)
dasint%t=w
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(dasint)
call alloc(w)
call varfk1(S1)
w=varf1
w= asin(w)
dasint%t=w
call kill(w)
master=localmaster
else
dasint%r=asin(s1%r)
dasint%kind=1
endif
! call unvarkind3(S1)
end select
END FUNCTION dasint
FUNCTION dacost( S1 )
implicit none
TYPE (real_8) dacost
TYPE (real_8), INTENT (IN) :: S1
TYPE (taylor) w
integer localmaster
select case(s1%kind)
case(m1)
dacost%r=arccos(s1%r)
dacost%kind=1
case(m2)
localmaster=master
call ass(dacost)
call alloc(w)
w=s1%t
w= acos(w)
dacost%t=w
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(dacost)
call alloc(w)
call varfk1(S1)
w=varf1
w= acos(w)
dacost%t=w
call kill(w)
master=localmaster
else
dacost%r=acos(s1%r)
dacost%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in dacost "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION dacost
FUNCTION dcosht( S1 )
implicit none
TYPE (real_8) dcosht
TYPE (real_8), INTENT (IN) :: S1
TYPE (complextaylor) w
integer localmaster
select case(s1%kind)
case(m1)
dcosht%r=cosh(s1%r)
dcosht%kind=1
case(m2)
localmaster=master
call ass(dcosht)
call alloc(w)
w%r=s1%t
w= cosh(w)
dcosht%t=w%r
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(dcosht)
call alloc(w)
call varfk1(S1)
w%r=varf1
w= cosh(w)
dcosht%t=w%r
call kill(w)
master=localmaster
else
dcosht%r=cosh(s1%r)
dcosht%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in dcosht "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION dcosht
FUNCTION dsinht( S1 )
implicit none
TYPE (real_8) dsinht
TYPE (real_8), INTENT (IN) :: S1
TYPE (complextaylor) w
integer localmaster
select case(s1%kind)
case(m1)
dsinht%r=sinh(s1%r)
dsinht%kind=1
case(m2)
localmaster=master
call ass(dsinht)
call alloc(w)
w%r=s1%t
w= sinh(w)
dsinht%t=w%r
call kill(w)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(dsinht)
call alloc(w)
call varfk1(S1)
w%r=varf1
w= sinh(w)
dsinht%t=w%r
call kill(w)
master=localmaster
else
dsinht%r=sinh(s1%r)
dsinht%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in dsinht "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION dsinht
FUNCTION dtanht( S1 )
implicit none
TYPE (real_8) dtanht
TYPE (real_8), INTENT (IN) :: S1
integer localmaster
select case(s1%kind)
case(m1)
dtanht%r=tanh(s1%r)
dtanht%kind=1
case(m2)
localmaster=master
call ass(dtanht)
dtanht%t=tanh(s1%t)
master=localmaster
case(m3)
if(knob) then
localmaster=master
call ass(dtanht)
call varfk1(S1)
dtanht%t=tanh(varf1)
master=localmaster
else
dtanht%r=tanh(s1%r)
dtanht%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in dtanht "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION dtanht
SUBROUTINE MAPreal_8(S2,S1)
implicit none
type (damap),INTENT(inout)::S2
type (real_8),INTENT(IN),dimension(:)::S1
integer i
call check_snake
do i=1,nd2
s2%v(i)=s1(i) !%t
enddo
END SUBROUTINE MAPreal_8
SUBROUTINE normal_p(S2,S1)
implicit none
type (normalform),INTENT(inOUT)::S2
type (real_8),INTENT(IN),dimension(:)::S1
type (damap) t
integer i
call alloc(t)
call check_snake
do i=1,nd2
t%v(i)=s1(i) !%t
enddo
s2=t
call kill(t)
END SUBROUTINE normal_p
SUBROUTINE real_8MAP(S1,S2)
implicit none
type (damap),INTENT(in)::S2
type (real_8),INTENT(inout),dimension(:)::S1
integer i
call check_snake
do i=1,nd2
s1(i)=s2%v(i)
enddo
END SUBROUTINE real_8MAP
! radiation
SUBROUTINE ENVreal_8(S2,S1)
implicit none
type (ENV_8),INTENT(inout),dimension(:)::S2
type (real_8),INTENT(IN),dimension(:)::S1
integer i
call check_snake
do i=1,nd2
s2(i)%v=s1(i) !%t
enddo
END SUBROUTINE ENVreal_8
SUBROUTINE real_8ENV(S1,S2)
implicit none
type (ENV_8),INTENT(in),dimension(:)::S2
type (real_8),INTENT(inout),dimension(:)::S1
integer i
call check_snake
do i=1,nd2
s1(i)=s2(i)%v
enddo
END SUBROUTINE real_8ENV
SUBROUTINE ENV_8RADTAYLOR(S2,S1)
implicit none
type (ENV_8),INTENT(inout),dimension(:)::S2
type (RADTAYLOR),INTENT(IN),dimension(:)::S1
integer i,J
call check_snake
do i=1,nd2
s2(i)%v=s1(i)%V !%t
enddo
do i=1,nd2
do J=1,nd2
s2(i)%E(J)=s1(i)%E(J) !%t
enddo
enddo
END SUBROUTINE ENV_8RADTAYLOR
SUBROUTINE RADTAYLORENV_8(S1,S2)
implicit none
type (ENV_8),INTENT(in),dimension(:)::S2
type (RADTAYLOR),INTENT(inout),dimension(:)::S1
integer i,J
call check_snake
do i=1,nd2
s1(i)%V= s2(i)%v !%t
enddo
do i=1,nd2
do J=1,nd2
s1(i)%E(J)=s2(i)%E(J) !%t
enddo
enddo
END SUBROUTINE RADTAYLORENV_8
SUBROUTINE RADTAYLORprobe_8(S1,S2)
implicit none
type (probe_8),INTENT(in) ::S2
type (RADTAYLOR),INTENT(inout),dimension(:)::S1
integer i,J
call check_snake
do i=1,nd2
s1(i)%V= s2%X(I) !%t
enddo
do i=1,nd2
do J=1,nd2
s1(i)%E(J)=s2%E_IJ(i,J) !%t
enddo
enddo
END SUBROUTINE RADTAYLORprobe_8
SUBROUTINE beamprobe_8(S2,Sprobe_8)
implicit none
type (beamenvelope),INTENT(inout)::S2
type (radtaylor) S1(ndim2)
type (probe_8),INTENT(IN)::Sprobe_8
call alloc(s1,nd2)
call check_snake
S1=Sprobe_8
s2=s1
call kill(s1,nd2)
END SUBROUTINE beamprobe_8
SUBROUTINE resetenv(S2)
implicit none
type (env_8),INTENT(INOUT)::S2
integer i
call resetpoly(s2%v)
do i=1,nd2
call resetpoly(s2%e(i))
call resetpoly(s2%sigma0(i))
call resetpoly(s2%sigmaf(i))
enddo
END SUBROUTINE resetenv
SUBROUTINE allocenv(S2)
implicit none
type (env_8),INTENT(INOUT)::S2
integer i
call alloc(s2%v)
do i=1,nd2
call alloc(s2%e(i))
call alloc(s2%sigma0(i))
call alloc(s2%sigmaf(i))
enddo
END SUBROUTINE allocenv
SUBROUTINE allocenvn(S2,K)
implicit none
type (env_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call allocenv(s2(j))
enddo
END SUBROUTINE allocenvn
SUBROUTINE e_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10)
implicit none
type (env_8),INTENT(INout)::S1
type (env_8),optional, INTENT(INout):: S2,s3,s4,s5,s6,s7,s8,s9,s10
call allocenv(s1)
if(present(s2)) call allocenv(s2)
if(present(s3)) call allocenv(s3)
if(present(s4)) call allocenv(s4)
if(present(s5)) call allocenv(s5)
if(present(s6)) call allocenv(s6)
if(present(s7)) call allocenv(s7)
if(present(s8)) call allocenv(s8)
if(present(s9)) call allocenv(s9)
if(present(s10))call allocenv(s10)
END SUBROUTINE e_opt
! SUBROUTINE allocenvn(S2,n)
! implicit none
! type (env_8),INTENT(INOUT),dimension(:)::S2
! integer, INTENT(IN)::n
! integer i
!
! do i=1,n
! call allocenv(s2(i))
! enddo
! END SUBROUTINE allocenvn
SUBROUTINE resetenvn(S2,K)
implicit none
type (env_8),INTENT(INOUT),dimension(:)::S2
INTEGER,optional,INTENT(IN)::k
INTEGER J,i,N
if(present(k)) then
I=LBOUND(S2,DIM=1)
N=LBOUND(S2,DIM=1)+K-1
else
I=LBOUND(S2,DIM=1)
N=UBOUND(S2,DIM=1)
endif
DO J=I,N
call resetenv(s2(j))
enddo
END SUBROUTINE resetenvn
! SUBROUTINE resetenvn(S2,n)
! implicit none
! type (env_8),INTENT(INOUT),dimension(:)::S2
! integer, INTENT(IN)::n
! integer i
!
! do i=1,n
! call resetenv(s2(i))
! enddo
!
!
! END SUBROUTINE resetenvn
SUBROUTINE beamENV_8(S2,SENV_8)
implicit none
type (beamenvelope),INTENT(inout)::S2
type (radtaylor) S1(ndim2)
! type (ENV_8),INTENT(IN)::SENV_8(ndim2)
type (ENV_8),INTENT(IN)::SENV_8(6)
call alloc(s1,nd2)
call check_snake
S1=SENV_8
s2=s1
call kill(s1,nd2)
END SUBROUTINE beamENV_8
SUBROUTINE varfk1(S2)
implicit none
! type (real_8),INTENT(INOUT)::S2
type (real_8),INTENT(IN):: S2
if(knob) then
if(nb_==0) then
varf1=(/S2%R,S2%S/).var.(s2%i+npara_fpp)
elseif(s2%nb==nb_) then
varf1=(/S2%R,S2%S/).var.(s2%i+npara_fpp-s2%g+1)
else
varf1=S2%R
endif
else ! Not a knob
stop 333
varf1=(/S2%R,0.0_dp/).var.0 ! this is a buggy line never used
endif
end SUBROUTINE varfk1
SUBROUTINE varfk2(S2)
implicit none
! type (real_8),INTENT(INOUT)::S2
type (real_8),INTENT(IN):: S2
if(knob) then
if(nb_==0) then
varf2=(/S2%R,S2%S/).var.(s2%i+npara_fpp)
elseif(s2%nb==nb_) then
varf2=(/S2%R,S2%S/).var.(s2%i+npara_fpp-s2%g+1)
else
varf2=S2%R
endif
else ! Not a knob
stop 334
varf2=(/S2%R,0.0_dp/).var.0 ! this is a buggy line never used
endif
end SUBROUTINE varfk2
! SINH(X)/X DONE partly COSY-INFINITY WISE FOR TPSA
function SINH_HR(X)
implicit none
real(dp), INTENT (IN) :: X
real(dp) SINH_HR,Y,NORM0,NORM,SINH_HR0
logical(lp) NOTDONE,CHECK
INTEGER I,ipause,mypauses
if(abs(x)=NORM0) THEN
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SINH_HR=SINH_HR0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SINH_HR"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SINH_HR=SINH(X)/X
endif
return
end function SINH_HR
! SIN(X)/X DONE partly COSY-INFINITY WISE FOR TPSA
function SIN_HR(X)
implicit none
real(dp), INTENT (IN) :: X
real(dp) SIN_HR,Y,NORM0,NORM,SINH_HR0
logical(lp) NOTDONE,CHECK
INTEGER I,ipause,mypauses
if(abs(x)=NORM0) THEN
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SIN_HR=SINH_HR0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SINH_HR"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SIN_HR=SIN(X)/X
endif
return
end function SIN_HR
FUNCTION sinX_Xt( S1 )
implicit none
integer ipause, mypauses
TYPE (real_8) sinX_Xt
TYPE (real_8), INTENT (IN) :: S1
integer localmaster
TYPE(TAYLOR)SIN_HP
TYPE(TAYLOR)Y,SINH_HP0
real(dp) NORM0,NORM
logical(lp) NOTDONE,CHECK
INTEGER I
select case(s1%kind)
case(m1)
sinX_Xt%r=SIN_HR(s1%r)
sinX_Xt%kind=1
case(m2)
CALL ALLOC(SIN_HP); CALL ALLOC(Y); CALL ALLOC(SINH_HP0);
localmaster=master
call ass(sinX_Xt)
if(ABS(S1%T.SUB.'0')=NORM0.and.(.not.check)) THEN ! sagan
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SIN_HP=SINH_HP0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SIN_HP"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SIN_HP=SIN(S1%T)/S1%T
endif
sinX_Xt%t= SIN_HP
master=localmaster
CALL KILL(SIN_HP); CALL KILL(Y); CALL KILL(SINH_HP0);
case(m3)
if(knob) then
localmaster=master
call ass(sinX_Xt)
call varfk1(S1)
if(ABS(varf1.SUB.'0')=NORM0.and.(.not.check)) THEN ! sagan
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SIN_HP=SINH_HP0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SINH_HP"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SIN_HP=SIN(varf1)/varf1
endif
sinX_Xt%t= SIN_HP
master=localmaster
else
sinX_Xt%r= SIN_HR(S1%r)
sinX_Xt%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in sinX_XT "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION sinX_XT
FUNCTION sinHX_Xt( S1 )
implicit none
integer ipause, mypauses
TYPE (real_8) sinHX_Xt
TYPE (real_8), INTENT (IN) :: S1
integer localmaster
TYPE(TAYLOR)SIN_HP
TYPE(TAYLOR)Y,SINH_HP0
real(dp) NORM0,NORM
logical(lp) NOTDONE,CHECK
INTEGER I
select case(s1%kind)
case(m1)
sinHX_Xt%r=SINH_HR(s1%r)
sinHX_Xt%kind=1
case(m2)
CALL ALLOC(SIN_HP); CALL ALLOC(Y); CALL ALLOC(SINH_HP0);
localmaster=master
call ass(sinHX_Xt)
if(ABS(S1%T.SUB.'0')=NORM0.and.(.not.check)) THEN ! sagan
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SIN_HP=SINH_HP0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SINH_HP"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SIN_HP=SINH(S1%T)/S1%T
endif
sinHX_Xt%t= SIN_HP
master=localmaster
CALL KILL(SIN_HP); CALL KILL(Y); CALL KILL(SINH_HP0);
case(m3)
if(knob) then
localmaster=master
call ass(sinHX_Xt)
call varfk1(S1)
if(ABS(varf1.SUB.'0')=NORM0.and.(.not.check)) THEN ! sagan
NOTDONE=.FALSE.
ELSE
NORM0=NORM
ENDIF
ENDIF
SIN_HP=SINH_HP0
I=I+2
ENDDO
IF(I==NMAX_pol) THEN
line="NO CONVERGENCE IN SINH_HP"
ipause=mypauses(NMAX_pol,line)
ENDIF
else
SIN_HP=SINH(varf1)/varf1
endif
sinHX_Xt%t= SIN_HP
master=localmaster
else
sinHX_Xt%r= SINH_HR(S1%r)
sinHX_Xt%kind=1
endif
case default
w_p=0
w_p%nc=2
w_p%fc='((1X,A72,/,1x,a72))'
w_p%fi='(2((1X,i4)))'
w_p%c(1)= " trouble in sinHX_Xt "
w_p%c(2)= "s1%kind "
w_p=(/s1%kind /)
! call !write_e(0)
end select
END FUNCTION sinHX_Xt
! remove small numbers
SUBROUTINE clean_real_8(S1,S2,prec)
implicit none
type (real_8),INTENT(INOUT)::S2
type (real_8), intent(INOUT):: s1
real(dp) prec
integer i
type(real_8) t
call alloc(t)
t=s1
select case(s1%kind)
case(m1)
if(abs(t%r)