5722 integer,
intent(in) :: rmax
5723 double complex,
intent(in) :: p10,m02,m12
5724 double precision :: q10
5725 double complex :: mm02,mm12
5726 double complex,
intent(out) :: DBuv(0:rmax/2,0:rmax)
5727 double complex,
intent(out) :: DB(0:rmax/2,0:rmax)
5728 double precision,
optional,
intent(out) :: DBerr(0:rmax)
5729 double precision :: DBerraux(0:rmax),DBdiff(0:rmax)
5730 double complex :: DB2uv(0:rmax/2,0:rmax), DB2(0:rmax/2,0:rmax)
5731 double complex :: DBcoliuv(0:rmax/2,0:rmax)
5732 double complex :: DBcoli(0:rmax/2,0:rmax)
5733 double complex :: DB0dd,DB1dd
5734 double complex :: args(3)
5735 double complex :: DBdduv(0:rmax,0:rmax)
5736 double complex :: DBdd(0:rmax,0:rmax)
5737 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
5738 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
5739 double precision :: DBacc(0:rmax),DBacc2(0:rmax),norm,norm_coli,norm_dd
5740 integer :: accflagDD,errflagDD,NDD,rankDD
5741 integer :: n0,rank,errflag,i0,i1,n
5742 logical :: flag = .true.,eflag
5750 call setmasterfname_cll(
'DB_cll')
5751 call setmastern_cll(2)
5752 call setmasterr_cll(rmax)
5753 call setmasterargs_cll(3,args)
5755 select case (mode_cll)
5761 if (
present(dberr))
then
5762 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberr)
5764 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberraux)
5766 db(0:rmax/2,0:rmax) = dbcoli(0:rmax/2,0:rmax)
5767 dbuv(0:rmax/2,0:rmax) = dbcoliuv(0:rmax/2,0:rmax)
5774 q10 = dreal(getminf2dd_cll(p10))
5775 mm02 = getminf2dd_cll(m02)
5776 mm12 = getminf2dd_cll(m12)
5781 call db_dd(dbdd,dbdduv,q10,mm02,mm12,rank)
5784 db(0:rank/2,0:rank) = dbdd(0:rank/2,0:rank)
5785 dbuv(0:rank/2,0:rank) = dbdduv(0:rank/2,0:rank)
5794 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberraux)
5795 db(0:rmax/2,0:rmax) = dbcoli(0:rmax/2,0:rmax)
5796 dbuv(0:rmax/2,0:rmax) = dbcoliuv(0:rmax/2,0:rmax)
5801 q10 = dreal(getminf2dd_cll(p10))
5802 mm02 = getminf2dd_cll(m02)
5803 mm12 = getminf2dd_cll(m12)
5808 call db_dd(dbdd,dbdduv,q10,mm02,mm12,rank)
5811 db2(0:rank/2,0:rank) = dbdd(0:rank/2,0:rank)
5812 db2uv(0:rank/2,0:rank) = dbdduv(0:rank/2,0:rank)
5813 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,0)
5815 norm_coli = maxval(abs(db(0,0:rmax)))
5816 norm_dd = maxval(abs(db2(0,0:rmax)))
5817 if (norm_coli.eq.0d0) then
5818 norm_coli = max(abs(p10),abs(m02),abs(m12))
5819 if(norm_coli.ne.0d0) then
5820 norm_coli=1d0/norm_coli
5822 norm_coli=1d0/muir2_cll
5825 if (norm_dd.eq.0d0) then
5826 norm_dd = max(abs(p10),abs(m02),abs(m12))
5827 if(norm_dd.ne.0d0) then
5830 norm_dd=1d0/muir2_cll
5833 norm = min(norm_coli,norm_dd)
5836 call checkcoefsdb_cll(db,db2,p10,m02,m12,rank,norm,dbdiff)
5838 if (dberraux(rmax).lt.accabsdd(rmax)) then
5839 if (
present(dberr)) dberr = max(dberraux,dbdiff)
5840 dbacc = max(dberraux/norm_coli,dbdiff/norm)
5841 if (monitoring) pointscntdb_coli = pointscntdb_coli + 1
5845 if (
present(dberr)) dberr = max(accabsdd(0:rmax),dbdiff)
5846 dbacc = max(accabsdd(0:rmax)/norm_dd,dbdiff/norm)
5847 if (monitoring) pointscntdb_dd = pointscntdb_dd + 1
5850 call propagateaccflag_cll(dbacc,rmax)
5854 call propagateerrflag_cll
5856 if (monitoring) then
5857 pointscntdb_cll = pointscntdb_cll + 1
5859 if(maxval(dbacc).gt.reqacc_cll) accpointscntdb_cll = accpointscntdb_cll + 1
5861 if(maxval(dbacc).gt.critacc_cll) then
5862 critpointscntdb_cll = critpointscntdb_cll + 1
5863 if ( critpointscntdb_cll.le.noutcritpointsmaxdb_cll ) then
5864 call critpointsout_cll(
'DB_cll',0,maxval(dbacc), critpointscntdb_cll)
5865 if( critpointscntdb_cll.eq.noutcritpointsmaxdb_cll) then
5866 write(ncpout_cll,*)
' Further output of Critical Points for DB_cll suppressed '