!The Full Polymorphic Package !Copyright (C) Etienne Forest module complex_taylor use tpsalie_analysis implicit none public private mul,cscmul,cmulsc,dscmul,dmulsc,mulsc,scmul,imulsc,iscmul private ctmul, cmult,ctadd,caddt,ctsub,csubt,ctdiv,cdivt private add,cscadd,dscadd,caddsc,daddsc,unaryADD,addsc,scadd,iaddsc,iscadd private tadd,addt,tmul,mult,tsub,subt,tdiv,divt private inv,div,dscdiv,cscdiv,cdivsc,ddivsc,divsc,scdiv,idivsc,iscdiv private subs,cscsub,dscsub,csubsc,dsubsc,iscsub,isubsc,scsub,subsc,unarySUB private EQUAL,cequaldacon,Dequaldacon,equaldacon,Iequaldacon,ctEQUAL,tcEQUAL private pow,powr,POWR8 !,DAABSEQUAL,AABSEQUAL 2002.10.17 private alloccomplex,A_OPT,K_OPT !,printcomplex ,killcomplex private logtpsat,exptpsat,abstpsat,dcost,dsint,datant,tant,dasint,dacost private dcosht,dsinht,dtanht,dsqrtt private getdiff,getdATRA,GETORDER,CUTORDER,getchar ,dputchar,dputint private set_in_complex !, assc !check, private dimagt,drealt,dcmplxt,CEQUAL,DEQUAL,REQUAL private GETCHARnd2,GETintnd2,GETint,getcharnd2s,GETintnd2s,GETintk private CFUC,CFURES,varco,varco1 ! completing tpsa.f90 private datantt,dasintt,dacostt,full_abstpsat integer,private::NO,ND,ND2,NP,NDPT,NV !,lastmaster 2002.12.13 logical(lp),private::old logical :: debug_flag =.false. logical :: debug_acos=.false. INTERFACE assignment (=) MODULE PROCEDURE EQUAL MODULE PROCEDURE ctEQUAL MODULE PROCEDURE tcEQUAL MODULE PROCEDURE CEQUAL MODULE PROCEDURE DEQUAL MODULE PROCEDURE REQUAL ! MODULE PROCEDURE DAABSEQUAL ! remove 2002.10.17 ! MODULE PROCEDURE AABSEQUAL ! remove 2002.10.17 MODULE PROCEDURE cequaldacon MODULE PROCEDURE Dequaldacon MODULE PROCEDURE equaldacon MODULE PROCEDURE Iequaldacon end INTERFACE !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@
!@ !@           +    !@ COMPLEX !@ REAL !@ !@ Integer
!@

!@ !@ COMPLEX TAYLOR

!@
!@ !@ COMPLEX(dp) !@ !@ TAYLOR !@ !@ rEAL(DP) !@ !@ REAL(SP)
!@ COMPLEX !@ !@ COMPLEX TAYLOR !@ !@ ADD !@ !@ CADDSC !@ !@ !@ ADDT !@ !@ DADDSC !@ !@ ADDSC !@ !@ IADDSC
!@ !@ COMPLEX(DP) !@ !@ CSCADD !@ F90 !@ !@ !@ CADDT !@ F90 !@ F90F90
!@ REAL !@ !@ TAYLOR !@ !@ TADD !@ !@ CTADD !@ !@ !@ !@ add !@ !@ !@ !@ daddsc !@ !@ !@ ADDSC !@ !@    !@ !@ IADDSC
!@ !@ REAL(DP) !@ !@ DSCADD !@ F90 !@ !@ !@ !@ dscaddF90F90F90
!@ !@ REAL(SP) !@ !@ !@ SCADD !@ F90 !@ !@ !@ SCADDF90F90F90
!@ !@ Integer !@ ISCADDF90 !@ !@ !@ ISCADDF90F90F90
!@ INTERFACE OPERATOR (+) MODULE PROCEDURE add MODULE PROCEDURE tadd MODULE PROCEDURE addt MODULE PROCEDURE cscadd MODULE PROCEDURE dscadd MODULE PROCEDURE ctadd MODULE PROCEDURE caddt MODULE PROCEDURE caddsc MODULE PROCEDURE daddsc MODULE PROCEDURE unaryADD MODULE PROCEDURE addsc MODULE PROCEDURE scadd MODULE PROCEDURE iaddsc MODULE PROCEDURE iscadd END INTERFACE !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@
!@ !@          !@ -   !@ COMPLEX !@ REAL !@ !@ Integer
!@

!@ !@ COMPLEX TAYLOR

!@
!@ !@ COMPLEX(dp) !@ !@ TAYLOR !@ !@ rEAL(DP) !@ !@ REAL(SP)
!@ COMPLEX !@ !@ COMPLEX TAYLOR !@ !@ SUBS !@ !@ CSUBSC !@ !@ SUBT !@ !@ DSUBSC !@ !@ SUBSC !@ ISUBSC
!@ !@ COMPLEX(DP) !@ !@ !@ CSCSUB !@ F90 !@ !@ !@ CSUBT !@ F90 !@ F90F90
!@ REAL !@ !@ TAYLOR !@ !@ TSUB !@ !@ !@ CTSUB !@ !@ !@ !@ SUBS !@ !@ !@ !@ dSUBsc !@ !@ !@ SUBSC !@ !@    !@   !@ !@ REAL(DP) !@ !@ !@ DSCSUB !@ F90 !@ !@ !@ !@ dscSUBF90F90F90
!@ !@ REAL(SP) !@ !@ !@ SCSUB !@ F90 !@ !@ !@ SCSUBF90F90F90
!@ !@ Integer !@ !@ ISCSUBF90 !@ !@ !@ ISCSUBF90F90F90
INTERFACE OPERATOR (-) MODULE PROCEDURE unarySUB MODULE PROCEDURE subs MODULE PROCEDURE ctsub MODULE PROCEDURE csubt MODULE PROCEDURE tsub MODULE PROCEDURE subt MODULE PROCEDURE cscsub MODULE PROCEDURE dscsub MODULE PROCEDURE csubsc MODULE PROCEDURE dsubsc MODULE PROCEDURE subsc MODULE PROCEDURE scsub MODULE PROCEDURE isubsc MODULE PROCEDURE iscsub END INTERFACE !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@
!@ !@          !@ *   !@ COMPLEX !@ REAL !@ !@ Integer
!@

!@ !@ COMPLEX TAYLOR

!@
!@ !@ COMPLEX(dp) !@ !@ TAYLOR !@ !@ rEAL(DP) !@ !@ REAL(SP)
!@ COMPLEX !@ !@ COMPLEX TAYLOR !@ !@ MUL !@ !@ CMULSC !@ !@ MULT !@ !@ DMULSC !@ !@ MULSC !@ IMULSC
!@ !@ COMPLEX(DP) !@ !@ CSCMUL !@ F90 !@ !@ CMULT !@ F90 !@ F90F90
!@ REAL !@ !@ TAYLOR !@ !@ TMUL !@ !@ CTMUL !@ !@ !@ !@ MUL !@ !@ !@ !@ dMULsc !@ !@ !@ MULSC !@ !@    !@ !@ IMULSC
!@ !@ REAL(DP) !@ !@ DSCMUL !@ F90 !@ !@ !@ !@ dscMULF90F90F90
!@ !@ REAL(SP) !@ !@ SCMUL !@ F90 !@ !@ !@ SCMULF90F90F90
!@ !@ Integer !@ ISCMULF90 !@ !@ !@ ISCMULF90F90F90
INTERFACE OPERATOR (*) MODULE PROCEDURE mul MODULE PROCEDURE tmul MODULE PROCEDURE mult MODULE PROCEDURE cscmul MODULE PROCEDURE ctmul MODULE PROCEDURE dscmul MODULE PROCEDURE cmulsc MODULE PROCEDURE cmult MODULE PROCEDURE dmulsc MODULE PROCEDURE mulsc MODULE PROCEDURE scmul MODULE PROCEDURE imulsc MODULE PROCEDURE iscmul END INTERFACE !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@
!@ !@         !@ /  !@ COMPLEX !@ REAL !@ !@ Integer
!@

!@ !@ COMPLEX TAYLOR

!@
!@ !@ COMPLEX(dp) !@ !@ TAYLOR !@ !@ rEAL(DP) !@ !@ REAL(SP)
!@ COMPLEX !@ !@ COMPLEX TAYLOR !@ !@ DIV !@ !@ CDIVSC !@ !@ DIVT !@ !@ DDIVSC !@ !@ DIVSC !@ IDIVSC
!@ !@ COMPLEX(DP) !@ !@ CSCDIV !@ F90 !@ !@ CDIVT !@ F90 !@ F90F90
!@ REAL !@ !@ TAYLOR !@ !@ TDIV !@ !@ CTDIV !@ !@ !@ !@ div !@ !@ !@ !@ dDIVsc !@ !@ !@ DIVSC !@ !@      !@ !@ IDIVSC
!@ !@ REAL(DP) !@ !@ DSCDIV !@ F90 !@ !@ !@ !@ dscDIVF90F90F90
!@ !@ REAL(SP) !@ !@ SCDIV !@ F90 !@ !@ !@ SCDIVF90F90F90
!@ !@ Integer !@ !@ ISCDIVF90 !@ !@ !@ ISCDIVF90F90F90
INTERFACE OPERATOR (/) MODULE PROCEDURE div MODULE PROCEDURE divt MODULE PROCEDURE tdiv MODULE PROCEDURE ctdiv MODULE PROCEDURE cdivt MODULE PROCEDURE ddivsc MODULE PROCEDURE cdivsc MODULE PROCEDURE dscdiv MODULE PROCEDURE cscdiv 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 ! New Operators INTERFACE OPERATOR (.var.) MODULE PROCEDURE varco MODULE PROCEDURE varco1 END INTERFACE INTERFACE OPERATOR (.mono.) MODULE PROCEDURE dputint !@1 Accepts J(nv)
MODULE PROCEDURE dputchar !@1 Accepts String such as '12
END INTERFACE INTERFACE OPERATOR (.d.) MODULE PROCEDURE getdiff END INTERFACE INTERFACE OPERATOR (.K.) MODULE PROCEDURE getdATRA END INTERFACE 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 INTERFACE OPERATOR (<=) MODULE PROCEDURE getcharnd2s MODULE PROCEDURE GETintnd2s MODULE PROCEDURE GETintk END INTERFACE ! Intrinsic Routines INTERFACE aimag MODULE PROCEDURE dimagt END INTERFACE INTERFACE dimag MODULE PROCEDURE dimagt END INTERFACE INTERFACE dble MODULE PROCEDURE drealt END INTERFACE INTERFACE dreal MODULE PROCEDURE drealt END INTERFACE INTERFACE cmplx MODULE PROCEDURE dcmplxt END INTERFACE INTERFACE dcmplx MODULE PROCEDURE dcmplxt END INTERFACE INTERFACE abs MODULE PROCEDURE abstpsat END INTERFACE INTERFACE dabs MODULE PROCEDURE abstpsat END INTERFACE INTERFACE log MODULE PROCEDURE logtpsat END INTERFACE INTERFACE dlog MODULE PROCEDURE logtpsat END INTERFACE INTERFACE clog MODULE PROCEDURE logtpsat END INTERFACE INTERFACE cdlog MODULE PROCEDURE logtpsat END INTERFACE INTERFACE atan MODULE PROCEDURE datant MODULE PROCEDURE datantt END INTERFACE INTERFACE datan MODULE PROCEDURE datant MODULE PROCEDURE datantt END INTERFACE INTERFACE asin MODULE PROCEDURE dasint MODULE PROCEDURE dasintt END INTERFACE INTERFACE dasin MODULE PROCEDURE dasint MODULE PROCEDURE dasintt END INTERFACE INTERFACE acos MODULE PROCEDURE dacost MODULE PROCEDURE dacostt END INTERFACE INTERFACE dacos MODULE PROCEDURE dacost MODULE PROCEDURE dacostt END INTERFACE INTERFACE tan MODULE PROCEDURE tant END INTERFACE INTERFACE dtan MODULE PROCEDURE tant END INTERFACE INTERFACE cos MODULE PROCEDURE dcost END INTERFACE INTERFACE cdcos MODULE PROCEDURE dcost END INTERFACE INTERFACE ccos MODULE PROCEDURE dcost END INTERFACE INTERFACE dcos MODULE PROCEDURE dcost END INTERFACE INTERFACE sin MODULE PROCEDURE dsint END INTERFACE INTERFACE cdsin MODULE PROCEDURE dsint END INTERFACE INTERFACE csin MODULE PROCEDURE dsint END INTERFACE INTERFACE dsin MODULE PROCEDURE dsint END INTERFACE INTERFACE exp MODULE PROCEDURE exptpsat END INTERFACE INTERFACE dexp MODULE PROCEDURE exptpsat END INTERFACE INTERFACE cexp MODULE PROCEDURE exptpsat END INTERFACE INTERFACE cdexp MODULE PROCEDURE exptpsat 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 INTERFACE sqrt MODULE PROCEDURE dsqrtt END INTERFACE INTERFACE dsqrt MODULE PROCEDURE dsqrtt END INTERFACE INTERFACE cdsqrt MODULE PROCEDURE dsqrtt END INTERFACE ! End Intrinsic Routines ! Non-intrisic Functions ! INTERFACE var ! MODULE PROCEDURE varc ! MODULE PROCEDURE varcC ! END INTERFACE ! ! INTERFACE shiftda ! MODULE PROCEDURE shiftc ! END INTERFACE INTERFACE pok MODULE PROCEDURE pokc END INTERFACE INTERFACE pek MODULE PROCEDURE pekc END INTERFACE INTERFACE CFU MODULE PROCEDURE CFUC MODULE PROCEDURE CFURES END INTERFACE INTERFACE full_abs MODULE PROCEDURE full_abstpsat END INTERFACE ! i/o INTERFACE daprint MODULE PROCEDURE printcomplex END INTERFACE INTERFACE print MODULE PROCEDURE printcomplex END INTERFACE INTERFACE read MODULE PROCEDURE inputcomplex END INTERFACE INTERFACE dainput MODULE PROCEDURE inputcomplex END INTERFACE ! end of /o ! Constructors and Destructors INTERFACE alloc MODULE PROCEDURE alloccomplex MODULE PROCEDURE a_opt MODULE PROCEDURE alloccomplexn END INTERFACE INTERFACE kill MODULE PROCEDURE killcomplex MODULE PROCEDURE k_opt MODULE PROCEDURE killcomplexn END INTERFACE ! end Constructors and Destructors ! managing INTERFACE ass MODULE PROCEDURE assc END INTERFACE ! end managing contains FUNCTION dimagt( S1 ) implicit none TYPE (taylor) dimagt TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dimagt) !2002.12.25 dimagt=s1%i master=localmaster END FUNCTION dimagt FUNCTION drealt( S1 ) implicit none TYPE (taylor) drealt TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(drealt) !2002.12.25 drealt=s1%r master=localmaster END FUNCTION drealt FUNCTION GETCHARnd2( S1, S2 ) implicit none TYPE (complextaylor) GETCHARnd2 TYPE (complextaylor), INTENT (IN) :: S1 CHARACTER(*) , INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETCHARnd2) GETCHARnd2%r=s1%r.par.s2 GETCHARnd2%i=s1%i.par.s2 master=localmaster END FUNCTION GETCHARnd2 FUNCTION GETintnd2( S1, S2 ) implicit none TYPE (complextaylor) GETintnd2 TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: S2(:) integer localmaster localmaster=master call ass(GETintnd2) GETintnd2%r=s1%r.par.s2 GETintnd2%i=s1%i.par.s2 master=localmaster END FUNCTION GETintnd2 FUNCTION GETCHARnd2s( S1, S2 ) implicit none TYPE (complextaylor) GETCHARnd2s TYPE (complextaylor), INTENT (IN) :: S1 CHARACTER(*) , INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETCHARnd2s) GETCHARnd2s%r=s1%r<=s2 GETCHARnd2s%i=s1%i<=s2 master=localmaster END FUNCTION GETCHARnd2s FUNCTION GETintnd2s( S1, S2 ) implicit none TYPE (complextaylor) GETintnd2s TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: S2(:) integer localmaster localmaster=master call ass(GETintnd2s) GETintnd2s%r= s1%r<=s2 GETintnd2s%i= s1%i<=s2 master=localmaster END FUNCTION GETintnd2s FUNCTION dputchar( S1, S2 ) implicit none TYPE (complextaylor) dputchar complex(dp) , INTENT (IN) :: S1 CHARACTER(*) , INTENT (IN) :: S2 ! CHARACTER (LEN = LNV) resul ! integer j(lnv),i,nd2par integer localmaster localmaster=master call ass(dputchar) ! resul = trim(ADJUSTL (s2)) ! ! do i=1,lnv ! j(i)=0 ! enddo ! ! nd2par= len(trim(ADJUSTL (s2))) ! !frs do i=1,len(trim(ADJUSTL (s2))) ! do i=1,nd2par ! CALL CHARINT(RESUL(I:I),J(I)) ! if(i>nv) then ! if(j(i)>0) then ! call var(dputchar,cmplx(zero,zero,kind=dp),0,0) ! return ! endif ! endif ! enddo ! ! ! call var(dputchar,cmplx(zero,zero,kind=dp),0,0) ! call pok(dputchar,j,s1) ! dputchar%r= real(S1,kind=dp).mono.S2 dputchar%i= aimag(S1).mono.S2 master=localmaster END FUNCTION dputchar FUNCTION dputint( S1, S2 ) implicit none TYPE (complextaylor) dputint complex(dp) , INTENT (IN) :: S1 integer , INTENT (IN) :: S2(:) ! integer j(lnv),i,nd2par integer localmaster localmaster=master call ass(dputint) ! do i=1,lnv ! j(i)=0 ! enddo! ! ! nd2par=size(s2) ! do i=1,nd2par ! J(I)=s2(i) ! enddo !frs do i=1,len(trim(ADJUSTL (s2))) ! do i=1,nd2par ! if(i>nv) then ! if(j(i)>0) then ! call var(dputint,cmplx(zero,zero,kind=dp),0,0) ! return ! endif !! endif ! enddo ! ! call var(dputint,cmplx(zero,zero,kind=dp),0,0) ! call pok(dputint,j,s1) dputint%r= real(S1,kind=dp).mono.S2 dputint%i= aimag(S1).mono.S2 master=localmaster END FUNCTION dputint FUNCTION varco(s1,s2) implicit none TYPE (complextaylor) varco complex(dp) , INTENT (IN) :: S1 integer , INTENT (IN) :: S2(2) integer localmaster localmaster=master call ass(varco) varco%r=REAL(s1,kind=DP) + (1.0_dp.mono.s2(1)) varco%i=aimag(s1) + (1.0_dp.mono.s2(2)) !varco%r=REAL(s1,kind=DP).var.s2(1) !varco%i=aimag(s1).var.s2(2) master=localmaster END FUNCTION varco FUNCTION varco1(s1,s2) implicit none TYPE (complextaylor) varco1 complex(dp) , INTENT (IN) :: S1(2) integer , INTENT (IN) :: S2(2) integer localmaster localmaster=master call ass(varco1) varco1=s1(1)+s1(2)*((1.0_dp.mono.s2(1))+i_*(1.0_dp.mono.s2(2))) master=localmaster END FUNCTION varco1 FUNCTION GETORDER( S1, S2 ) implicit none TYPE (complextaylor) GETORDER TYPE (complextaylor), INTENT (IN) :: S1 INTEGER, INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETORDER) GETORDER%r=S1%r.sub.s2 GETORDER%i=S1%i.sub.s2 master=localmaster END FUNCTION GETORDER FUNCTION CUTORDER( S1, S2 ) implicit none TYPE (complextaylor) CUTORDER TYPE (complextaylor), INTENT (IN) :: S1 INTEGER, INTENT (IN) :: S2 integer localmaster localmaster=master call ass(CUTORDER) CUTORDER%r=S1%r.CUT.s2 CUTORDER%i=S1%i.CUT.s2 master=localmaster END FUNCTION CUTORDER FUNCTION GETchar( S1, S2 ) implicit none complex(dp) GETchar real(dp) r1,r2 TYPE (complextaylor), INTENT (IN) :: S1 CHARACTER(*) , INTENT (IN) :: S2 integer localmaster localmaster=master r1=S1%r.sub.s2 r2=S1%i.sub.s2 GETchar=cmplx(r1,r2,kind=dp) master=localmaster END FUNCTION GETchar FUNCTION GETint( S1, S2 ) ! 2002.12.20 implicit none complex(dp) GETint TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: S2(:) real(dp) r1,r2 r1=S1%r.sub.s2 r2=S1%i.sub.s2 GETint=cmplx(r1,r2,kind=dp) END FUNCTION GETint FUNCTION POW( S1, R2 ) implicit none TYPE (complextaylor) POW,temp TYPE (complextaylor), INTENT (IN) :: S1 INTEGER, INTENT (IN) :: R2 INTEGER I,R22 integer localmaster localmaster=master call ass(pow) call alloc(temp) TEMP=1.0_dp R22=IABS(R2) DO I=1,R22 temp=temp*s1 ENDDO IF(R2.LT.0) THEN temp=1.0_dp/temp ENDIF POW=temp call kill(temp) master=localmaster END FUNCTION POW FUNCTION POWR( S1, R2 ) implicit none TYPE (complextaylor) POWR,temp TYPE (complextaylor), INTENT (IN) :: S1 REAL(SP), INTENT (IN) :: R2 integer localmaster if(real_warning) call real_stop localmaster=master call ass(POWR) call alloc(temp) temp=log(s1) temp=temp*(r2) temp=exp(temp) POWR=temp call kill(temp) master=localmaster END FUNCTION POWR FUNCTION POWR8( S1, R2 ) implicit none TYPE (complextaylor) POWR8,temp TYPE (complextaylor), INTENT (IN) :: S1 real(dp), INTENT (IN) :: R2 integer localmaster localmaster=master call ass(powr8) call alloc(temp) temp=log(s1) temp=temp*r2 temp=exp(temp) POWR8=temp call kill(temp) master=localmaster END FUNCTION POWR8 FUNCTION GETdiff( S1, S2 ) implicit none TYPE (complextaylor) GETdiff TYPE (complextaylor), INTENT (IN) :: S1 INTEGER, INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETdiff) getdiff%r=s1%r.d.s2 getdiff%i=s1%i.d.s2 master=localmaster END FUNCTION GETdiff FUNCTION GETdatra( S1, S2 ) implicit none TYPE (complextaylor) GETdatra TYPE (complextaylor), INTENT (IN) :: S1 INTEGER, INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETdatra) GETdatra%r=s1%r.k.s2 GETdatra%i=s1%i.k.s2 master=localmaster END FUNCTION GETdatra SUBROUTINE alloccomplex(S2) implicit none type (complextaylor),INTENT(INOUT)::S2 call alloctpsa(s2%r) call alloctpsa(s2%i) END SUBROUTINE alloccomplex SUBROUTINE alloccomplexn(S2,K) implicit none type (complextaylor),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 alloctpsa(s2(j)%r) call alloctpsa(s2(j)%i) enddo END SUBROUTINE alloccomplexn SUBROUTINE A_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10) implicit none type (complextaylor),INTENT(INout)::S1,S2 type (complextaylor),optional, INTENT(INout):: s3,s4,s5,s6,s7,s8,s9,s10 call alloc(s1) call alloc(s2) if(present(s3)) call alloc(s3) if(present(s4)) call alloc(s4) if(present(s5)) call alloc(s5) if(present(s6)) call alloc(s6) if(present(s7)) call alloc(s7) if(present(s8)) call alloc(s8) if(present(s9)) call alloc(s9) if(present(s10))call alloc(s10) END SUBROUTINE A_opt SUBROUTINE K_OPT(S1,S2,s3,s4,s5,s6,s7,s8,s9,s10) implicit none type (complextaylor),INTENT(INout)::S1,S2 type (complextaylor),optional, INTENT(INout):: s3,s4,s5,s6,s7,s8,s9,s10 call KILL(s1) call KILL(s2) if(present(s3)) call KILL(s3) if(present(s4)) call KILL(s4) if(present(s5)) call KILL(s5) if(present(s6)) call KILL(s6) if(present(s7)) call KILL(s7) if(present(s8)) call KILL(s8) if(present(s9)) call KILL(s9) if(present(s10))call KILL(s10) END SUBROUTINE K_opt SUBROUTINE printcomplex(S2,i,deps) implicit none type (complextaylor),INTENT(INOUT)::S2 integer i REAL(DP),OPTIONAL,INTENT(INOUT)::DEPS call daprint(s2%r,i,deps) call daprint(s2%i,i,deps) END SUBROUTINE printcomplex SUBROUTINE inputcomplex(S2,i) implicit none type (complextaylor),INTENT(INOUT)::S2 integer i call dainput(s2%r,i) call dainput(s2%i,i) END SUBROUTINE inputcomplex SUBROUTINE killcomplex(S2) implicit none type (complextaylor),INTENT(INOUT)::S2 call killTPSA(s2%r) call killTPSA(s2%i) END SUBROUTINE killcomplex SUBROUTINE killcomplexn(S2,K) implicit none type (complextaylor),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 killtpsa(s2(j)%r) call killtpsa(s2(j)%i) enddo END SUBROUTINE killcomplexn FUNCTION mul( S1, S2 ) implicit none TYPE (complextaylor) mul TYPE (complextaylor), INTENT (IN) :: S1, S2 integer localmaster localmaster=master call ass(mul) mul%r=s1%r*s2%r-s1%i*s2%i mul%i=s1%r*s2%i+s1%i*s2%r master=localmaster END FUNCTION mul FUNCTION div( S1, S2 ) implicit none TYPE (complextaylor) div ,t TYPE (complextaylor), INTENT (IN) :: S1, S2 integer localmaster localmaster=master call ass(div) call alloc(t) call inv(s2,t) div%r=s1%r*t%r-s1%i*t%i div%i=s1%r*t%i+s1%i*t%r call kill(t) master=localmaster END FUNCTION div FUNCTION cscdiv( S1, S2 ) implicit none TYPE (complextaylor) cscdiv ,t TYPE (complextaylor), INTENT (IN) :: S2 complex(dp), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(cscdiv) call alloc(t) call inv(s2,t) cscdiv%r=REAL(s1,kind=DP)*t%r-aimag(s1)*t%i cscdiv%i=REAL(s1,kind=DP)*t%i+aimag(s1)*t%r call kill(t) master=localmaster END FUNCTION cscdiv FUNCTION dscdiv( S1, S2 ) implicit none TYPE (complextaylor) dscdiv ,t TYPE (complextaylor), INTENT (IN) :: S2 real(dp), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dscdiv) call alloc(t) call inv(s2,t) dscdiv%r=s1*t%r dscdiv%i=s1*t%i call kill(t) master=localmaster END FUNCTION dscdiv FUNCTION scdiv( S1, S2 ) implicit none TYPE (complextaylor) scdiv ,t TYPE (complextaylor), INTENT (IN) :: S2 real(sp), INTENT (IN) :: S1 integer localmaster if(real_warning) call real_stop localmaster=master call ass(scdiv) call alloc(t) call inv(s2,t) scdiv%r=s1*t%r scdiv%i=s1*t%i call kill(t) master=localmaster END FUNCTION scdiv FUNCTION iscdiv( S1, S2 ) implicit none TYPE (complextaylor) iscdiv ,t TYPE (complextaylor), INTENT (IN) :: S2 integer, INTENT (IN) :: S1 integer localmaster localmaster=master call ass(iscdiv) call alloc(t) call inv(s2,t) iscdiv%r=s1*t%r iscdiv%i=s1*t%i call kill(t) master=localmaster END FUNCTION iscdiv FUNCTION idivsc( S2,S1 ) implicit none TYPE (complextaylor) idivsc TYPE (complextaylor), INTENT (IN) :: S2 integer, INTENT (IN) :: S1 integer localmaster localmaster=master call ass(idivsc) idivsc%r=(1.0_dp/s1)*s2%r idivsc%i=(1.0_dp/s1)*s2%i master=localmaster END FUNCTION idivsc FUNCTION divsc( S2,S1 ) implicit none TYPE (complextaylor) divsc TYPE (complextaylor), INTENT (IN) :: S2 real(sp), INTENT (IN) :: S1 integer localmaster if(real_warning) call real_stop localmaster=master call ass(divsc) divsc%r=(1.0_dp/s1)*s2%r divsc%i=(1.0_dp/s1)*s2%i master=localmaster END FUNCTION divsc FUNCTION ddivsc( S2,S1 ) implicit none TYPE (complextaylor) ddivsc TYPE (complextaylor), INTENT (IN) :: S2 real(dp), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(ddivsc) ddivsc%r=(1.0_dp/s1)*s2%r ddivsc%i=(1.0_dp/s1)*s2%i master=localmaster END FUNCTION ddivsc FUNCTION cdivsc( S2,S1 ) implicit none TYPE (complextaylor) cdivsc TYPE (complextaylor), INTENT (IN) :: S2 complex(dp), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(cdivsc) cdivsc%r=REAL((1.0_dp/s1),kind=DP)*s2%r-aimag((1.0_dp/s1))*s2%i cdivsc%i=REAL((1.0_dp/s1),kind=DP)*s2%i+aimag((1.0_dp/s1))*s2%r master=localmaster END FUNCTION cdivsc FUNCTION cscmul( sc,S1 ) implicit none TYPE (complextaylor) cscmul TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cscmul) cscmul%r=REAL(sc,kind=DP)*s1%r-aimag(sc)*s1%i cscmul%i=REAL(sc,kind=DP)*s1%i+aimag(sc)*s1%r master=localmaster END FUNCTION cscmul FUNCTION ctmul( S1,sc ) implicit none TYPE (complextaylor) ctmul TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(ctmul) ctmul%r=REAL(sc,kind=DP)*s1 ctmul%i=aimag(sc)*s1 master=localmaster END FUNCTION ctmul FUNCTION cmult( sc,S1 ) implicit none TYPE (complextaylor) cmult TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cmult) cmult%r=REAL(sc,kind=DP)*s1 cmult%i=aimag(sc)*s1 master=localmaster END FUNCTION cmult FUNCTION caddt( sc,S1 ) implicit none TYPE (complextaylor) caddt TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(caddt) caddt%r=REAL(sc,kind=DP)+s1 caddt%i=aimag(sc) master=localmaster END FUNCTION caddt FUNCTION ctadd(S1, sc ) implicit none TYPE (complextaylor) ctadd TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(ctadd) ctadd%r=REAL(sc,kind=DP)+s1 ctadd%i=aimag(sc) master=localmaster END FUNCTION ctadd FUNCTION csubt( sc,S1 ) implicit none TYPE (complextaylor) csubt TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(csubt) csubt%r=REAL(sc,kind=DP)-s1 csubt%i=aimag(sc) master=localmaster END FUNCTION csubt FUNCTION ctsub( S1,sc ) implicit none TYPE (complextaylor) ctsub TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(ctsub) ctsub%r=s1-REAL(sc,kind=DP) ctsub%i=-aimag(sc) master=localmaster END FUNCTION ctsub FUNCTION cdivt( sc,S1 ) implicit none TYPE (complextaylor) cdivt TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cdivt) cdivt%r=REAL(sc,kind=DP)/s1 cdivt%i=aimag(sc)/s1 master=localmaster END FUNCTION cdivt FUNCTION ctdiv( S1,sc ) implicit none TYPE (complextaylor) ctdiv TYPE (taylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc complex(dp) w integer localmaster localmaster=master call ass(ctdiv) w=1.0_dp/sc ctdiv%r=s1*REAL(w,kind=DP) ctdiv%i=s1*aimag(w) master=localmaster END FUNCTION ctdiv FUNCTION dscmul( sc,S1 ) implicit none TYPE (complextaylor) dscmul TYPE (complextaylor), INTENT (IN) :: S1 real(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(dscmul) dscmul%r=sc*s1%r dscmul%i=sc*s1%i master=localmaster END FUNCTION dscmul FUNCTION scmul( sc,S1 ) implicit none TYPE (complextaylor) scmul TYPE (complextaylor), INTENT (IN) :: S1 real(sp), INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(scmul) scmul%r=sc*s1%r scmul%i=sc*s1%i master=localmaster END FUNCTION scmul FUNCTION iscmul( sc,S1 ) implicit none TYPE (complextaylor) iscmul TYPE (complextaylor), INTENT (IN) :: S1 integer, INTENT (IN) :: sc integer localmaster localmaster=master call ass(iscmul) iscmul%r=sc*s1%r iscmul%i=sc*s1%i master=localmaster END FUNCTION iscmul FUNCTION cmulsc( S1,sc ) implicit none TYPE (complextaylor) cmulsc TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cmulsc) cmulsc%r=REAL(sc,kind=DP)*s1%r-aimag(sc)*s1%i cmulsc%i=REAL(sc,kind=DP)*s1%i+aimag(sc)*s1%r master=localmaster END FUNCTION cmulsc FUNCTION dmulsc( S1, sc) implicit none TYPE (complextaylor) dmulsc TYPE (complextaylor), INTENT (IN) :: S1 real(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(dmulsc) dmulsc%r=sc*s1%r dmulsc%i=sc*s1%i master=localmaster END FUNCTION dmulsc FUNCTION mulsc( S1, sc) implicit none TYPE (complextaylor) mulsc TYPE (complextaylor), INTENT (IN) :: S1 real(sp), INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(mulsc) mulsc%r=sc*s1%r mulsc%i=sc*s1%i master=localmaster END FUNCTION mulsc FUNCTION imulsc( S1, sc) implicit none TYPE (complextaylor) imulsc TYPE (complextaylor), INTENT (IN) :: S1 integer, INTENT (IN) :: sc integer localmaster localmaster=master call ass(imulsc) imulsc%r=sc*s1%r imulsc%i=sc*s1%i master=localmaster END FUNCTION imulsc SUBROUTINE EQUAL(S2,S1) implicit none type (complextaylor),INTENT(inOUT)::S2 type (complextaylor),INTENT(IN)::S1 call check_snake ! master=0 S2%R=S1%R S2%I=S1%I END SUBROUTINE EQUAL SUBROUTINE ctEQUAL(S2,S1) implicit none type (complextaylor),INTENT(inOUT)::S2 type (taylor),INTENT(IN)::S1 call check_snake S2%R=S1 S2%I=0.0_dp END SUBROUTINE ctEQUAL SUBROUTINE tcEQUAL(S1,S2) implicit none type (complextaylor),INTENT(in)::S2 type (taylor),INTENT(inout)::S1 call check_snake ! master=0 S1=S2%R END SUBROUTINE tcEQUAL SUBROUTINE CEQUAL(R1,S2) ! 2002.12.22 implicit none type (complextaylor),INTENT(IN)::S2 COMPLEX(dp), INTENT(inOUT)::R1 call check_snake R1=S2.SUB.'0' END SUBROUTINE CEQUAL SUBROUTINE DEQUAL(R1,S2) ! 2002.12.22 implicit none type (complextaylor),INTENT(IN)::S2 real(dp), INTENT(inOUT)::R1 call check_snake R1=S2.SUB.'0' END SUBROUTINE DEQUAL SUBROUTINE REQUAL(R1,S2) ! 2002.12.22 implicit none type (complextaylor),INTENT(IN)::S2 REAL(SP), INTENT(inOUT)::R1 if(real_warning) call real_stop call check_snake R1=S2.SUB.'0' END SUBROUTINE REQUAL SUBROUTINE CEQUALDACON(S2,R1) implicit none type (complextaylor),INTENT(inout)::S2 complex(dp), INTENT(IN)::R1 call check_snake ! master=0 S2%R=REAL(R1,kind=DP) S2%I=aimag(R1) END SUBROUTINE CEQUALDACON SUBROUTINE dEQUALDACON(S2,R1) implicit none type (complextaylor),INTENT(inout)::S2 real(dp) , INTENT(IN)::R1 call check_snake S2%R=R1 S2%I=0.0_dp END SUBROUTINE dEQUALDACON SUBROUTINE EQUALDACON(S2,R1) implicit none type (complextaylor),INTENT(inout)::S2 real(sp) , INTENT(IN)::R1 if(real_warning) call real_stop call check_snake S2%R=REAL(R1,kind=DP) S2%I=0.0_dp END SUBROUTINE EQUALDACON SUBROUTINE iEQUALDACON(S2,R1) implicit none type (complextaylor),INTENT(inout)::S2 integer , INTENT(IN)::R1 call check_snake S2%R=REAL(R1,kind=DP) S2%I=0.0_dp END SUBROUTINE iEQUALDACON FUNCTION add( S1, S2 ) implicit none TYPE (complextaylor) add TYPE (complextaylor), INTENT (IN) :: S1, S2 integer localmaster localmaster=master call ass(add) add%r=s1%r+s2%r add%i=s1%i+s2%i master=localmaster END FUNCTION add FUNCTION tadd( S1, S2 ) implicit none TYPE (complextaylor) tadd TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(tadd) tadd%r=s1+s2%r tadd%i=s2%i master=localmaster END FUNCTION tadd FUNCTION addt( S2,S1 ) implicit none TYPE (complextaylor) addt TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(addt) addt%r=s1+s2%r addt%i=s2%i master=localmaster END FUNCTION addt FUNCTION tsub( S1, S2 ) implicit none TYPE (complextaylor) tsub TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(tsub) tsub%r=s1-s2%r tsub%i=-s2%i master=localmaster END FUNCTION tsub FUNCTION subt( S2,S1 ) implicit none TYPE (complextaylor) subt TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(subt) subt%r=s2%r-s1 subt%i=s2%i master=localmaster END FUNCTION subt FUNCTION tmul( S1, S2 ) implicit none TYPE (complextaylor) tmul TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(tmul) tmul%r=s1*s2%r tmul%i=s1*s2%i master=localmaster END FUNCTION tmul FUNCTION mult( S2,S1 ) implicit none TYPE (complextaylor) mult TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(mult) mult%r=s1*s2%r mult%i=s1*s2%i master=localmaster END FUNCTION mult FUNCTION tdiv( S1, S2 ) implicit none TYPE (complextaylor) tdiv,temp TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(tdiv) call alloc(temp) temp=1.0_dp/s2 tdiv%r=s1*temp%r tdiv%i=s1*temp%i master=localmaster call kill(temp) END FUNCTION tdiv FUNCTION divt(S2 , S1 ) implicit none TYPE (complextaylor) divt type (taylor) temp TYPE (complextaylor), INTENT (IN) :: S2 TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(divt) call alloc(temp) temp=1.0_dp/s1 divt%r=temp*s2%r divt%i=temp*s2%i master=localmaster call kill(temp) END FUNCTION divt FUNCTION csubSC( S1,sc ) implicit none TYPE (complextaylor) csubSC TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(csubSC) csubSC%r=-REAL(sc,kind=DP)+s1%r csubSC%i=-aimag(sc)+s1%i master=localmaster END FUNCTION csubSC FUNCTION DsubSC(S1,sc) implicit none TYPE (complextaylor) DsubSC TYPE (complextaylor), INTENT (IN) :: S1 real(dp) , INTENT (IN) :: sc integer localmaster localmaster=master call ass(DsubSC) DsubSC%r=s1%r-sc DsubSC%i=s1%i master=localmaster END FUNCTION DsubSC FUNCTION subSC(S1,sc) implicit none TYPE (complextaylor) subSC TYPE (complextaylor), INTENT (IN) :: S1 real(sp) , INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(subSC) subSC%r=s1%r-sc subSC%i=s1%i master=localmaster END FUNCTION subSC FUNCTION isubSC(S1,sc) implicit none TYPE (complextaylor) isubSC TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: sc integer localmaster localmaster=master call ass(isubSC) isubSC%r=s1%r-sc isubSC%i=s1%i master=localmaster END FUNCTION isubSC FUNCTION cSCsub( sc,S1 ) implicit none TYPE (complextaylor) cSCsub TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cSCsub) cSCsub%r=REAL(sc,kind=DP)-s1%r cSCsub%i=aimag(sc)-s1%i master=localmaster END FUNCTION cSCsub FUNCTION DSCsub( sc,S1 ) implicit none TYPE (complextaylor) DSCsub TYPE (complextaylor), INTENT (IN) :: S1 real(dp) , INTENT (IN) :: sc integer localmaster localmaster=master call ass(DSCsub) DSCsub%r=sc-s1%r DSCsub%i=-s1%i master=localmaster END FUNCTION DSCsub FUNCTION SCsub( sc,S1 ) implicit none TYPE (complextaylor) SCsub TYPE (complextaylor), INTENT (IN) :: S1 real(sp) , INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(SCsub) SCsub%r=sc-s1%r SCsub%i=-s1%i master=localmaster END FUNCTION SCsub FUNCTION iSCsub( sc,S1 ) implicit none TYPE (complextaylor) iSCsub TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: sc integer localmaster localmaster=master call ass(iSCsub) iSCsub%r=sc-s1%r iSCsub%i=-s1%i master=localmaster END FUNCTION iSCsub FUNCTION unarysub( S1 ) implicit none TYPE (complextaylor) unarysub TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(unarysub) unarysub%r=-s1%r unarysub%i=-s1%i master=localmaster END FUNCTION unarysub FUNCTION subs( S1, S2 ) implicit none TYPE (complextaylor) subs TYPE (complextaylor), INTENT (IN) :: S1, S2 integer localmaster localmaster=master call ass(subs) subs%r=s1%r-s2%r subs%i=s1%i-s2%i master=localmaster END FUNCTION subs FUNCTION cSCADD( sc,S1 ) implicit none TYPE (complextaylor) cSCADD TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cSCADD) cSCADD%r=REAL(sc,kind=DP)+s1%r cSCADD%i=aimag(sc)+s1%i master=localmaster END FUNCTION cSCADD FUNCTION cADDSC( S1,sc ) implicit none TYPE (complextaylor) cADDSC TYPE (complextaylor), INTENT (IN) :: S1 complex(dp), INTENT (IN) :: sc integer localmaster localmaster=master call ass(cADDSC) cADDSC%r=REAL(sc,kind=DP)+s1%r cADDSC%i=aimag(sc)+s1%i master=localmaster END FUNCTION cADDSC FUNCTION DADDSC( S1, sc ) implicit none TYPE (complextaylor) DADDSC TYPE (complextaylor), INTENT (IN) :: S1 real(dp) , INTENT (IN) :: sc integer localmaster localmaster=master call ass(DADDSC) DADDSC%r=sc+s1%r DADDSC%i=s1%i master=localmaster END FUNCTION DADDSC FUNCTION ADDSC( S1, sc ) implicit none TYPE (complextaylor) ADDSC TYPE (complextaylor), INTENT (IN) :: S1 real(sp) , INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(ADDSC) ADDSC%r=sc+s1%r ADDSC%i=s1%i master=localmaster END FUNCTION ADDSC FUNCTION iADDSC( S1, sc ) implicit none TYPE (complextaylor) iADDSC TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: sc integer localmaster localmaster=master call ass(iADDSC) iADDSC%r=sc+s1%r iADDSC%i=s1%i master=localmaster END FUNCTION iADDSC FUNCTION DSCADD( sc,S1 ) implicit none TYPE (complextaylor) DSCADD TYPE (complextaylor), INTENT (IN) :: S1 real(dp) , INTENT (IN) :: sc integer localmaster localmaster=master call ass(DSCADD) DSCADD%r=sc+s1%r DSCADD%i=s1%i master=localmaster END FUNCTION DSCADD FUNCTION SCADD( sc,S1 ) implicit none TYPE (complextaylor) SCADD TYPE (complextaylor), INTENT (IN) :: S1 real(sp) , INTENT (IN) :: sc integer localmaster if(real_warning) call real_stop localmaster=master call ass(SCADD) SCADD%r=sc+s1%r SCADD%i=s1%i master=localmaster END FUNCTION SCADD FUNCTION iSCADD( sc,S1 ) implicit none TYPE (complextaylor) iSCADD TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: sc integer localmaster localmaster=master call ass(iSCADD) iSCADD%r=sc+s1%r iSCADD%i=s1%i master=localmaster END FUNCTION iSCADD FUNCTION unaryADD( S1 ) implicit none TYPE (complextaylor) unaryADD TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(unaryADD) unaryADD%r=s1%r unaryADD%i=s1%i master=localmaster END FUNCTION unaryADD subroutine inv( S1, s2 ) implicit none TYPE (complextaylor), INTENT (IN) :: S1 TYPE (complextaylor), INTENT (inout) :: S2 TYPE (complextaylor) s,ss complex(dp) d1 real(dp) r1 ,i1 integer i call alloc(s) call alloc(ss) r1=s1%r.sub.'0' i1=s1%i.sub.'0' s=s1 d1=cmplx(r1,i1,kind=dp) d1=1.0_dp/d1 s=d1*s1 s=s-1.0_dp s=(-1.0_dp)*s ss=cmplx(1.0_dp,0.0_dp,kind=dp) s2=cmplx(1.0_dp,0.0_dp,kind=dp) do i=1,no ss=ss*s s2=s2+ss enddo s2=d1*s2 call kill(s) call kill(ss) END subroutine inv FUNCTION logtpsat( S1 ) implicit none TYPE (complextaylor) logtpsat TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(logtpsat) call logtpsa(s1,logtpsat) master=localmaster END FUNCTION logtpsat subroutine logtpsa( S1, s2 ) implicit none TYPE (complextaylor) S1 TYPE (complextaylor) S2 TYPE (complextaylor) s,ss complex(dp) d1 real(dp) r1 ,i1 integer i call alloc(s) call alloc(ss) r1=s1%r.sub.'0' i1=s1%i.sub.'0' d1=cmplx(r1,i1,kind=dp) s=(1.0_dp/d1)*s1-1.0_dp s2=s ss=s do i=2,no ss=cmplx(-1.0_dp,0.0_dp,kind=dp)*ss*s s2=s2+ss/REAL(i,kind=DP) enddo s2=log(d1)+s2 call kill(s) call kill(ss) END subroutine logtpsa FUNCTION full_abstpsat( S1 ) implicit none real(dp) full_abstpsat ,r1,r2 TYPE (complextaylor), INTENT (IN) :: S1 r1=full_abs(s1%r) ! 2002.10.17 r2=full_abs(s1%i) full_abstpsat=r1+r2 !abstpsat=SQRT((s1%r.sub.'0')**2+(s1%i.sub.'0')**2) END FUNCTION full_abstpsat FUNCTION abstpsat( S1 ) implicit none real(dp) abstpsat ,r1,r2 TYPE (complextaylor), INTENT (IN) :: S1 r1=abs(s1%r) ! 2002.10.17 etienne crap r2=abs(s1%i) abstpsat=SQRT(r1**2+r2**2) END FUNCTION abstpsat FUNCTION dcmplxt( S1,s2 ) implicit none TYPE (complextaylor) dcmplxt TYPE (taylor), INTENT (IN) :: S1,s2 integer localmaster localmaster=master call ass(dcmplxt) dcmplxt%r=s1 dcmplxt%i=s2 master=localmaster END FUNCTION dcmplxt FUNCTION datant( S1 ) implicit none TYPE (complextaylor) datant,temp TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(datant) call alloc(temp) temp=(1.0_dp+s1*i_) temp=temp/(1.0_dp-s1*i_) temp=log(temp) datant=temp/2.0_dp/i_ call kill(temp) master=localmaster END FUNCTION datant FUNCTION datantt( S1 ) implicit none TYPE (taylor) datantt TYPE (complextaylor) temp TYPE (taylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(datantt) call alloc(temp) temp%r=s1 temp=atan(temp) datantt=temp%r call kill(temp) master=localmaster END FUNCTION datantt FUNCTION dasintt( S1 ) implicit none TYPE (taylor) dasintt TYPE (complextaylor) temp TYPE (taylor), INTENT (IN) :: S1 integer localmaster real(dp) a0 localmaster=master call ass(dasintt) call alloc(temp) temp%r=s1 a0=abs(temp%r) if(a0>1.0_dp) then check_stable=.false. stable_da=.false. messagelost= " Not defined in dasintt of complex_taylor " endif temp=asin(temp) dasintt=temp%r call kill(temp) master=localmaster END FUNCTION dasintt FUNCTION dasint( S1 ) implicit none TYPE (complextaylor) dasint,temp TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dasint) call alloc(temp) temp=(1.0_dp-s1**2) temp=temp**(0.5_dp) temp=i_*s1+ temp dasint=-i_*log(temp) call kill(temp) master=localmaster END FUNCTION dasint FUNCTION dacostt( S1 ) implicit none TYPE (taylor) dacostt TYPE (complextaylor) temp TYPE (taylor), INTENT (IN) :: S1 TYPE (taylor) t integer localmaster real(dp) a0 localmaster=master call ass(dacostt) call alloc(temp) call alloc(t) a0=abs(s1) if(a0>1.0_dp) then check_stable=.false. stable_da=.false. messagelost= " Not defined in dacostt of complex_taylor " endif ! if(debug_flag) then ! if(debug_acos) then temp%r=s1 temp=acos(temp) ! else ! temp=-one+s1**2 ! temp=temp**(half) ! temp=(s1+ temp) ! temp=-i_*log(temp) ! endif ! else ! t=sqrt(one-s1**2) ! temp=(s1+ i_*t) ! temp=-i_*log(temp) ! endif ! call print(temp%r,10) dacostt=temp%r call kill(t) call kill(temp) master=localmaster END FUNCTION dacostt FUNCTION dacost( S1 ) implicit none TYPE (complextaylor) dacost,temp TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dacost) call alloc(temp) temp=1.0_dp-s1**2 temp=temp**(0.5_dp) temp=(s1+ i_*temp) dacost=-i_*log(temp) call kill(temp) master=localmaster END FUNCTION dacost FUNCTION tant( S1 ) implicit none TYPE (complextaylor) tant, temp TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(tant) call alloc(temp) temp=exp(i_*s1) temp=temp-exp(-i_*s1) tant=exp(i_*s1) tant=tant+exp(-i_*s1) tant=temp/tant/i_ call kill(temp) master=localmaster END FUNCTION tant FUNCTION dtanht( S1 ) implicit none TYPE (complextaylor) dtanht, temp TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dtanht) call alloc(temp) temp=exp(s1) temp=temp-exp(-s1) dtanht=exp(s1) dtanht=dtanht+exp(-s1) dtanht=temp/dtanht call kill(temp) master=localmaster END FUNCTION dtanht FUNCTION dcost( S1 ) implicit none TYPE (complextaylor) dcost TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dcost) dcost=exp(i_*s1) dcost=dcost+exp(-i_*s1) dcost=dcost/2.0_dp master=localmaster END FUNCTION dcost FUNCTION dcosht( S1 ) implicit none TYPE (complextaylor) dcosht TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dcosht) dcosht=exp(s1) dcosht=dcosht+exp(-s1) dcosht=dcosht/2.0_dp master=localmaster END FUNCTION dcosht FUNCTION dsint( S1 ) implicit none TYPE (complextaylor) dsint TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dsint) dsint=exp(i_*s1) dsint=dsint-exp(-i_*s1) dsint=dsint/2.0_dp/i_ master=localmaster END FUNCTION dsint FUNCTION dsinht( S1 ) implicit none TYPE (complextaylor) dsinht TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dsinht) dsinht=exp(s1) dsinht=dsinht-exp(-s1) dsinht=dsinht/2.0_dp master=localmaster END FUNCTION dsinht FUNCTION exptpsat( S1 ) implicit none TYPE (complextaylor) exptpsat TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(exptpsat) call exptpsa(s1,exptpsat) master=localmaster END FUNCTION exptpsat FUNCTION dsqrtt( S1 ) implicit none TYPE (complextaylor) dsqrtt TYPE (complextaylor), INTENT (IN) :: S1 integer localmaster localmaster=master call ass(dsqrtt) dsqrtt= S1**0.5_dp master=localmaster END FUNCTION dsqrtt subroutine exptpsa( S1, s2 ) implicit none TYPE (complextaylor), INTENT (IN) :: S1 TYPE (complextaylor), INTENT (inout) :: S2 TYPE (complextaylor) s,ss complex(dp) d1 real(dp) r1 ,i1 integer i call alloc(s) call alloc(ss) r1=s1%r.sub.'0' i1=s1%i.sub.'0' d1=cmplx(r1,i1,kind=dp) s=s1 s=s1-d1 ss=cmplx(1.0_dp,0.0_dp,kind=dp) s2=cmplx(1.0_dp,0.0_dp,kind=dp) do i=1,no ss=ss*s ss=ss/REAL(i,kind=DP) s2=s2+ss enddo s2=exp(d1)*s2 call kill(s) call kill(ss) END subroutine exptpsa subroutine assc(s1) implicit none TYPE (complextaylor) s1 ! lastmaster=master ! 2002.12.13 select case(master) case(0:ndumt-1) master=master+1 case(ndumt) w_p=0 w_p%nc=1 w_p=(/" cannot indent anymore "/) w_p%fc='(1((1X,A72),/))' ! call !write_e(100) end select ! write(26,*) " complex taylor ",master call ass0(s1%r) call ass0(s1%i) end subroutine ASSc subroutine KILL_TPSA() IMPLICIT NONE logical present_tpsa present_tpsa=lingyun_yang ! if(.not.first_time) then if(last_tpsa==1) then lingyun_yang=.true. call KILL(varc1) call KILL(varc2) CALL KILL_fpp ! IN TPSALIE_ANALISYS elseif(last_tpsa==2) then lingyun_yang=.false. call KILL(varc1) call KILL(varc2) CALL KILL_fpp ! IN TPSALIE_ANALISYS endif lingyun_yang=default_tpsa last_tpsa=0 ! endif ! first_time=.true. END subroutine KILL_TPSA subroutine init_map_c(NO1,ND1,NP1,NDPT1,log) implicit none integer NO1,ND1,NP1,NDPT1 LOGICAL(lp) log,present_tpsa present_tpsa=lingyun_yang ! if(.not.first_time) then if(last_tpsa==1) then lingyun_yang=.true. call kill(varc1) call kill(varc2) elseif(last_tpsa==2) then lingyun_yang=.false. call kill(varc1) call kill(varc2) endif lingyun_yang=present_tpsa ! endif call init_map(NO1,ND1,NP1,NDPT1,log) call set_in_complex(log) call alloc(varc1) call alloc(varc2) end subroutine init_map_c subroutine init_tpsa_c(NO1,NP1,log) implicit none integer NO1,NP1 LOGICAL(lp) log,present_tpsa present_tpsa=lingyun_yang ! if(.not.first_time) then if(last_tpsa==1) then lingyun_yang=.true. call kill(varc1) call kill(varc2) elseif(last_tpsa==2) then lingyun_yang=.false. call kill(varc1) call kill(varc2) endif lingyun_yang=present_tpsa ! endif call init_tpsa(NO1,NP1,log) call set_in_complex(log) call alloc(varc1) call alloc(varc2) end subroutine init_tpsa_c subroutine set_in_complex(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_complex ! SUBROUTINE VARcC(S1,R1,R2,I1,I2) ! implicit none ! INTEGER,INTENT(IN)::I1,I2 ! complex(dp),INTENT(IN)::R1 ! complex(dp),INTENT(IN)::R2 ! big change ! type (complextaylor),INTENT(INOUT)::S1 ! integer localmaster ! localmaster=master ! ! s1=r1+r2*((one.mono.i1) + i_* (one.mono.i2) ) !! s1%r=(/REAL(R1,kind=DP),R2/).var.i1 !! s1%i=(/aimag(R1),R2/).var.i2 !! call var001(s1%r,REAL(R1,kind=DP),R2,i1) !! call var001(s1%i,aimag(R1),R2,i2) ! master=localmaster ! ! ! ! END SUBROUTINE VARcC ! ! SUBROUTINE VARc(S1,R1,I1,I2) ! implicit none ! INTEGER,INTENT(IN)::I1,I2 ! complex(dp),INTENT(IN)::R1 ! type (complextaylor),INTENT(INOUT)::S1 ! ! integer localmaster ! localmaster=master ! ! s1%r=REAL(R1,kind=DP).var.i1 ! s1%i=aimag(R1).var.i2 !! call var000(s1%r,REAL(R1,kind=DP),i1) !! call var000(s1%i,aimag(R1),i2) ! master=localmaster ! ! ! END SUBROUTINE VARc ! SUBROUTINE shiftc(S1,S2,s) ! implicit none ! INTEGER,INTENT(IN)::s ! type (complextaylor),INTENT(IN)::S1 ! type (complextaylor),INTENT(inout)::S2 ! ! call shift000(S1%r,S2%r,s) ! call shift000(S1%i,S2%i,s) ! END SUBROUTINE shiftc FUNCTION GETintk( S1, S2 ) implicit none TYPE (complextaylor) GETintk TYPE (complextaylor), INTENT (IN) :: S1 integer , INTENT (IN) :: S2 integer localmaster localmaster=master call ass(GETintk) GETintk%r=S1%r<=s2 GETintk%i=S1%i<=s2 ! call shiftda(GETintk,GETintk, s2 ) master=localmaster END FUNCTION GETintk SUBROUTINE pekc(S1,J,R1) implicit none INTEGER,INTENT(IN),dimension(:)::j complex(dp),INTENT(inout)::R1 type (complextaylor),INTENT(IN)::S1 real(dp) xr,xi call pek000(s1%r,j,xr) call pek000(s1%i,j,xi) r1=cmplx(xr,xi,kind=dp) END SUBROUTINE pekc SUBROUTINE pokc(S1,J,R1) implicit none INTEGER,INTENT(in),dimension(:)::j complex(dp),INTENT(in)::R1 type (complextaylor),INTENT(inout)::S1 call pok000(s1%r,J,REAL(r1,kind=DP)) call pok000(s1%i,J,aimag(r1)) END SUBROUTINE pokc SUBROUTINE CFUC(S2,FUN,S1)! implicit none type (complextaylor),INTENT(INOUT)::S1 type (complextaylor),INTENT(IN)::S2 type (complextaylor) T type (taylor) W complex(dp) FUN EXTERNAL FUN CALL ALLOC(T) CALL ALLOC(W) CALL CFUR(S2%R,FUN,W) T%R=W CALL CFUI(S2%I,FUN,W) T%R=T%R-W CALL CFUR(S2%I,FUN,W) T%I=W CALL CFUI(S2%R,FUN,W) T%I=T%I+W S1=T CALL KILL(T) CALL KILL(W) END SUBROUTINE CFUC SUBROUTINE CFURES(S2,FUN,S1)! implicit none type (pbresonance),INTENT(INOUT)::S1 type (pbresonance),INTENT(IN)::S2 type (complextaylor) T type (taylor) W complex(dp) FUN EXTERNAL FUN CALL ALLOC(T) CALL ALLOC(W) CALL CFUR(S2%COS%H,FUN,W) T%R=W CALL CFUI(S2%SIN%H,FUN,W) T%R=T%R-W CALL CFUR(S2%SIN%H,FUN,W) T%I=W CALL CFUI(S2%COS%H,FUN,W) T%I=T%I+W S1%COS%H=T%R S1%SIN%H=T%I CALL KILL(T) CALL KILL(W) END SUBROUTINE CFURES end module complex_taylor