Line |
Branch |
Exec |
Source |
1 |
|
|
MODULE GRIDPOINT_BUFFERS |
2 |
|
|
|
3 |
|
|
! Purpose. |
4 |
|
|
! -------- |
5 |
|
|
! GRIDPOINT_BUFFERS defines the type "gridpoint buffer", |
6 |
|
|
! and the operations to create and destroy instances of |
7 |
|
|
! the type. |
8 |
|
|
|
9 |
|
|
! Author. |
10 |
|
|
! ------- |
11 |
|
|
! Mike Fisher *ECMWF* |
12 |
|
|
|
13 |
|
|
! Modifications. |
14 |
|
|
! -------------- |
15 |
|
|
! Original : 1999-11-10 |
16 |
|
|
! M.Hamrud 01-Oct-2003 CY28 Cleaning |
17 |
|
|
|
18 |
|
|
! ------------------------------------------------------------------ |
19 |
|
|
|
20 |
|
|
USE PARKIND1 ,ONLY : JPIM ,JPRB |
21 |
|
|
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK |
22 |
|
|
|
23 |
|
|
USE YOMCT0 , ONLY : NPRINTLEV , LALLOPR |
24 |
|
|
USE YOMGEM , ONLY : NGPTOT |
25 |
|
|
USE YOMLUN , ONLY : NULOUT |
26 |
|
|
|
27 |
|
|
IMPLICIT NONE |
28 |
|
|
SAVE |
29 |
|
|
|
30 |
|
|
PRIVATE |
31 |
|
|
PUBLIC gridpoint_buffer, & |
32 |
|
|
& ALLOCATE_GRIDPOINT_BUFFER, & |
33 |
|
|
& ALLOCATED_GRIDPOINT_BUFFER, & |
34 |
|
|
& DEALLOCATE_GRIDPOINT_BUFFER |
35 |
|
|
|
36 |
|
|
TYPE gridpoint_buffer |
37 |
|
|
CHARACTER(LEN=1), POINTER :: CLNAME(:) |
38 |
|
|
INTEGER(KIND=JPIM) :: IFIELDS |
39 |
|
|
INTEGER(KIND=JPIM) :: IDGEN |
40 |
|
|
INTEGER(KIND=JPIM) :: IDGENL |
41 |
|
|
INTEGER(KIND=JPIM) :: IBLEN |
42 |
|
|
INTEGER(KIND=JPIM) :: IPACK |
43 |
|
|
LOGICAL :: LFILLED |
44 |
|
|
REAL(KIND=JPRB), POINTER :: GPBUF(:) |
45 |
|
|
END TYPE gridpoint_buffer |
46 |
|
|
|
47 |
|
|
INTERFACE |
48 |
|
|
SUBROUTINE ABOR1(CDTEXT) |
49 |
|
|
CHARACTER(LEN=*) :: CDTEXT |
50 |
|
|
END SUBROUTINE ABOR1 |
51 |
|
|
END INTERFACE |
52 |
|
|
|
53 |
|
|
!----------------------------------------------------------------------- |
54 |
|
|
|
55 |
|
|
CONTAINS |
56 |
|
✗ |
SUBROUTINE ALLOCATE_GRIDPOINT_BUFFER (CDNAME,YDGPBUF,KFIELDS,KPACK, & |
57 |
|
|
& KGPTOT) |
58 |
|
|
|
59 |
|
|
TYPE (gridpoint_buffer),INTENT(OUT) :: YDGPBUF |
60 |
|
|
CHARACTER(LEN=*) , INTENT(IN) :: CDNAME |
61 |
|
|
INTEGER(KIND=JPIM) , INTENT(IN) :: KFIELDS,KPACK |
62 |
|
|
INTEGER(KIND=JPIM) , INTENT(IN),OPTIONAL :: KGPTOT |
63 |
|
|
|
64 |
|
|
INTEGER(KIND=JPIM) :: J, IGPTOT |
65 |
|
|
REAL(KIND=JPRB) :: ZDUM |
66 |
|
|
REAL(KIND=JPRB) :: ZHOOK_HANDLE |
67 |
|
|
|
68 |
|
✗ |
IF (LHOOK) CALL DR_HOOK('GRIDPOINT_BUFFERS:ALLOCATE_GRIDPOINT_BUFFER',0,ZHOOK_HANDLE) |
69 |
|
|
|
70 |
|
✗ |
IF(PRESENT(KGPTOT))THEN |
71 |
|
✗ |
IGPTOT=KGPTOT |
72 |
|
|
ELSE |
73 |
|
✗ |
IGPTOT=NGPTOT |
74 |
|
|
ENDIF |
75 |
|
|
|
76 |
|
✗ |
ALLOCATE (YDGPBUF%CLNAME(LEN(CDNAME))) |
77 |
|
|
|
78 |
|
✗ |
DO J=1,LEN(CDNAME) |
79 |
|
✗ |
YDGPBUF%CLNAME(J) = CDNAME(J:J) |
80 |
|
|
ENDDO |
81 |
|
|
|
82 |
|
✗ |
YDGPBUF%IFIELDS = KFIELDS |
83 |
|
✗ |
YDGPBUF%IPACK = KPACK |
84 |
|
|
|
85 |
|
✗ |
IF (KPACK > 1) CALL ABOR1('ALLOCATE_GRIDPOINT_BUFFER: KPACK > 1') |
86 |
|
✗ |
YDGPBUF%IBLEN = IGPTOT * KFIELDS |
87 |
|
|
|
88 |
|
✗ |
ALLOCATE (YDGPBUF%GPBUF(YDGPBUF%IBLEN)) |
89 |
|
✗ |
IF (NPRINTLEV >= 1.OR. LALLOPR) & |
90 |
|
✗ |
& WRITE(NULOUT,91) CDNAME,SIZE(YDGPBUF%GPBUF),SHAPE(YDGPBUF%GPBUF) |
91 |
|
✗ |
YDGPBUF%GPBUF(:) = HUGE(ZDUM) |
92 |
|
✗ |
YDGPBUF%LFILLED = .FALSE. |
93 |
|
|
|
94 |
|
✗ |
IF (LHOOK) CALL DR_HOOK('GRIDPOINT_BUFFERS:ALLOCATE_GRIDPOINT_BUFFER',1,ZHOOK_HANDLE) |
95 |
|
|
91 FORMAT(1X,'ALLOCATED GRIDPOINT BUFFER ',A,', SIZE=',I8,', SHAPE=',7I8) |
96 |
|
✗ |
END SUBROUTINE ALLOCATE_GRIDPOINT_BUFFER |
97 |
|
|
|
98 |
|
✗ |
SUBROUTINE DEALLOCATE_GRIDPOINT_BUFFER (YDGPBUF) |
99 |
|
|
TYPE (gridpoint_buffer),INTENT(INOUT) :: YDGPBUF |
100 |
|
|
INTEGER(KIND=JPIM) :: J |
101 |
|
|
REAL(KIND=JPRB) :: ZHOOK_HANDLE |
102 |
|
|
|
103 |
|
✗ |
IF (LHOOK) CALL DR_HOOK('GRIDPOINT_BUFFERS:DEALLOCATE_GRIDPOINT_BUFFER',0,ZHOOK_HANDLE) |
104 |
|
✗ |
IF (NPRINTLEV >= 1.OR. LALLOPR) & |
105 |
|
✗ |
& WRITE(NULOUT,92) (YDGPBUF%CLNAME(J),J=1,SIZE(YDGPBUF%CLNAME)) |
106 |
|
|
|
107 |
|
✗ |
DEALLOCATE (YDGPBUF%GPBUF) |
108 |
|
✗ |
DEALLOCATE (YDGPBUF%CLNAME) |
109 |
|
✗ |
YDGPBUF%LFILLED = .FALSE. |
110 |
|
|
|
111 |
|
✗ |
IF (LHOOK) CALL DR_HOOK('GRIDPOINT_BUFFERS:DEALLOCATE_GRIDPOINT_BUFFER',1,ZHOOK_HANDLE) |
112 |
|
|
92 FORMAT(1X,'DEALLOCATED GRIDPOINT BUFFER:,',100A1) |
113 |
|
✗ |
END SUBROUTINE DEALLOCATE_GRIDPOINT_BUFFER |
114 |
|
|
|
115 |
|
✗ |
LOGICAL FUNCTION ALLOCATED_GRIDPOINT_BUFFER (YDGPBUF) |
116 |
|
|
TYPE (gridpoint_buffer),INTENT(IN) :: YDGPBUF |
117 |
|
✗ |
ALLOCATED_GRIDPOINT_BUFFER = ASSOCIATED (YDGPBUF%GPBUF) |
118 |
|
✗ |
END FUNCTION ALLOCATED_GRIDPOINT_BUFFER |
119 |
|
|
|
120 |
|
✗ |
END MODULE GRIDPOINT_BUFFERS |
121 |
|
|
|
122 |
|
|
|