| Directory: | ./ |
|---|---|
| File: | rad/suecrad.f90 |
| Date: | 2022-01-11 19:19:34 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 176 | 678 | 26.0% |
| Branches: | 48 | 1017 | 4.7% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | ! | ||
| 2 | ! $Id: suecrad.F90 3115 2017-12-07 14:45:01Z emillour $ | ||
| 3 | ! | ||
| 4 | 5 | SUBROUTINE SUECRAD (KULOUT, KLEV, PETAH ) | |
| 5 | |||
| 6 | !**** *SUECRAD* - INITIALIZE COMMONS YOERxx CONTROLLING RADIATION | ||
| 7 | |||
| 8 | ! PURPOSE. | ||
| 9 | ! -------- | ||
| 10 | ! INITIALIZE YOERAD, THE COMMON THAT CONTROLS THE | ||
| 11 | ! RADIATION OF THE MODEL, AND YOERDU THAT INCLUDES | ||
| 12 | ! ADJUSTABLE PARAMETERS FOR RADIATION COMPUTATIONS | ||
| 13 | |||
| 14 | !** INTERFACE. | ||
| 15 | ! ---------- | ||
| 16 | ! CALL *SUECRAD* FROM *SUPHEC* | ||
| 17 | ! ------- ------ | ||
| 18 | |||
| 19 | ! EXPLICIT ARGUMENTS : | ||
| 20 | ! -------------------- | ||
| 21 | ! NONE | ||
| 22 | |||
| 23 | ! IMPLICIT ARGUMENTS : | ||
| 24 | ! -------------------- | ||
| 25 | ! COMMONS YOERAD, YOERDU | ||
| 26 | |||
| 27 | ! METHOD. | ||
| 28 | ! ------- | ||
| 29 | ! SEE DOCUMENTATION | ||
| 30 | |||
| 31 | ! EXTERNALS. | ||
| 32 | ! ---------- | ||
| 33 | ! SUAER, SUAERH, SUAERV, SULW, SUSW, SUOCST, SUSAT | ||
| 34 | ! SUAERL, SUAERSN, SUSRTAER, SRTM_INIT, SUSRTCOP | ||
| 35 | |||
| 36 | ! REFERENCE. | ||
| 37 | ! ---------- | ||
| 38 | ! ECMWF Research Department documentation of the IFS | ||
| 39 | |||
| 40 | ! AUTHOR. | ||
| 41 | ! ------- | ||
| 42 | ! JEAN-JACQUES MORCRETTE *ECMWF* | ||
| 43 | |||
| 44 | ! MODIFICATIONS. | ||
| 45 | ! -------------- | ||
| 46 | ! ORIGINAL : 88-12-15 | ||
| 47 | ! P.COURTIER AND M.HAMRUD NAME SURAD ALREADY USED | ||
| 48 | ! Modified 93-11-15 by Ph. Dandin : FMR scheme with MF | ||
| 49 | ! Modified 95-12 by PhD : Cloud overlapping hypothesis for FMR | ||
| 50 | ! 980317 JJMorcrette clean-up (NRAD, NFLUX) | ||
| 51 | ! 000118 JJMorcrette variable concentr. uniformly mixed gases | ||
| 52 | ! 990525 JJMorcrette GISS volcanic and new tropospheric aerosols | ||
| 53 | ! 990831 JJMorcrette RRTM | ||
| 54 | ! R. El Khatib 01-02-02 proper initialization of NFRRC moved in SUCFU | ||
| 55 | ! 010129 JJMorcrette clean-up LERAD1H, NLNGR1H | ||
| 56 | ! 011105 GMozdzynski support new radiation grid | ||
| 57 | ! 011005 JJMorcrette CCN --> Re Water clouds | ||
| 58 | ! R. El Khatib 01-02-02 LRRTM=lecmwf by default | ||
| 59 | ! 020909 GMozdzynski support NRADRES to specify radiation grid | ||
| 60 | ! 021001 GMozdzynski support on-demand radiation communications | ||
| 61 | ! 030422 GMozdzynski automatic min-halo | ||
| 62 | ! 030501 JJMorcrette new radiation grid on, new aerosols on (default) | ||
| 63 | ! 030513 JJMorcrette progn. O3 / radiation interactions off (default) | ||
| 64 | ! M.Hamrud 01-Oct-2003 CY28 Cleaning | ||
| 65 | ! 050315 JJMorcrette prog.aerosols v1 | ||
| 66 | ! 041214 JJMorcrette SRTM | ||
| 67 | ! 050111 JJMorcrette new cloud optical properties | ||
| 68 | ! 050415 GMozdzynski Reduced halo support for radiation interpolation | ||
| 69 | ! 051004 JJMorcrette UV surface radiation processor | ||
| 70 | ! 051220 JJMorcrette SRTM112g+LWSCAT+UVprocessor+(bgfx:swclr, radaca) | ||
| 71 | ! 060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse) | ||
| 72 | ! 060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse) | ||
| 73 | ! JJMorcrette 20060721 PP of clear-sky PAR and TOA incident solar radiation | ||
| 74 | ! 060625 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse) | ||
| 75 | ! 060726 JJMorcrette McICA default operational configuration | ||
| 76 | ! ------------------------------------------------------------------ | ||
| 77 | |||
| 78 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 79 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK | ||
| 80 | |||
| 81 | USE PARDIM , ONLY : JPMXGL | ||
| 82 | USE PARRRTM , ONLY : JPLAY | ||
| 83 | USE PARSRTM , ONLY : JPGPT | ||
| 84 | USE YOMCT0 , ONLY : LOUTPUT ,NPRINTLEV,LALLOPR,& | ||
| 85 | & NPROC ,N_REGIONS_NS ,N_REGIONS_EW | ||
| 86 | USE YOMDIM , ONLY : NDLON ,NSMAX ,NDGENL ,& | ||
| 87 | & NDGSAL ,NDGLG ,NDGSAG ,NDGENG ,NDSUR1 ,& | ||
| 88 | & NDLSUR ,NDGSUR ,NGPBLKS ,NFLEVG ,NPROMA | ||
| 89 | USE YOMCT0B , ONLY : LECMWF | ||
| 90 | USE YOMDYN , ONLY : TSTEP | ||
| 91 | ! Ce qui concerne NULRAD commente par MPL le 15.04.09 | ||
| 92 | !USE YOMLUN , ONLY : NULNAM ,NULRAD ,NULOUT | ||
| 93 | USE YOMLUN , ONLY : NULRAD ,NULOUT | ||
| 94 | USE YOMCST , ONLY : RDAY ,RG ,RCPD ,RPI ,RI0 | ||
| 95 | USE YOMPHY , ONLY : LMPHYS, LRAYFM ,LRAYFM15 | ||
| 96 | USE YOEPHY , ONLY : LEPHYS ,LERADI, LE4ALB | ||
| 97 | USE YOERDI , ONLY : RCCO2, RCCH4, RCN2O, RCCFC11, RCCFC12, RSOLINC | ||
| 98 | USE YOERAD , ONLY : NAER , NOZOCL ,& | ||
| 99 | & NRADFR ,NRADPFR ,NRADPLA ,NRINT ,& | ||
| 100 | & NRADNFR ,NRADSFR ,NOVLP ,NRPROMA ,& | ||
| 101 | !& NLW ,NSW ,NTSW ,NCSRADF ,& | ||
| 102 | ! NSW mis dans .def MPL 20140211 | ||
| 103 | & NLW ,NTSW ,NCSRADF ,& | ||
| 104 | & NMODE ,NLNGR1H ,NSWNL ,NSWTL ,NUV ,& | ||
| 105 | & LERAD1H ,LERADHS ,LEPO3RA ,LRADLB ,LONEWSW ,& | ||
| 106 | & LCCNL ,LCCNO ,& | ||
| 107 | & LECSRAD ,LHVOLCA ,LNEWAER ,LRRTM ,LSRTM ,LDIFFC ,& | ||
| 108 | & NRADINT ,NRADRES ,CRTABLEDIR,CRTABLEFIL ,& | ||
| 109 | & NICEOPT ,NLIQOPT ,NRADIP ,NRADLP ,NINHOM ,NLAYINH ,& | ||
| 110 | & LRAYL ,LOPTRPROMA,& | ||
| 111 | & RCCNLND ,RCCNSEA ,RLWINHF ,RSWINHF ,RRe2De ,& | ||
| 112 | & RPERTOZ ,NPERTOZ ,NMCICA ,& | ||
| 113 | & LNOTROAER,NPERTAER ,LECO2VAR ,LHGHG ,NHINCSOL,NSCEN ,& | ||
| 114 | & LEDBUG | ||
| 115 | USE YOERDU , ONLY : NUAER ,NTRAER ,RCDAY ,R10E ,& | ||
| 116 | & REPLOG ,REPSC ,REPSCO ,REPSCQ ,REPSCT ,& | ||
| 117 | & REPSCW ,DIFF | ||
| 118 | USE YOEAERD , ONLY : CVDAES ,CVDAEL ,CVDAEU ,CVDAED ,& | ||
| 119 | & RCAEOPS ,RCAEOPL ,RCAEOPU ,RCAEOPD ,RCTRBGA ,& | ||
| 120 | & RCVOBGA ,RCSTBGA ,RCTRPT ,RCAEADM ,RCAEROS , & | ||
| 121 | & RCAEADK | ||
| 122 | USE YOE_UVRAD, ONLY : JUVLAM, LUVPROC, LUVTDEP, LUVDBG, NRADUV, NUVTIM, RUVLAM, RMUZUV | ||
| 123 | |||
| 124 | USE YOMMP , ONLY : MYPROC ,NPRCIDS ,LSPLIT ,NAPSETS ,& | ||
| 125 | & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,& | ||
| 126 | & NSTA,NONL,NPTRFRSTLAT,NFRSTLAT,NLSTLAT ,& | ||
| 127 | & MY_REGION_NS ,MY_REGION_EW ,NGLOBALINDEX ,& | ||
| 128 | & NRISTA ,NRIONL ,NRIOFF ,NRIEXT ,NRICORE ,& | ||
| 129 | & NRISENDPOS ,NRIRECVPOS ,NRISENDPTR ,NRIRECVPTR ,& | ||
| 130 | & NARIB1 ,NRIPROCS ,NRIMPBUFSZ,NRISPT ,NRIRPT ,& | ||
| 131 | & NRICOMM ,& | ||
| 132 | & NROSTA ,NROONL ,NROOFF ,NROEXT ,NROCORE ,& | ||
| 133 | & NROSENDPOS ,NRORECVPOS ,NROSENDPTR ,NRORECVPTR ,& | ||
| 134 | & NAROB1 ,NROPROCS ,NROMPBUFSZ,NROSPT ,NRORPT ,& | ||
| 135 | & NROCOMM | ||
| 136 | USE YOMGC , ONLY : GELAT ,GELAM | ||
| 137 | USE YOMLEG , ONLY : RMU ,RSQM2 | ||
| 138 | USE YOMSC2 , ONLY : & | ||
| 139 | & NRIWIDEN ,NRIWIDES ,NRIWIDEW ,NRIWIDEE,& | ||
| 140 | & NROWIDEN ,NROWIDES ,NROWIDEW ,NROWIDEE | ||
| 141 | USE YOMGEM , ONLY : NGPTOT ,NGPTOTG ,NGPTOTMX ,NLOENG | ||
| 142 | USE YOMTAG , ONLY : MTAGRAD | ||
| 143 | USE YOMPRAD , ONLY : LODBGRADI,LODBGRADL ,RADGRID ,& | ||
| 144 | & LRADONDEM | ||
| 145 | USE YOMRADF , ONLY : EMTD ,TRSW ,EMTC ,TRSC ,& | ||
| 146 | & SRSWD ,SRLWD ,SRSWDCS ,SRLWDCS ,SRSWDV ,& | ||
| 147 | & SRSWDUV ,EDRO ,SRSWPAR ,SRSWUVB ,SRSWPARC, SRSWTINC,& | ||
| 148 | & EMTU, RMOON | ||
| 149 | ! Commente par MPL 26.11.08 | ||
| 150 | !USE YOPHNC , ONLY : LERADN2 | ||
| 151 | ! MPLefebvre 6-11-08 commente tout ce qui concerne MPL_MODULE | ||
| 152 | !USE MPL_MODULE , ONLY : MPL_BROADCAST, MPL_SEND, MPL_RECV | ||
| 153 | USE YOM_YGFL , ONLY : YO3 | ||
| 154 | !!!!! A REVOIR (MPL) NDLNPR devrait etre initialise dans sudyn.F90 | ||
| 155 | USE YOMDYN , ONLY : NDLNPR | ||
| 156 | |||
| 157 | IMPLICIT NONE | ||
| 158 | |||
| 159 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV | ||
| 160 | INTEGER(KIND=JPIM),INTENT(IN) :: KULOUT | ||
| 161 | REAL(KIND=JPRB) ,INTENT(IN) :: PETAH(KLEV+1) | ||
| 162 | ! LOCAL ARRAYS FOR THE PURPOSE OF READING NAMRGRI (RADIATION GRID) | ||
| 163 | INTEGER(KIND=JPIM) :: NRGRI(JPMXGL) | ||
| 164 | |||
| 165 | INTEGER(KIND=JPIM) :: IDGL,INBLW,IRADFR,IST1HR,ISTNHR,IDIR,IFIL | ||
| 166 | INTEGER(KIND=JPIM) :: IRIRPTSUR,IRISPTSUR,IRIMAPLEN | ||
| 167 | INTEGER(KIND=JPIM) :: JLON,JGLAT,JGL,JGLSUR,IDLSUR,IOFF,ILAT,ISTLON,IENDLON | ||
| 168 | INTEGER(KIND=JPIM) :: IRORPTSUR,IROSPTSUR,IROMAPLEN | ||
| 169 | INTEGER(KIND=JPIM) :: ILBRLATI,IUBRLATI,IGLGLO,IDUM,IU | ||
| 170 | INTEGER(KIND=JPIM) :: J,JROC,IGPTOT | ||
| 171 | INTEGER(KIND=JPIM) :: IROWIDEMAXN,IROWIDEMAXS,IROWIDEMAXW,IROWIDEMAXE | ||
| 172 | INTEGER(KIND=JPIM) :: IRIWIDEMAXN,IRIWIDEMAXS,IRIWIDEMAXW,IRIWIDEMAXE | ||
| 173 | INTEGER(KIND=JPIM) :: IARIB1MAX,IAROB1MAX | ||
| 174 | INTEGER(KIND=JPIM) :: IWIDE(10) | ||
| 175 | INTEGER(KIND=JPIM) :: ILATS_DIFF_F,ILATS_DIFF_C | ||
| 176 | INTEGER(KIND=JPIM), PARAMETER :: JP_MIN_HALO=5 | ||
| 177 | INTEGER(KIND=JPIM) :: ISW,JUV,IDAYUV | ||
| 178 | |||
| 179 | LOGICAL :: LLINEAR_GRID | ||
| 180 | LOGICAL :: LLDEBUG,LLP | ||
| 181 | |||
| 182 | REAL(KIND=JPRB) :: ZSTPHR, ZTSTEP, ZGEMU, ZLON, ZD1, ZD2, ZD3, ZD4, ZD5, ZD6 | ||
| 183 | REAL(KIND=JPRB) :: ZMINRADLAT,ZMAXRADLAT,ZMINRADLON,ZMAXRADLON | ||
| 184 | REAL(KIND=JPRB) :: ZMINMDLLAT,ZMAXMDLLAT,ZMINMDLLON,ZMAXMDLLON | ||
| 185 | REAL(KIND=JPRB) :: ZLAT | ||
| 186 | !REAL(KIND=JPRB) :: RLATVOL, RLONVOL | ||
| 187 | |||
| 188 | CHARACTER (LEN = 300) :: CLFN | ||
| 189 | INTEGER(KIND=JPIM), PARAMETER :: JPIOMASTER=1 | ||
| 190 | |||
| 191 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPOS(:) | ||
| 192 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPOS(:) | ||
| 193 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPTR(:) | ||
| 194 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPTR(:) | ||
| 195 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRICOMM(:) | ||
| 196 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRIMAP(:,:) | ||
| 197 | INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPOS(:) | ||
| 198 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPOS(:) | ||
| 199 | INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPTR(:) | ||
| 200 | INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPTR(:) | ||
| 201 | INTEGER(KIND=JPIM), ALLOCATABLE :: IROCOMM(:) | ||
| 202 | INTEGER(KIND=JPIM), ALLOCATABLE :: IROMAP(:,:) | ||
| 203 | INTEGER(KIND=JPIM), ALLOCATABLE :: IGLOBALINDEX(:) | ||
| 204 | |||
| 205 | REAL(KIND=JPRB),ALLOCATABLE :: ZLATX(:) | ||
| 206 | REAL(KIND=JPRB),ALLOCATABLE :: ZLONX(:) | ||
| 207 | REAL(KIND=JPRB) :: ZHOOK_HANDLE | ||
| 208 | |||
| 209 | INTERFACE | ||
| 210 | SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KLOEN,LDLINEAR_GRID,LDSPLIT,& | ||
| 211 | &KAPSETS,KTMAX,KRESOL) | ||
| 212 | |||
| 213 | !**** *SETUP_TRANS* - Setup transform package for specific resolution | ||
| 214 | |||
| 215 | ! Purpose. | ||
| 216 | ! -------- | ||
| 217 | ! To setup for making spectral transforms. Each call to this routine | ||
| 218 | ! creates a new resolution up to a maximum of NMAX_RESOL set up in | ||
| 219 | ! SETUP_TRANS0. You need to call SETUP_TRANS0 before this routine can | ||
| 220 | ! be called. | ||
| 221 | |||
| 222 | !** Interface. | ||
| 223 | ! ---------- | ||
| 224 | ! CALL SETUP_TRANS(...) | ||
| 225 | |||
| 226 | ! Explicit arguments : KLOEN,LDLINEAR_GRID,LDSPLIT,KAPSETS are optional arguments | ||
| 227 | ! -------------------- | ||
| 228 | ! KSMAX - spectral truncation required | ||
| 229 | ! KDGL - number of Gaussian latitudes | ||
| 230 | ! KLOEN(:) - number of points on each Gaussian latitude [2*KDGL] | ||
| 231 | ! LDSPLIT - true if split latitudes in grid-point space [false] | ||
| 232 | ! LDLINEAR_GRID - true if linear grid | ||
| 233 | ! KAPSETS - Number of apple sets in the distribution [0] | ||
| 234 | ! KTMAX - truncation order for tendencies? | ||
| 235 | ! KRESOL - the resolution identifier | ||
| 236 | |||
| 237 | ! KSMAX,KDGL,KTMAX and KLOEN are GLOBAL variables desribing the resolution | ||
| 238 | ! in spectral and grid-point space | ||
| 239 | |||
| 240 | ! LDSPLIT and KAPSETS describe the distribution among processors of | ||
| 241 | ! grid-point data and has no relevance if you are using a single processor | ||
| 242 | |||
| 243 | ! Method. | ||
| 244 | ! ------- | ||
| 245 | |||
| 246 | ! Externals. SET_RESOL - set resolution | ||
| 247 | ! ---------- SETUP_DIMS - setup distribution independent dimensions | ||
| 248 | ! SUMP_TRANS_PRELEG - first part of setup of distr. environment | ||
| 249 | ! SULEG - Compute Legandre polonomial and Gaussian | ||
| 250 | ! Latitudes and Weights | ||
| 251 | ! SETUP_GEOM - Compute arrays related to grid-point geometry | ||
| 252 | ! SUMP_TRANS - Second part of setup of distributed environment | ||
| 253 | ! SUFFT - setup for FFT | ||
| 254 | |||
| 255 | ! Author. | ||
| 256 | ! ------- | ||
| 257 | ! Mats Hamrud *ECMWF* | ||
| 258 | |||
| 259 | ! Modifications. | ||
| 260 | ! -------------- | ||
| 261 | ! Original : 00-03-03 | ||
| 262 | |||
| 263 | ! ------------------------------------------------------------------ | ||
| 264 | |||
| 265 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 266 | |||
| 267 | IMPLICIT NONE | ||
| 268 | |||
| 269 | ! Dummy arguments | ||
| 270 | |||
| 271 | INTEGER(KIND=JPIM) ,INTENT(IN) :: KSMAX,KDGL | ||
| 272 | INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KLOEN(:) | ||
| 273 | LOGICAL ,OPTIONAL,INTENT(IN) :: LDLINEAR_GRID | ||
| 274 | LOGICAL ,OPTIONAL,INTENT(IN) :: LDSPLIT | ||
| 275 | INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KAPSETS | ||
| 276 | INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KTMAX | ||
| 277 | INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(OUT):: KRESOL | ||
| 278 | |||
| 279 | |||
| 280 | END SUBROUTINE SETUP_TRANS | ||
| 281 | |||
| 282 | |||
| 283 | SUBROUTINE TRANS_INQ(KRESOL,KSPEC,KSPEC2,KSPEC2G,KSPEC2MX,KNUMP,& | ||
| 284 | &KGPTOT,KGPTOTG,KGPTOTMX,KGPTOTL,& | ||
| 285 | &KMYMS,KASM0,KUMPP,KPOSSP,KPTRMS,KALLMS,KDIM0G,& | ||
| 286 | &KFRSTLAT,KLSTLAT,KFRSTLOFF,KPTRLAT,& | ||
| 287 | &KPTRFRSTLAT,KPTRLSTLAT,KPTRFLOFF,KSTA,KONL,& | ||
| 288 | &KULTPP,KPTRLS,& | ||
| 289 | &LDSPLITLAT,& | ||
| 290 | &PMU,PGW,PRPNM,KLEI3,KSPOLEGL,KPMS) | ||
| 291 | |||
| 292 | !**** *TRANS_INQ* - Extract information from the transform package | ||
| 293 | |||
| 294 | ! Purpose. | ||
| 295 | ! -------- | ||
| 296 | ! Interface routine for extracting information from the T.P. | ||
| 297 | |||
| 298 | !** Interface. | ||
| 299 | ! ---------- | ||
| 300 | ! CALL TRANS_INQ(...) | ||
| 301 | ! Explicit arguments : All arguments are optional. | ||
| 302 | ! -------------------- | ||
| 303 | ! KRESOL - resolution tag for which info is required ,default is the | ||
| 304 | ! first defined resulution (input) | ||
| 305 | |||
| 306 | ! SPECTRAL SPACE | ||
| 307 | ! KSPEC - number of complex spectral coefficients on this PE | ||
| 308 | ! KSPEC2 - 2*KSPEC | ||
| 309 | ! KSPEC2G - global KSPEC2 | ||
| 310 | ! KSPEC2MX - maximun KSPEC2 among all PEs | ||
| 311 | ! KNUMP - Number of spectral waves handled by this PE | ||
| 312 | ! KGPTOT - Total number of grid columns on this PE | ||
| 313 | ! KGPTOTG - Total number of grid columns on the Globe | ||
| 314 | ! KGPTOTMX - Maximum number of grid columns on any of the PEs | ||
| 315 | ! KGPTOTL - Number of grid columns one each PE (dimension NPRGPNS:NPRGPEW) | ||
| 316 | ! KMYMS - This PEs spectral zonal wavenumbers | ||
| 317 | ! KASM0 - Address in a spectral array of (m, n=m) | ||
| 318 | ! KUMPP - No. of wave numbers each wave set is responsible for | ||
| 319 | ! KPOSSP - Defines partitioning of global spectral fields among PEs | ||
| 320 | ! KPTRMS - Pointer to the first wave number of a given a-set | ||
| 321 | ! KALLMS - Wave numbers for all wave-set concatenated together | ||
| 322 | ! to give all wave numbers in wave-set order | ||
| 323 | ! KDIM0G - Defines partitioning of global spectral fields among PEs | ||
| 324 | |||
| 325 | ! GRIDPOINT SPACE | ||
| 326 | ! KFRSTLAT - First latitude of each a-set in grid-point space | ||
| 327 | ! KLSTTLAT - Last latitude of each a-set in grid-point space | ||
| 328 | ! KFRSTLOFF - Offset for first lat of own a-set in grid-point space | ||
| 329 | ! KPTRLAT - Pointer to the start of each latitude | ||
| 330 | ! KPTRFRSTLAT - Pointer to the first latitude of each a-set in | ||
| 331 | ! NSTA and NONL arrays | ||
| 332 | ! KPTRLSTLAT - Pointer to the last latitude of each a-set in | ||
| 333 | ! NSTA and NONL arrays | ||
| 334 | ! KPTRFLOFF - Offset for pointer to the first latitude of own a-set | ||
| 335 | ! NSTA and NONL arrays, i.e. nptrfrstlat(myseta)-1 | ||
| 336 | ! KSTA - Position of first grid column for the latitudes on a | ||
| 337 | ! processor. The information is available for all processors. | ||
| 338 | ! The b-sets are distinguished by the last dimension of | ||
| 339 | ! nsta().The latitude band for each a-set is addressed by | ||
| 340 | ! nptrfrstlat(jaset),nptrlstlat(jaset), and | ||
| 341 | ! nptrfloff=nptrfrstlat(myseta) on this processors a-set. | ||
| 342 | ! Each split latitude has two entries in nsta(,:) which | ||
| 343 | ! necessitates the rather complex addressing of nsta(,:) | ||
| 344 | ! and the overdimensioning of nsta by nprgpns. | ||
| 345 | ! KONL - Number of grid columns for the latitudes on a processor. | ||
| 346 | ! Similar to nsta() in data structure. | ||
| 347 | ! LDSPLITLAT - TRUE if latitude is split in grid point space over | ||
| 348 | ! two a-sets | ||
| 349 | |||
| 350 | ! FOURIER SPACE | ||
| 351 | ! KULTPP - number of latitudes for which each a-set is calculating | ||
| 352 | ! the FFT's. | ||
| 353 | ! KPTRLS - pointer to first global latitude of each a-set for which | ||
| 354 | ! it performs the Fourier calculations | ||
| 355 | |||
| 356 | ! LEGENDRE | ||
| 357 | ! PMU - sin(Gaussian latitudes) | ||
| 358 | ! PGW - Gaussian weights | ||
| 359 | ! PRPNM - Legendre polynomials | ||
| 360 | ! KLEI3 - First dimension of Legendre polynomials | ||
| 361 | ! KSPOLEGL - Second dimension of Legendre polynomials | ||
| 362 | ! KPMS - Adress for legendre polynomial for given M (NSMAX) | ||
| 363 | |||
| 364 | ! Method. | ||
| 365 | ! ------- | ||
| 366 | |||
| 367 | ! Externals. SET_RESOL - set resolution | ||
| 368 | ! ---------- | ||
| 369 | |||
| 370 | ! Author. | ||
| 371 | ! ------- | ||
| 372 | ! Mats Hamrud *ECMWF* | ||
| 373 | |||
| 374 | ! Modifications. | ||
| 375 | ! -------------- | ||
| 376 | ! Original : 00-03-03 | ||
| 377 | ! M. Hortal : 2001-03-05 Dimensions of the Legendre polynomials | ||
| 378 | |||
| 379 | ! ------------------------------------------------------------------ | ||
| 380 | |||
| 381 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 382 | |||
| 383 | |||
| 384 | IMPLICIT NONE | ||
| 385 | |||
| 386 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL | ||
| 387 | |||
| 388 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC | ||
| 389 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2 | ||
| 390 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2G | ||
| 391 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2MX | ||
| 392 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KNUMP | ||
| 393 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOT | ||
| 394 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTG | ||
| 395 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTMX | ||
| 396 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTL(:,:) | ||
| 397 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KFRSTLOFF | ||
| 398 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRFLOFF | ||
| 399 | |||
| 400 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KMYMS(:) | ||
| 401 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KASM0(0:) | ||
| 402 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KUMPP(:) | ||
| 403 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPOSSP(:) | ||
| 404 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRMS(:) | ||
| 405 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KALLMS(:) | ||
| 406 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KDIM0G(0:) | ||
| 407 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KFRSTLAT(:) | ||
| 408 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KLSTLAT(:) | ||
| 409 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLAT(:) | ||
| 410 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRFRSTLAT(:) | ||
| 411 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLSTLAT(:) | ||
| 412 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSTA(:,:) | ||
| 413 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KONL(:,:) | ||
| 414 | LOGICAL ,OPTIONAL, INTENT(OUT) :: LDSPLITLAT(:) | ||
| 415 | |||
| 416 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KULTPP(:) | ||
| 417 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLS(:) | ||
| 418 | |||
| 419 | REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PMU(:) | ||
| 420 | REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PGW(:) | ||
| 421 | REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PRPNM(:,:) | ||
| 422 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KLEI3 | ||
| 423 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPOLEGL | ||
| 424 | INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPMS(0:) | ||
| 425 | |||
| 426 | |||
| 427 | END SUBROUTINE TRANS_INQ | ||
| 428 | |||
| 429 | |||
| 430 | |||
| 431 | |||
| 432 | |||
| 433 | |||
| 434 | END INTERFACE | ||
| 435 | |||
| 436 | INTERFACE | ||
| 437 | SUBROUTINE ABOR1(CDTEXT) | ||
| 438 | CHARACTER(LEN=*) :: CDTEXT | ||
| 439 | END SUBROUTINE ABOR1 | ||
| 440 | END INTERFACE | ||
| 441 | INTERFACE | ||
| 442 | SUBROUTINE POSNAM(KULNAM,CDNAML) | ||
| 443 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 444 | INTEGER(KIND=JPIM),INTENT(IN) :: KULNAM | ||
| 445 | CHARACTER(LEN=*) ,INTENT(IN) :: CDNAML | ||
| 446 | END SUBROUTINE POSNAM | ||
| 447 | END INTERFACE | ||
| 448 | INTERFACE | ||
| 449 | SUBROUTINE RRTM_INIT_140GP | ||
| 450 | END SUBROUTINE RRTM_INIT_140GP | ||
| 451 | END INTERFACE | ||
| 452 | |||
| 453 | INTERFACE | ||
| 454 | SUBROUTINE RDCSET(CDSL,KSLWIDEN,KSLWIDES,KSLWIDEW,KSLWIDEE,& | ||
| 455 | & KSLRPTSUR,KSLSPTSUR,& | ||
| 456 | & KDGLG,KDLON,KDGSAG,KDGENG,KDGUXL,KDGUXG,KDGSAL,KDGENL,& | ||
| 457 | & KDSUR1,KDLSUR,KDGSUR,KGPTOT,KGPTOT_CAP,& | ||
| 458 | & KPTRFLOFF,KFRSTLOFF,KYFRSTACTLAT,KYLSTACTLAT,& | ||
| 459 | & KSTA,KONL,KLOENG,KPTRFRSTLAT,KFRSTLAT,KLSTLAT,& | ||
| 460 | & PMU,PSQM2,& | ||
| 461 | & KSLSTA,KSLONL,KSLOFF,KSLEXT,KSLCORE,KASLB1,& | ||
| 462 | & KSLPROCS,KSLMPBUFSZ,KSLRPT,KSLSPT,& | ||
| 463 | & KSLSENDPOS,KSLRECVPOS,KSENDPTR,KRECVPTR,KSLCOMM,KMAP,KMAPLEN) | ||
| 464 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 465 | USE YOMCT0 , ONLY : NPROC ,NPRINTLEV,LOUTPUT ,LMPDIAG ,LALLOPR ,& | ||
| 466 | & LELAM ,N_REGIONS_NS ,N_REGIONS_EW | ||
| 467 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLWIDEN | ||
| 468 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLWIDES | ||
| 469 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLWIDEW | ||
| 470 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLWIDEE | ||
| 471 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLRPTSUR | ||
| 472 | INTEGER(KIND=JPIM),INTENT(IN) :: KSLSPTSUR | ||
| 473 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGLG | ||
| 474 | INTEGER(KIND=JPIM),INTENT(IN) :: KDLON | ||
| 475 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGSAG | ||
| 476 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGENG | ||
| 477 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGSAL | ||
| 478 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGENL | ||
| 479 | INTEGER(KIND=JPIM),INTENT(IN) :: KGPTOT | ||
| 480 | CHARACTER(LEN=2) ,INTENT(IN) :: CDSL | ||
| 481 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGUXL | ||
| 482 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGUXG | ||
| 483 | INTEGER(KIND=JPIM),INTENT(IN) :: KDSUR1 | ||
| 484 | INTEGER(KIND=JPIM),INTENT(IN) :: KDLSUR | ||
| 485 | INTEGER(KIND=JPIM),INTENT(IN) :: KDGSUR | ||
| 486 | INTEGER(KIND=JPIM),INTENT(IN) :: KGPTOT_CAP | ||
| 487 | INTEGER(KIND=JPIM),INTENT(IN) :: KPTRFLOFF | ||
| 488 | INTEGER(KIND=JPIM),INTENT(IN) :: KFRSTLOFF | ||
| 489 | INTEGER(KIND=JPIM),INTENT(IN) :: KYFRSTACTLAT | ||
| 490 | INTEGER(KIND=JPIM),INTENT(IN) :: KYLSTACTLAT | ||
| 491 | INTEGER(KIND=JPIM),INTENT(IN) :: KSTA(KDGSAG:KDGENG+N_REGIONS_NS-1,N_REGIONS_EW) | ||
| 492 | INTEGER(KIND=JPIM),INTENT(IN) :: KONL(KDGSAG:KDGENG+N_REGIONS_NS-1,N_REGIONS_EW) | ||
| 493 | INTEGER(KIND=JPIM),INTENT(IN) :: KLOENG(KDGSAG:KDGENG) | ||
| 494 | INTEGER(KIND=JPIM),INTENT(IN) :: KPTRFRSTLAT(N_REGIONS_NS) | ||
| 495 | INTEGER(KIND=JPIM),INTENT(IN) :: KFRSTLAT(N_REGIONS_NS) | ||
| 496 | INTEGER(KIND=JPIM),INTENT(IN) :: KLSTLAT(N_REGIONS_NS) | ||
| 497 | REAL(KIND=JPRB) ,INTENT(IN) :: PMU(KDGSAG:KDGENG) | ||
| 498 | REAL(KIND=JPRB) ,INTENT(IN) :: PSQM2(KDGSAG:KDGENG) | ||
| 499 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLSTA(KDGSAL-KSLWIDEN:KDGENL+KSLWIDES) | ||
| 500 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLONL(KDGSAL-KSLWIDEN:KDGENL+KSLWIDES) | ||
| 501 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLOFF(KDGSAL-KSLWIDEN:KDGENL+KSLWIDES) | ||
| 502 | INTEGER(KIND=JPIM),INTENT(OUT) :: KSLEXT(1-KDLON:KDLON+KDLON,1-KSLWIDEN:KDGENL+KSLWIDES) | ||
| 503 | INTEGER(KIND=JPIM),INTENT(OUT) :: KSLCORE(KGPTOT) | ||
| 504 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KASLB1 | ||
| 505 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLPROCS | ||
| 506 | INTEGER(KIND=JPIM),INTENT(OUT) :: KSLMPBUFSZ | ||
| 507 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLRPT | ||
| 508 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLSPT | ||
| 509 | INTEGER(KIND=JPIM),INTENT(OUT) :: KSLSENDPOS(KSLSPTSUR) | ||
| 510 | INTEGER(KIND=JPIM),INTENT(OUT) :: KSLRECVPOS(KSLRPTSUR) | ||
| 511 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSENDPTR(NPROC+1) | ||
| 512 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KRECVPTR(NPROC+1) | ||
| 513 | INTEGER(KIND=JPIM),INTENT(INOUT) :: KSLCOMM(NPROC) | ||
| 514 | INTEGER(KIND=JPIM),INTENT(OUT) :: KMAP(4,KDGLG) | ||
| 515 | INTEGER(KIND=JPIM),INTENT(OUT) :: KMAPLEN | ||
| 516 | END SUBROUTINE RDCSET | ||
| 517 | END INTERFACE | ||
| 518 | INTERFACE | ||
| 519 | SUBROUTINE SUAERH | ||
| 520 | END SUBROUTINE SUAERH | ||
| 521 | END INTERFACE | ||
| 522 | INTERFACE | ||
| 523 | SUBROUTINE SUAERL | ||
| 524 | END SUBROUTINE SUAERL | ||
| 525 | END INTERFACE | ||
| 526 | INTERFACE | ||
| 527 | SUBROUTINE SUAERSN (KTSW, KSW) | ||
| 528 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 529 | INTEGER(KIND=JPIM),INTENT(IN) :: KTSW | ||
| 530 | INTEGER(KIND=JPIM),INTENT(IN) :: KSW | ||
| 531 | END SUBROUTINE SUAERSN | ||
| 532 | END INTERFACE | ||
| 533 | INTERFACE | ||
| 534 | SUBROUTINE SUAERV& | ||
| 535 | & ( KLEV , PETAH,& | ||
| 536 | & PVDAES, PVDAEL, PVDAEU, PVDAED,& | ||
| 537 | & PTRBGA, PVOBGA, PSTBGA, PAEOPS, PAEOPL, PAEOPU,& | ||
| 538 | & PAEOPD, PTRPT , PAEADK, PAEADM, PAEROS& | ||
| 539 | & ) | ||
| 540 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 541 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV | ||
| 542 | REAL(KIND=JPRB) ,INTENT(IN) :: PETAH(KLEV+1) | ||
| 543 | REAL(KIND=JPRB) ,INTENT(OUT) :: PVDAES(KLEV+1) | ||
| 544 | REAL(KIND=JPRB) ,INTENT(OUT) :: PVDAEL(KLEV+1) | ||
| 545 | REAL(KIND=JPRB) ,INTENT(OUT) :: PVDAEU(KLEV+1) | ||
| 546 | REAL(KIND=JPRB) ,INTENT(OUT) :: PVDAED(KLEV+1) | ||
| 547 | REAL(KIND=JPRB) ,INTENT(OUT) :: PTRBGA | ||
| 548 | REAL(KIND=JPRB) ,INTENT(OUT) :: PVOBGA | ||
| 549 | REAL(KIND=JPRB) ,INTENT(OUT) :: PSTBGA | ||
| 550 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEOPS | ||
| 551 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEOPL | ||
| 552 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEOPU | ||
| 553 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEOPD | ||
| 554 | REAL(KIND=JPRB) ,INTENT(OUT) :: PTRPT | ||
| 555 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEADK(3) | ||
| 556 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEADM | ||
| 557 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAEROS | ||
| 558 | END SUBROUTINE SUAERV | ||
| 559 | END INTERFACE | ||
| 560 | INTERFACE | ||
| 561 | SUBROUTINE SUCLOPN (KTSW, KSW, KLEV) | ||
| 562 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 563 | INTEGER(KIND=JPIM),INTENT(IN) :: KTSW | ||
| 564 | INTEGER(KIND=JPIM),INTENT(IN) :: KSW | ||
| 565 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV | ||
| 566 | END SUBROUTINE SUCLOPN | ||
| 567 | END INTERFACE | ||
| 568 | INTERFACE | ||
| 569 | SUBROUTINE SUECRADI | ||
| 570 | END SUBROUTINE SUECRADI | ||
| 571 | END INTERFACE | ||
| 572 | INTERFACE | ||
| 573 | SUBROUTINE SUECRADL | ||
| 574 | !USE MPL_MODULE | ||
| 575 | END SUBROUTINE SUECRADL | ||
| 576 | END INTERFACE | ||
| 577 | INTERFACE | ||
| 578 | SUBROUTINE SULWN | ||
| 579 | END SUBROUTINE SULWN | ||
| 580 | END INTERFACE | ||
| 581 | INTERFACE | ||
| 582 | SUBROUTINE SULWNEUR(KLEV) | ||
| 583 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 584 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV | ||
| 585 | END SUBROUTINE SULWNEUR | ||
| 586 | END INTERFACE | ||
| 587 | INTERFACE | ||
| 588 | SUBROUTINE SUOVLP ( KLEV ) | ||
| 589 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 590 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV | ||
| 591 | END SUBROUTINE SUOVLP | ||
| 592 | END INTERFACE | ||
| 593 | INTERFACE | ||
| 594 | SUBROUTINE SURDI | ||
| 595 | END SUBROUTINE SURDI | ||
| 596 | END INTERFACE | ||
| 597 | INTERFACE | ||
| 598 | SUBROUTINE SURRTAB | ||
| 599 | END SUBROUTINE SURRTAB | ||
| 600 | END INTERFACE | ||
| 601 | INTERFACE | ||
| 602 | SUBROUTINE SURRTFTR | ||
| 603 | END SUBROUTINE SURRTFTR | ||
| 604 | END INTERFACE | ||
| 605 | INTERFACE | ||
| 606 | SUBROUTINE SURRTPK | ||
| 607 | END SUBROUTINE SURRTPK | ||
| 608 | END INTERFACE | ||
| 609 | INTERFACE | ||
| 610 | SUBROUTINE SURRTRF | ||
| 611 | END SUBROUTINE SURRTRF | ||
| 612 | END INTERFACE | ||
| 613 | INTERFACE | ||
| 614 | SUBROUTINE SUSAT | ||
| 615 | END SUBROUTINE SUSAT | ||
| 616 | END INTERFACE | ||
| 617 | INTERFACE | ||
| 618 | SUBROUTINE SUSWN (KTSW, KSW) | ||
| 619 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 620 | INTEGER(KIND=JPIM),INTENT(IN) :: KTSW | ||
| 621 | INTEGER(KIND=JPIM),INTENT(IN) :: KSW | ||
| 622 | END SUBROUTINE SUSWN | ||
| 623 | END INTERFACE | ||
| 624 | INTERFACE | ||
| 625 | SUBROUTINE SUSRTAER | ||
| 626 | END SUBROUTINE SUSRTAER | ||
| 627 | END INTERFACE | ||
| 628 | INTERFACE | ||
| 629 | SUBROUTINE SRTM_INIT | ||
| 630 | END SUBROUTINE SRTM_INIT | ||
| 631 | END INTERFACE | ||
| 632 | INTERFACE | ||
| 633 | SUBROUTINE SUSRTCOP | ||
| 634 | END SUBROUTINE SUSRTCOP | ||
| 635 | END INTERFACE | ||
| 636 | INTERFACE | ||
| 637 | SUBROUTINE SU_AERW | ||
| 638 | END SUBROUTINE SU_AERW | ||
| 639 | END INTERFACE | ||
| 640 | INTERFACE | ||
| 641 | SUBROUTINE SU_UVRAD ( KUV ) | ||
| 642 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 643 | INTEGER(KIND=JPIM),INTENT(IN) :: KUV | ||
| 644 | END SUBROUTINE SU_UVRAD | ||
| 645 | END INTERFACE | ||
| 646 | INTERFACE | ||
| 647 | SUBROUTINE SU_MCICA | ||
| 648 | END SUBROUTINE SU_MCICA | ||
| 649 | END INTERFACE | ||
| 650 | |||
| 651 | ! ---------------------------------------------------------------- | ||
| 652 | |||
| 653 | ! ----------------------------------------------------------------- | ||
| 654 | NAMELIST/NAERAD/& | ||
| 655 | & LERAD1H, LERADHS, LEPO3RA, LRADLB , LONEWSW & | ||
| 656 | &, LCCNL , LCCNO , LECSRAD, LRAYL , LRRTM , LSRTM & | ||
| 657 | &, LHVOLCA, LNEWAER, LDIFFC , LNOTROAER & | ||
| 658 | &, LRADONDEM & | ||
| 659 | &, NICEOPT, NLIQOPT, NMCICA , NRADIP , NRADLP & | ||
| 660 | &, NAER , NMODE , NOZOCL , NINHOM , NLAYINH & | ||
| 661 | &, NOVLP , NLW , NSW , NRADFR , NLNGR1H & | ||
| 662 | &, NRADPFR, NRADPLA, NRINT , NRPROMA, NCSRADF & | ||
| 663 | &, NRADINT, NRADRES, CRTABLEDIR, CRTABLEFIL & | ||
| 664 | &, RCCNSEA, RCCNLND, NPERTAER, NPERTOZ & | ||
| 665 | &, RPERTOZ, RLWINHF, RSWINHF, RRe2De & | ||
| 666 | &, RCCO2 , RCCH4 , RCN2O , RCCFC11, RCCFC12 & | ||
| 667 | &, NHINCSOL,LECO2VAR,LHGHG , NSCEN & | ||
| 668 | &, LEDBUG & | ||
| 669 | &, LUVPROC, LUVTDEP, LUVDBG , NUV , NUVTIM , NRADUV , RUVLAM, RMUZUV | ||
| 670 | ! ----------------------------------------------------------------- | ||
| 671 | |||
| 672 | |||
| 673 | |||
| 674 | !----------------------------------------------------------------------------- | ||
| 675 | |||
| 676 | NAMELIST/NAMRGRI/NRGRI | ||
| 677 | |||
| 678 | !----------------------------------------------------------------------------- | ||
| 679 | |||
| 680 | !MPL/IM 20160915 on prend GES de phylmd | ||
| 681 | ! $Id: clesphys.h 3435 2019-01-22 15:21:59Z fairhead $ | ||
| 682 | ! | ||
| 683 | ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre | ||
| 684 | ! veillez \`a n'utiliser que des ! pour les commentaires | ||
| 685 | ! et \`a bien positionner les & des lignes de continuation | ||
| 686 | ! (les placer en colonne 6 et en colonne 73) | ||
| 687 | ! | ||
| 688 | !..include cles_phys.h | ||
| 689 | ! | ||
| 690 | INTEGER iflag_cycle_diurne | ||
| 691 | LOGICAL soil_model,new_oliq,ok_orodr,ok_orolf | ||
| 692 | LOGICAL ok_limitvrai | ||
| 693 | LOGICAL ok_all_xml | ||
| 694 | LOGICAL ok_lwoff | ||
| 695 | INTEGER nbapp_rad, iflag_con, nbapp_cv, nbapp_wk, iflag_ener_conserv | ||
| 696 | REAL co2_ppm, co2_ppm0, solaire | ||
| 697 | !FC | ||
| 698 | REAL Cd_frein | ||
| 699 | LOGICAL ok_suntime_rrtm | ||
| 700 | REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12 | ||
| 701 | REAL(kind=8) RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act | ||
| 702 | REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt | ||
| 703 | !IM ajout CFMIP2/CMIP5 | ||
| 704 | REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per | ||
| 705 | REAL(kind=8) CH4_ppb_per,N2O_ppb_per,CFC11_ppt_per,CFC12_ppt_per | ||
| 706 | |||
| 707 | !OM ---> correction du bilan d'eau global | ||
| 708 | !OM Correction sur precip KE | ||
| 709 | REAL cvl_corr | ||
| 710 | !OM Fonte calotte dans bilan eau | ||
| 711 | LOGICAL ok_lic_melt | ||
| 712 | !OB Depot de vapeur d eau sur la calotte pour le bilan eau | ||
| 713 | LOGICAL ok_lic_cond | ||
| 714 | |||
| 715 | !IM simulateur ISCCP | ||
| 716 | INTEGER top_height, overlap | ||
| 717 | !IM seuils cdrm, cdrh | ||
| 718 | REAL cdmmax, cdhmax | ||
| 719 | !IM param. stabilite s/ terres et en dehors | ||
| 720 | REAL ksta, ksta_ter, f_ri_cd_min | ||
| 721 | !IM ok_kzmin : clef calcul Kzmin dans la CL de surface cf FH | ||
| 722 | LOGICAL ok_kzmin | ||
| 723 | !IM, MAFo fmagic, pmagic : parametres - additionnel et multiplicatif - | ||
| 724 | ! pour regler l albedo sur ocean | ||
| 725 | REAL pbl_lmixmin_alpha | ||
| 726 | REAL fmagic, pmagic | ||
| 727 | ! Hauteur (imposee) du contenu en eau du sol | ||
| 728 | REAL qsol0,albsno0,evap0 | ||
| 729 | ! Frottement au sol (Cdrag) | ||
| 730 | Real f_cdrag_ter,f_cdrag_oce | ||
| 731 | REAL min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce | ||
| 732 | REAL z0m_seaice,z0h_seaice | ||
| 733 | INTEGER iflag_gusts,iflag_z0_oce | ||
| 734 | |||
| 735 | ! Rugoro | ||
| 736 | Real f_rugoro,z0min | ||
| 737 | |||
| 738 | ! tau_gl : constante de rappel de la temperature a la surface de la glace | ||
| 739 | REAL tau_gl | ||
| 740 | |||
| 741 | !IM lev_histhf : niveau sorties 6h | ||
| 742 | !IM lev_histday : niveau sorties journalieres | ||
| 743 | !IM lev_histmth : niveau sorties mensuelles | ||
| 744 | !IM lev_histdayNMC : on peut sortir soit sur 8 (comme AR5) ou bien | ||
| 745 | ! sur 17 niveaux de pression | ||
| 746 | INTEGER lev_histhf, lev_histday, lev_histmth | ||
| 747 | INTEGER lev_histdayNMC | ||
| 748 | Integer lev_histins, lev_histLES | ||
| 749 | !IM ok_histNMC : sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
| 750 | !IM freq_outNMC : frequences de sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
| 751 | !IM freq_calNMC : frequences de calcul fis. hist*NMC.nc | ||
| 752 | LOGICAL ok_histNMC(3) | ||
| 753 | INTEGER levout_histNMC(3) | ||
| 754 | REAL freq_outNMC(3) , freq_calNMC(3) | ||
| 755 | CHARACTER(len=4) type_run | ||
| 756 | ! aer_type: pour utiliser un fichier constant dans readaerosol | ||
| 757 | CHARACTER(len=8) :: aer_type | ||
| 758 | LOGICAL ok_regdyn | ||
| 759 | REAL lonmin_ins, lonmax_ins, latmin_ins, latmax_ins | ||
| 760 | REAL ecrit_ins, ecrit_hf, ecrit_day | ||
| 761 | REAL ecrit_mth, ecrit_tra, ecrit_reg | ||
| 762 | REAL ecrit_LES | ||
| 763 | REAL freq_ISCCP, ecrit_ISCCP | ||
| 764 | REAL freq_COSP, freq_AIRS | ||
| 765 | LOGICAL :: ok_cosp,ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP | ||
| 766 | LOGICAL :: ok_airs | ||
| 767 | INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo | ||
| 768 | LOGICAL :: ok_chlorophyll | ||
| 769 | LOGICAL :: ok_strato | ||
| 770 | LOGICAL :: ok_hines, ok_gwd_rando | ||
| 771 | LOGICAL :: ok_qch4 | ||
| 772 | LOGICAL :: ok_conserv_q | ||
| 773 | LOGICAL :: adjust_tropopause | ||
| 774 | LOGICAL :: ok_daily_climoz | ||
| 775 | ! flag to bypass or not the phytrac module | ||
| 776 | INTEGER :: iflag_phytrac | ||
| 777 | |||
| 778 | COMMON/clesphys/ & | ||
| 779 | ! REAL FIRST | ||
| 780 | & co2_ppm, solaire & | ||
| 781 | & , RCO2, RCH4, RN2O, RCFC11, RCFC12 & | ||
| 782 | & , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act & | ||
| 783 | & , RCO2_per, RCH4_per, RN2O_per, RCFC11_per, RCFC12_per & | ||
| 784 | & , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt & | ||
| 785 | & , CH4_ppb_per, N2O_ppb_per, CFC11_ppt_per, CFC12_ppt_per & | ||
| 786 | & , cdmmax,cdhmax,ksta,ksta_ter,f_ri_cd_min,pbl_lmixmin_alpha & | ||
| 787 | & , fmagic, pmagic & | ||
| 788 | & , f_cdrag_ter,f_cdrag_oce,f_rugoro,z0min,tau_gl & | ||
| 789 | & , min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce & | ||
| 790 | & , z0m_seaice,z0h_seaice & | ||
| 791 | & , freq_outNMC, freq_calNMC & | ||
| 792 | & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & | ||
| 793 | & , freq_ISCCP, ecrit_ISCCP, freq_COSP, freq_AIRS & | ||
| 794 | & , cvl_corr & | ||
| 795 | & , qsol0,albsno0,evap0 & | ||
| 796 | & , co2_ppm0 & | ||
| 797 | !FC | ||
| 798 | & , Cd_frein & | ||
| 799 | & , ecrit_LES & | ||
| 800 | & , ecrit_ins, ecrit_hf, ecrit_day & | ||
| 801 | & , ecrit_mth, ecrit_tra, ecrit_reg & | ||
| 802 | ! THEN INTEGER AND LOGICALS | ||
| 803 | & , top_height & | ||
| 804 | & , iflag_cycle_diurne, soil_model, new_oliq & | ||
| 805 | & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad & | ||
| 806 | & , iflag_con, nbapp_cv, nbapp_wk & | ||
| 807 | & , iflag_ener_conserv & | ||
| 808 | & , ok_suntime_rrtm & | ||
| 809 | & , overlap & | ||
| 810 | & , ok_kzmin & | ||
| 811 | & , lev_histhf, lev_histday, lev_histmth & | ||
| 812 | & , lev_histins, lev_histLES, lev_histdayNMC, levout_histNMC & | ||
| 813 | & , ok_histNMC & | ||
| 814 | & , type_run, ok_regdyn, ok_cosp, ok_airs & | ||
| 815 | & , ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP & | ||
| 816 | & , ip_ebil_phy & | ||
| 817 | & , iflag_gusts ,iflag_z0_oce & | ||
| 818 | & , ok_lic_melt, ok_lic_cond, aer_type & | ||
| 819 | & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 & | ||
| 820 | & , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo & | ||
| 821 | & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & | ||
| 822 | & , ok_daily_climoz, ok_all_xml, ok_lwoff & | ||
| 823 | & , iflag_phytrac | ||
| 824 | |||
| 825 | save /clesphys/ | ||
| 826 | !$OMP THREADPRIVATE(/clesphys/) | ||
| 827 | |||
| 828 | !* 1. INITIALIZE NEUROFLUX LONGWAVE RADIATION | ||
| 829 | ! --------------------------------------- | ||
| 830 | |||
| 831 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('SUECRAD',0,ZHOOK_HANDLE) |
| 832 | !CALL GSTATS(1818,0) MPL 2.12.08 | ||
| 833 | !IF (LERADN2) THEN | ||
| 834 | ! CALL SULWNEUR(KLEV) | ||
| 835 | !ENDIF | ||
| 836 | |||
| 837 | !* 2. SET DEFAULT VALUES. | ||
| 838 | ! ------------------- | ||
| 839 | |||
| 840 | !* 2.1 PRESET INDICES IN *YOERAD* | ||
| 841 | ! -------------------------- | ||
| 842 | |||
| 843 | 1 | LERAD1H=.FALSE. | |
| 844 | 1 | NLNGR1H=6 | |
| 845 | |||
| 846 | 1 | LERADHS=.TRUE. | |
| 847 | 1 | LONEWSW=.TRUE. | |
| 848 | 1 | LECSRAD=.FALSE. | |
| 849 | |||
| 850 | !LE4ALB=.FALSE. | ||
| 851 | !This is read from SU0PHY in NAEPHY and put in YOEPHY | ||
| 852 | |||
| 853 | !- default setting of cloud optical properties | ||
| 854 | ! liquid water cloud 0: Fouquart (SW), Smith-Shi (LW) | ||
| 855 | ! 1: Slingo (SW), Savijarvi (LW) | ||
| 856 | ! 2: Slingo (SW), Lindner-Li (LW) | ||
| 857 | ! ice water cloud 0: Ebert-Curry (SW), Smith-Shi (LW) | ||
| 858 | ! 1: Ebert-Curry (SW), Ebert-Curry (LW) | ||
| 859 | ! 2: Fu-Liou'93 (SW), Fu-Liou'93 (LW) | ||
| 860 | ! 3: Fu'96 (SW), Fu et al'98 (LW) | ||
| 861 | 1 | NLIQOPT=2 ! before 3?R1 default=0 2 | |
| 862 | 1 | NICEOPT=3 ! before 3?R1 default=1 3 | |
| 863 | |||
| 864 | !- default setting of cloud effective radius/diameter | ||
| 865 | ! liquid water cloud 0: f(P) 10 to 45 | ||
| 866 | ! 1: 13: ocean; 10: land | ||
| 867 | ! 2: Martin et al. CCN 50 over ocean, 900 over land | ||
| 868 | ! ice water cloud 0: 40 microns | ||
| 869 | ! 1: f(T) 40 to 130 microns | ||
| 870 | ! 2: f(T) 30 to 60 | ||
| 871 | ! 3: f(T,IWC) Sun'01: 22.5 to 175 microns | ||
| 872 | ! conversion factor between effective radius and particle size for ice | ||
| 873 | 1 | NRADIP=3 ! before 3?R1 default=2 3 | |
| 874 | 1 | NRADLP=2 ! before 3?R1 default=2 2 | |
| 875 | 1 | print *,'SUECRAD: NRADLP, NRADIP=',NRADLP,NRADIP | |
| 876 | 1 | RRe2De=0.64952_JPRB ! before 3?R1 default=0.5_JPRB | |
| 877 | |||
| 878 | !- RRTM as LW scheme | ||
| 879 | 1 | LRRTM = .FALSE. | |
| 880 | 1 | LECMWF = .FALSE. | |
| 881 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (iflag_rrtm.EQ.1) THEN |
| 882 | 1 | LRRTM = .TRUE. | |
| 883 | 1 | LECMWF = .TRUE. | |
| 884 | ! LRRTM = .FALSE. ! Utiliser pour faire tourner le "vieux" rayonnement | ||
| 885 | ! LECMWF = .FALSE. | ||
| 886 | ENDIF | ||
| 887 | |||
| 888 | !LRRTM = .FALSE. | ||
| 889 | |||
| 890 | !- SRTM as SW scheme | ||
| 891 | !!!!! A REVOIR (MPL) verifier signification de LSRTM | ||
| 892 | 1 | LSRTM = .FALSE. ! before 3?R1 default was .FALSE. true | |
| 893 | |||
| 894 | ! -- McICA treatment of cloud-radiation interactions | ||
| 895 | ! - 1 is maximum-random, 2 is generalized cloud overlap (before 31R1 default=0 no McICA) | ||
| 896 | 1 | NMcICA = 2 ! 2 for generalized overlap | |
| 897 | |||
| 898 | !- Inhomogeneity factors in LW and SW (0=F, 1=0.7 in both, 2=Barker's, 3=Cairns) | ||
| 899 | 1 | NINHOM = 0 ! before 3?R1 default=1 | |
| 900 | 1 | NLAYINH= 0 | |
| 901 | 1 | RLWINHF = 1.0_JPRB ! before 3?R1 default=0.7 | |
| 902 | 1 | RSWINHF = 1.0_JPRB ! before 3?R1 default=0.7 | |
| 903 | !- Diffusivity correction a la Savijarvi | ||
| 904 | 1 | LDIFFC = .FALSE. ! before 31R1 default=.FALSE. | |
| 905 | |||
| 906 | !- history of volcanic aerosols | ||
| 907 | 1 | LHVOLCA=.FALSE. | |
| 908 | !- monthly climatol. of tropospheric aerosols from Tegen et al. (1997) | ||
| 909 | 1 | LNEWAER=.TRUE. | |
| 910 | !!! cpl LNOTROAER=.FALSE. | ||
| 911 | 1 | LNOTROAER=.TRUE. | |
| 912 | 1 | NPERTAER=0 | |
| 913 | |||
| 914 | !- New Rayleigh formulation | ||
| 915 | 1 | LRAYL=.TRUE. | |
| 916 | |||
| 917 | !- Number concentration of aerosols if specified | ||
| 918 | 1 | LCCNL=.TRUE. ! before 3?R1 default=.FALSE. true | |
| 919 | 1 | LCCNO=.TRUE. ! before 3?R1 default=.FALSE. true | |
| 920 | 1 | RCCNLND=900._JPRB ! before 3?R1 default=900. now irrelevant | |
| 921 | 1 | RCCNSEA=50._JPRB ! before 3?R1 default=50. now irrelevant | |
| 922 | |||
| 923 | !- interaction radiation / prognostic O3 off by default | ||
| 924 | 1 | LEPO3RA=.FALSE. | |
| 925 | 1 | print *,'SUECRAD-0' | |
| 926 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (.NOT.YO3%LGP) THEN |
| 927 | 1 | LEPO3RA=.FALSE. | |
| 928 | ENDIF | ||
| 929 | 1 | RPERTOZ=0._JPRB | |
| 930 | 1 | NPERTOZ=0 | |
| 931 | |||
| 932 | !NAER: CONFIGURATION INDEX FOR AEROSOLS | ||
| 933 | !!!!! A REVOIR (MPL) a mettre dans un fichier .def | ||
| 934 | 1 | NAER =1 | |
| 935 | 1 | NMODE =0 | |
| 936 | 1 | NOZOCL =1 | |
| 937 | 1 | NRADFR =-3 | |
| 938 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (NSMAX >= 511) NRADFR =-1 |
| 939 | 1 | NRADPFR=0 | |
| 940 | 1 | NRADPLA=15 | |
| 941 | |||
| 942 | ! -- UV diagnostic of surface fluxes over the 280-400 nm interval | ||
| 943 | ! with up-to 24 values (5 nm wide spectral intervals) | ||
| 944 | 1 | LUVPROC=.FALSE. | |
| 945 | 1 | LUVTDEP=.TRUE. | |
| 946 | 1 | LUVDBG =.FALSE. | |
| 947 | 1 | NRADUV =-3 | |
| 948 | 1 | NUVTIM = 0 | |
| 949 | 1 | NUV = 24 | |
| 950 | 1 | RMUZUV = 1.E-01_JPRB | |
| 951 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 1 times.
|
25 | DO JUV=1,NUV |
| 952 | 25 | RUVLAM(JUV)=280._JPRB+(JUV-1)*5._JPRB | |
| 953 | ENDDO | ||
| 954 | |||
| 955 | !- radiation interpolation (George M's grid on by default) | ||
| 956 | LLDEBUG=.TRUE. | ||
| 957 | 1 | LEDBUG=.FALSE. | |
| 958 | 1 | NRADINT=3 | |
| 959 | 1 | NRADRES=0 | |
| 960 | |||
| 961 | 1 | NRINT =4 | |
| 962 | |||
| 963 | 1 | LRADLB=.TRUE. | |
| 964 | 1 | CRTABLEDIR='./' | |
| 965 | 1 | CRTABLEFIL='not set' | |
| 966 | 1 | LRADONDEM=.TRUE. | |
| 967 | !GM Temporary as per trans/external/setup_trans.F90 | ||
| 968 | 1 | LLINEAR_GRID=NSMAX > (NDLON+3)/3 | |
| 969 | IF( LLDEBUG )THEN | ||
| 970 | 1 | WRITE(NULOUT,'("SUECRAD: NSMAX=",I6)')NSMAX | |
| 971 | 1 | WRITE(NULOUT,'("SUECRAD: NDLON=",I6)')NDLON | |
| 972 | 1 | WRITE(NULOUT,'("SUECRAD: LLINEAR_GRID=",L5)')LLINEAR_GRID | |
| 973 | ENDIF | ||
| 974 | |||
| 975 | 1 | NUAER = 24 | |
| 976 | 1 | NTRAER = 15 | |
| 977 | ! 1: max-random, 2: max, 3: random (5,6,7,8 pour meso-NH) | ||
| 978 | ! le CASE qui suit car les conventions sont differentes dans ARP et LMDZ (MPL 20100415) | ||
| 979 | ✗ | SELECT CASE (overlap) | |
| 980 | CASE (:1) | ||
| 981 | ✗ | NOVLP = 2 | |
| 982 | CASE (2) | ||
| 983 | ✗ | NOVLP = 3 | |
| 984 | CASE (3:) | ||
| 985 |
1/3✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
1 | NOVLP = 1 |
| 986 | END SELECT | ||
| 987 | 1 | print *,'SUECRAD: NOVLP=',NOVLP | |
| 988 | 1 | NLW = 16 | |
| 989 | 1 | NTSW = 14 | |
| 990 | !NSW = 6 !!!!! Maintenant dans config.def (MPL 20140213) | ||
| 991 | 1 | NSWNL = 6 | |
| 992 | 1 | NSWTL = 2 | |
| 993 | 1 | NCSRADF= 1 | |
| 994 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF(NSMAX >= 106) THEN |
| 995 | ✗ | NRPROMA = 80 | |
| 996 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | ELSEIF(NSMAX == 63) THEN |
| 997 | ✗ | NRPROMA=48 | |
| 998 | ELSE | ||
| 999 | 1 | NRPROMA=64 | |
| 1000 | ENDIF | ||
| 1001 | |||
| 1002 | !* 2.3 SET SECURITY PARAMETERS | ||
| 1003 | ! ----------------------- | ||
| 1004 | |||
| 1005 | 1 | REPSC = 1.E-04_JPRB | |
| 1006 | 1 | REPSCO = 1.E-12_JPRB | |
| 1007 | 1 | REPSCQ = 1.E-12_JPRB | |
| 1008 | 1 | REPSCT = 1.E-12_JPRB | |
| 1009 | 1 | REPSCW = 1.E-12_JPRB | |
| 1010 | 1 | REPLOG = 1.E-12_JPRB | |
| 1011 | |||
| 1012 | |||
| 1013 | !* 2.4 BACKGROUND GAS CONCENTRATIONS (IPCC/SACC, 1990) | ||
| 1014 | ! ----------------------------------------------- | ||
| 1015 | |||
| 1016 | 1 | LECO2VAR=.FALSE. | |
| 1017 | 1 | LHGHG =.FALSE. | |
| 1018 | 1 | NHINCSOL= 0 | |
| 1019 | 1 | NSCEN = 1 | |
| 1020 | 1 | RSOLINC = RI0 | |
| 1021 | |||
| 1022 | ! Valeurs d origine MPL 18052010 | ||
| 1023 | !RCCO2 = 353.E-06_JPRB | ||
| 1024 | !RCCH4 = 1.72E-06_JPRB | ||
| 1025 | !RCN2O = 310.E-09_JPRB | ||
| 1026 | !RCCFC11 = 280.E-12_JPRB | ||
| 1027 | !RCCFC12 = 484.E-12_JPRB | ||
| 1028 | |||
| 1029 | ! Valeurs LMDZ (physiq.def) MPL 18052010 | ||
| 1030 | !RCCO2 = 348.E-06_JPRB | ||
| 1031 | !RCCH4 = 1.65E-06_JPRB | ||
| 1032 | !RCN2O = 306.E-09_JPRB | ||
| 1033 | !RCCFC11 = 280.E-12_JPRB | ||
| 1034 | !RCCFC12 = 484.E-12_JPRB | ||
| 1035 | |||
| 1036 | !MPL/IM 20160915 on prend GES de phylmd | ||
| 1037 | 1 | RCCO2 = CO2_ppm * 1.0e-06 | |
| 1038 | 1 | RCCH4 = CH4_ppb * 1.0e-09 | |
| 1039 | 1 | RCN2O = N2O_ppb * 1.0e-09 | |
| 1040 | 1 | RCCFC11 = CFC11_ppt * 1.0e-12 | |
| 1041 | 1 | RCCFC12 = CFC12_ppt * 1.0e-12 | |
| 1042 | !print *,'LMDZSUECRAD-1 RCCO2=',RCCO2 | ||
| 1043 | !print *,'LMDZSUECRAD-1 RCCH4=',RCCH4 | ||
| 1044 | !print *,'LMDZSUECRAD-1 RCN2O=',RCN2O | ||
| 1045 | !print *,'LMDZSUECRAD-1 RCCFC11=',RCCFC11 | ||
| 1046 | !print *,'LMDZSUECRAD-1 RCCFC12=',RCCFC12 | ||
| 1047 | ! ------------------------------------------------------------------ | ||
| 1048 | |||
| 1049 | !* 3. READ VALUES OF RADIATION CONFIGURATION | ||
| 1050 | ! -------------------------------------- | ||
| 1051 | |||
| 1052 | !CALL POSNAM(NULNAM,'NAERAD') | ||
| 1053 | !READ (NULNAM,NAERAD) | ||
| 1054 | 1 | print *,'SUECRAD-2' | |
| 1055 | |||
| 1056 | !CALL POSNAM(NULNAM,'NAEAER') | ||
| 1057 | !READ (NULNAM,NAEAER) | ||
| 1058 | |||
| 1059 | !IF (NTYPAER(9) /= 0) THEN | ||
| 1060 | ! RGEMUV=(RLATVOL+90._JPRB)*RPI/180._JPRB | ||
| 1061 | ! RGELAV=RLONVOL*RPI/180._JPRB | ||
| 1062 | ! RCLONV=COS(RGELAV) | ||
| 1063 | ! RSLONV=SIN(RGELAV) | ||
| 1064 | ! DO J=1,NGPTOT-1 | ||
| 1065 | ! IF (RGELAV > GELAM(J) .AND. RGELAV <= GELAM(J+1) .AND. & | ||
| 1066 | ! & RGEMUV < RMU(JL) .AND. RGEMUV >= RMU(JL+1) ) THEN | ||
| 1067 | ! RDGMUV=ABS( RMU(J+1) - RMU(J)) | ||
| 1068 | ! RDGLAV=ABS( GELAM(J+1)-GELAM(J) ) | ||
| 1069 | ! RDSLONV=ABS( SIN(GELAM(JL+1))-SIN(GELAM(JL)) ) | ||
| 1070 | ! RDCLONV=ABS( COS(GELAM(JL+1))-COS(GELAM(JL)) ) | ||
| 1071 | ! END IF | ||
| 1072 | ! END DO | ||
| 1073 | !END IF | ||
| 1074 | |||
| 1075 | !- reset some parameters if SW6 is used (revert to pre-CY3?R1 operational configuration) | ||
| 1076 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (.NOT.LSRTM) THEN |
| 1077 | 1 | NMcICA = 0 | |
| 1078 | 1 | LCCNL = .FALSE. | |
| 1079 | 1 | LCCNO = .FALSE. | |
| 1080 | 1 | LDIFFC = .FALSE. | |
| 1081 | 1 | NICEOPT= 1 | |
| 1082 | 1 | NLIQOPT= 0 | |
| 1083 | 1 | NRADIP = 4 | |
| 1084 | 1 | NRADLP = 3 | |
| 1085 | 1 | RRe2De = 0.5_JPRB | |
| 1086 | 1 | NINHOM = 1 | |
| 1087 | 1 | RLWINHF= 0.7_JPRB | |
| 1088 | 1 | RSWINHF= 0.7_JPRB | |
| 1089 | ENDIF | ||
| 1090 | 1 | print *,'SUECRAD-3' | |
| 1091 | |||
| 1092 | !- for McICA computations, make sure these parameters are as follows ... | ||
| 1093 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (NMCICA /= 0) THEN |
| 1094 | ✗ | NINHOM = 0 | |
| 1095 | ✗ | RLWINHF= 1.0_JPRB | |
| 1096 | ✗ | RSWINHF= 1.0_JPRB | |
| 1097 | !-- read the XCW values for Raisanen-Cole-Barker cloud generator | ||
| 1098 | ✗ | CALL SU_McICA | |
| 1099 | ENDIF | ||
| 1100 | 1 | print *,'SUECRAD-4' | |
| 1101 | |||
| 1102 | |||
| 1103 | |||
| 1104 | IF( LLDEBUG )THEN | ||
| 1105 | 1 | WRITE(NULOUT,'("SUECRAD: NRADINT=",I2)')NRADINT | |
| 1106 | 1 | WRITE(NULOUT,'("SUECRAD: NRADRES=",I4)')NRADRES | |
| 1107 | ENDIF | ||
| 1108 | |||
| 1109 | ! DETERMINE WHETHER NRPROMA IS NEGATIVE AND SET LOPTRPROMA | ||
| 1110 | |||
| 1111 | 1 | LOPTRPROMA=NRPROMA > 0 | |
| 1112 | 1 | NRPROMA=ABS(NRPROMA) | |
| 1113 | |||
| 1114 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN |
| 1115 | 1 | WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")') | |
| 1116 | 1 | NRADINT=0 | |
| 1117 | ENDIF | ||
| 1118 | |||
| 1119 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1 | IF( NRADINT > 0 .AND. LRAYFM .AND. NAER /= 0 .AND. .NOT.LHVOLCA )THEN |
| 1120 | ! This combination is not supported as aerosol data would be | ||
| 1121 | ! required to be interpolated (see radintg) | ||
| 1122 | WRITE(NULOUT,'("SUECRAD: NRADINT>0, LRAYFM=T NAER /= 0 .AND. LHVOLCA=F,",& | ||
| 1123 | ✗ | & " NRADRES RESET TO NSMAX (NO INTERPOLATION)")') | |
| 1124 | ✗ | NRADRES=NSMAX | |
| 1125 | ENDIF | ||
| 1126 | !CALL GSTATS(1818,1) MPL 2.12.08 | ||
| 1127 | |||
| 1128 | 100 CONTINUE | ||
| 1129 | |||
| 1130 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF( LERADI )THEN ! START OF LERADI BLOCK |
| 1131 | |||
| 1132 | ✗ | IF( NRADINT == -1 )THEN | |
| 1133 | |||
| 1134 | ! INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION INTERPOLATION | ||
| 1135 | |||
| 1136 | ✗ | LODBGRADI=.FALSE. | |
| 1137 | ✗ | CALL SUECRADI | |
| 1138 | |||
| 1139 | ! INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION COURSE GRID | ||
| 1140 | ! LOAD BALANCING | ||
| 1141 | |||
| 1142 | ✗ | LODBGRADL=.FALSE. | |
| 1143 | ! CALL SUECRADL ! MPL 1.12.08 | ||
| 1144 | ✗ | CALL ABOR1('JUSTE APRES CALL SUECRADL COMMENTE') | |
| 1145 | |||
| 1146 | ✗ | ELSEIF( NRADINT == 0 )THEN | |
| 1147 | |||
| 1148 | ✗ | IF( NRADRES /= NSMAX )THEN | |
| 1149 | ✗ | WRITE(NULOUT,'("SUECRAD: NRADINT=0 REQUESTED, NRADRES RESET TO NSMAX")') | |
| 1150 | ✗ | NRADRES=NSMAX | |
| 1151 | ENDIF | ||
| 1152 | ✗ | RADGRID%NGPTOT=NGPTOT | |
| 1153 | |||
| 1154 | ✗ | NARIB1=0 | |
| 1155 | ✗ | NAROB1=0 | |
| 1156 | |||
| 1157 | ✗ | ELSEIF( NRADINT >=1 .AND. NRADINT <= 3 )THEN | |
| 1158 | |||
| 1159 | ✗ | NARIB1=0 | |
| 1160 | ✗ | NAROB1=0 | |
| 1161 | |||
| 1162 | ! set the default radiation grid resolution for the current model resolution | ||
| 1163 | ! if not already specified | ||
| 1164 | ✗ | IF( NRADRES == 0 )THEN | |
| 1165 | ✗ | IF( LLINEAR_GRID )THEN ! RATIO OF GRID-POINTS (MODEL/RAD) | |
| 1166 | ✗ | IF( NSMAX == 63 )THEN | |
| 1167 | ✗ | NRADRES=21 ! 3.62 | |
| 1168 | ✗ | LLINEAR_GRID=.FALSE. | |
| 1169 | ENDIF | ||
| 1170 | ✗ | IF( NSMAX == 95 ) NRADRES= 95 ! 1.00 | |
| 1171 | ✗ | IF( NSMAX == 159 ) NRADRES= 63 ! 5.84 | |
| 1172 | ✗ | IF( NSMAX == 255 ) NRADRES= 95 ! 6.69 | |
| 1173 | ✗ | IF( NSMAX == 319 ) NRADRES= 159 ! 3.87 | |
| 1174 | ✗ | IF( NSMAX == 399 ) NRADRES= 159 ! 5.99 | |
| 1175 | ✗ | IF( NSMAX == 511 ) NRADRES= 255 ! 3.92 | |
| 1176 | ✗ | IF( NSMAX == 639 ) NRADRES= 319 ! 3.92 | |
| 1177 | ✗ | IF( NSMAX == 799 ) NRADRES= 399 ! 3.94 | |
| 1178 | ✗ | IF( NSMAX == 1023 ) NRADRES= 511 ! 3.94 | |
| 1179 | ✗ | IF( NSMAX == 1279 ) NRADRES= 639 ! | |
| 1180 | ✗ | IF( NSMAX == 2047 ) NRADRES= 1023 ! | |
| 1181 | ELSE ! NOT LINEAR GRID | ||
| 1182 | ✗ | IF( NSMAX == 21 ) NRADRES= 21 ! 1.00 | |
| 1183 | ✗ | IF( NSMAX == 42 ) NRADRES= 21 ! 3.62 | |
| 1184 | ✗ | IF( NSMAX == 63 ) NRADRES= 42 ! 2.17 | |
| 1185 | ✗ | IF( NSMAX == 106 ) NRADRES= 63 ! 2.69 | |
| 1186 | ✗ | IF( NSMAX == 170 ) NRADRES= 63 ! 6.69 | |
| 1187 | ✗ | IF( NSMAX == 213 ) NRADRES= 106 ! 3.87 | |
| 1188 | ✗ | IF( NSMAX == 266 ) NRADRES= 106 ! 5.99 | |
| 1189 | ✗ | IF( NSMAX == 341 ) NRADRES= 170 ! 3.92 | |
| 1190 | ✗ | IF( NSMAX == 426 ) NRADRES= 213 ! 3.92 | |
| 1191 | ✗ | IF( NSMAX == 533 ) NRADRES= 266 ! 3.94 | |
| 1192 | ✗ | IF( NSMAX == 682 ) NRADRES= 341 ! 3.94 | |
| 1193 | ENDIF | ||
| 1194 | ENDIF | ||
| 1195 | ✗ | print *,'SUECRAD-5' | |
| 1196 | |||
| 1197 | ! test if radiation grid resolution has been set | ||
| 1198 | ✗ | IF( NRADRES == 0 )THEN | |
| 1199 | ✗ | WRITE(NULOUT,'("SUECRAD: NRADRES NOT SET OR DEFAULT FOUND,NSMAX=",I4)')NSMAX | |
| 1200 | ✗ | CALL ABOR1('SUECRAD: NRADRES NOT SET OR DEFAULT FOUND') | |
| 1201 | ENDIF | ||
| 1202 | |||
| 1203 | ! test if no interpolation is required | ||
| 1204 | ✗ | IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN | |
| 1205 | ✗ | WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")') | |
| 1206 | ✗ | NRADINT=0 | |
| 1207 | ✗ | GOTO 100 | |
| 1208 | ENDIF | ||
| 1209 | |||
| 1210 | ! CALL GSTATS(1818,0) MPL 2.12.08 | ||
| 1211 | ✗ | IF( CRTABLEFIL == 'not set' )THEN | |
| 1212 | ✗ | IF( LLINEAR_GRID )THEN | |
| 1213 | ✗ | IF( NRADRES < 1000 )THEN | |
| 1214 | ✗ | WRITE(CRTABLEFIL,'("rtablel_2",I3.3)')NRADRES | |
| 1215 | ELSE | ||
| 1216 | ✗ | WRITE(CRTABLEFIL,'("rtablel_2",I4.4)')NRADRES | |
| 1217 | ENDIF | ||
| 1218 | ELSE | ||
| 1219 | ✗ | IF( NRADRES < 1000 )THEN | |
| 1220 | ✗ | WRITE(CRTABLEFIL,'("rtable_2" ,I3.3)')NRADRES | |
| 1221 | ELSE | ||
| 1222 | ✗ | WRITE(CRTABLEFIL,'("rtable_2" ,I4.4)')NRADRES | |
| 1223 | ENDIF | ||
| 1224 | ENDIF | ||
| 1225 | ENDIF | ||
| 1226 | ! CALL GSTATS(1818,1) MPL 2.12.08 | ||
| 1227 | |||
| 1228 | ✗ | RADGRID%NSMAX=NRADRES | |
| 1229 | |||
| 1230 | ✗ | IF( MYPROC == JPIOMASTER )THEN | |
| 1231 | ✗ | IDIR=LEN_TRIM(CRTABLEDIR) | |
| 1232 | ✗ | IFIL=LEN_TRIM(CRTABLEFIL) | |
| 1233 | ✗ | CLFN=CRTABLEDIR(1:IDIR)//CRTABLEFIL(1:IFIL) | |
| 1234 | ! Ce qui concerne NULRAD commente par MPL le 15.04.09 | ||
| 1235 | ! OPEN(NULRAD,FILE=CLFN,ACTION="READ",ERR=999) | ||
| 1236 | ! GOTO 1000 | ||
| 1237 | ! 999 CONTINUE | ||
| 1238 | ! WRITE(NULOUT,'("SUECRAD: UNABLE TO OPEN FILE ",A)')CLFN | ||
| 1239 | ! CALL ABOR1('SUECRAD: UNABLE TO OPEN RADIATION GRID RTABLE FILE') | ||
| 1240 | ! 1000 CONTINUE | ||
| 1241 | ✗ | NRGRI(:)=0 | |
| 1242 | ! Ce qui concerne NAMRGRI commente par MPL le 15.04.09 | ||
| 1243 | ! CALL POSNAM(NULRAD,'NAMRGRI') | ||
| 1244 | ! READ (NULRAD,NAMRGRI) | ||
| 1245 | IDGL=1 | ||
| 1246 | DO WHILE( NRGRI(IDGL)>0 ) | ||
| 1247 | IF( LLDEBUG )THEN | ||
| 1248 | WRITE(NULOUT,'("SUECRAD: NRGRI(",I4,")=",I4)')IDGL,NRGRI(IDGL) | ||
| 1249 | ENDIF | ||
| 1250 | IDGL=IDGL+1 | ||
| 1251 | ENDDO | ||
| 1252 | ✗ | IDGL=IDGL-1 | |
| 1253 | ✗ | RADGRID%NDGLG=IDGL | |
| 1254 | IF( LLDEBUG )THEN | ||
| 1255 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG=",I4)')RADGRID%NDGLG | |
| 1256 | ENDIF | ||
| 1257 | ! CLOSE(NULRAD) | ||
| 1258 | ENDIF | ||
| 1259 | ! CALL GSTATS(667,0) MPL 2.12.08 | ||
| 1260 | ✗ | IF( NPROC > 1 )THEN | |
| 1261 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1262 | ! CALL MPL_BROADCAST (RADGRID%NDGLG,MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:') | ||
| 1263 | ENDIF | ||
| 1264 | ✗ | ALLOCATE(RADGRID%NRGRI(RADGRID%NDGLG)) | |
| 1265 | ✗ | IF( MYPROC == JPIOMASTER )THEN | |
| 1266 | ✗ | RADGRID%NRGRI(1:RADGRID%NDGLG)=NRGRI(1:RADGRID%NDGLG) | |
| 1267 | ENDIF | ||
| 1268 | ✗ | IF( NPROC > 1 )THEN | |
| 1269 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1270 | ! CALL MPL_BROADCAST (RADGRID%NRGRI(1:RADGRID%NDGLG),MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:') | ||
| 1271 | ENDIF | ||
| 1272 | ! CALL GSTATS(667,1) MPL 2.12.08 | ||
| 1273 | |||
| 1274 | ! CALL GSTATS(1818,0) MPL 2.12.08 | ||
| 1275 | ✗ | IF ( NRADINT == 1 )THEN | |
| 1276 | ✗ | WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - SPECTRAL TRANSFORM")') | |
| 1277 | ✗ | RADGRID%NDGSUR=0 | |
| 1278 | ✗ | NRIWIDEN=0 | |
| 1279 | ✗ | NRIWIDES=0 | |
| 1280 | ✗ | NRIWIDEW=0 | |
| 1281 | ✗ | NRIWIDEE=0 | |
| 1282 | ✗ | NROWIDEN=0 | |
| 1283 | ✗ | NROWIDES=0 | |
| 1284 | ✗ | NROWIDEW=0 | |
| 1285 | ✗ | NROWIDEE=0 | |
| 1286 | ✗ | ELSEIF( NRADINT == 2 )THEN | |
| 1287 | ✗ | WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 4 POINT")') | |
| 1288 | ✗ | RADGRID%NDGSUR=2 | |
| 1289 | ✗ | ELSEIF( NRADINT == 3 )THEN | |
| 1290 | ✗ | WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 12 POINT")') | |
| 1291 | ✗ | RADGRID%NDGSUR=2 | |
| 1292 | ENDIF | ||
| 1293 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSUR =",I8)')RADGRID%NDGSUR | |
| 1294 | |||
| 1295 | ✗ | RADGRID%NDGSAG=1-RADGRID%NDGSUR | |
| 1296 | ✗ | RADGRID%NDGENG=RADGRID%NDGLG+RADGRID%NDGSUR | |
| 1297 | ✗ | RADGRID%NDLON=RADGRID%NRGRI(RADGRID%NDGLG/2) | |
| 1298 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAG =",I8)')RADGRID%NDGSAG | |
| 1299 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENG =",I8)')RADGRID%NDGENG | |
| 1300 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG =",I8)')RADGRID%NDGLG | |
| 1301 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDLON =",I8)')RADGRID%NDLON | |
| 1302 | ✗ | CALL FLUSH(NULOUT) | |
| 1303 | |||
| 1304 | ✗ | ALLOCATE(RADGRID%NLOENG(RADGRID%NDGSAG:RADGRID%NDGENG)) | |
| 1305 | ✗ | RADGRID%NLOENG(1:RADGRID%NDGLG)=RADGRID%NRGRI(1:RADGRID%NDGLG) | |
| 1306 | ✗ | IF(RADGRID%NDGSUR >= 1)THEN | |
| 1307 | ✗ | DO JGLSUR=1,RADGRID%NDGSUR | |
| 1308 | ✗ | RADGRID%NLOENG(1-JGLSUR)=RADGRID%NLOENG(JGLSUR) | |
| 1309 | ENDDO | ||
| 1310 | ✗ | DO JGLSUR=1,RADGRID%NDGSUR | |
| 1311 | ✗ | RADGRID%NLOENG(RADGRID%NDGLG+JGLSUR)=RADGRID%NLOENG(RADGRID%NDGLG+1-JGLSUR) | |
| 1312 | ENDDO | ||
| 1313 | ENDIF | ||
| 1314 | ! CALL GSTATS(1818,1) MPL 2.12.08 | ||
| 1315 | |||
| 1316 | ! Setup the transform package for the radiation grid | ||
| 1317 | CALL SETUP_TRANS (KSMAX=RADGRID%NSMAX, & | ||
| 1318 | & KDGL=RADGRID%NDGLG, & | ||
| 1319 | & KLOEN=RADGRID%NLOENG(1:RADGRID%NDGLG), & | ||
| 1320 | & LDLINEAR_GRID=LLINEAR_GRID, & | ||
| 1321 | & LDSPLIT=LSPLIT, & | ||
| 1322 | & KAPSETS=NAPSETS, & | ||
| 1323 | ✗ | & KRESOL=RADGRID%NRESOL_ID) | |
| 1324 | |||
| 1325 | ✗ | ALLOCATE(RADGRID%NSTA(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW)) | |
| 1326 | ✗ | ALLOCATE(RADGRID%NONL(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW)) | |
| 1327 | ✗ | ALLOCATE(RADGRID%NPTRFRSTLAT(N_REGIONS_NS)) | |
| 1328 | ✗ | ALLOCATE(RADGRID%NFRSTLAT(N_REGIONS_NS)) | |
| 1329 | ✗ | ALLOCATE(RADGRID%NLSTLAT(N_REGIONS_NS)) | |
| 1330 | ✗ | ALLOCATE(RADGRID%RMU(RADGRID%NDGSAG:RADGRID%NDGENG)) | |
| 1331 | ✗ | ALLOCATE(RADGRID%RSQM2(RADGRID%NDGSAG:RADGRID%NDGENG)) | |
| 1332 | ✗ | ALLOCATE(RADGRID%RLATIG(RADGRID%NDGSAG:RADGRID%NDGENG)) | |
| 1333 | |||
| 1334 | ! Interrogate the transform package for the radiation grid | ||
| 1335 | ! CALL GSTATS(1818,0) MPL 2.12.08 | ||
| 1336 | CALL TRANS_INQ (KRESOL =RADGRID%NRESOL_ID, & | ||
| 1337 | & KSPEC2 =RADGRID%NSPEC2, & | ||
| 1338 | & KNUMP =RADGRID%NUMP, & | ||
| 1339 | & KGPTOT =RADGRID%NGPTOT, & | ||
| 1340 | & KGPTOTG =RADGRID%NGPTOTG, & | ||
| 1341 | & KGPTOTMX =RADGRID%NGPTOTMX, & | ||
| 1342 | & KPTRFRSTLAT=RADGRID%NPTRFRSTLAT, & | ||
| 1343 | & KFRSTLAT =RADGRID%NFRSTLAT, & | ||
| 1344 | & KLSTLAT =RADGRID%NLSTLAT, & | ||
| 1345 | & KFRSTLOFF =RADGRID%NFRSTLOFF, & | ||
| 1346 | & KSTA =RADGRID%NSTA(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), & | ||
| 1347 | & KONL =RADGRID%NONL(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), & | ||
| 1348 | & KPTRFLOFF =RADGRID%NPTRFLOFF, & | ||
| 1349 | ✗ | & PMU =RADGRID%RMU(1:) ) | |
| 1350 | |||
| 1351 | ✗ | IF( NRADINT == 2 .OR. NRADINT == 3 )THEN | |
| 1352 | ✗ | DO JGL=1,RADGRID%NDGLG | |
| 1353 | ✗ | RADGRID%RSQM2(JGL) = SQRT(1.0_JPRB - RADGRID%RMU(JGL)*RADGRID%RMU(JGL)) | |
| 1354 | ✗ | RADGRID%RLATIG(JGL) = ASIN(RADGRID%RMU(JGL)) | |
| 1355 | ! WRITE(NULOUT,'("SUECRAD: JGL=",I6," RADGRID%RLATIG=",F10.3)')& | ||
| 1356 | ! & JGL,RADGRID%RLATIG(JGL) | ||
| 1357 | ENDDO | ||
| 1358 | ✗ | IF(RADGRID%NDGSUR >= 1)THEN | |
| 1359 | ✗ | DO JGLSUR=1,RADGRID%NDGSUR | |
| 1360 | ✗ | RADGRID%RMU(1-JGLSUR)=RADGRID%RMU(JGLSUR) | |
| 1361 | ✗ | RADGRID%RSQM2(1-JGLSUR)=RADGRID%RSQM2(JGLSUR) | |
| 1362 | ✗ | RADGRID%RLATIG(1-JGLSUR)=RPI-RADGRID%RLATIG(JGLSUR) | |
| 1363 | ENDDO | ||
| 1364 | ✗ | DO JGLSUR=1,RADGRID%NDGSUR | |
| 1365 | ✗ | RADGRID%RMU(RADGRID%NDGLG+JGLSUR)=RADGRID%RMU(RADGRID%NDGLG+1-JGLSUR) | |
| 1366 | ✗ | RADGRID%RSQM2(RADGRID%NDGLG+JGLSUR)=RADGRID%RSQM2(RADGRID%NDGLG+1-JGLSUR) | |
| 1367 | ✗ | RADGRID%RLATIG(RADGRID%NDGLG+JGLSUR)=-RPI-RADGRID%RLATIG(RADGRID%NDGLG+1-JGLSUR) | |
| 1368 | ENDDO | ||
| 1369 | ENDIF | ||
| 1370 | ENDIF | ||
| 1371 | |||
| 1372 | ✗ | RADGRID%NDGSAL=1 | |
| 1373 | ✗ | RADGRID%NDGENL=RADGRID%NLSTLAT(MY_REGION_NS)-RADGRID%NFRSTLOFF | |
| 1374 | ✗ | RADGRID%NDSUR1=3-MOD(RADGRID%NDLON,2) | |
| 1375 | ✗ | IDLSUR=MAX(RADGRID%NDLON,2*RADGRID%NSMAX+1) | |
| 1376 | ✗ | RADGRID%NDLSUR=IDLSUR+RADGRID%NDSUR1 | |
| 1377 | ✗ | RADGRID%MYFRSTACTLAT=RADGRID%NFRSTLAT(MY_REGION_NS) | |
| 1378 | ✗ | RADGRID%MYLSTACTLAT=RADGRID%NLSTLAT(MY_REGION_NS) | |
| 1379 | |||
| 1380 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NRESOL_ID =",I8)')RADGRID%NRESOL_ID | |
| 1381 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NSMAX =",I8)')RADGRID%NSMAX | |
| 1382 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NSPEC2 =",I8)')RADGRID%NSPEC2 | |
| 1383 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOT =",I8)')RADGRID%NGPTOT | |
| 1384 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOTG =",I8)')RADGRID%NGPTOTG | |
| 1385 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAL =",I8)')RADGRID%NDGSAL | |
| 1386 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENL =",I8)')RADGRID%NDGENL | |
| 1387 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDSUR1 =",I8)')RADGRID%NDSUR1 | |
| 1388 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDLSUR =",I8)')RADGRID%NDLSUR | |
| 1389 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%MYFRSTACTLAT =",I8)')RADGRID%MYFRSTACTLAT | |
| 1390 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%MYLSTACTLAT =",I8)')RADGRID%MYLSTACTLAT | |
| 1391 | ✗ | CALL FLUSH(NULOUT) | |
| 1392 | |||
| 1393 | ✗ | ALLOCATE(RADGRID%NASM0(0:RADGRID%NSPEC2)) | |
| 1394 | ✗ | ALLOCATE(RADGRID%MYMS(RADGRID%NUMP)) | |
| 1395 | CALL TRANS_INQ (KRESOL =RADGRID%NRESOL_ID, & | ||
| 1396 | & KASM0 =RADGRID%NASM0, & | ||
| 1397 | ✗ | & KMYMS =RADGRID%MYMS ) | |
| 1398 | |||
| 1399 | ✗ | ALLOCATE(RADGRID%GELAM(RADGRID%NGPTOT)) | |
| 1400 | ✗ | ALLOCATE(RADGRID%GELAT(RADGRID%NGPTOT)) | |
| 1401 | ✗ | ALLOCATE(RADGRID%GESLO(RADGRID%NGPTOT)) | |
| 1402 | ✗ | ALLOCATE(RADGRID%GECLO(RADGRID%NGPTOT)) | |
| 1403 | ✗ | ALLOCATE(RADGRID%GEMU (RADGRID%NGPTOT)) | |
| 1404 | |||
| 1405 | IOFF=0 | ||
| 1406 | ✗ | ILAT=RADGRID%NPTRFLOFF | |
| 1407 | ✗ | DO JGLAT=RADGRID%NFRSTLAT(MY_REGION_NS), & | |
| 1408 | ✗ | & RADGRID%NLSTLAT(MY_REGION_NS) | |
| 1409 | ✗ | ZGEMU=RADGRID%RMU(JGLAT) | |
| 1410 | ✗ | ILAT=ILAT+1 | |
| 1411 | ✗ | ISTLON = RADGRID%NSTA(ILAT,MY_REGION_EW) | |
| 1412 | ✗ | IENDLON = ISTLON-1 + RADGRID%NONL(ILAT,MY_REGION_EW) | |
| 1413 | |||
| 1414 | ✗ | DO JLON=ISTLON,IENDLON | |
| 1415 | ZLON= REAL(JLON-1,JPRB)*2.0_JPRB*RPI & | ||
| 1416 | ✗ | & /REAL(RADGRID%NLOENG(JGLAT),JPRB) | |
| 1417 | ✗ | IOFF=IOFF+1 | |
| 1418 | ✗ | RADGRID%GELAM(IOFF) = ZLON | |
| 1419 | ✗ | RADGRID%GELAT(IOFF) = ASIN(ZGEMU) | |
| 1420 | ✗ | RADGRID%GESLO(IOFF) = SIN(ZLON) | |
| 1421 | ✗ | RADGRID%GECLO(IOFF) = COS(ZLON) | |
| 1422 | ✗ | RADGRID%GEMU (IOFF) = ZGEMU | |
| 1423 | ENDDO | ||
| 1424 | ENDDO | ||
| 1425 | |||
| 1426 | ✗ | IF( NRADINT == 2 .OR. NRADINT == 3 )THEN | |
| 1427 | |||
| 1428 | ! For grid point interpolations we need to calculate the halo size | ||
| 1429 | ! required by each processor | ||
| 1430 | |||
| 1431 | ✗ | ALLOCATE(ZLATX(RADGRID%NGPTOTMX)) | |
| 1432 | ✗ | ALLOCATE(ZLONX(RADGRID%NGPTOTMX)) | |
| 1433 | ✗ | DO J=1,RADGRID%NGPTOT | |
| 1434 | ✗ | ZLATX(J)=RADGRID%GELAT(J)/RPI*2.0_JPRB*90.0 | |
| 1435 | ✗ | ZLONX(J)=(RADGRID%GELAM(J)-RPI)/RPI*180.0 | |
| 1436 | ENDDO | ||
| 1437 | ✗ | ZMINRADLAT=MINVAL(ZLATX(1:RADGRID%NGPTOT)) | |
| 1438 | ✗ | ZMAXRADLAT=MAXVAL(ZLATX(1:RADGRID%NGPTOT)) | |
| 1439 | ✗ | ZMINRADLON=MINVAL(ZLONX(1:RADGRID%NGPTOT)) | |
| 1440 | ✗ | ZMAXRADLON=MAXVAL(ZLONX(1:RADGRID%NGPTOT)) | |
| 1441 | IF( LLDEBUG )THEN | ||
| 1442 | ✗ | WRITE(NULOUT,'("RADGRID,BEGIN")') | |
| 1443 | ✗ | IF( MYPROC /= 1 )THEN | |
| 1444 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1445 | ! CALL MPL_SEND(RADGRID%NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.R') | ||
| 1446 | ! CALL MPL_SEND(ZLATX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD.R') | ||
| 1447 | ! CALL MPL_SEND(ZLONX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD.R') | ||
| 1448 | ENDIF | ||
| 1449 | IF( MYPROC == 1 )THEN | ||
| 1450 | ✗ | DO JROC=1,NPROC | |
| 1451 | ✗ | IF( JROC == MYPROC )THEN | |
| 1452 | ✗ | DO J=1,RADGRID%NGPTOT | |
| 1453 | ✗ | WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),MYPROC | |
| 1454 | ENDDO | ||
| 1455 | ELSE | ||
| 1456 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1457 | ! CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.M') | ||
| 1458 | ! CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD.M') | ||
| 1459 | ! CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD.M') | ||
| 1460 | DO J=1,IGPTOT | ||
| 1461 | WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),JROC | ||
| 1462 | ENDDO | ||
| 1463 | ENDIF | ||
| 1464 | ENDDO | ||
| 1465 | ENDIF | ||
| 1466 | ✗ | WRITE(NULOUT,'("RADGRID,END")') | |
| 1467 | ENDIF | ||
| 1468 | ✗ | DEALLOCATE(ZLATX) | |
| 1469 | ✗ | DEALLOCATE(ZLONX) | |
| 1470 | |||
| 1471 | ✗ | ALLOCATE(ZLATX(NGPTOTMX)) | |
| 1472 | ✗ | ALLOCATE(ZLONX(NGPTOTMX)) | |
| 1473 | ✗ | DO J=1,NGPTOT | |
| 1474 | ✗ | ZLATX(J)=GELAT(J)/RPI*2.0_JPRB*90.0 | |
| 1475 | ✗ | ZLONX(J)=(GELAM(J)-RPI)/RPI*180.0 | |
| 1476 | ENDDO | ||
| 1477 | ✗ | ZMINMDLLAT=MINVAL(ZLATX(1:NGPTOT)) | |
| 1478 | ✗ | ZMAXMDLLAT=MAXVAL(ZLATX(1:NGPTOT)) | |
| 1479 | ✗ | ZMINMDLLON=MINVAL(ZLONX(1:NGPTOT)) | |
| 1480 | ✗ | ZMAXMDLLON=MAXVAL(ZLONX(1:NGPTOT)) | |
| 1481 | IF( LLDEBUG )THEN | ||
| 1482 | ✗ | WRITE(NULOUT,'("MODELGRID,BEGIN")') | |
| 1483 | ✗ | IF( MYPROC /= 1 )THEN | |
| 1484 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1485 | ! CALL MPL_SEND(NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD') | ||
| 1486 | ! CALL MPL_SEND(ZLATX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD') | ||
| 1487 | ! CALL MPL_SEND(ZLONX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD') | ||
| 1488 | ! CALL MPL_SEND(NGLOBALINDEX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=4,CDSTRING='SUECRAD') | ||
| 1489 | ENDIF | ||
| 1490 | IF( MYPROC == 1 )THEN | ||
| 1491 | ✗ | DO JROC=1,NPROC | |
| 1492 | ✗ | IF( JROC == MYPROC )THEN | |
| 1493 | ✗ | DO J=1,NGPTOT | |
| 1494 | ✗ | WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),MYPROC,NGLOBALINDEX(J) | |
| 1495 | ENDDO | ||
| 1496 | ELSE | ||
| 1497 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1498 | ! CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD') | ||
| 1499 | ! CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD') | ||
| 1500 | ! CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD') | ||
| 1501 | ALLOCATE(IGLOBALINDEX(1:IGPTOT)) | ||
| 1502 | ! CALL MPL_RECV(IGLOBALINDEX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=4,CDSTRING='SUECRAD') | ||
| 1503 | DO J=1,IGPTOT | ||
| 1504 | WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),JROC,IGLOBALINDEX(J) | ||
| 1505 | ENDDO | ||
| 1506 | DEALLOCATE(IGLOBALINDEX) | ||
| 1507 | ENDIF | ||
| 1508 | ENDDO | ||
| 1509 | ENDIF | ||
| 1510 | ✗ | WRITE(NULOUT,'("MODELGRID,END")') | |
| 1511 | ENDIF | ||
| 1512 | ✗ | DEALLOCATE(ZLATX) | |
| 1513 | ✗ | DEALLOCATE(ZLONX) | |
| 1514 | |||
| 1515 | IF( LLDEBUG )THEN | ||
| 1516 | ✗ | WRITE(NULOUT,'("ZMINRADLAT=",F10.2)')ZMINRADLAT | |
| 1517 | ✗ | WRITE(NULOUT,'("ZMINMDLLAT=",F10.2)')ZMINMDLLAT | |
| 1518 | ✗ | WRITE(NULOUT,'("ZMAXRADLAT=",F10.2)')ZMAXRADLAT | |
| 1519 | ✗ | WRITE(NULOUT,'("ZMAXMDLLAT=",F10.2)')ZMAXMDLLAT | |
| 1520 | ✗ | WRITE(NULOUT,'("ZMINRADLON=",F10.2)')ZMINRADLON | |
| 1521 | ✗ | WRITE(NULOUT,'("ZMINMDLLON=",F10.2)')ZMINMDLLON | |
| 1522 | ✗ | WRITE(NULOUT,'("ZMAXRADLON=",F10.2)')ZMAXRADLON | |
| 1523 | ✗ | WRITE(NULOUT,'("ZMAXMDLLON=",F10.2)')ZMAXMDLLON | |
| 1524 | ENDIF | ||
| 1525 | |||
| 1526 | ✗ | ZLAT=NDGLG/180. | |
| 1527 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT) | |
| 1528 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT) | |
| 1529 | ✗ | IF( ZMINRADLAT < ZMINMDLLAT )THEN | |
| 1530 | ✗ | NRIWIDES=JP_MIN_HALO+ILATS_DIFF_C | |
| 1531 | ELSE | ||
| 1532 | ✗ | NRIWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1533 | ENDIF | ||
| 1534 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT) | |
| 1535 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT) | |
| 1536 | ✗ | IF( ZMAXRADLAT < ZMAXMDLLAT )THEN | |
| 1537 | ✗ | NRIWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1538 | ELSE | ||
| 1539 | ✗ | NRIWIDEN=JP_MIN_HALO+ILATS_DIFF_C | |
| 1540 | ENDIF | ||
| 1541 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT) | |
| 1542 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT) | |
| 1543 | ✗ | IF( ZMINRADLON < ZMINMDLLON )THEN | |
| 1544 | ✗ | NRIWIDEW=JP_MIN_HALO+ILATS_DIFF_C | |
| 1545 | ELSE | ||
| 1546 | ✗ | NRIWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1547 | ENDIF | ||
| 1548 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT) | |
| 1549 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT) | |
| 1550 | ✗ | IF( ZMAXRADLON < ZMAXMDLLON )THEN | |
| 1551 | ✗ | NRIWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1552 | ELSE | ||
| 1553 | ✗ | NRIWIDEE=JP_MIN_HALO+ILATS_DIFF_C | |
| 1554 | ENDIF | ||
| 1555 | |||
| 1556 | ✗ | ZLAT=RADGRID%NDGLG/180. | |
| 1557 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT) | |
| 1558 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT) | |
| 1559 | ✗ | IF( ZMINMDLLAT < ZMINRADLAT )THEN | |
| 1560 | ✗ | NROWIDES=JP_MIN_HALO+ILATS_DIFF_C | |
| 1561 | ELSE | ||
| 1562 | ✗ | NROWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1563 | ENDIF | ||
| 1564 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT) | |
| 1565 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT) | |
| 1566 | ✗ | IF( ZMAXMDLLAT < ZMAXRADLAT )THEN | |
| 1567 | ✗ | NROWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1568 | ELSE | ||
| 1569 | ✗ | NROWIDEN=JP_MIN_HALO+ILATS_DIFF_C | |
| 1570 | ENDIF | ||
| 1571 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT) | |
| 1572 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT) | |
| 1573 | ✗ | IF( ZMINMDLLON < ZMINRADLON )THEN | |
| 1574 | ✗ | NROWIDEW=JP_MIN_HALO+ILATS_DIFF_C | |
| 1575 | ELSE | ||
| 1576 | ✗ | NROWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1577 | ENDIF | ||
| 1578 | ✗ | ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT) | |
| 1579 | ✗ | ILATS_DIFF_F=FLOOR (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT) | |
| 1580 | ✗ | IF( ZMAXMDLLON < ZMAXRADLON )THEN | |
| 1581 | ✗ | NROWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F) | |
| 1582 | ELSE | ||
| 1583 | ✗ | NROWIDEE=JP_MIN_HALO+ILATS_DIFF_C | |
| 1584 | ENDIF | ||
| 1585 | |||
| 1586 | ENDIF | ||
| 1587 | |||
| 1588 | RADGRID%NDGSAH=MAX(RADGRID%NDGSAG,& | ||
| 1589 | ✗ | & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF | |
| 1590 | RADGRID%NDGENH=MIN(RADGRID%NDGENG,& | ||
| 1591 | ✗ | & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF | |
| 1592 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAH =",I8)')RADGRID%NDGSAH | |
| 1593 | ✗ | WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENH =",I8)')RADGRID%NDGENH | |
| 1594 | |||
| 1595 | ✗ | IF( NRADINT == 2 .OR. NRADINT == 3 )THEN | |
| 1596 | |||
| 1597 | ILBRLATI = MAX(RADGRID%NDGSAG,& | ||
| 1598 | ✗ | & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF | |
| 1599 | IUBRLATI = MIN(RADGRID%NDGENG,& | ||
| 1600 | ✗ | & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF | |
| 1601 | ✗ | ALLOCATE(RADGRID%RLATI(ILBRLATI:IUBRLATI)) | |
| 1602 | ✗ | ALLOCATE(RADGRID%RIPI0(ILBRLATI:IUBRLATI)) | |
| 1603 | ✗ | ALLOCATE(RADGRID%RIPI1(ILBRLATI:IUBRLATI)) | |
| 1604 | ✗ | ALLOCATE(RADGRID%RIPI2(ILBRLATI:IUBRLATI)) | |
| 1605 | |||
| 1606 | ✗ | DO JGL= ILBRLATI,IUBRLATI | |
| 1607 | ✗ | IGLGLO=JGL+RADGRID%NFRSTLOFF | |
| 1608 | ✗ | IF(IGLGLO >= 0.AND.IGLGLO <= RADGRID%NDGLG) THEN | |
| 1609 | ✗ | ZD1=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO) | |
| 1610 | ✗ | ZD2=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+1) | |
| 1611 | ✗ | ZD3=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+2) | |
| 1612 | ✗ | ZD4=RADGRID%RLATIG(IGLGLO )-RADGRID%RLATIG(IGLGLO+1) | |
| 1613 | ✗ | ZD5=RADGRID%RLATIG(IGLGLO )-RADGRID%RLATIG(IGLGLO+2) | |
| 1614 | ✗ | ZD6=RADGRID%RLATIG(IGLGLO+1)-RADGRID%RLATIG(IGLGLO+2) | |
| 1615 | ✗ | RADGRID%RIPI0(JGL)=-1.0_JPRB/(ZD1*ZD4*ZD5) | |
| 1616 | ✗ | RADGRID%RIPI1(JGL)= 1.0_JPRB/(ZD2*ZD4*ZD6) | |
| 1617 | ✗ | RADGRID%RIPI2(JGL)=-1.0_JPRB/(ZD3*ZD5*ZD6) | |
| 1618 | ENDIF | ||
| 1619 | ✗ | RADGRID%RLATI(JGL)=RADGRID%RLATIG(IGLGLO) | |
| 1620 | ENDDO | ||
| 1621 | |||
| 1622 | ✗ | IF( NPROC > 1 )THEN | |
| 1623 | ✗ | IRIRPTSUR=NGPTOTG | |
| 1624 | ✗ | IRISPTSUR=2*NGPTOTG | |
| 1625 | ELSE | ||
| 1626 | IRIRPTSUR=0 | ||
| 1627 | IRISPTSUR=0 | ||
| 1628 | ENDIF | ||
| 1629 | |||
| 1630 | ✗ | ALLOCATE(NRISTA(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES)) | |
| 1631 | ✗ | ALLOCATE(NRIONL(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES)) | |
| 1632 | ✗ | ALLOCATE(NRIOFF(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES)) | |
| 1633 | ✗ | ALLOCATE(NRIEXT(1-NDLON:NDLON+NDLON,1-NRIWIDEN:NDGENL+NRIWIDES)) | |
| 1634 | ✗ | ALLOCATE(NRICORE(NGPTOT)) | |
| 1635 | ✗ | ALLOCATE(IRISENDPOS(IRISPTSUR)) | |
| 1636 | ✗ | ALLOCATE(IRIRECVPOS(IRIRPTSUR)) | |
| 1637 | ✗ | ALLOCATE(IRISENDPTR(NPROC+1)) | |
| 1638 | ✗ | ALLOCATE(IRIRECVPTR(NPROC+1)) | |
| 1639 | ✗ | ALLOCATE(IRICOMM(NPROC)) | |
| 1640 | ✗ | ALLOCATE(IRIMAP(4,NDGLG)) | |
| 1641 | ! MPL 1.12.08 | ||
| 1642 | ! CALL RDCSET('RI',NRIWIDEN,NRIWIDES,NRIWIDEW,NRIWIDEE,& | ||
| 1643 | ! & IRIRPTSUR,IRISPTSUR,& | ||
| 1644 | ! & NDGLG,NDLON,NDGSAG,NDGENG,IDUM,IDUM,NDGSAL,NDGENL,& | ||
| 1645 | ! & NDSUR1,NDLSUR,NDGSUR,NGPTOT,IDUM,& | ||
| 1646 | ! & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,& | ||
| 1647 | ! & NSTA,NONL,NLOENG,NPTRFRSTLAT,NFRSTLAT,NLSTLAT,& | ||
| 1648 | ! & RMU,RSQM2,& | ||
| 1649 | ! & NRISTA,NRIONL,NRIOFF,NRIEXT,NRICORE,NARIB1,& | ||
| 1650 | ! & NRIPROCS,NRIMPBUFSZ,NRIRPT,NRISPT,& | ||
| 1651 | ! & IRISENDPOS,IRIRECVPOS,IRISENDPTR,IRIRECVPTR,IRICOMM,IRIMAP,IRIMAPLEN) | ||
| 1652 | ✗ | CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE') | |
| 1653 | ✗ | WRITE(NULOUT,'("SUECRAD: NARIB1=",I12)')NARIB1 | |
| 1654 | ✗ | ALLOCATE(NRISENDPOS(NRISPT)) | |
| 1655 | ✗ | ALLOCATE(NRIRECVPOS(NRIRPT)) | |
| 1656 | ✗ | ALLOCATE(NRISENDPTR(NRIPROCS+1)) | |
| 1657 | ✗ | ALLOCATE(NRIRECVPTR(NRIPROCS+1)) | |
| 1658 | ✗ | ALLOCATE(NRICOMM(NRIPROCS)) | |
| 1659 | ✗ | NRISENDPOS(1:NRISPT)=IRISENDPOS(1:NRISPT) | |
| 1660 | ✗ | NRIRECVPOS(1:NRIRPT)=IRIRECVPOS(1:NRIRPT) | |
| 1661 | ✗ | NRISENDPTR(1:NRIPROCS+1)=IRISENDPTR(1:NRIPROCS+1) | |
| 1662 | ✗ | NRIRECVPTR(1:NRIPROCS+1)=IRIRECVPTR(1:NRIPROCS+1) | |
| 1663 | ✗ | NRICOMM(1:NRIPROCS)=IRICOMM(1:NRIPROCS) | |
| 1664 | ✗ | DEALLOCATE(IRISENDPOS) | |
| 1665 | ✗ | DEALLOCATE(IRIRECVPOS) | |
| 1666 | ✗ | DEALLOCATE(IRISENDPTR) | |
| 1667 | ✗ | DEALLOCATE(IRIRECVPTR) | |
| 1668 | ✗ | DEALLOCATE(IRICOMM) | |
| 1669 | ✗ | DEALLOCATE(IRIMAP) | |
| 1670 | |||
| 1671 | ✗ | IF( NPROC > 1 )THEN | |
| 1672 | ✗ | IRORPTSUR=RADGRID%NGPTOTG | |
| 1673 | ✗ | IROSPTSUR=2*RADGRID%NGPTOTG | |
| 1674 | ELSE | ||
| 1675 | IRORPTSUR=0 | ||
| 1676 | IROSPTSUR=0 | ||
| 1677 | ENDIF | ||
| 1678 | |||
| 1679 | ✗ | ALLOCATE(NROSTA(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES)) | |
| 1680 | ✗ | ALLOCATE(NROONL(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES)) | |
| 1681 | ✗ | ALLOCATE(NROOFF(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES)) | |
| 1682 | ✗ | ALLOCATE(NROEXT(1-RADGRID%NDLON:RADGRID%NDLON+RADGRID%NDLON,& | |
| 1683 | ✗ | & 1-NROWIDEN:RADGRID%NDGENL+NROWIDES)) | |
| 1684 | ✗ | ALLOCATE(NROCORE(RADGRID%NGPTOT)) | |
| 1685 | ✗ | ALLOCATE(IROSENDPOS(IROSPTSUR)) | |
| 1686 | ✗ | ALLOCATE(IRORECVPOS(IRORPTSUR)) | |
| 1687 | ✗ | ALLOCATE(IROSENDPTR(NPROC+1)) | |
| 1688 | ✗ | ALLOCATE(IRORECVPTR(NPROC+1)) | |
| 1689 | ✗ | ALLOCATE(IROCOMM(NPROC)) | |
| 1690 | ✗ | ALLOCATE(IROMAP(4,RADGRID%NDGLG)) | |
| 1691 | ! MPL 1.12.08 | ||
| 1692 | ! CALL RDCSET('RO',NROWIDEN,NROWIDES,NROWIDEW,NROWIDEE,& | ||
| 1693 | ! & IRORPTSUR,IROSPTSUR,& | ||
| 1694 | ! & RADGRID%NDGLG,RADGRID%NDLON,RADGRID%NDGSAG,& | ||
| 1695 | ! & RADGRID%NDGENG,IDUM,IDUM,RADGRID%NDGSAL,RADGRID%NDGENL,& | ||
| 1696 | ! & RADGRID%NDSUR1,RADGRID%NDLSUR,RADGRID%NDGSUR,RADGRID%NGPTOT,IDUM,& | ||
| 1697 | ! & RADGRID%NPTRFLOFF,RADGRID%NFRSTLOFF,RADGRID%MYFRSTACTLAT,RADGRID%MYLSTACTLAT,& | ||
| 1698 | ! & RADGRID%NSTA,RADGRID%NONL,RADGRID%NLOENG,RADGRID%NPTRFRSTLAT,& | ||
| 1699 | ! & RADGRID%NFRSTLAT,RADGRID%NLSTLAT,& | ||
| 1700 | ! & RADGRID%RMU,RADGRID%RSQM2,& | ||
| 1701 | ! & NROSTA,NROONL,NROOFF,NROEXT,NROCORE,NAROB1,& | ||
| 1702 | ! & NROPROCS,NROMPBUFSZ,NRORPT,NROSPT,& | ||
| 1703 | ! & IROSENDPOS,IRORECVPOS,IROSENDPTR,IRORECVPTR,IROCOMM,IROMAP,IROMAPLEN) | ||
| 1704 | ✗ | CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE') | |
| 1705 | ✗ | WRITE(NULOUT,'("SUECRAD: NAROB1=",I12)')NAROB1 | |
| 1706 | ✗ | ALLOCATE(NROSENDPOS(NROSPT)) | |
| 1707 | ✗ | ALLOCATE(NRORECVPOS(NRORPT)) | |
| 1708 | ✗ | ALLOCATE(NROSENDPTR(NROPROCS+1)) | |
| 1709 | ✗ | ALLOCATE(NRORECVPTR(NROPROCS+1)) | |
| 1710 | ✗ | ALLOCATE(NROCOMM(NROPROCS)) | |
| 1711 | ✗ | NROSENDPOS(1:NROSPT)=IROSENDPOS(1:NROSPT) | |
| 1712 | ✗ | NRORECVPOS(1:NRORPT)=IRORECVPOS(1:NRORPT) | |
| 1713 | ✗ | NROSENDPTR(1:NROPROCS+1)=IROSENDPTR(1:NROPROCS+1) | |
| 1714 | ✗ | NRORECVPTR(1:NROPROCS+1)=IRORECVPTR(1:NROPROCS+1) | |
| 1715 | ✗ | NROCOMM(1:NROPROCS)=IROCOMM(1:NROPROCS) | |
| 1716 | ✗ | DEALLOCATE(IROSENDPOS) | |
| 1717 | ✗ | DEALLOCATE(IRORECVPOS) | |
| 1718 | ✗ | DEALLOCATE(IROSENDPTR) | |
| 1719 | ✗ | DEALLOCATE(IRORECVPTR) | |
| 1720 | ✗ | DEALLOCATE(IROCOMM) | |
| 1721 | ✗ | DEALLOCATE(IROMAP) | |
| 1722 | |||
| 1723 | IF( LLDEBUG )THEN | ||
| 1724 | ✗ | WRITE(NULOUT,'("")') | |
| 1725 | ✗ | IRIWIDEMAXN=0 | |
| 1726 | ✗ | IRIWIDEMAXS=0 | |
| 1727 | ✗ | IRIWIDEMAXW=0 | |
| 1728 | ✗ | IRIWIDEMAXE=0 | |
| 1729 | ✗ | IROWIDEMAXN=0 | |
| 1730 | ✗ | IROWIDEMAXS=0 | |
| 1731 | ✗ | IROWIDEMAXW=0 | |
| 1732 | ✗ | IROWIDEMAXE=0 | |
| 1733 | ✗ | IARIB1MAX=0 | |
| 1734 | ✗ | IAROB1MAX=0 | |
| 1735 | ✗ | IWIDE(1)=NRIWIDEN | |
| 1736 | ✗ | IWIDE(2)=NRIWIDES | |
| 1737 | ✗ | IWIDE(3)=NRIWIDEW | |
| 1738 | ✗ | IWIDE(4)=NRIWIDEE | |
| 1739 | ✗ | IWIDE(5)=NROWIDEN | |
| 1740 | ✗ | IWIDE(6)=NROWIDES | |
| 1741 | ✗ | IWIDE(7)=NROWIDEW | |
| 1742 | ✗ | IWIDE(8)=NROWIDEE | |
| 1743 | ✗ | IWIDE(9)=NARIB1 | |
| 1744 | ✗ | IWIDE(10)=NAROB1 | |
| 1745 | ✗ | IF( MYPROC /= 1 )THEN | |
| 1746 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1747 | ! CALL MPL_SEND(IWIDE(1:10),KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.W') | ||
| 1748 | ENDIF | ||
| 1749 | IF( MYPROC == 1 )THEN | ||
| 1750 | ✗ | DO JROC=1,NPROC | |
| 1751 | ✗ | IF( JROC /= MYPROC )THEN | |
| 1752 | ✗ | stop 'Pas pret pour proc > 1' | |
| 1753 | ! CALL MPL_RECV(IWIDE(1:10),KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.W') | ||
| 1754 | ENDIF | ||
| 1755 | WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEN=",I3,2X,"NROWIDEN=",I3 )')& | ||
| 1756 | ✗ | & JROC,IWIDE(1),IWIDE(5) | |
| 1757 | WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDES=",I3,2X,"NROWIDES=",I3 )')& | ||
| 1758 | ✗ | & JROC,IWIDE(2),IWIDE(6) | |
| 1759 | WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEW=",I3,2X,"NROWIDEW=",I3 )')& | ||
| 1760 | ✗ | & JROC,IWIDE(3),IWIDE(7) | |
| 1761 | WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEE=",I3,2X,"NROWIDEE=",I3 )')& | ||
| 1762 | ✗ | & JROC,IWIDE(4),IWIDE(8) | |
| 1763 | WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NARIB1=",I10,2X,"NAROB1=",I10 )')& | ||
| 1764 | ✗ | & JROC,IWIDE(9),IWIDE(10) | |
| 1765 | ✗ | WRITE(NULOUT,'("")') | |
| 1766 | ✗ | IF( IWIDE(1) > IRIWIDEMAXN ) IRIWIDEMAXN=IWIDE(1) | |
| 1767 | ✗ | IF( IWIDE(2) > IRIWIDEMAXS ) IRIWIDEMAXS=IWIDE(2) | |
| 1768 | ✗ | IF( IWIDE(3) > IRIWIDEMAXW ) IRIWIDEMAXW=IWIDE(3) | |
| 1769 | ✗ | IF( IWIDE(4) > IRIWIDEMAXE ) IRIWIDEMAXE=IWIDE(4) | |
| 1770 | ✗ | IF( IWIDE(5) > IROWIDEMAXN ) IROWIDEMAXN=IWIDE(5) | |
| 1771 | ✗ | IF( IWIDE(6) > IROWIDEMAXS ) IROWIDEMAXS=IWIDE(6) | |
| 1772 | ✗ | IF( IWIDE(7) > IROWIDEMAXW ) IROWIDEMAXW=IWIDE(7) | |
| 1773 | ✗ | IF( IWIDE(8) > IROWIDEMAXE ) IROWIDEMAXE=IWIDE(8) | |
| 1774 | ✗ | IF( IWIDE(9) > IARIB1MAX ) IARIB1MAX =IWIDE(9) | |
| 1775 | ✗ | IF( IWIDE(10) > IAROB1MAX ) IAROB1MAX =IWIDE(10) | |
| 1776 | ENDDO | ||
| 1777 | ✗ | WRITE(NULOUT,'("")') | |
| 1778 | ✗ | WRITE(NULOUT,'("SUECRAD: NRIWIDEN(MAX) =",I8)')IRIWIDEMAXN | |
| 1779 | ✗ | WRITE(NULOUT,'("SUECRAD: NRIWIDES(MAX) =",I8)')IRIWIDEMAXS | |
| 1780 | ✗ | WRITE(NULOUT,'("SUECRAD: NRIWIDEW(MAX) =",I8)')IRIWIDEMAXW | |
| 1781 | ✗ | WRITE(NULOUT,'("SUECRAD: NRIWIDEE(MAX) =",I8)')IRIWIDEMAXE | |
| 1782 | ✗ | WRITE(NULOUT,'("SUECRAD: NROWIDEN(MAX) =",I8)')IROWIDEMAXN | |
| 1783 | ✗ | WRITE(NULOUT,'("SUECRAD: NROWIDES(MAX) =",I8)')IROWIDEMAXS | |
| 1784 | ✗ | WRITE(NULOUT,'("SUECRAD: NROWIDEW(MAX) =",I8)')IROWIDEMAXW | |
| 1785 | ✗ | WRITE(NULOUT,'("SUECRAD: NROWIDEE(MAX) =",I8)')IROWIDEMAXE | |
| 1786 | ✗ | WRITE(NULOUT,'("SUECRAD: NARIB1(MAX) =",I10)')IARIB1MAX | |
| 1787 | ✗ | WRITE(NULOUT,'("SUECRAD: NAROB1(MAX) =",I10)')IAROB1MAX | |
| 1788 | ✗ | WRITE(NULOUT,'("")') | |
| 1789 | ENDIF | ||
| 1790 | ✗ | CALL FLUSH(NULOUT) | |
| 1791 | ENDIF | ||
| 1792 | |||
| 1793 | ENDIF | ||
| 1794 | ! CALL GSTATS(1818,1) MPL 2.12.08 | ||
| 1795 | |||
| 1796 | ELSE | ||
| 1797 | |||
| 1798 | ✗ | WRITE(NULOUT,'("SUECRAD: INVALID VALUE FOR NRADINT=",I6)')NRADINT | |
| 1799 | ✗ | CALL ABOR1('SUECRAD: NRADINT INVALID') | |
| 1800 | |||
| 1801 | ENDIF | ||
| 1802 | |||
| 1803 | ENDIF ! END OF LERADI BLOCK | ||
| 1804 | |||
| 1805 | ! ---------------------------------------------------------------- | ||
| 1806 | |||
| 1807 | !* 4. INITIALIZE RADIATION COEFFICIENTS. | ||
| 1808 | ! ---------------------------------- | ||
| 1809 | |||
| 1810 | 1 | RCDAY = RDAY * RG / RCPD | |
| 1811 | 1 | DIFF = 1.66_JPRB | |
| 1812 | 1 | R10E = 0.4342945_JPRB | |
| 1813 | |||
| 1814 | ! CALL GSTATS(1818,0) MPL 2.12.08 | ||
| 1815 | 1 | CALL SURDI | |
| 1816 | |||
| 1817 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (NINHOM == 0) THEN |
| 1818 | ✗ | RLWINHF=1._JPRB | |
| 1819 | ✗ | RSWINHF=1._JPRB | |
| 1820 | ENDIF | ||
| 1821 | |||
| 1822 | ! ---------------------------------------------------------------- | ||
| 1823 | |||
| 1824 | !* 5. INITIALIZE RADIATION ABSORPTION COEFFICIENTS | ||
| 1825 | ! -------------------------------------------- | ||
| 1826 | |||
| 1827 | !* 5.1. Initialization routine for RRTM | ||
| 1828 | ! ------------------------------- | ||
| 1829 | |||
| 1830 | 1 | CALL SURRTAB | |
| 1831 | 1 | CALL SURRTPK | |
| 1832 | 1 | CALL SURRTRF | |
| 1833 | 1 | CALL SURRTFTR | |
| 1834 | |||
| 1835 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LRRTM) THEN |
| 1836 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (KLEV > JPLAY) THEN |
| 1837 | WRITE(UNIT=KULOUT,& | ||
| 1838 | & FMT='('' RRTM MAXIMUM NUMBER OF LAYERS IS REACHED'',& | ||
| 1839 | ✗ | & '' CALL ABORT'')') | |
| 1840 | ✗ | CALL ABOR1(' ABOR1 CALLED SUECRAD') | |
| 1841 | ENDIF | ||
| 1842 | |||
| 1843 | ! Read the absorption coefficient data and reduce from 256 to 140 g-points | ||
| 1844 | |||
| 1845 | 1 | CALL RRTM_INIT_140GP | |
| 1846 | |||
| 1847 | 1 | INBLW=16 | |
| 1848 | |||
| 1849 | ELSE | ||
| 1850 | ✗ | INBLW=6 | |
| 1851 | |||
| 1852 | ENDIF | ||
| 1853 | |||
| 1854 | 1 | CALL SULWN | |
| 1855 | 1 | CALL SUSWN (NTSW, NSW) | |
| 1856 | 1 | CALL SUCLOPN (NTSW, NSW, KLEV) | |
| 1857 | |||
| 1858 | !-- routines specific to SRTM | ||
| 1859 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (LSRTM) THEN |
| 1860 | ✗ | NTSW=14 | |
| 1861 | ✗ | ISW =14 | |
| 1862 | ✗ | CALL SRTM_INIT | |
| 1863 | ✗ | CALL SUSRTAER | |
| 1864 | ✗ | CALL SUSRTCOP | |
| 1865 | ✗ | WRITE(UNIT=KULOUT,FMT='(''SRTM Configuration'',L8,3I4)')LSRTM,NTSW,ISW,JPGPT | |
| 1866 | |||
| 1867 | ELSE | ||
| 1868 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1 | IF (.NOT.LONEWSW .OR. ((NSW /= 2).AND.(NSW /= 4).AND.(NSW /= 6)) ) THEN |
| 1869 | ✗ | WRITE(UNIT=KULOUT,FMT='(''Wrong SW Configuration'',L8,I3)')LONEWSW,NSW | |
| 1870 | ENDIF | ||
| 1871 | |||
| 1872 | 1 | CALL SUSWN (NTSW,NSW) | |
| 1873 | 1 | CALL SUAERSN (NTSW,NSW) | |
| 1874 | ENDIF | ||
| 1875 | 1 | WRITE(UNIT=KULOUT,FMT='('' NLW,NTSW,NSW SET EQUAL TO:'',3I3)') INBLW,NTSW,NSW | |
| 1876 | |||
| 1877 | |||
| 1878 | !-- routine specific to the UV processor | ||
| 1879 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (LUVPROC) THEN |
| 1880 | ✗ | NUVTIM = NUVTIM * 86400 | |
| 1881 | ✗ | CALL SU_UVRAD ( NUV ) | |
| 1882 | ENDIF | ||
| 1883 | |||
| 1884 | ! ---------------------------------------------------------------- | ||
| 1885 | |||
| 1886 | !* 6. INITIALIZE AEROSOL OPTICAL PARAMETERS AND DISTRIBUTION | ||
| 1887 | ! ------------------------------------------------------ | ||
| 1888 | |||
| 1889 | !- LW optical properties | ||
| 1890 | 1 | CALL SUAERL | |
| 1891 | !- SW optical properties moved above | ||
| 1892 | !CALL SUAERSN (NTSW,NSW) | ||
| 1893 | |||
| 1894 | !- horizontal distribution | ||
| 1895 | 1 | CALL SUAERH | |
| 1896 | |||
| 1897 | !- vertical distribution | ||
| 1898 | CALL SUAERV ( KLEV , PETAH,& | ||
| 1899 | & CVDAES , CVDAEL , CVDAEU , CVDAED,& | ||
| 1900 | & RCTRBGA, RCVOBGA, RCSTBGA, RCAEOPS, RCAEOPL, RCAEOPU,& | ||
| 1901 | & RCAEOPD, RCTRPT , RCAEADK, RCAEADM, RCAEROS & | ||
| 1902 | 1 | & ) | |
| 1903 | |||
| 1904 | !-- Overlap function (only used if NOVLP=4) | ||
| 1905 | ! Appel supprime par MPL (30042010) car NOVLP=4 pas utilise | ||
| 1906 | ! sinon il faudrait calculer le geopotentiel STZ | ||
| 1907 | !CALL SUOVLP ( KLEV ) | ||
| 1908 | |||
| 1909 | !-- parameters for prognostic aerosols | ||
| 1910 | 1 | CALL SU_AERW | |
| 1911 | |||
| 1912 | ! ---------------------------------------------------------------- | ||
| 1913 | |||
| 1914 | !* 7. INITIALIZE SATELLITE GEOMETRICAL/RADIOMETRIC PARAMETERS | ||
| 1915 | ! ------------------------------------------------------- | ||
| 1916 | |||
| 1917 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1 | IF (LEPHYS .AND. NMODE > 1) THEN |
| 1918 | ✗ | CALL SUSAT | |
| 1919 | ENDIF | ||
| 1920 | !CALL GSTATS(1818,1) MPL 2.12.08 | ||
| 1921 | |||
| 1922 | ! ---------------------------------------------------------------- | ||
| 1923 | |||
| 1924 | !* 8. INITIALIZE CLIMATOLOGICAL OZONE DISTRIBUTION | ||
| 1925 | ! -------------------------------------------- | ||
| 1926 | ! (not done here!!! called from APLPAR as it depends | ||
| 1927 | ! on model pressure levels!) | ||
| 1928 | |||
| 1929 | ! ---------------------------------------------------------------- | ||
| 1930 | |||
| 1931 | !* 9. SET UP MODEL CONFIGURATION FOR TIME-SPACE INTERPOLATION | ||
| 1932 | ! ------------------------------------------------------- | ||
| 1933 | |||
| 1934 | 1 | ZTSTEP=MAX(TSTEP,1.0_JPRB) | |
| 1935 | 1 | ZSTPHR=3600._JPRB/ZTSTEP | |
| 1936 | 1 | IRADFR=NRADFR | |
| 1937 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF(NRADFR < 0) THEN |
| 1938 | 1 | NRADFR=-NRADFR*ZSTPHR+0.5_JPRB | |
| 1939 | ENDIF | ||
| 1940 | 1 | NRADPFR=NRADPFR*NRADFR | |
| 1941 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1 | IF (MOD(NRADPLA,2) == 0.AND. NRADPLA /= 0) THEN |
| 1942 | ✗ | NRADPLA=NRADPLA+1 | |
| 1943 | ENDIF | ||
| 1944 | |||
| 1945 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF(NRADUV < 0) THEN |
| 1946 | 1 | NRADUV=-NRADUV*ZSTPHR+0.5_JPRB | |
| 1947 | ENDIF | ||
| 1948 | |||
| 1949 | 1 | IST1HR=ZSTPHR+0.05_JPRB | |
| 1950 | 1 | ISTNHR= NLNGR1H *ZSTPHR+0.05_JPRB | |
| 1951 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (MOD(3600._JPRB,ZTSTEP) > 0.1_JPRB) THEN |
| 1952 | 801 CONTINUE | ||
| 1953 | ✗ | IST1HR=IST1HR+1 | |
| 1954 | ✗ | IF (MOD(ISTNHR,IST1HR) /= 0) GO TO 801 | |
| 1955 | ENDIF | ||
| 1956 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (NRADFR == 1) THEN |
| 1957 | ✗ | NRADSFR=NRADFR | |
| 1958 | ELSE | ||
| 1959 | 1 | NRADSFR=IST1HR | |
| 1960 | ENDIF | ||
| 1961 | 1 | NRADNFR=NRADFR | |
| 1962 | |||
| 1963 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF(LRAYFM) THEN |
| 1964 | ✗ | NRPROMA=NDLON+6+(1-MOD(NDLON,2)) | |
| 1965 | ENDIF | ||
| 1966 | |||
| 1967 | ! ---------------------------------------------------------------- | ||
| 1968 | |||
| 1969 | !* 10. ALLOCATE WORK ARRAYS | ||
| 1970 | ! -------------------- | ||
| 1971 | |||
| 1972 | 1 | IU = NULOUT | |
| 1973 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | LLP = NPRINTLEV >= 1.OR. LALLOPR |
| 1974 | |||
| 1975 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (LEPHYS) THEN |
| 1976 | ✗ | ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 1977 | ✗ | IF(LLP)WRITE(IU,9) 'EMTD ',SIZE(EMTD ),SHAPE(EMTD ) | |
| 1978 | ✗ | ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 1979 | ✗ | IF(LLP)WRITE(IU,9) 'TRSW ',SIZE(TRSW ),SHAPE(TRSW ) | |
| 1980 | ✗ | ALLOCATE(EMTC(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 1981 | ✗ | IF(LLP)WRITE(IU,9) 'EMTC ',SIZE(EMTC ),SHAPE(EMTC ) | |
| 1982 | ✗ | ALLOCATE(TRSC(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 1983 | ✗ | IF(LLP)WRITE(IU,9) 'TRSC ',SIZE(TRSC ),SHAPE(TRSC ) | |
| 1984 | ✗ | ALLOCATE(SRSWD(NPROMA,NGPBLKS)) | |
| 1985 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWD ',SIZE(SRSWD ),SHAPE(SRSWD ) | |
| 1986 | ✗ | ALLOCATE(SRLWD(NPROMA,NGPBLKS)) | |
| 1987 | ✗ | IF(LLP)WRITE(IU,9) 'SRLWD ',SIZE(SRLWD ),SHAPE(SRLWD ) | |
| 1988 | ✗ | ALLOCATE(SRSWDCS(NPROMA,NGPBLKS)) | |
| 1989 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWDCS ',SIZE(SRSWDCS ),SHAPE(SRSWDCS ) | |
| 1990 | ✗ | ALLOCATE(SRLWDCS(NPROMA,NGPBLKS)) | |
| 1991 | ✗ | IF(LLP)WRITE(IU,9) 'SRLWDCS ',SIZE(SRLWDCS ),SHAPE(SRLWDCS ) | |
| 1992 | ✗ | ALLOCATE(SRSWDV(NPROMA,NGPBLKS)) | |
| 1993 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWDV ',SIZE(SRSWDV ),SHAPE(SRSWDV ) | |
| 1994 | ✗ | ALLOCATE(SRSWDUV(NPROMA,NGPBLKS)) | |
| 1995 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWDUV ',SIZE(SRSWDUV ),SHAPE(SRSWDUV ) | |
| 1996 | ✗ | ALLOCATE(EDRO(NPROMA,NGPBLKS)) | |
| 1997 | ✗ | IF(LLP)WRITE(IU,9) 'EDRO ',SIZE(EDRO ),SHAPE(EDRO ) | |
| 1998 | ✗ | ALLOCATE(SRSWPAR(NPROMA,NGPBLKS)) | |
| 1999 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWPAR ',SIZE(SRSWPAR ),SHAPE(SRSWPAR ) | |
| 2000 | ✗ | ALLOCATE(SRSWUVB(NPROMA,NGPBLKS)) | |
| 2001 | ✗ | IF(LLP)WRITE(IU,9) 'SRSWUVB ',SIZE(SRSWUVB ),SHAPE(SRSWUVB ) | |
| 2002 | |||
| 2003 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | ELSEIF(LMPHYS .AND. (LRAYFM.OR.LRAYFM15)) THEN |
| 2004 | ✗ | ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 2005 | ✗ | IF(LLP)WRITE(IU,9) 'EMTD ',SIZE(EMTD ),SHAPE(EMTD ) | |
| 2006 | ✗ | ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 2007 | ✗ | IF(LLP)WRITE(IU,9) 'TRSW ',SIZE(TRSW ),SHAPE(TRSW ) | |
| 2008 | ✗ | ALLOCATE(EMTU(NPROMA,NFLEVG+1,NGPBLKS)) | |
| 2009 | ✗ | IF(LLP)WRITE(IU,9) 'EMTC ',SIZE(EMTU ),SHAPE(EMTU ) | |
| 2010 | ✗ | ALLOCATE(RMOON(NPROMA,NGPBLKS)) | |
| 2011 | ✗ | IF(LLP)WRITE(IU,9) 'RMOON ',SIZE(RMOON ),SHAPE(RMOON ) | |
| 2012 | ENDIF | ||
| 2013 |
5/10✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
2 | ALLOCATE(SRSWPARC(NPROMA,NGPBLKS)) |
| 2014 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1 | IF(LLP)WRITE(IU,9) 'SRSWPARC ',SIZE(SRSWPARC ),SHAPE(SRSWPARC ) |
| 2015 |
5/10✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
2 | ALLOCATE(SRSWTINC(NPROMA,NGPBLKS)) |
| 2016 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1 | IF(LLP)WRITE(IU,9) 'SRSWTINC ',SIZE(SRSWTINC ),SHAPE(SRSWTINC ) |
| 2017 | |||
| 2018 | 9 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8) | ||
| 2019 | |||
| 2020 | ! ---------------------------------------------------------------- | ||
| 2021 | |||
| 2022 | !* 10. PRINT FINAL VALUES. | ||
| 2023 | ! ------------------- | ||
| 2024 | |||
| 2025 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (LOUTPUT) THEN |
| 2026 | ✗ | WRITE(UNIT=KULOUT,FMT='('' COMMON YOERAD '')') | |
| 2027 | WRITE(UNIT=KULOUT,FMT='('' LERADI = '',L5 & | ||
| 2028 | & ,'' LERAD1H = '',L5,'' LECO2VAR= '',L5,'' LHGHG = '',L5 & | ||
| 2029 | & ,'' NLNGR1H = '',I2,'' NRADSFR = '',I2)')& | ||
| 2030 | ✗ | & LERADI,LERAD1H,LECO2VAR,LHGHG,NLNGR1H,NRADSFR | |
| 2031 | ✗ | WRITE(UNIT=KULOUT,FMT='('' LEPO3RA = '',L5,'' YO3%LGP = '',L5 )') LEPO3RA,YO3%LGP | |
| 2032 | WRITE(UNIT=KULOUT,FMT='('' NRADFR = '',I2 & | ||
| 2033 | & ,'' NRADPFR = '',I3 & | ||
| 2034 | & ,'' NRADPLA = '',I2 & | ||
| 2035 | & ,'' NRINT = '',I1 & | ||
| 2036 | & ,'' NRPROMA = '',I5 & | ||
| 2037 | & )')& | ||
| 2038 | ✗ | & NRADFR,NRADPFR,NRADPLA,NRINT, NRPROMA | |
| 2039 | WRITE(UNIT=KULOUT,FMT='('' LERADHS= '',L5 & | ||
| 2040 | & ,'' LRRTM = '',L5 & | ||
| 2041 | & ,'' LSRTM = '',L5 & | ||
| 2042 | & ,'' NMODE = '',I1 & | ||
| 2043 | & ,'' NOZOCL= '',I1 & | ||
| 2044 | & ,'' NAER = '',I1 & | ||
| 2045 | & ,'' NHINCSOL='',I2 & | ||
| 2046 | & )')& | ||
| 2047 | ✗ | & LERADHS,LRRTM,LSRTM,NMODE,NOZOCL,NAER,NHINCSOL | |
| 2048 | ✗ | IF (.NOT.LHGHG .AND. .NOT.LECO2VAR) WRITE(UNIT=KULOUT,FMT='('' RCCO2= '',E10.3 & | |
| 2049 | &,'' RCCH4= '',E10.3,'' RCN2O= '',E10.3,'' RCCFC11= '',E10.3,'' RCFC12= '',E10.3 & | ||
| 2050 | &)')& | ||
| 2051 | ✗ | & RCCO2,RCCH4,RCN2O,RCCFC11,RCCFC12 | |
| 2052 | WRITE(UNIT=KULOUT,FMT='('' NINHOM = '',I1 & | ||
| 2053 | & ,'' NLAYINH='',I1 & | ||
| 2054 | & ,'' RLWINHF='',F4.2 & | ||
| 2055 | & ,'' RSWINHF='',F4.2 & | ||
| 2056 | & )')& | ||
| 2057 | ✗ | & NINHOM,NLAYINH,RLWINHF,RSWINHF | |
| 2058 | ✗ | IF (NPERTAER /= 0 .OR. NPERTOZ /= 0) THEN | |
| 2059 | WRITE(UNIT=KULOUT,FMT='('' NPERTAER= '',I2 & | ||
| 2060 | & ,'' LNOTROAER='',L5 & | ||
| 2061 | & ,'' NPERTOZ = '',I1 & | ||
| 2062 | & ,'' RPERTOZ = '',F5.0 & | ||
| 2063 | & )')& | ||
| 2064 | ✗ | & NPERTAER,LNOTROAER,NPERTOZ,RPERTOZ | |
| 2065 | ENDIF | ||
| 2066 | ✗ | WRITE(UNIT=KULOUT,FMT='('' NRADINT = '',I2)')NRADINT | |
| 2067 | ✗ | WRITE(UNIT=KULOUT,FMT='('' NRADRES = '',I4)')NRADRES | |
| 2068 | ✗ | WRITE(UNIT=KULOUT,FMT='('' LRADONDEM = '',L5)')LRADONDEM | |
| 2069 | ✗ | IF( NRADINT > 0 )THEN | |
| 2070 | ✗ | IDIR=LEN_TRIM(CRTABLEDIR) | |
| 2071 | ✗ | IFIL=LEN_TRIM(CRTABLEFIL) | |
| 2072 | WRITE(UNIT=KULOUT,FMT='('' CRTABLEDIR = '',A,'' CRTABLEFIL = '',A)')& | ||
| 2073 | ✗ | & CRTABLEDIR(1:IDIR),CRTABLEFIL(1:IFIL) | |
| 2074 | ENDIF | ||
| 2075 | WRITE(UNIT=KULOUT,FMT='('' LCCNL = '',L5 & | ||
| 2076 | & ,'' LCCNO = '',L5 & | ||
| 2077 | & ,'' RCCNLND= '',F5.0 & | ||
| 2078 | & ,'' RCCNSEA= '',F5.0 & | ||
| 2079 | & ,'' LE4ALB = '',L5 & | ||
| 2080 | &)')& | ||
| 2081 | ✗ | & LCCNL,LCCNO,RCCNLND,RCCNSEA,LE4ALB | |
| 2082 | ✗ | IF (LHVOLCA) THEN | |
| 2083 | ✗ | WRITE(UNIT=KULOUT,FMT='('' HISTORY OF VOLCANIC AEROSOLS= '',L5)')LHVOLCA | |
| 2084 | ENDIF | ||
| 2085 | WRITE(UNIT=KULOUT,FMT='('' LONEWSW= '',L5 & | ||
| 2086 | & ,'' NRADIP = '',I1 & | ||
| 2087 | & ,'' NRADLP = '',I1 & | ||
| 2088 | & ,'' NICEOPT= '',I1 & | ||
| 2089 | & ,'' NLIQOPT= '',I1 & | ||
| 2090 | & ,'' LDIFFC = '',L5 & | ||
| 2091 | & )')& | ||
| 2092 | ✗ | & LONEWSW,NRADIP,NRADLP,NICEOPT,NLIQOPT,LDIFFC | |
| 2093 | WRITE(UNIT=KULOUT,FMT='('' WARNING! CLOUD OVERLAP ASSUMPT. IS''& | ||
| 2094 | & ,'' NOVLP = '',I2 & | ||
| 2095 | & )')& | ||
| 2096 | ✗ | & NOVLP | |
| 2097 | ✗ | IF (LUVPROC) THEN | |
| 2098 | ✗ | IDAYUV=NUVTIM/86400 | |
| 2099 | WRITE(UNIT=KULOUT,FMT='('' LUVPROC = '',L5 & | ||
| 2100 | & ,'' LUVTDEP= '',L5 & | ||
| 2101 | & ,'' NRADUV = '',I2 & | ||
| 2102 | & ,'' NUV = '',I2 & | ||
| 2103 | & ,'' NDAYUV = '',I5 & | ||
| 2104 | & ,'' RMUZUV = '',E9.3 & | ||
| 2105 | & )')& | ||
| 2106 | ✗ | & LUVPROC,LUVTDEP,NRADUV,NUV,IDAYUV,RMUZUV | |
| 2107 | ✗ | WRITE(UNIT=KULOUT,FMT='('' RUVLAM = '',24F6.1)') (RUVLAM(JUV),JUV=1,NUV) | |
| 2108 | ✗ | WRITE(UNIT=KULOUT,FMT='('' JUVLAM = '',24(3X,I1,2X))') (JUVLAM(JUV),JUV=1,NUV) | |
| 2109 | ENDIF | ||
| 2110 | WRITE(UNIT=KULOUT,FMT='('' NMCICA= '',I2 & | ||
| 2111 | & )')& | ||
| 2112 | ✗ | & NMCICA | |
| 2113 | ENDIF | ||
| 2114 | |||
| 2115 | ! ------------------------------------------------------------------ | ||
| 2116 | |||
| 2117 | |||
| 2118 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('SUECRAD',1,ZHOOK_HANDLE) |
| 2119 | 1 | END SUBROUTINE SUECRAD | |
| 2120 |