JHUGen MELA  JHUGen v7.5.6, MELA v2.4.2
Matrix element calculations as used in JHUGen.
collier_tensors::tnten_cll Interface Reference

Public Member Functions

subroutine tnten_main_cll (TN, TNuv, MomVec, MomInv, masses2, N, rmax, TNerr)
 
subroutine tnten_list_cll (TN, TNuv, MomVec, MomInv, masses2, N, rmax, TNerr)
 
subroutine t1ten_main_cll (TA, TAuv, masses2, N, rmax, TAerr)
 
subroutine t1ten_list_cll (TA, TAuv, masses2, N, rmax, TAerr)
 

Detailed Description

Definition at line 86 of file collier_tensors.F90.

Member Function/Subroutine Documentation

◆ t1ten_list_cll()

subroutine collier_tensors::tnten_cll::t1ten_list_cll ( double complex, dimension(:), intent(out)  TA,
double complex, dimension(:), intent(out)  TAuv,
double complex, dimension(0:0), intent(in)  masses2,
integer, intent(in)  N,
integer, intent(in)  rmax,
double precision, dimension(0:rmax), intent(out), optional  TAerr 
)

Definition at line 6649 of file collier_tensors.F90.

6649 
6650  integer, intent(in) :: rmax,N
6651  double complex,intent(in) :: masses2(0:0)
6652  double complex, intent(out) :: TA(:),TAuv(:)
6653  double precision, intent(out), optional :: TAerr(0:rmax)
6654  integer :: r,i
6655  logical :: eflag
6656 
6657  if (n.ne.1) then
6658  call seterrflag_cll(-10)
6659  call errout_cll('TNten_cll','subroutine called with inconsistent arguments',eflag)
6660  end if
6661  if (n.gt.nmax_cll) then
6662  call seterrflag_cll(-10)
6663  call errout_cll('TNten_cll','argument N larger than Nmax_cll',eflag,.true.)
6664  write(nerrout_cll,*) 'N =',n
6665  write(nerrout_cll,*) 'Nmax_cll =',nmax_cll
6666  write(nerrout_cll,*) 'Reinitialize COLLIER with Nmax_cll >= ',n
6667  call propagateerrflag_cll
6668  return
6669  end if
6670  if (rmax.gt.rmax_cll) then
6671  call seterrflag_cll(-10)
6672  call errout_cll('TNten_cll','argument rmax larger than rmax_cll',eflag,.true.)
6673  write(nerrout_cll,*) 'rmax =',rmax
6674  write(nerrout_cll,*) 'rmax_cll =',rmax_cll
6675  write(nerrout_cll,*) 'Reinitialize COLLIER with rmax_cll >= ',rmax
6676  call propagateerrflag_cll
6677  return
6678  end if
6679 
6680  call t1ten_list_checked_cll(ta,tauv,masses2,n,rmax,taerr)
6681 

◆ t1ten_main_cll()

subroutine collier_tensors::tnten_cll::t1ten_main_cll ( double complex, dimension(0:rmax,0:rmax,0:rmax,0:rmax), intent(out)  TA,
double complex, dimension(0:rmax,0:rmax,0:rmax,0:rmax), intent(out)  TAuv,
double complex, dimension(0:0), intent(in)  masses2,
integer, intent(in)  N,
integer, intent(in)  rmax,
double precision, dimension(0:rmax), intent(out), optional  TAerr 
)

Definition at line 6470 of file collier_tensors.F90.

6470 
6471  integer, intent(in) :: rmax,N
6472  double complex,intent(in) :: masses2(0:0)
6473  double complex, intent(out) :: TA(0:rmax,0:rmax,0:rmax,0:rmax)
6474  double complex, intent(out) :: TAuv(0:rmax,0:rmax,0:rmax,0:rmax)
6475  double precision, intent(out), optional :: TAerr(0:rmax)
6476  double complex :: TA2(0:rmax,0:rmax,0:rmax,0:rmax), TAuv2(0:rmax,0:rmax,0:rmax,0:rmax)
6477  double complex :: CA(0:rmax/2), CAuv(0:rmax/2)
6478  double precision :: CAerr(0:rmax),TAerr_aux(0:rmax),TAerr_aux2(0:rmax)
6479  double complex :: args(1)
6480  double precision :: TAdiff(0:rmax),norm(0:rmax),norm_coli,norm_dd,TAacc(0:rmax)
6481  integer :: r,n0,n1,n2,n3
6482  logical :: eflag
6483 
6484  if (n.ne.1) then
6485  call seterrflag_cll(-10)
6486  call errout_cll('TNten_cll','subroutine called with inconsistent arguments',eflag)
6487  end if
6488  if (n.gt.nmax_cll) then
6489  call seterrflag_cll(-10)
6490  call errout_cll('TNten_cll','argument N larger than Nmax_cll',eflag,.true.)
6491  write(nerrout_cll,*) 'N =',n
6492  write(nerrout_cll,*) 'Nmax_cll =',nmax_cll
6493  write(nerrout_cll,*) 'Reinitialize COLLIER with Nmax_cll >= ',n
6494  call propagateerrflag_cll
6495  return
6496  end if
6497  if (rmax.gt.rmax_cll) then
6498  call seterrflag_cll(-10)
6499  call errout_cll('TNten_cll','argument rmax larger than rmax_cll',eflag,.true.)
6500  write(nerrout_cll,*) 'rmax =',rmax
6501  write(nerrout_cll,*) 'rmax_cll =',rmax_cll
6502  write(nerrout_cll,*) 'Reinitialize COLLIER with rmax_cll >= ',rmax
6503  call propagateerrflag_cll
6504  return
6505  end if
6506 
6507  args(1) = masses2(0)
6508  call setmasterfname_cll('TNten_cll')
6509  call setmastern_cll(1)
6510  call setmasterr_cll(rmax)
6511  call setmasterargs_cll(1,args)
6512 
6513  call settencache_cll(tenred_cll-1)
6514 
6515  if (mode_cll.eq.3) then
6516  ! calculate tensor with coefficients from COLI
6517  mode_cll = 1
6518 ! call A_cll(CA,CAuv,masses2(0),rmax,CAerr,0)
6519  call tn_cll(ca,cauv,masses2(0:0),1,rmax,caerr,0)
6520  call calctensora(ta,tauv,taerr_aux,ca,cauv,caerr,rmax)
6521 
6522  ! calculate tensor with coefficients from DD
6523  mode_cll = 2
6524 ! call A_cll(CA,CAuv,masses2(0),rmax,CAerr,0)
6525  call tn_cll(ca,cauv,masses2(0:0),1,rmax,caerr,0)
6526  call calctensora(ta2,tauv2,taerr_aux2,ca,cauv,caerr,rmax)
6527 
6528  ! comparison --> take better result
6529  mode_cll = 3
6530  do r=0,rmax
6531  norm_coli=0d0
6532  norm_dd=0d0
6533  do n0=0,r
6534  do n1=0,r-n0
6535  do n2=0,r-n0-n1
6536  n3=r-n0-n1-n2
6537  norm_coli = max(norm_coli,abs(ta(n0,n1,n2,n3)))
6538  norm_dd = max(norm_dd,abs(ta2(n0,n1,n2,n3)))
6539  end do
6540  end do
6541  end do
6542  if (norm_coli.eq.0d0) then
6543  norm_coli = abs(masses2(0))
6544  if(norm_coli.ne.0d0) then
6545  norm_coli=norm_coli**(1+real(r)/2)
6546  else
6547  norm_coli=muuv2_cll**(1+real(r)/2)
6548  end if
6549  end if
6550  if (norm_dd.eq.0d0) then
6551  norm_dd = abs(masses2(0))
6552  if(norm_dd.ne.0d0) then
6553  norm_dd=norm_dd**(1+real(r)/2)
6554  else
6555  norm_dd=muuv2_cll**(1+real(r)/2)
6556  end if
6557  end if
6558  norm(r) = min(norm_coli,norm_dd)
6559  end do
6560 
6561  call checktena_cll(ta,ta2,masses2,norm,rmax,tadiff)
6562 ! call CheckTensors_cll(TA,TA2,masses2,norm,1,rmax,TAdiff)
6563 
6564  if (taerr_aux(rmax).lt.taerr_aux2(rmax)) then
6565  if (present(taerr)) taerr = max(taerr_aux,tadiff*norm)
6566  do r=0,rmax
6567  taacc(r) = max(taerr_aux(r)/norm(r),tadiff(r))
6568  end do
6569  pointscnttnten_coli(1) = pointscnttnten_coli(1) + 1
6570  else
6571  ta = ta2
6572  tauv = tauv2
6573  if (present(taerr)) taerr = max(taerr_aux2,tadiff*norm)
6574  do r=0,rmax
6575  taacc(r) = max(taerr_aux2(r)/norm(r),tadiff(r))
6576  end do
6577  pointscnttnten_dd(1) = pointscnttnten_dd(1) + 1
6578  end if
6579 
6580  else
6581 ! call A_cll(CA,CAuv,masses2(0),rmax,CAerr,0)
6582  call tn_cll(ca,cauv,masses2(0:0),1,rmax,caerr,0)
6583  call calctensora(ta,tauv,taerr_aux,ca,cauv,caerr,rmax)
6584  if (present(taerr)) taerr = taerr_aux
6585  do r=0,rmax
6586  norm(r)=0d0
6587  do n0=0,r
6588  do n1=0,r-n0
6589  do n2=0,r-n0-n1
6590  n3=r-n0-n1-n2
6591  norm(r) = max(norm(r),abs(ta(n0,n1,n2,n3)))
6592  end do
6593  end do
6594  end do
6595  if (norm(r).eq.0d0) then
6596  norm(r) = abs(masses2(0))
6597  if(norm(r).ne.0d0) then
6598  norm(r)=norm(r)**(1+real(r)/2)
6599  else
6600  norm(r)=muuv2_cll**(1+real(r)/2)
6601  end if
6602  end if
6603  end do
6604  do r=0,rmax
6605  taacc(r) = taerr_aux(r)/norm(r)
6606  end do
6607 
6608  end if
6609 
6610  call propagateaccflag_cll(taacc,rmax)
6611  call propagateerrflag_cll
6612 
6613  if (monitoring) then
6614  pointscnttnten_cll(1) = pointscnttnten_cll(1) + 1
6615 
6616  if(maxval(taacc).gt.reqacc_cll) accpointscnttnten_cll(1) = accpointscnttnten_cll(1) + 1
6617 
6618  if(maxval(taacc).gt.critacc_cll) then
6619  critpointscnttnten_cll(1) = critpointscnttnten_cll(1) + 1
6620  if ( critpointscnttnten_cll(1).le.noutcritpointsmax_cll(1) ) then
6621  call critpointsout_cll('TNten_cll',1,maxval(taacc),critpointscnttnten_cll(1))
6622  if( critpointscnttnten_cll(1).eq.noutcritpointsmax_cll(1)) then
6623  write(ncpout_cll,*) ' Further output of Critical Points for TNten_cll suppressed for N =',1
6624  write(ncpout_cll,*)
6625  endif
6626 #ifdef CritPoints2
6627  call critpointsout2_cll('TNten_cll',1,maxval(taacc),critpointscnttnten_cll(1))
6628  if( critpointscnttnten_cll(1).eq.noutcritpointsmax_cll(1)) then
6629  write(ncpout2_cll,*) ' Further output of Critical Points for TNten_cll suppressed for N =',1
6630  write(ncpout2_cll,*)
6631  endif
6632 #endif
6633  end if
6634  end if
6635  end if
6636 

◆ tnten_list_cll()

subroutine collier_tensors::tnten_cll::tnten_list_cll ( double complex, dimension(:), intent(out)  TN,
double complex, dimension(:), intent(out)  TNuv,
double complex, dimension(0:3,max(n-1,1)), intent(in)  MomVec,
double complex, dimension(:), intent(in)  MomInv,
double complex, dimension(0:max(n-1,1)), intent(in)  masses2,
integer, intent(in)  N,
integer, intent(in)  rmax,
double precision, dimension(0:rmax), intent(out), optional  TNerr 
)

Definition at line 6184 of file collier_tensors.F90.

6184 
6185  integer, intent(in) :: N,rmax
6186  double complex, intent(in) :: MomVec(0:3,max(N-1,1)), MomInv(:), masses2(0:max(N-1,1))
6187  double complex, intent(out) :: TN(:),TNuv(:)
6188  double precision, intent(out), optional :: TNerr(0:rmax)
6189  logical :: eflag
6190 
6191  if (n.eq.1) then
6192  call seterrflag_cll(-10)
6193  call errout_cll('TNten_cll','subroutine called with wrong number of arguments for N=1',eflag)
6194  call propagateerrflag_cll
6195  return
6196  end if
6197  if (n.gt.nmax_cll) then
6198  call seterrflag_cll(-10)
6199  call errout_cll('TNten_cll','argument N larger than Nmax_cll',eflag,.true.)
6200  write(nerrout_cll,*) 'N =',n
6201  write(nerrout_cll,*) 'Nmax_cll =',nmax_cll
6202  write(nerrout_cll,*) 'Reinitialize COLLIER with Nmax_cll >= ',n
6203  call propagateerrflag_cll
6204  return
6205  end if
6206  if (rmax.gt.rmax_cll) then
6207  call seterrflag_cll(-10)
6208  call errout_cll('TNten_cll','argument rmax larger than rmax_cll',eflag,.true.)
6209  write(nerrout_cll,*) 'rmax =',rmax
6210  write(nerrout_cll,*) 'rmax_cll =',rmax_cll
6211  write(nerrout_cll,*) 'Reinitialize COLLIER with rmax_cll >= ',rmax
6212  call propagateerrflag_cll
6213  return
6214  end if
6215 
6216  call tnten_list_checked_cll(tn,tnuv,momvec,mominv,masses2,n,rmax,tnerr)
6217 

◆ tnten_main_cll()

subroutine collier_tensors::tnten_cll::tnten_main_cll ( double complex, dimension(0:rmax,0:rmax,0:rmax,0:rmax), intent(out)  TN,
double complex, dimension(0:rmax,0:rmax,0:rmax,0:rmax), intent(out)  TNuv,
double complex, dimension(0:3,max(n-1,1)), intent(in)  MomVec,
double complex, dimension(:), intent(in)  MomInv,
double complex, dimension(0:max(n-1,1)), intent(in)  masses2,
integer, intent(in)  N,
integer, intent(in)  rmax,
double precision, dimension(0:rmax), intent(out), optional  TNerr 
)

Definition at line 5877 of file collier_tensors.F90.

5877 
5878  integer, intent(in) :: N,rmax
5879  double complex, intent(in) :: MomVec(0:3,max(N-1,1)), MomInv(:), masses2(0:max(N-1,1))
5880  double complex, intent(out) :: TN(0:rmax,0:rmax,0:rmax,0:rmax)
5881  double complex, intent(out) :: TNuv(0:rmax,0:rmax,0:rmax,0:rmax)
5882  double precision, intent(out), optional :: TNerr(0:rmax)
5883  logical :: eflag
5884 
5885  if (n.eq.1) then
5886  call seterrflag_cll(-10)
5887  call errout_cll('TNten_cll','subroutine called with wrong number of arguments for N=1',eflag)
5888  call propagateerrflag_cll
5889  return
5890  end if
5891 
5892  if (n.gt.nmax_cll) then
5893  call seterrflag_cll(-10)
5894  call errout_cll('TN_cll','argument N larger than Nmax_cll',eflag,.true.)
5895  write(nerrout_cll,*) 'N =',n
5896  write(nerrout_cll,*) 'Nmax_cll =',nmax_cll
5897  write(nerrout_cll,*) 'Reinitialize COLLIER with Nmax_cll >= ',n
5898  call propagateerrflag_cll
5899  return
5900  end if
5901  if (rmax.gt.rmax_cll) then
5902  call seterrflag_cll(-10)
5903  call errout_cll('TN_cll','argument rmax larger than rmax_cll',eflag,.true.)
5904  write(nerrout_cll,*) 'rmax =',rmax
5905  write(nerrout_cll,*) 'rmax_cll =',rmax_cll
5906  write(nerrout_cll,*) 'Reinitialize COLLIER with rmax_cll >= ',rmax
5907  call propagateerrflag_cll
5908  return
5909  end if
5910 
5911  call tnten_main_checked_cll(tn,tnuv,momvec,mominv,masses2,n,rmax,tnerr)
5912 

The documentation for this interface was generated from the following file:
endif
O0 g endif() string(TOLOWER "$
Definition: CMakeLists.txt:143