Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
MODULE COMPUTE_DIFF
INTERFACE DIFF
MODULE PROCEDURE DIFF3
MODULE PROCEDURE DIFF2
END INTERFACE DIFF
CONTAINS
SUBROUTINE DIFF3 (CDNAME, PREF, POUT, LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
IMPLICIT NONE
CHARACTER (LEN=*) :: CDNAME
REAL, INTENT(IN) :: PREF (:,:,:)
REAL, INTENT(IN) :: POUT (:,:,:)
LOGICAL, INTENT(IN) :: LLSTAT, LLCHECK, LLCHECKDIFF
INTEGER, INTENT(IN) :: NPROMA
LOGICAL, INTENT(OUT) :: LLDIFF
INTEGER :: JLON, JLEV, KLEV
KLEV=SIZE(PREF, 3)
PRINT *, CDNAME
IF (LLSTAT) THEN
PRINT *, MINVAL (PREF), MAXVAL (PREF), SUM (PREF) / SIZE (PREF)
PRINT *, MINVAL (POUT), MAXVAL (POUT), SUM (POUT) / SIZE (POUT)
ENDIF
IF (LLCHECK) THEN
IF (SUM (ABS (POUT) + ABS (PREF)) > 0) THEN
WRITE (*, '(A4)', ADVANCE='NO') ""
DO JLON = 1, NPROMA
WRITE (*, '("|",I12,A12)', ADVANCE='NO') JLON, ""
ENDDO
WRITE (*, '("|")')
DO JLEV = 1, KLEV
WRITE (*, '(I4)', ADVANCE='NO') JLEV
DO JLON = 1, NPROMA
IF (ABS (PREF (JLON, 1, JLEV)) + ABS (POUT (JLON, 1, JLEV)) == 0.) THEN
WRITE (*, '("|",2A12)', ADVANCE='NO') "", ""
ELSE
WRITE (*, '("|",2E12.5)', ADVANCE='NO') PREF (JLON, 1, JLEV), POUT (JLON, 1, JLEV)
ENDIF
ENDDO
WRITE (*, '("|")')
ENDDO
ENDIF
ENDIF
IF (LLCHECKDIFF) THEN
IF (SUM(ABS(POUT-PREF)) > 0.) THEN
PRINT*, "THERE ARE DIFF"
LLDIFF = .TRUE.
ELSE
PRINT*, "THERE IS NO DIFF"
ENDIF
ENDIF
END SUBROUTINE
SUBROUTINE DIFF2 (CDNAME, PREF, POUT, LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
IMPLICIT NONE
CHARACTER (LEN=*) :: CDNAME
REAL, INTENT(IN) :: PREF (:,:)
REAL, INTENT(IN) :: POUT (:,:)
LOGICAL, INTENT(IN) :: LLSTAT, LLCHECK, LLCHECKDIFF
INTEGER, INTENT(IN) :: NPROMA
LOGICAL, INTENT(OUT) :: LLDIFF
INTEGER :: JLON
PRINT *, CDNAME
IF (LLSTAT) THEN
PRINT *, MINVAL (PREF), MAXVAL (PREF), SUM (PREF) / SIZE (PREF)
PRINT *, MINVAL (POUT), MAXVAL (POUT), SUM (POUT) / SIZE (POUT)
ENDIF
IF (LLCHECK) THEN
IF (SUM (ABS (POUT) + ABS (PREF)) > 0) THEN
WRITE (*, '(A4)', ADVANCE='NO') ""
DO JLON = 1, NPROMA
WRITE (*, '("|",I12,A12)', ADVANCE='NO') JLON, ""
ENDDO
WRITE (*, '("|")')
WRITE (*, '(I4)', ADVANCE='NO') 0
DO JLON = 1, NPROMA
IF (ABS (PREF (JLON, 1)) + ABS (POUT (JLON, 1)) == 0.) THEN
WRITE (*, '("|",2A12)', ADVANCE='NO') "", ""
ELSE
WRITE (*, '("|",2E12.5)', ADVANCE='NO') PREF (JLON, 1), POUT (JLON, 1)
ENDIF
ENDDO
WRITE (*, '("|")')
ENDIF
ENDIF
IF (LLCHECKDIFF) THEN
IF (SUM(ABS(POUT-PREF)) > 0.) THEN
PRINT*, "THERE ARE DIFF"
LLDIFF = .TRUE.
ELSE
PRINT*, "THERE IS NO DIFF"
ENDIF
ENDIF
END SUBROUTINE
END MODULE COMPUTE_DIFF