| Line |
Branch |
Exec |
Source |
| 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 |
| 153 |
|
|
|