1 |
|
|
MODULE YOMPRAD |
2 |
|
|
|
3 |
|
|
USE PARKIND1 ,ONLY : JPIM ,JPRB |
4 |
|
|
|
5 |
|
|
IMPLICIT NONE |
6 |
|
|
|
7 |
|
|
SAVE |
8 |
|
|
|
9 |
|
|
!---------------------------------------------------------------- |
10 |
|
|
!* new radiation grid data structures |
11 |
|
|
!---------------------------------------------------------------- |
12 |
|
|
|
13 |
|
|
! NRESOL_ID : transformation package resolution identifier |
14 |
|
|
! NSMAX : spectral truncation |
15 |
|
|
! NASM0 : address in a spectral array of (m, n=m) |
16 |
|
|
! MYMS : actual wave numbers handled by this processor |
17 |
|
|
! NDGLG : number of latitude rows |
18 |
|
|
! NDLON : length of a row of latitude near equator |
19 |
|
|
! NDGSAL : Local version of NDGSA , always 1 |
20 |
|
|
! NDGENL : Number of latitude rows for which this process has grid points |
21 |
|
|
! NDGSAH : 1-NROWIDE |
22 |
|
|
! NDGENH : NDGENL+NROWIDE |
23 |
|
|
! NDGSAG : Global version of NDGSA |
24 |
|
|
! NDGENG : Global version of NDGEN |
25 |
|
|
! NDSUR1 : over dimensioning of NDLON for technical reasons (at least 2) |
26 |
|
|
! NDLSUR : NDLON+NDSUR1 |
27 |
|
|
! NDGSUR : number of additional rows at each pole for semi-lagrangian |
28 |
|
|
! : interpolation |
29 |
|
|
! MYFRSTACTLAT : first actual lat on this PE in grid-point space, |
30 |
|
|
! : it is nfrstlat(my_region_ns) |
31 |
|
|
! MYLSTACTLAT : last actual lat on this PE in grid-point space, |
32 |
|
|
! : it is nlstlat(my_region_ns) |
33 |
|
|
! NGPTOT : number of local grid points |
34 |
|
|
! NGPTOTG : total number of grid points |
35 |
|
|
! NRGRI : number of grid points on a latitude row |
36 |
|
|
! NLOENG : as above but extended at poles for SL interpolation |
37 |
|
|
! GELAM : radiation grid geographic longitude "lambda" |
38 |
|
|
! GELAT : radiation grid geographic latitude "theta" |
39 |
|
|
! GESLO : sine of geographic longitude "sin(lambda)" |
40 |
|
|
! GECLO : cosine of geographic longitude "cos(lambda) |
41 |
|
|
! GEMU : sine of geographic latitude "sin(theta)" |
42 |
|
|
! RMU : mu sin(theta) |
43 |
|
|
! RSQM2 : SQRT(R1MU2) cos(theta) |
44 |
|
|
! RLATIG : arcsin(mu) theta GLOBAL VIEW |
45 |
|
|
! RLATI : arcsin(mu) theta |
46 |
|
|
! RIPI0 : bi-cubic interpolation coefficients |
47 |
|
|
! RIPI1 : bi-cubic interpolation coefficients |
48 |
|
|
! RIPI2 : bi-cubic interpolation coefficients |
49 |
|
|
|
50 |
|
|
TYPE RADIATION_GRID_STRUCT |
51 |
|
|
INTEGER(KIND=JPIM) :: NRESOL_ID, NGPTOT, NGPTOTG, & |
52 |
|
|
& NGPTOTMX, NSPEC2, NSMAX, & |
53 |
|
|
& NPTRFLOFF, NUMP, NDLON, & |
54 |
|
|
& NDGSAL, NDGENL, NDGSAH, NDGENH, & |
55 |
|
|
& NDGLG, NDGSAG, NDGENG, NDLSUR, & |
56 |
|
|
& NFRSTLOFF, NDSUR1,NDGSUR, & |
57 |
|
|
& MYFRSTACTLAT, MYLSTACTLAT |
58 |
|
|
INTEGER(KIND=JPIM), POINTER, DIMENSION(:) :: NRGRI, NLOENG, NPTRFRSTLAT, NFRSTLAT, & |
59 |
|
|
& NLSTLAT, MYMS, NASM0 |
60 |
|
|
INTEGER(KIND=JPIM), POINTER, DIMENSION(:,:) :: NSTA, NONL |
61 |
|
|
REAL(KIND=JPRB), POINTER, DIMENSION(:) :: GELAM, GELAT, GECLO, GESLO, GEMU, & |
62 |
|
|
& RMU, RSQM2, RLATIG, RLATI, & |
63 |
|
|
& RIPI0, RIPI1, RIPI2 |
64 |
|
|
END TYPE RADIATION_GRID_STRUCT |
65 |
|
|
|
66 |
|
|
TYPE(RADIATION_GRID_STRUCT) :: RADGRID |
67 |
|
|
|
68 |
|
|
!---------------------------------------------------------------- |
69 |
|
|
!* radiation on demand comms data structures |
70 |
|
|
!---------------------------------------------------------------- |
71 |
|
|
|
72 |
|
|
LOGICAL :: LRADONDEM |
73 |
|
|
LOGICAL :: LRADONDEM_ACTIVE |
74 |
|
|
INTEGER(KIND=JPIM) :: NFIXRADFLD(2) |
75 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE :: MASK_RI1(:) |
76 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE :: MASK_RI2(:) |
77 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE :: MASK_RO1(:) |
78 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE :: MASK_RO2(:) |
79 |
|
|
|
80 |
|
|
!---------------------------------------------------------------- |
81 |
|
|
!* radiation interpolation/load balancing data structures |
82 |
|
|
!---------------------------------------------------------------- |
83 |
|
|
|
84 |
|
|
! NRIRINT : INTERPOLATION INTERVAL FOR LOCAL LATITUDES |
85 |
|
|
! NRFRSTOFF: OFFSET TO FIRST COURSE POINT FROM FIRST FINE POINT |
86 |
|
|
! NRLASTOFF: OFFSET TO FIRST COURSE POINT FROM LAST FINE POINT |
87 |
|
|
! NRIMAX : NUMBER OF COURSE POINTS FOR LOCAL LATITUDES |
88 |
|
|
! NRIMAXT : TOTAL NUMBER OF COURSE POINTS IN THIS PROCESSOR |
89 |
|
|
! NRIMAXLT : TOTAL NUMBER OF COURSE POINTS TO BE PROCESSED BY THIS PROC |
90 |
|
|
! NRLPRCS : NUMBER OF PROCESSORS REQUIRED FOR LOAD BALANCING |
91 |
|
|
! NRIMAXLA : LOAD BALANCING DATA - SETA OF PROCESSOR TO COMMUNICATE WITH |
92 |
|
|
! NRIMAXLB : LOAD BALANCING DATA - SETB OF PROCESSOR TO COMMUNICATE WITH |
93 |
|
|
! NRIMAXLN : LOAD BALANCING DATA - NUMBER OF COURSE POINTS TO SND/RCV |
94 |
|
|
! NRCNEEDW : NUMBER OF COURSE POINTS NEEDED ON WESTERN END OF LOCAL LATS |
95 |
|
|
! NRCNEEDE : NUMBER OF COURSE POINTS NEEDED ON EASTERN END OF LOCAL LATS |
96 |
|
|
! NRCSNDW : NUMBER OF WESTERN COURSE POINTS TO SEND TO LOCAL PROCS |
97 |
|
|
! NRCSNDE : NUMBER OF EASTERN COURSE POINTS TO SEND TO LOCAL PROCS |
98 |
|
|
! NRCRCVW : NUMBER OF WESTERN COURSE POINTS TO RCV FROM LOCAL PROCS |
99 |
|
|
! NRCRCVE : NUMBER OF WESTERN COURSE POINTS TO RCV FROM LOCAL PROCS |
100 |
|
|
! NRCSNDT : TOTAL NUMBER OF COURSE POINTS TO SEND TO LOCAL PROCESSORS |
101 |
|
|
! NRCRCVT : TOTAL NUMBER OF COURSE POINTS TO RCV FROM LOCAL PROCESSORS |
102 |
|
|
! NRCRCVWO : OFFSET OF WESTERN BOUNDARY COURSE POINTS IN BOUNDARY ARRAY |
103 |
|
|
! NRCRCVEO : OFFSET OF EASTERN BOUNDARY COURSE POINTS IN BOUNDARY ARRAY |
104 |
|
|
|
105 |
|
|
! LODBGRADI: DEBUGGING FLAG, EACH PROCESSOR WILL DUMP ABOVE INFO TO A |
106 |
|
|
! PER PROCESSOR FILE CALLED 'debug_aaa_bbb' |
107 |
|
|
! where aaa=my_region_ns and bbb=my_region_ew |
108 |
|
|
! LODBGRADL: DEBUGGING FLAG, EACH PROCESSOR WILL DUMP LOAD BALANCING |
109 |
|
|
! ARRAYS as above |
110 |
|
|
|
111 |
|
|
! NRLBCHUNKS: NUMBER OF BLOCKING LOOPS FOR LOAD-BALANCING COMMS |
112 |
|
|
! NRLRCHUNKS: NUMBER OF BLOCKING LOOPS FOR LOAD-BALANCING COMMS (RESTORING) |
113 |
|
|
! NRLBPOINTS: MAX NUMBER OF POINTS FOR LOAD-BALANCING COMMS |
114 |
|
|
! NRLRPOINTS: MAX NUMBER OF POINTS FOR LOAD-BALANCING COMMS (RESTORING) |
115 |
|
|
! NRLBDATA : NUMBER OF DATA VALUES PER LOAD-BALANCING POINT |
116 |
|
|
! NRLRDATA : NUMBER OF DATA VALUES PER LOAD-BALANCING POINT (RESTORING) |
117 |
|
|
|
118 |
|
|
LOGICAL :: LODBGRADI |
119 |
|
|
LOGICAL :: LODBGRADL |
120 |
|
|
INTEGER(KIND=JPIM) :: NRLBCHUNKS |
121 |
|
|
INTEGER(KIND=JPIM) :: NRLRCHUNKS |
122 |
|
|
INTEGER(KIND=JPIM) :: NRLBPOINTS |
123 |
|
|
INTEGER(KIND=JPIM) :: NRLRPOINTS |
124 |
|
|
INTEGER(KIND=JPIM) :: NRLBDATA |
125 |
|
|
INTEGER(KIND=JPIM) :: NRLRDATA |
126 |
|
|
INTEGER(KIND=JPIM), PARAMETER :: JPMAXLOADP=32 |
127 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRIRINT(:) |
128 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRFRSTOFF(:,:) |
129 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRLASTOFF(:,:) |
130 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRIMAX(:,:) |
131 |
|
|
INTEGER(KIND=JPIM) :: NRIMAXT |
132 |
|
|
INTEGER(KIND=JPIM) :: NRIMAXLT |
133 |
|
|
INTEGER(KIND=JPIM) :: NRLPRCS |
134 |
|
|
INTEGER(KIND=JPIM) :: NRIMAXLA(JPMAXLOADP) |
135 |
|
|
INTEGER(KIND=JPIM) :: NRIMAXLB(JPMAXLOADP) |
136 |
|
|
INTEGER(KIND=JPIM) :: NRIMAXLN(JPMAXLOADP) |
137 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCNEEDW(:,:) |
138 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCNEEDE(:,:) |
139 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCSNDW(:,:,:) |
140 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCSNDE(:,:,:) |
141 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCRCVW(:,:,:) |
142 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCRCVE(:,:,:) |
143 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCSNDT(:,:) |
144 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCRCVT(:,:) |
145 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCRCVWO(:,:,:) |
146 |
|
|
INTEGER(KIND=JPIM),ALLOCATABLE:: NRCRCVEO(:,:,:) |
147 |
|
|
!$OMP THREADPRIVATE(lodbgradi,lodbgradl,lradondem,lradondem_active,nfixradfld,nrimaxla,nrimaxlb) |
148 |
|
|
!$OMP THREADPRIVATE(nrimaxln,nrimaxlt,nrimaxt,nrlbchunks,nrlbdata,nrlbpoints,nrlprcs,nrlrchunks) |
149 |
|
|
!$OMP THREADPRIVATE(nrlrdata,nrlrpoints,radgrid) |
150 |
|
|
!$OMP THREADPRIVATE(mask_ri1,mask_ri2,mask_ro1,mask_ro2,nrcneede,nrcneedw,nrcrcve,nrcrcveo,nrcrcvt) |
151 |
|
|
!$OMP THREADPRIVATE(nrcrcvw,nrcrcvwo,nrcsnde,nrcsndt,nrcsndw,nrfrstoff,nrimax,nrirint,nrlastoff) |
152 |
|
|
END MODULE YOMPRAD |