1
SUBROUTINE %(proc_prefix)sGOLEMLOOP(NLOOPLINE,PL,M2L,RANK,RES,STABLE)
5
C Interface between MG5 and Golem95.
6
C The Golem95 version should be higher than 1.3.0.
7
C It supports RANK = NLOOPLINE + 1 tensor integrals when 1 < NLOOPLINE < 6.
15
USE FORM_FACTOR_TYPE, ONLY: FORM_FACTOR
16
USE PRECISION_GOLEM, ONLY: KI
19
USE FORM_FACTOR_1P, ONLY: A10
20
USE FORM_FACTOR_2P, ONLY: A20
21
USE FORM_FACTOR_3P, ONLY: A30
22
USE FORM_FACTOR_4P, ONLY: A40
23
USE FORM_FACTOR_5P, ONLY: A50
24
USE FORM_FACTOR_6P, ONLY: A60
30
PARAMETER (NEXTERNAL=%(nexternal)d)
31
LOGICAL checkPConservation
32
PARAMETER (checkPConservation=.TRUE.)
33
%(real_dp_format)s NORMALIZATION
34
PARAMETER (NORMALIZATION = 1.D0/(16.D0*3.14159265358979323846D0**2))
35
REAL(KI),DIMENSION(0:3),PARAMETER::NULL_VEC = (/0.0_ki,0.0_ki,0.0_ki,0.0_ki/)
36
C GOLEM_RUN_MODE = 1: Use directly MadLoop tensorial coefficients
37
C GOLEM_RUN_MODE = 2: Reconstruct the tensorial coefficeints directly from
38
C numerator using golem internal reconstruction routine
39
C GOLEM_RUN_MODE = 3: Cross-checked reconstructed coefficients against
40
C MadLoop internal ones.
41
INTEGER GOLEM_RUN_MODE
42
PARAMETER (GOLEM_RUN_MODE=1)
43
C The following is the acceptance threshold used for GOLEM_RUN_MODE = 3
44
%(real_dp_format)s coef_check_thrs
45
DATA coef_check_thrs/1.0d-13/
46
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
48
LOGICAL PASS_COEF_CHECK
52
INTEGER NLOOPLINE, RANK
53
%(real_dp_format)s PL(0:3,NLOOPLINE)
54
%(real_dp_format)s PCT(0:3,0:NLOOPLINE-1)
55
REAL(ki) PGOLEM(NLOOPLINE,0:3)
56
%(mass_dp_format)s M2L(NLOOPLINE)
57
COMPLEX(ki) M2LGOLEM(NLOOPLINE)
58
%(complex_dp_format)s RES(3)
64
TYPE(FORM_FACTOR)::RES_GOLEM
66
COMPLEX(KI)::COEFFS0,COEFFS0_REC
67
TYPE(COEFF_TYPE_1)::COEFFS1,COEFFS1_REC
68
TYPE(COEFF_TYPE_2)::COEFFS2,COEFFS2_REC
69
TYPE(COEFF_TYPE_3)::COEFFS3,COEFFS3_REC
70
TYPE(COEFF_TYPE_4)::COEFFS4,COEFFS4_REC
71
TYPE(COEFF_TYPE_5)::COEFFS5,COEFFS5_REC
72
TYPE(COEFF_TYPE_6)::COEFFS6,COEFFS6_REC
74
C The pinch propagator optimization is not used, so for now it is
80
COMPLEX(KI) %(proc_prefix)sGOLEM_LOOPNUM
81
EXTERNAL %(proc_prefix)sGOLEM_LOOPNUM
82
LOGICAL %(proc_prefix)sCOMPARE_COEFS_0
83
LOGICAL %(proc_prefix)sCOMPARE_COEFS_1
84
LOGICAL %(proc_prefix)sCOMPARE_COEFS_2
85
LOGICAL %(proc_prefix)sCOMPARE_COEFS_3
86
LOGICAL %(proc_prefix)sCOMPARE_COEFS_4
87
LOGICAL %(proc_prefix)sCOMPARE_COEFS_5
88
LOGICAL %(proc_prefix)sCOMPARE_COEFS_6
94
%(real_dp_format)s LSCALE
95
common/%(proc_prefix)sCT/LSCALE,CTMODE
97
INTEGER ID,SQSOINDEX,R
98
COMMON/%(proc_prefix)sLOOP/ID,SQSOINDEX,R
100
LOGICAL CTINIT, TIRINIT, GOLEMINIT
101
COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT
104
PARAMETER (NLOOPGROUPS=%(nloop_groups)d)
106
PARAMETER (LOOPMAXCOEFS=%(loop_max_coefs)d)
108
PARAMETER (NSQUAREDSO=%(nSquaredSO)d)
110
%(complex_dp_format)s LOOPCOEFS(0:LOOPMAXCOEFS-1,NSQUAREDSO,NLOOPGROUPS)
111
COMMON/%(proc_prefix)sLCOEFS/LOOPCOEFS
116
C INITIALIZE CUTTOOLS IF NEEDED
119
CALL %(proc_prefix)sINITGOLEM()
122
C No stability test intrisic to Golem95 now
125
C This initialization must be done for each reduction because we
126
C have not setup anyoptimization using pinched propagators yet.
127
CALL INITGOLEM95(NLOOPLINE)
130
C YOU CAN FIND THE DETAILS ABOUT THE DIFFERENT CTMODE AT THE BEGINNING OF THE FILE CTS_CUTS.F90 IN THE CUTTOOLS DISTRIBUTION
132
C CONVERT THE MASSES TO BE COMPLEX
137
C CONVERT THE MOMENTA FLOWING IN THE LOOP LINES TO CT CONVENTIONS
145
PCT(I,0)=PCT(I,0)+PL(I,J)
148
if (checkPConservation) then
149
if (PCT(0,0).gt.1.d-6) then
150
write(*,*) 'energy is not conserved ',PCT(0,0)
151
stop 'energy is not conserved'
152
elseif (PCT(1,0).gt.1.d-6) then
153
write(*,*) 'px is not conserved ',PCT(1,0)
154
stop 'px is not conserved'
155
elseif (PCT(2,0).gt.1.d-6) then
156
write(*,*) 'py is not conserved ',PCT(2,0)
157
stop 'py is not conserved'
158
elseif (PCT(3,0).gt.1.d-6) then
159
write(*,*) 'pz is not conserved ',PCT(3,0)
160
stop 'pz is not conserved'
166
PCT(I,J)=PCT(I,J)+PL(I,K)
171
C Now convert the loop momenta to Golem95 conventions
175
PGOLEM(j,i)=PCT(i,j-1)
179
C Fill in the kinematic s-matrix while taking care of on-shell limits.
180
CALL %(proc_prefix)sSETUP_KIN_MATRIX(NLOOPLINE,PGOLEM,M2LGOLEM)
181
C Construct the golem internal matrices derived from the kinetic one.
182
CALL PREPARESMATRIX()
184
C Fill in the golem coefficents and compute the loop
185
IF(GOLEM_RUN_MODE.EQ.2)THEN
186
res_golem = evaluate_b(%(proc_prefix)sGOLEM_LOOPNUM,PGOLEM,0,RANK)
188
PASS_COEF_CHECK=.TRUE.
191
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_0(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS0)
192
IF(GOLEM_RUN_MODE.EQ.3)THEN
193
COEFFS0_REC = %(proc_prefix)sGOLEM_LOOPNUM(NULL_VEC,0.0_ki)
194
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_0(COEFFS0,COEFFS0_REC)
197
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_1(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS1)
198
IF(GOLEM_RUN_MODE.EQ.3)THEN
199
CALL RECONSTRUCT1(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS1_REC)
200
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_1(COEFFS1,COEFFS1_REC)
203
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_2(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS2)
204
IF(GOLEM_RUN_MODE.EQ.3)THEN
205
CALL RECONSTRUCT2(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS2_REC)
206
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_2(COEFFS2,COEFFS2_REC)
209
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_3(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS3)
210
IF(GOLEM_RUN_MODE.EQ.3)THEN
211
CALL RECONSTRUCT3(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS3_REC)
212
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_3(COEFFS3,COEFFS3_REC)
215
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_4(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS4)
216
IF(GOLEM_RUN_MODE.EQ.3)THEN
217
CALL RECONSTRUCT4(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS4_REC)
218
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_4(COEFFS4,COEFFS4_REC)
221
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_5(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS5)
222
IF(GOLEM_RUN_MODE.EQ.3)THEN
223
CALL RECONSTRUCT5(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS5_REC)
224
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_5(COEFFS5,COEFFS5_REC)
227
CALL %(proc_prefix)sFILL_GOLEM_COEFFS_6(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS6)
228
IF(GOLEM_RUN_MODE.EQ.3)THEN
229
CALL RECONSTRUCT6(%(proc_prefix)sGOLEM_LOOPNUM,COEFFS6_REC)
230
PASS_COEF_CHECK=%(proc_prefix)sCOMPARE_COEFS_6(COEFFS6,COEFFS6_REC)
233
WRITE(*,*)"Not yet implemented in Golem95 for rank= ",RANK
237
IF(.NOT.PASS_COEF_CHECK)THEN
238
WRITE(*,*)'Coefs mismatch for ID ',ID,' and rank ',RANK
239
WRITE(*,*)'Coefs form MadLoop5:'
242
WRITE(*,*)'Constant coef = ',COEFFS0
244
CALL PRINT_COEFFS(COEFFS1)
246
CALL PRINT_COEFFS(COEFFS2)
248
CALL PRINT_COEFFS(COEFFS3)
250
CALL PRINT_COEFFS(COEFFS4)
252
CALL PRINT_COEFFS(COEFFS5)
254
CALL PRINT_COEFFS(COEFFS6)
256
WRITE(*,*)'Coefs reconstructed by Golem95:'
259
WRITE(*,*)'Constant coef = ',COEFFS0_REC
261
CALL PRINT_COEFFS(COEFFS1_REC)
263
CALL PRINT_COEFFS(COEFFS2_REC)
265
CALL PRINT_COEFFS(COEFFS3_REC)
267
CALL PRINT_COEFFS(COEFFS4_REC)
269
CALL PRINT_COEFFS(COEFFS5_REC)
271
CALL PRINT_COEFFS(COEFFS6_REC)
276
SELECT CASE(NLOOPLINE)
278
WRITE(*,*)'Golem95 cannot handle with tadpole yet'
283
RES_GOLEM = COEFFS0*A20(PINCH)
285
RES_GOLEM = CONTRACT2_1(COEFFS1,PGOLEM,PINCH)
287
RES_GOLEM = CONTRACT2_2(COEFFS2,PGOLEM,PINCH)
289
RES_GOLEM = CONTRACT2_3(COEFFS3,PGOLEM,PINCH)
291
WRITE(*,*)"Golem95 cannot handle with: N,r = ",2,RANK
297
RES_GOLEM = COEFFS0*A30(PINCH)
299
RES_GOLEM = CONTRACT3_1(COEFFS1,PGOLEM,PINCH)
301
RES_GOLEM = CONTRACT3_2(COEFFS2,PGOLEM,PINCH)
303
RES_GOLEM = CONTRACT3_3(COEFFS3,PGOLEM,PINCH)
305
RES_GOLEM = CONTRACT3_4(COEFFS4,PGOLEM,PINCH)
307
WRITE(*,*)"Golem95 cannot handle with: N,r = ",3,RANK
313
RES_GOLEM = COEFFS0*A40(PINCH)
315
RES_GOLEM = CONTRACT4_1(COEFFS1,PGOLEM,PINCH)
317
RES_GOLEM = CONTRACT4_2(COEFFS2,PGOLEM,PINCH)
319
RES_GOLEM = CONTRACT4_3(COEFFS3,PGOLEM,PINCH)
321
RES_GOLEM = CONTRACT4_4(COEFFS4,PGOLEM,PINCH)
323
RES_GOLEM = CONTRACT4_5(COEFFS5,PGOLEM,PINCH)
325
WRITE(*,*)"Golem95 cannot handle with: N,r = ",4,RANK
331
RES_GOLEM = COEFFS0*A50(PINCH)
333
RES_GOLEM = CONTRACT5_1(COEFFS1,PGOLEM,PINCH)
335
RES_GOLEM = CONTRACT5_2(COEFFS2,PGOLEM,PINCH)
337
RES_GOLEM = CONTRACT5_3(COEFFS3,PGOLEM,PINCH)
339
RES_GOLEM = CONTRACT5_4(COEFFS4,PGOLEM,PINCH)
341
RES_GOLEM = CONTRACT5_5(COEFFS5,PGOLEM,PINCH)
343
RES_GOLEM = CONTRACT5_6(COEFFS6,PGOLEM,PINCH)
345
WRITE(*,*)"Golem95 cannot handle with: N,r = ",5,RANK
351
RES_GOLEM = COEFFS0*A60(PINCH)
353
RES_GOLEM = CONTRACT6_1(COEFFS1,PGOLEM,PINCH)
355
RES_GOLEM = CONTRACT6_2(COEFFS2,PGOLEM,PINCH)
357
RES_GOLEM = CONTRACT6_3(COEFFS3,PGOLEM,PINCH)
359
RES_GOLEM = CONTRACT6_4(COEFFS4,PGOLEM,PINCH)
361
RES_GOLEM = CONTRACT6_5(COEFFS5,PGOLEM,PINCH)
363
RES_GOLEM = CONTRACT6_6(COEFFS6,PGOLEM,PINCH)
365
WRITE(*,*)"Golem95 cannot handle with: N,r = ",6,RANK
369
WRITE(*,*)"Golem95 cannot handle with: N = ",NLOOPLINE
375
C WRITE(*,*) 'Loop ID',ID,' =',RES(1),RES(2),RES(3)
377
C Finally free golem memory and cache
382
FUNCTION %(proc_prefix)sGOLEM_LOOPNUM(Q,mu2)
383
USE PRECISION_GOLEM, ONLY: KI
384
REAL(KI),DIMENSION(0:3),INTENT(IN)::Q
385
REAL(KI),INTENT(IN)::mu2
386
COMPLEX(KI)::%(proc_prefix)sGOLEM_LOOPNUM
388
%(complex_dp_format)s QQ(0:3),num
392
QQ(i)=CMPLX(Q(i),0.0d0,KIND=16)
395
CALL %(proc_prefix)sLOOPNUM(QQ,num)
396
%(proc_prefix)sGOLEM_LOOPNUM=num
400
SUBROUTINE %(proc_prefix)sINITGOLEM()
402
C INITIALISATION OF GOLEM
411
%(real_dp_format)s THRS
412
LOGICAL EXT_NUM_FOR_R1
416
include 'MadLoopParams.inc'
421
C DEFAULT PARAMETERS FOR GOLEM
422
C -------------------------------
423
C One can chose here to have either just the rational R1 piece
424
C or everything but the R2
429
SUBROUTINE %(proc_prefix)sSETUP_KIN_MATRIX(NLOOPLINE,PGOLEM,M2L)
434
USE PRECISION_GOLEM, ONLY: KI
439
REAL(KI) PGOLEM(NLOOPLINE,0:3)
440
COMPLEX(KI) M2L(NLOOPLINE)
445
include 'MadLoopParams.inc'
447
%(real_dp_format)s LSCALE
448
COMMON/%(proc_prefix)sCT/LSCALE,CTMODE
449
%(real_dp_format)s REF_NORMALIZATION
462
s_mat(i,j)=-(M2L(i)+M2L(j))
464
DIFFSQ = (CMPLX(PGOLEM(i,0),0.0_KI,kind=KI)-CMPLX(PGOLEM(j,0),0.0_KI,KIND=KI))**2
466
DIFFSQ = DIFFSQ-(CMPLX(PGOLEM(i,k),0.0_KI,KIND=KI)-CMPLX(PGOLEM(j,k),0.0_KI,KIND=KI))**2
468
s_mat(i,j)=DIFFSQ-M2L(i)-M2L(j)
469
IF(M2L(i).NE.0.0D0)THEN
470
IF(ABS((DIFFSQ-M2L(i))/M2L(i)).LT.OSThres)THEN
474
IF(M2L(j).NE.0.0D0)THEN
475
IF(ABS((DIFFSQ-M2L(j))/M2L(j)).LT.OSThres)THEN
479
C Chose what seems the most appropriate way to compare
480
C massless onshellness. (here we pick the energy component)
481
REF_NORMALIZATION=(PGOLEM(i,0)+PGOLEM(j,0))**2
482
IF(REF_NORMALIZATION.NE.0.0D0)THEN
483
IF(ABS(DIFFSQ/REF_NORMALIZATION).LT.OSThres)THEN
484
s_mat(i,j)=-(M2L(i)+M2L(j))
493
FUNCTION %(proc_prefix)sCOMPARE_COEFS_0(COEFS_A,COEFS_B)
495
USE PRECISION_GOLEM, ONLY: KI
496
COMPLEX(KI) COEFS_A,COEFS_B
497
%(real_dp_format)s coef_check_thrs
498
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
499
%(real_dp_format)s DENOM,NUM
500
LOGICAL %(proc_prefix)sCOMPARE_COEFS_0
502
NUM = ABS(COEFS_A-COEFS_B)
503
DENOM = ABS(COEFS_A+COEFS_B)
505
%(proc_prefix)sCOMPARE_COEFS_0=((NUM/DENOM).LT.coef_check_thrs)
507
%(proc_prefix)sCOMPARE_COEFS_0=(NUM.LT.coef_check_thrs)
512
FUNCTION %(proc_prefix)sCOMPARE_COEFS_1(COEFS_A,COEFS_B)
515
TYPE(COEFF_TYPE_1)COEFS_A,COEFS_B
516
%(real_dp_format)s COEF_CHECK_THRS
517
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
518
%(real_dp_format)s DENOM,NUM
519
LOGICAL %(proc_prefix)sCOMPARE_COEFS_1
521
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))
522
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))
525
%(proc_prefix)sCOMPARE_COEFS_1=((NUM/DENOM).LT.coef_check_thrs)
527
%(proc_prefix)sCOMPARE_COEFS_1=(NUM.LT.coef_check_thrs)
532
FUNCTION %(proc_prefix)sCOMPARE_COEFS_2(COEFS_A,COEFS_B)
535
TYPE(COEFF_TYPE_2) COEFS_A,COEFS_B
536
%(real_dp_format)s coef_check_thrs
537
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
538
%(real_dp_format)s DENOM,NUM
539
LOGICAL %(proc_prefix)sCOMPARE_COEFS_2
541
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2-COEFS_B%%c2))
542
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2+COEFS_B%%c2))
544
%(proc_prefix)sCOMPARE_COEFS_2=((NUM/DENOM).LT.coef_check_thrs)
546
%(proc_prefix)sCOMPARE_COEFS_2=(NUM.LT.coef_check_thrs)
551
FUNCTION %(proc_prefix)sCOMPARE_COEFS_3(COEFS_A,COEFS_B)
554
TYPE(COEFF_TYPE_3) COEFS_A, COEFS_B
555
%(real_dp_format)s coef_check_thrs
556
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
557
%(real_dp_format)s DENOM,NUM
558
LOGICAL %(proc_prefix)sCOMPARE_COEFS_3
560
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2-COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3-COEFS_B%%c3))
561
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2+COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3+COEFS_B%%c3))
563
%(proc_prefix)sCOMPARE_COEFS_3=((NUM/DENOM).LT.coef_check_thrs)
565
%(proc_prefix)sCOMPARE_COEFS_3=(NUM.LT.coef_check_thrs)
570
FUNCTION %(proc_prefix)sCOMPARE_COEFS_4(COEFS_A,COEFS_B)
573
TYPE(COEFF_TYPE_4) COEFS_A, COEFS_B
574
%(real_dp_format)s coef_check_thrs
575
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
576
%(real_dp_format)s DENOM,NUM
577
LOGICAL %(proc_prefix)sCOMPARE_COEFS_4
579
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2-COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3-COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4-COEFS_B%%c4))
580
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2+COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3+COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4+COEFS_B%%c4))
582
%(proc_prefix)sCOMPARE_COEFS_4=((NUM/DENOM).LT.coef_check_thrs)
584
%(proc_prefix)sCOMPARE_COEFS_4=(NUM.LT.coef_check_thrs)
589
FUNCTION %(proc_prefix)sCOMPARE_COEFS_5(COEFS_A,COEFS_B)
592
TYPE(COEFF_TYPE_5) COEFS_A,COEFS_B
593
%(real_dp_format)s coef_check_thrs
594
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
595
%(real_dp_format)s DENOM,NUM
596
LOGICAL %(proc_prefix)sCOMPARE_COEFS_5
598
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2-COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3-COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4-COEFS_B%%c4))
599
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2+COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3+COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4+COEFS_B%%c4))
601
%(proc_prefix)sCOMPARE_COEFS_5=((NUM/DENOM).LT.coef_check_thrs)
603
%(proc_prefix)sCOMPARE_COEFS_5=(NUM.LT.coef_check_thrs)
608
FUNCTION %(proc_prefix)sCOMPARE_COEFS_6(COEFS_A,COEFS_B)
611
TYPE(COEFF_TYPE_6) COEFS_A,COEFS_B
612
%(real_dp_format)s coef_check_thrs
613
COMMON/%(proc_prefix)scoef_check_thrs/coef_check_thrs
614
%(real_dp_format)s DENOM,NUM
615
LOGICAL %(proc_prefix)sCOMPARE_COEFS_6
617
NUM = ABS(COEFS_A%%c0-COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1-COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2-COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3-COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4-COEFS_B%%c4))
618
DENOM = ABS(COEFS_A%%c0+COEFS_B%%c0)+SUM(ABS(COEFS_A%%c1+COEFS_B%%c1))+SUM(ABS(COEFS_A%%c2+COEFS_B%%c2))+SUM(ABS(COEFS_A%%c3+COEFS_B%%c3))+SUM(ABS(COEFS_A%%c4+COEFS_B%%c4))
620
%(proc_prefix)sCOMPARE_COEFS_6=((NUM/DENOM).LT.coef_check_thrs)
622
%(proc_prefix)sCOMPARE_COEFS_6=(NUM.LT.coef_check_thrs)
b'\\ No newline at end of file'