[3927] | 1 | MODULE GFL_SUBS |
---|
| 2 | |
---|
| 3 | ! Purpose. |
---|
| 4 | ! -------- |
---|
| 5 | |
---|
| 6 | ! GFL_SUBS contains routines to do basic manipulatutions of GFL descriptors |
---|
| 7 | |
---|
| 8 | ! Author. |
---|
| 9 | ! ------- |
---|
| 10 | ! Mats Hamrud(ECMWF) |
---|
| 11 | |
---|
| 12 | ! Modifications. |
---|
| 13 | ! -------------- |
---|
| 14 | ! Original : 2003-03-01 |
---|
| 15 | ! Modifications: |
---|
| 16 | ! 03/07/09 C. Fischer - add Arome/Aladin attributes |
---|
| 17 | ! M.Hamrud 01-Oct-2003 CY28 Cleaning |
---|
| 18 | ! M. Tudor 31-Oct-2003 physics tendencies |
---|
| 19 | ! Y.Tremolet 03-Mar-2004 Protect *EACT_CLOUD_GFL for multiple calls |
---|
| 20 | ! Y.Tremolet 12-Mar-2004 Save/falsify GFLC |
---|
| 21 | ! J.Haseler 10-Oct-2005 Switch for I/O to trajectory structure |
---|
| 22 | ! Y. Bouteloup 28-Jan-2005 Add YR (rain !) in DEACT_CLOUD_GFL |
---|
| 23 | ! 20-Feb-2005 J. Vivoda 3TL PC Eulerian scheme, GWADV scheme for PC_FULL |
---|
| 24 | ! Y. Bouteloup 25-Dec-2005 Add YS (snow !) in DEACT_CLOUD_GFL |
---|
| 25 | ! A. Trojakova 29-June-2006 Add YCPF in DEACT_CLOUD_GFL |
---|
| 26 | !------------------------------------------------------------------------- |
---|
| 27 | USE PARKIND1 ,ONLY : JPIM ,JPRB |
---|
| 28 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK |
---|
| 29 | |
---|
| 30 | USE YOMLUN , ONLY : NULOUT |
---|
| 31 | USE TYPE_GFLS ,ONLY : TYPE_GFL_COMP |
---|
| 32 | USE YOM_YGFL , ONLY : YGFL,JPGFL,YGFLC,YL,YI,YA,YR,YS,YCPF |
---|
| 33 | USE YOPHNC , ONLY : LENCLD2 |
---|
| 34 | USE YOMSLPHY ,ONLY : MSAVTEND_S |
---|
| 35 | USE YOMDIM , ONLY : NFLEVG ,NFLSUL |
---|
| 36 | |
---|
| 37 | IMPLICIT NONE |
---|
| 38 | SAVE |
---|
| 39 | |
---|
| 40 | PRIVATE |
---|
| 41 | !PUBLIC DEFINE_GFL_COMP,PRINT_GFL,SET_GFL_ATTR,DEACT_CLOUD_GFL,REACT_CLOUD_GFL |
---|
| 42 | ! MPL 10.12.08 |
---|
| 43 | PUBLIC DEFINE_GFL_COMP,PRINT_GFL,SET_GFL_ATTR |
---|
| 44 | |
---|
| 45 | ! For internal use |
---|
| 46 | TYPE(TYPE_GFL_COMP),POINTER :: YLASTGFLC ! Pointer to last defined field |
---|
| 47 | TYPE(TYPE_GFL_COMP),POINTER :: YPTRC ! Temporary field pointer |
---|
| 48 | TYPE(TYPE_GFL_COMP) :: YL_SAVE ! For saving status of cloud fields |
---|
| 49 | TYPE(TYPE_GFL_COMP) :: YI_SAVE ! For saving status of cloud fields |
---|
| 50 | TYPE(TYPE_GFL_COMP) :: YA_SAVE ! For saving status of cloud fields |
---|
| 51 | TYPE(TYPE_GFL_COMP) :: YR_SAVE ! For saving status of cloud fields |
---|
| 52 | TYPE(TYPE_GFL_COMP) :: YS_SAVE ! For saving status of cloud fields |
---|
| 53 | TYPE(TYPE_GFL_COMP) :: YCPF_SAVE ! For saving status of cloud fields |
---|
| 54 | LOGICAL :: L_CLD_DEACT=.FALSE. |
---|
| 55 | |
---|
| 56 | !$OMP THREADPRIVATE(l_cld_deact,ya_save,ycpf_save,yi_save,yl_save,ylastgflc,yptrc,yr_save,ys_save) |
---|
| 57 | |
---|
| 58 | #include "abor1.intfb.h" |
---|
| 59 | |
---|
| 60 | !------------------------------------------------------------------------- |
---|
| 61 | CONTAINS |
---|
| 62 | !------------------------------------------------------------------------- |
---|
| 63 | |
---|
| 64 | SUBROUTINE DEFINE_GFL_COMP(YDGFLC,CDNAME,KGRIB,LDGP,KREQIN,PREFVALI, & |
---|
| 65 | & LDREQOUT,LDERS,LD5,LDT1,LDGPINGP,LDTRAJIO,LDTHERMACT,PR,PRCP) |
---|
| 66 | |
---|
| 67 | !**** *DEFINE_GFL_COMP* - Setup indivual GFL field |
---|
| 68 | |
---|
| 69 | ! Purpose. |
---|
| 70 | ! -------- |
---|
| 71 | ! Basic allocation of GFL descriptor structure (on first call) |
---|
| 72 | ! Setup basic attributes of individual GFL component |
---|
| 73 | |
---|
| 74 | ! Explicit arguments : |
---|
| 75 | ! -------------------- |
---|
| 76 | |
---|
| 77 | ! YDGFLC - field handle |
---|
| 78 | ! CDNAME - field ARPEGE name |
---|
| 79 | ! KGRIB - GRIB code |
---|
| 80 | ! LDGP - if TRUE gridpoint field |
---|
| 81 | ! KREQIN - 1 if required in input, 0 if not, -1 if initialised with refernence value |
---|
| 82 | ! PREFVALI - reference value for initialisation in case NREQIN==-1 |
---|
| 83 | ! LDREQOUT- TRUE if requiered in output |
---|
| 84 | ! LDERS - TRUE if derivatives required (only possible for spectral field) |
---|
| 85 | ! LD5 - TRUE if field needs to be present in trajectory (T5) |
---|
| 86 | ! LD1 - TRUE if field needs to be present in t+dt array (GFLT1) |
---|
| 87 | ! LDTRAJIO- TRUE if field written to/from trajectory structure files |
---|
| 88 | |
---|
| 89 | ! Author. |
---|
| 90 | ! ------- |
---|
| 91 | ! Mats Hamrud *ECMWF* |
---|
| 92 | |
---|
| 93 | ! Modifications. |
---|
| 94 | ! -------------- |
---|
| 95 | ! Original : 2003-03-01 |
---|
| 96 | ! Modifications: |
---|
| 97 | ! 03/07/09 C. Fischer - add Arome/Aladin attributes |
---|
| 98 | !------------------------------------------------------------------------- |
---|
| 99 | |
---|
| 100 | TYPE(TYPE_GFL_COMP),TARGET,INTENT(INOUT) :: YDGFLC |
---|
| 101 | CHARACTER(LEN=16),INTENT(IN) :: CDNAME |
---|
| 102 | INTEGER(KIND=JPIM),INTENT(IN) :: KGRIB |
---|
| 103 | INTEGER(KIND=JPIM),INTENT(IN) :: KREQIN |
---|
| 104 | REAL(KIND=JPRB),INTENT(IN),OPTIONAL :: PREFVALI |
---|
| 105 | LOGICAL,INTENT(IN):: LDREQOUT |
---|
| 106 | LOGICAL,INTENT(IN) :: LDGP |
---|
| 107 | LOGICAL,INTENT(IN) :: LDERS |
---|
| 108 | LOGICAL,INTENT(IN) :: LD5 |
---|
| 109 | LOGICAL,INTENT(IN) :: LDT1 |
---|
| 110 | LOGICAL,INTENT(IN),OPTIONAL :: LDGPINGP |
---|
| 111 | LOGICAL,INTENT(IN),OPTIONAL :: LDTRAJIO |
---|
| 112 | LOGICAL,INTENT(IN),OPTIONAL :: LDTHERMACT |
---|
| 113 | REAL(KIND=JPRB),INTENT(IN),OPTIONAL :: PR |
---|
| 114 | REAL(KIND=JPRB),INTENT(IN),OPTIONAL :: PRCP |
---|
| 115 | |
---|
| 116 | INTEGER(KIND=JPIM) :: JGFL, ICURFLDPT, ICURFLDPC |
---|
| 117 | LOGICAL,SAVE :: LLFIRSTCALL = .TRUE. |
---|
| 118 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 119 | !$OMP THREADPRIVATE(llfirstcall) |
---|
| 120 | |
---|
| 121 | |
---|
| 122 | !------------------------------------------------------------------------- |
---|
| 123 | |
---|
| 124 | ! 1. Initialization of YGFL on first call to this routine |
---|
| 125 | ! ---------------------------------------------------- |
---|
| 126 | |
---|
| 127 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:DEFINE_GFL_COMP',0,ZHOOK_HANDLE) |
---|
| 128 | IF(LLFIRSTCALL) THEN |
---|
| 129 | YGFL%NUMFLDS = 0 |
---|
| 130 | YGFL%NUMFLDS9 = 0 |
---|
| 131 | YGFL%NUMFLDS1 = 0 |
---|
| 132 | YGFL%NUMFLDS5 = 0 |
---|
| 133 | YGFL%NUMFLDSPHY = 0 |
---|
| 134 | YGFL%NUMFLDS_SPL = 0 |
---|
| 135 | YGFL%NUMFLDS_SL1 = 0 |
---|
| 136 | YGFL%NUMFLDSPT = 0 |
---|
| 137 | YGFL%NUMFLDSPC = 0 |
---|
| 138 | YGFL%NDIM = 0 |
---|
| 139 | YGFL%NDIM0 = 0 |
---|
| 140 | YGFL%NDIM9 = 0 |
---|
| 141 | YGFL%NDIM1 = 0 |
---|
| 142 | YGFL%NDIM5 = 0 |
---|
| 143 | YGFL%NDIMSLP = 0 |
---|
| 144 | YGFL%NDIM_SPL = 0 |
---|
| 145 | YGFL%NDIMPT = 0 |
---|
| 146 | YGFL%NDIMPC = 0 |
---|
| 147 | YGFL%NDERS = 0 |
---|
| 148 | YGFL%NUMSPFLDS = 0 |
---|
| 149 | YGFL%NUMGPFLDS = 0 |
---|
| 150 | YGFL%NUMSPFLDS1 = 0 |
---|
| 151 | DO JGFL=1,JPGFL |
---|
| 152 | CALL FALSIFY_GFLC(YGFLC(JGFL)) |
---|
| 153 | YGFLC(JGFL)%MP = -HUGE(JPGFL) |
---|
| 154 | YGFLC(JGFL)%MPL = -HUGE(JPGFL) |
---|
| 155 | YGFLC(JGFL)%MPM = -HUGE(JPGFL) |
---|
| 156 | YGFLC(JGFL)%MP9 = -HUGE(JPGFL) |
---|
| 157 | YGFLC(JGFL)%MP9_PH = -HUGE(JPGFL) |
---|
| 158 | YGFLC(JGFL)%MP1 = -HUGE(JPGFL) |
---|
| 159 | YGFLC(JGFL)%MP5 = -HUGE(JPGFL) |
---|
| 160 | YGFLC(JGFL)%MP5L = -HUGE(JPGFL) |
---|
| 161 | YGFLC(JGFL)%MP5M = -HUGE(JPGFL) |
---|
| 162 | YGFLC(JGFL)%MPSLP = -HUGE(JPGFL) |
---|
| 163 | YGFLC(JGFL)%MPSP = -HUGE(JPGFL) |
---|
| 164 | YGFLC(JGFL)%MP_SPL = -HUGE(JPGFL) |
---|
| 165 | YGFLC(JGFL)%MP_SL1 = -HUGE(JPGFL) |
---|
| 166 | YGFLC(JGFL)%MP_SLX = -HUGE(JPGFL) |
---|
| 167 | YGFLC(JGFL)%MPPT = -HUGE(JPGFL) |
---|
| 168 | YGFLC(JGFL)%MPPC = -HUGE(JPGFL) |
---|
| 169 | ENDDO |
---|
| 170 | NULLIFY(YLASTGFLC) |
---|
| 171 | LLFIRSTCALL = .FALSE. |
---|
| 172 | ENDIF |
---|
| 173 | |
---|
| 174 | !------------------------------------------------------------------------- |
---|
| 175 | |
---|
| 176 | ! 2. Define GFL component |
---|
| 177 | ! -------------------- |
---|
| 178 | |
---|
| 179 | ! 2.1 Some checks |
---|
| 180 | IF(LDGP) THEN |
---|
| 181 | DO JGFL=1,YGFL%NUMFLDS |
---|
| 182 | IF(.NOT. YGFLC(JGFL)%LGP) THEN |
---|
| 183 | ! Grid-point fields should be defined before any spectral field |
---|
| 184 | CALL ABOR1('YOMMFL:DEFINE_GFL_COMP:GRIDPOINT BEFORE SPECTRAL') |
---|
| 185 | ENDIF |
---|
| 186 | ENDDO |
---|
| 187 | ENDIF |
---|
| 188 | IF(LDGP) THEN |
---|
| 189 | IF(LDERS) THEN |
---|
| 190 | ! Derivatives can only be defined for spectral fields |
---|
| 191 | CALL ABOR1('YOMMFL:DEFINE_GFL_COMP:DERIVATIVES ONLY WITH SPECTRAL') |
---|
| 192 | ENDIF |
---|
| 193 | ENDIF |
---|
| 194 | IF(YGFL%NUMFLDS == JPGFL) THEN |
---|
| 195 | WRITE(NULOUT,*) ' MAXIMUM NUMBER OF FIELDS ALREADY DEFINED' |
---|
| 196 | CALL ABOR1('YOMMFL: EXCEED NUMBER OF FIELDS') |
---|
| 197 | ENDIF |
---|
| 198 | |
---|
| 199 | ! 2.2 Define field attributes |
---|
| 200 | |
---|
| 201 | ICURFLDPT = YGFL%NUMFLDS+1 |
---|
| 202 | ICURFLDPC = YGFL%NUMFLDS+1 |
---|
| 203 | |
---|
| 204 | YDGFLC%LACTIVE = .TRUE. |
---|
| 205 | YDGFLC%CNAME = CDNAME |
---|
| 206 | YDGFLC%IGRBCODE = KGRIB |
---|
| 207 | YDGFLC%NREQIN = KREQIN |
---|
| 208 | IF (PRESENT(PREFVALI)) THEN |
---|
| 209 | YDGFLC%REFVALI = PREFVALI |
---|
| 210 | ENDIF |
---|
| 211 | YDGFLC%LREQOUT = LDREQOUT |
---|
| 212 | YDGFLC%LGP = LDGP |
---|
| 213 | YDGFLC%LSP= .NOT. YDGFLC%LGP |
---|
| 214 | YDGFLC%LT5 = LD5 |
---|
| 215 | YDGFLC%LT1 = LDT1 |
---|
| 216 | YDGFLC%LCDERS = LDERS |
---|
| 217 | IF(PRESENT(LDGPINGP)) YDGFLC%LGPINGP=LDGPINGP |
---|
| 218 | IF(PRESENT(LDTRAJIO)) YDGFLC%LTRAJIO=LDTRAJIO |
---|
| 219 | IF(PRESENT(LDTHERMACT)) YDGFLC%LTHERMACT=LDTHERMACT |
---|
| 220 | IF(YDGFLC%LTHERMACT) THEN |
---|
| 221 | IF(.NOT.PRESENT(PR)) & |
---|
| 222 | &CALL ABOR1('GFL_SUBS:DEFINE_GFL_COMPONENT - PR MISSING') |
---|
| 223 | IF(.NOT.PRESENT(PRCP)) & |
---|
| 224 | &CALL ABOR1('GFL_SUBS:DEFINE_GFL_COMPONENT - PRCP MISSING') |
---|
| 225 | YDGFLC%R = PR |
---|
| 226 | YDGFLC%RCP = PRCP |
---|
| 227 | ENDIF |
---|
| 228 | |
---|
| 229 | ! 2.3 Numbers of fields and dimensions |
---|
| 230 | YGFL%NUMFLDS = YGFL%NUMFLDS+1 |
---|
| 231 | IF (YDGFLC%LT5) YGFL%NUMFLDS5 = YGFL%NUMFLDS5+1 |
---|
| 232 | |
---|
| 233 | IF(YDGFLC%LCDERS) THEN |
---|
| 234 | YGFL%NDIM = YGFL%NDIM+3 |
---|
| 235 | YGFL%NDIM0 = YGFL%NDIM0+3 |
---|
| 236 | YGFL%NDERS = YGFL%NDERS+1 |
---|
| 237 | IF (YDGFLC%LT5) YGFL%NDIM5 = YGFL%NDIM5+3 |
---|
| 238 | ELSE |
---|
| 239 | YGFL%NDIM = YGFL%NDIM+1 |
---|
| 240 | YGFL%NDIM0 = YGFL%NDIM0+1 |
---|
| 241 | IF (YDGFLC%LT5) YGFL%NDIM5 = YGFL%NDIM5+1 |
---|
| 242 | ENDIF |
---|
| 243 | |
---|
| 244 | IF(YDGFLC%LSP) THEN |
---|
| 245 | YGFL%NUMSPFLDS =YGFL%NUMSPFLDS+1 |
---|
| 246 | ELSE |
---|
| 247 | YGFL%NUMGPFLDS =YGFL%NUMGPFLDS+1 |
---|
| 248 | ENDIF |
---|
| 249 | |
---|
| 250 | IF (YDGFLC%LT1) THEN |
---|
| 251 | YGFL%NUMFLDS1 = YGFL%NUMFLDS1+1 |
---|
| 252 | YGFL%NDIM1 = YGFL%NDIM1+1 |
---|
| 253 | IF (YDGFLC%LSP) YGFL%NUMSPFLDS1 =YGFL%NUMSPFLDS1+1 |
---|
| 254 | ENDIF |
---|
| 255 | |
---|
| 256 | ! 2.4 Define field "pointers" |
---|
| 257 | YDGFLC%MP5 = -HUGE(JPGFL) |
---|
| 258 | IF (YDGFLC%LGP) THEN |
---|
| 259 | YDGFLC%MP = YGFL%NDIM0 |
---|
| 260 | IF (YDGFLC%LT5) YDGFLC%MP5 = YGFL%NDIM5 |
---|
| 261 | ELSE |
---|
| 262 | YDGFLC%MP = YGFL%NUMFLDS |
---|
| 263 | IF (YDGFLC%LT5) YDGFLC%MP5 = YGFL%NUMFLDS5 |
---|
| 264 | ENDIF |
---|
| 265 | IF (YDGFLC%LCDERS) THEN |
---|
| 266 | YDGFLC%MPM = YDGFLC%MP+YGFL%NDERS |
---|
| 267 | YDGFLC%MPL = YDGFLC%MP+2*YGFL%NDERS |
---|
| 268 | IF(YDGFLC%LT5) THEN |
---|
| 269 | YDGFLC%MP5M = YDGFLC%MP5+YGFL%NDERS |
---|
| 270 | YDGFLC%MP5L = YDGFLC%MP5+2*YGFL%NDERS |
---|
| 271 | ENDIF |
---|
| 272 | ELSE |
---|
| 273 | YDGFLC%MPL = -HUGE(JPGFL) |
---|
| 274 | YDGFLC%MPM = -HUGE(JPGFL) |
---|
| 275 | YDGFLC%MP5L = -HUGE(JPGFL) |
---|
| 276 | YDGFLC%MP5M = -HUGE(JPGFL) |
---|
| 277 | ENDIF |
---|
| 278 | |
---|
| 279 | IF(YDGFLC%LSP) THEN |
---|
| 280 | YDGFLC%MPSP = YGFL%NUMSPFLDS |
---|
| 281 | ELSE |
---|
| 282 | YDGFLC%MPSP = -HUGE(JPGFL) |
---|
| 283 | ENDIF |
---|
| 284 | |
---|
| 285 | IF (YDGFLC%LT1) THEN |
---|
| 286 | YDGFLC%MP1 = YGFL%NUMFLDS1 |
---|
| 287 | ELSE |
---|
| 288 | YDGFLC%MP1 = -HUGE(JPGFL) |
---|
| 289 | ENDIF |
---|
| 290 | |
---|
| 291 | ! 2.6 Possibly reassign pointers (needed for multiple fields with derivatives) |
---|
| 292 | |
---|
| 293 | IF(ASSOCIATED(YLASTGFLC)) THEN |
---|
| 294 | YPTRC=>YLASTGFLC |
---|
| 295 | DO |
---|
| 296 | IF(.NOT.LDGP) THEN |
---|
| 297 | IF(YPTRC%LCDERS) THEN |
---|
| 298 | YPTRC%MPM = YPTRC%MPM+1 |
---|
| 299 | IF(LDERS)THEN |
---|
| 300 | YPTRC%MPL = YPTRC%MPL+2 |
---|
| 301 | ELSE |
---|
| 302 | YPTRC%MPL = YPTRC%MPL+1 |
---|
| 303 | ENDIF |
---|
| 304 | ENDIF |
---|
| 305 | WRITE(NULOUT,*)' DEFINE_GFL_COMP:CHECKING ',YPTRC%CNAME |
---|
| 306 | WRITE(NULOUT,*)' REASSIGNED MPL=',YPTRC%MPL,' MPM=',YPTRC%MPM |
---|
| 307 | IF (YDGFLC%LT5) THEN |
---|
| 308 | IF(YPTRC%LT5) THEN |
---|
| 309 | IF(YPTRC%LCDERS) THEN |
---|
| 310 | YPTRC%MP5M = YPTRC%MP5M+1 |
---|
| 311 | IF(LDERS)THEN |
---|
| 312 | YPTRC%MP5L = YPTRC%MP5L+2 |
---|
| 313 | ELSE |
---|
| 314 | YPTRC%MP5L = YPTRC%MP5L+1 |
---|
| 315 | ENDIF |
---|
| 316 | ENDIF |
---|
| 317 | WRITE(NULOUT,*)' REASSIGNED MP5L=',YPTRC%MP5L,' MP5M=',YPTRC%MP5M |
---|
| 318 | ENDIF |
---|
| 319 | ENDIF |
---|
| 320 | |
---|
| 321 | ENDIF |
---|
| 322 | IF(.NOT.ASSOCIATED(YPTRC%PREVIOUS)) EXIT |
---|
| 323 | YPTRC=>YPTRC%PREVIOUS |
---|
| 324 | ENDDO |
---|
| 325 | ENDIF |
---|
| 326 | |
---|
| 327 | ! 2.7 Point to last defined field |
---|
| 328 | YDGFLC%PREVIOUS=>YLASTGFLC |
---|
| 329 | YLASTGFLC => YDGFLC |
---|
| 330 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:DEFINE_GFL_COMP',1,ZHOOK_HANDLE) |
---|
| 331 | |
---|
| 332 | ! ------------------------------------------------------------------ |
---|
| 333 | END SUBROUTINE DEFINE_GFL_COMP |
---|
| 334 | |
---|
| 335 | !========================================================================= |
---|
| 336 | |
---|
| 337 | SUBROUTINE SET_GFL_ATTR(YDGFLC,LDADV,LDT9,LDPHY,LDPT,LDPC,LDADJUST0,& |
---|
| 338 | & LDADJUST1,KCOUPLING,PREFVALC,LDBIPER,CDSLINT) |
---|
| 339 | |
---|
| 340 | !**** *SET_GFL_ATTR* Add attributes to previously setup GFL components |
---|
| 341 | |
---|
| 342 | ! Purpose. |
---|
| 343 | ! -------- |
---|
| 344 | ! Add further attributes to previously setup, by call to DEFINE_GFL_COMP, GFL components |
---|
| 345 | |
---|
| 346 | ! Explicit arguments : |
---|
| 347 | ! -------------------- |
---|
| 348 | ! LDADV - TRUE if field to be advected |
---|
| 349 | ! LDT9 - TRUE if field present in t-dt |
---|
| 350 | ! LDPHY - TRUE if field updated by physics |
---|
| 351 | ! LDPT - TRUE if field present in phy. tend. |
---|
| 352 | ! LDPC - TRUE if field in predictor/corrector time stepping treatment (3TL) |
---|
| 353 | ! LDADJUST0 - TRUE if field to be adjusted at t |
---|
| 354 | ! LDADJUST1 - TRUE if field to be adjusted at t+dt |
---|
| 355 | ! KCOUPLING - 1 if field to be coupled, 0 if not, -1 if coupled with REFVALC |
---|
| 356 | ! REVALC - refernce value for coupling, used only in case NCOUPLING==-1 |
---|
| 357 | ! LDBIPER - TRUE if field to be biperiodised |
---|
| 358 | ! CDSLINT - S.L. interpolator |
---|
| 359 | |
---|
| 360 | ! Author. |
---|
| 361 | ! ------- |
---|
| 362 | ! Mats Hamrud *ECMWF* |
---|
| 363 | |
---|
| 364 | ! Modifications. |
---|
| 365 | ! -------------- |
---|
| 366 | ! Original : 2003-03-01 |
---|
| 367 | ! Modifications: |
---|
| 368 | ! 03/07/09 C. Fischer - add Arome/Aladin attributes |
---|
| 369 | ! 2004-Nov F. Vana - update of CDSLINT |
---|
| 370 | !------------------------------------------------------------------------- |
---|
| 371 | |
---|
| 372 | TYPE(TYPE_GFL_COMP),TARGET,INTENT(INOUT) :: YDGFLC |
---|
| 373 | LOGICAL,INTENT(IN),OPTIONAL :: LDADV |
---|
| 374 | LOGICAL,INTENT(IN),OPTIONAL :: LDT9 |
---|
| 375 | LOGICAL,INTENT(IN),OPTIONAL :: LDPHY |
---|
| 376 | LOGICAL,INTENT(IN),OPTIONAL :: LDPT |
---|
| 377 | LOGICAL,INTENT(IN),OPTIONAL :: LDPC |
---|
| 378 | LOGICAL,INTENT(IN),OPTIONAL :: LDADJUST0 |
---|
| 379 | LOGICAL,INTENT(IN),OPTIONAL :: LDADJUST1 |
---|
| 380 | INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOUPLING |
---|
| 381 | REAL(KIND=JPRB),INTENT(IN),OPTIONAL :: PREFVALC |
---|
| 382 | LOGICAL,INTENT(IN),OPTIONAL :: LDBIPER |
---|
| 383 | CHARACTER(LEN=12),INTENT(IN),OPTIONAL :: CDSLINT |
---|
| 384 | |
---|
| 385 | INTEGER(KIND=JPIM) :: IGFLPTR |
---|
| 386 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 387 | |
---|
| 388 | !------------------------------------------------------------------------- |
---|
| 389 | |
---|
| 390 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:SET_GFL_ATTR',0,ZHOOK_HANDLE) |
---|
| 391 | IF(YDGFLC%MP < 1 .OR. YDGFLC%MP > YGFL%NUMFLDS) THEN |
---|
| 392 | CALL ABOR1('SET_GFL_ATTR: GFL COMPONENT NOT SET UP') |
---|
| 393 | ELSE |
---|
| 394 | IGFLPTR=YDGFLC%MP |
---|
| 395 | ENDIF |
---|
| 396 | |
---|
| 397 | IF(PRESENT(LDADV)) THEN |
---|
| 398 | YDGFLC%LADV = LDADV |
---|
| 399 | ENDIF |
---|
| 400 | IF(YDGFLC%LADV) THEN |
---|
| 401 | IF(.NOT.YDGFLC%LT1) THEN |
---|
| 402 | CALL ABOR1(' GFL field to be advected but LT1=false') |
---|
| 403 | ENDIF |
---|
| 404 | YGFL%NUMFLDS_SL1 = YGFL%NUMFLDS_SL1+1 |
---|
| 405 | YDGFLC%MP_SL1 = YGFL%NUMFLDS_SL1 |
---|
| 406 | YDGFLC%MP_SLX = (YGFL%NUMFLDS_SL1-1)*(NFLEVG+2*NFLSUL) |
---|
| 407 | ENDIF |
---|
| 408 | |
---|
| 409 | |
---|
| 410 | ! Other timelevels etc. |
---|
| 411 | |
---|
| 412 | IF(PRESENT(LDT9)) THEN |
---|
| 413 | YDGFLC%LT9 = LDT9 |
---|
| 414 | ENDIF |
---|
| 415 | IF(YDGFLC%LT9 .AND. YDGFLC%MP9 == -HUGE(JPGFL) ) THEN |
---|
| 416 | YGFL%NUMFLDS9 = YGFL%NUMFLDS9+1 |
---|
| 417 | YGFL%NDIM = YGFL%NDIM+1 |
---|
| 418 | YGFL%NDIM9 = YGFL%NDIM9+1 |
---|
| 419 | YDGFLC%MP9 = YGFL%NDIM0+YGFL%NUMFLDS9 |
---|
| 420 | YDGFLC%MP9_PH = YDGFLC%MP9 |
---|
| 421 | ELSE |
---|
| 422 | YDGFLC%MP9 = YDGFLC%MP |
---|
| 423 | YDGFLC%MP9_PH = YDGFLC%MP9 |
---|
| 424 | WRITE(NULOUT,*) 'WARNING YDGFLC%MP9 = YDGFLC%MP',YDGFLC%MP9,YDGFLC%MP |
---|
| 425 | ENDIF |
---|
| 426 | |
---|
| 427 | IF(PRESENT(LDPHY)) THEN |
---|
| 428 | YDGFLC%LPHY = LDPHY |
---|
| 429 | ENDIF |
---|
| 430 | IF(YGFL%NUMFLDSPHY == 0)YGFL%NUMFLDSPHY=YGFL%NUMFLDSPHY-MSAVTEND_S |
---|
| 431 | IF(YDGFLC%MPSLP == -HUGE(JPGFL)) THEN |
---|
| 432 | IF(YDGFLC%LPHY) THEN |
---|
| 433 | IF(.NOT.YDGFLC%LT1) THEN |
---|
| 434 | CALL ABOR1(' GFL field to be modified by physics but LT1=false') |
---|
| 435 | ENDIF |
---|
| 436 | YGFL%NUMFLDSPHY = YGFL%NUMFLDSPHY+1+MSAVTEND_S |
---|
| 437 | YGFL%NDIMSLP = YGFL%NDIMSLP+1+MSAVTEND_S |
---|
| 438 | YDGFLC%MPSLP = YGFL%NUMFLDSPHY |
---|
| 439 | ENDIF |
---|
| 440 | ENDIF |
---|
| 441 | |
---|
| 442 | IF(PRESENT(LDPT)) THEN |
---|
| 443 | YDGFLC%LPT = LDPT |
---|
| 444 | ENDIF |
---|
| 445 | IF(YDGFLC%MPPT == -HUGE(JPGFL)) THEN |
---|
| 446 | IF(YDGFLC%LPT) THEN |
---|
| 447 | YGFL%NUMFLDSPT = YGFL%NUMFLDSPT+1 |
---|
| 448 | YGFL%NDIMPT = YGFL%NDIMPT+1 |
---|
| 449 | YDGFLC%MPPT = YGFL%NUMFLDSPT |
---|
| 450 | ENDIF |
---|
| 451 | ENDIF |
---|
| 452 | IF(PRESENT(LDPC)) THEN |
---|
| 453 | YDGFLC%LPC = LDPC |
---|
| 454 | ENDIF |
---|
| 455 | IF(YDGFLC%MPPC == -HUGE(JPGFL)) THEN |
---|
| 456 | IF(YDGFLC%LPC) THEN |
---|
| 457 | YGFL%NUMFLDSPC = YGFL%NUMFLDSPC+1 |
---|
| 458 | YGFL%NDIMPC = YGFL%NDIMPC+1 |
---|
| 459 | YDGFLC%MPPC = YGFL%NUMFLDSPC |
---|
| 460 | ENDIF |
---|
| 461 | ENDIF |
---|
| 462 | |
---|
| 463 | |
---|
| 464 | ! LAM attributes (do not involve extra dimensioning or pointers) |
---|
| 465 | |
---|
| 466 | IF(PRESENT(LDADJUST0)) THEN |
---|
| 467 | YDGFLC%LADJUST0 = LDADJUST0 |
---|
| 468 | ENDIF |
---|
| 469 | IF(PRESENT(LDADJUST1)) THEN |
---|
| 470 | YDGFLC%LADJUST1 = LDADJUST1 |
---|
| 471 | ENDIF |
---|
| 472 | IF(PRESENT(KCOUPLING)) THEN |
---|
| 473 | YDGFLC%NCOUPLING = KCOUPLING |
---|
| 474 | ENDIF |
---|
| 475 | IF(PRESENT(PREFVALC)) THEN |
---|
| 476 | YDGFLC%REFVALC = PREFVALC |
---|
| 477 | ENDIF |
---|
| 478 | IF(PRESENT(LDBIPER)) THEN |
---|
| 479 | YDGFLC%LBIPER = LDBIPER |
---|
| 480 | ENDIF |
---|
| 481 | |
---|
| 482 | IF(PRESENT(CDSLINT)) THEN |
---|
| 483 | YDGFLC%CSLINT=CDSLINT |
---|
| 484 | IF(YDGFLC%MP_SPL == -HUGE(JPGFL)) THEN |
---|
| 485 | IF(CDSLINT == 'LAITVSPCQM ') THEN |
---|
| 486 | YGFL%NUMFLDS_SPL = YGFL%NUMFLDS_SPL+1 |
---|
| 487 | YGFL%NDIM_SPL = YGFL%NDIM_SPL+1 |
---|
| 488 | YDGFLC%MP_SPL = YGFL%NUMFLDS_SPL |
---|
| 489 | ENDIF |
---|
| 490 | ENDIF |
---|
| 491 | ENDIF |
---|
| 492 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:SET_GFL_ATTR',1,ZHOOK_HANDLE) |
---|
| 493 | |
---|
| 494 | ! ------------------------------------------------------------------- |
---|
| 495 | END SUBROUTINE SET_GFL_ATTR |
---|
| 496 | |
---|
| 497 | !========================================================================= |
---|
| 498 | |
---|
| 499 | SUBROUTINE PRINT_GFL |
---|
| 500 | |
---|
| 501 | !**** *PRINT_GFL* - Print GFL attributes |
---|
| 502 | |
---|
| 503 | ! ------------------------------------------------------------------- |
---|
| 504 | |
---|
| 505 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 506 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:PRINT_GFL',0,ZHOOK_HANDLE) |
---|
| 507 | WRITE(NULOUT,*) ' ---- GFL COMPONENT ATTRIBUTES ----' |
---|
| 508 | IF(ASSOCIATED(YLASTGFLC)) THEN |
---|
| 509 | YPTRC=>YLASTGFLC |
---|
| 510 | DO |
---|
| 511 | WRITE(NULOUT,*) ' GFL COMPONENT DEFINED - NAME=',& |
---|
| 512 | & YPTRC%CNAME,' GRIBCODE=', YPTRC%IGRBCODE |
---|
| 513 | WRITE(NULOUT,*)' LGP=',YPTRC%LGP,' NREQIN=',YPTRC%NREQIN, & |
---|
| 514 | & ' LREQOUT=',YPTRC%LREQOUT,' REFVALI=',YPTRC%REFVALI, & |
---|
| 515 | & ' LCDERS=', YPTRC%LCDERS,' LADV=',YPTRC%LADV, & |
---|
| 516 | & ' LPHY=',YPTRC%LPHY,' LPT=',YPTRC%LPT,' LPC=',YPTRC%LPC |
---|
| 517 | WRITE(NULOUT,*)' LADJUST0=',YPTRC%LADJUST0,' LADJUST1=',YPTRC%LADJUST1,& |
---|
| 518 | & ' NCOUPLING=',YPTRC%NCOUPLING,' REFVALC=',YPTRC%REFVALC,& |
---|
| 519 | & ' LBIPER=',YPTRC%LBIPER |
---|
| 520 | WRITE(NULOUT,*)' LTRAJIO=',YPTRC%LTRAJIO,' LGPINGP=',YPTRC%LGPINGP |
---|
| 521 | WRITE(NULOUT,*)' CSLINT=',YPTRC%CSLINT |
---|
| 522 | WRITE(NULOUT,*)'LTHERMACT=',YPTRC%LTHERMACT,& |
---|
| 523 | & ' R=',YPTRC%R,' RCP=',YPTRC%RCP |
---|
| 524 | WRITE(NULOUT,*)' MP=',YPTRC%MP,' MPL=',YPTRC%MPL,& |
---|
| 525 | & ' MPM=',YPTRC%MPM,' MP9=',YPTRC%MP9,' MP1=',YPTRC%MP1,& |
---|
| 526 | & ' MP5=',YPTRC%MP5,' MP5L=',YPTRC%MP5L,' MP5M=',YPTRC%MP5M, & |
---|
| 527 | & ' MPSLP=',YPTRC%MPSLP,' MPSP=',YPTRC%MPSP,& |
---|
| 528 | & ' MPPT=',YPTRC%MPPT, ' MPPC=',YPTRC%MPPC |
---|
| 529 | IF(.NOT.ASSOCIATED(YPTRC%PREVIOUS)) EXIT |
---|
| 530 | YPTRC=>YPTRC%PREVIOUS |
---|
| 531 | ENDDO |
---|
| 532 | ENDIF |
---|
| 533 | |
---|
| 534 | WRITE(NULOUT,*) ' ---- YGFL ATTRIBUTES ----' |
---|
| 535 | WRITE(NULOUT,*) ' YGFL%NUMFLDS=',YGFL%NUMFLDS,& |
---|
| 536 | & ' YGFL%NUMSPFLDS=',YGFL%NUMSPFLDS,' YGFL%NUMGPFLDS=',YGFL%NUMGPFLDS,& |
---|
| 537 | & ' YGFL%NDERS=',YGFL%NDERS,' YGFL%NUMFLDSPT=',YGFL%NUMFLDSPT,& |
---|
| 538 | & ' YGFL%NUMFLDSPC=',YGFL%NUMFLDSPC |
---|
| 539 | WRITE(NULOUT,*) ' YGFL%NUMFLDS_SL1=',YGFL%NUMFLDS_SL1 |
---|
| 540 | WRITE(NULOUT,*) ' YGFL%NDIM=',YGFL%NDIM,' YGFL%NDIM0=',YGFL%NDIM0,& |
---|
| 541 | & ' YGFL%NDIM9=',YGFL%NDIM9,' YGFL%NDIM1=',YGFL%NDIM1,& |
---|
| 542 | & ' YGFL%NDIM5=',YGFL%NDIM5,' YGFL%NDIMSLP=',YGFL%NDIMSLP,& |
---|
| 543 | & ' YGFL%NDIMPT=',YGFL%NDIMPT,' YGFL%NDIMPC=',YGFL%NDIMPC |
---|
| 544 | !!$WRITE(NULOUT,*) ' YGFL%CNAMES=',YGFL%CNAMES(1:YGFL%NUMFLDS) |
---|
| 545 | !!$WRITE(NULOUT,*) ' YGFL%IGRBCODE=',YGFL%IGRBCODE(1:YGFL%NUMFLDS) |
---|
| 546 | !!$WRITE(NULOUT,*) ' YGFL%NREQIN=',YGFL%NREQIN(1:YGFL%NUMFLDS) |
---|
| 547 | !!$WRITE(NULOUT,*) ' YGFL%REFVALI=',YGFL%REFVALI(1:YGFL%NUMFLDS) |
---|
| 548 | !!$WRITE(NULOUT,*) ' YGFL%LREQOUT=',YGFL%LREQOUT(1:YGFL%NUMFLDS) |
---|
| 549 | !!$WRITE(NULOUT,*) ' YGFL%LADV=',YGFL%LADV(1:YGFL%NUMFLDS) |
---|
| 550 | !!$WRITE(NULOUT,*) ' YGFL%CSLINT=',YGFL%CSLINT(1:YGFL%NUMFLDS) |
---|
| 551 | !!$WRITE(NULOUT,*) ' YGFL%MP=',YGFL%MP(1:YGFL%NUMFLDS) |
---|
| 552 | !!$WRITE(NULOUT,*) ' YGFL%LSP=',YGFL%LSP(1:YGFL%NUMFLDS) |
---|
| 553 | !!$WRITE(NULOUT,*) ' YGFL%MPSP=',YGFL%MPSP(1:YGFL%NUMFLDS) |
---|
| 554 | !!$WRITE(NULOUT,*) ' YGFL%LCDERS=',YGFL%LCDERS(1:YGFL%NUMFLDS) |
---|
| 555 | !!$WRITE(NULOUT,*) ' YGFL%LTRAJIO=',YGFL%LTRAJIO(1:YGFL%NUMFLDS) |
---|
| 556 | !!$WRITE(NULOUT,*) ' YGFL%MPL=',YGFL%MPL(1:YGFL%NUMFLDS) |
---|
| 557 | !!$WRITE(NULOUT,*) ' YGFL%MPM=',YGFL%MPM(1:YGFL%NUMFLDS) |
---|
| 558 | !!$WRITE(NULOUT,*) ' YGFL%LT9=',YGFL%LT9(1:YGFL%NUMFLDS) |
---|
| 559 | !!$WRITE(NULOUT,*) ' YGFL%MP9=',YGFL%MP9(1:YGFL%NUMFLDS) |
---|
| 560 | !!$WRITE(NULOUT,*) ' YGFL%LT1=',YGFL%LT1(1:YGFL%NUMFLDS) |
---|
| 561 | !!$WRITE(NULOUT,*) ' YGFL%MP1=',YGFL%MP1(1:YGFL%NUMFLDS) |
---|
| 562 | !!$WRITE(NULOUT,*) ' YGFL%LT5=',YGFL%LT5(1:YGFL%NUMFLDS) |
---|
| 563 | !!$WRITE(NULOUT,*) ' YGFL%MP5=',YGFL%MP5(1:YGFL%NUMFLDS) |
---|
| 564 | !!$WRITE(NULOUT,*) ' YGFL%MP5L=',YGFL%MP5L(1:YGFL%NUMFLDS) |
---|
| 565 | !!$WRITE(NULOUT,*) ' YGFL%MP5M=',YGFL%MP5M(1:YGFL%NUMFLDS) |
---|
| 566 | !!$WRITE(NULOUT,*) ' YGFL%LPHY=',YGFL%LPHY(1:YGFL%NUMFLDS) |
---|
| 567 | !!$WRITE(NULOUT,*) ' YGFL%MPSLP=',YGFL%MPSLP(1:YGFL%NUMFLDS) |
---|
| 568 | !!$WRITE(NULOUT,*) ' YGFL%LPT=',YGFL%LPT(1:YGFL%NUMFLDS) |
---|
| 569 | !!$WRITE(NULOUT,*) ' YGFL%MPPT=',YGFL%MPPT(1:YGFL%NUMFLDS) |
---|
| 570 | !!$WRITE(NULOUT,*) ' YGFL%LPC=',YGFL%LPC(1:YGFL%NUMFLDS) |
---|
| 571 | !!$WRITE(NULOUT,*) ' YGFL%MPPC=',YGFL%MPPC(1:YGFL%NUMFLDS) |
---|
| 572 | !!$WRITE(NULOUT,*) ' YGFL%LADJUST0=',YGFL%LADJUST0(1:YGFL%NUMFLDS) |
---|
| 573 | !!$WRITE(NULOUT,*) ' YGFL%LADJUST1=',YGFL%LADJUST1(1:YGFL%NUMFLDS) |
---|
| 574 | !!$WRITE(NULOUT,*) ' YGFL%NCOUPLING=',YGFL%NCOUPLING(1:YGFL%NUMFLDS) |
---|
| 575 | !!$WRITE(NULOUT,*) ' YGFL%REFVALC=',YGFL%REFVALC(1:YGFL%NUMFLDS) |
---|
| 576 | !!$WRITE(NULOUT,*) ' YGFL%LBIPER=',YGFL%LBIPER(1:YGFL%NUMFLDS) |
---|
| 577 | WRITE(NULOUT,*) ' --------------------------------------------' |
---|
| 578 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:PRINT_GFL',1,ZHOOK_HANDLE) |
---|
| 579 | END SUBROUTINE PRINT_GFL |
---|
| 580 | |
---|
| 581 | !========================================================================= |
---|
| 582 | |
---|
| 583 | !SUBROUTINE DEACT_CLOUD_GFL ! commente par MPL 10.12.08 (et REACT_CLOUD_GFL) |
---|
| 584 | ! |
---|
| 585 | !**** *DEACT_CLOUD_GFL* Deactivate prognostic cloud variables |
---|
| 586 | ! |
---|
| 587 | ! ------------------------------------------------------------------ |
---|
| 588 | ! |
---|
| 589 | !INTEGER(KIND=JPIM) :: JGFL |
---|
| 590 | !REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 591 | ! |
---|
| 592 | !#include "suslb.intfb.h" |
---|
| 593 | ! |
---|
| 594 | !IF (LHOOK) CALL DR_HOOK('GFL_SUBS:DEACT_CLOUD_GFL',0,ZHOOK_HANDLE) |
---|
| 595 | ! |
---|
| 596 | !IF (.NOT.L_CLD_DEACT .AND. & |
---|
| 597 | ! & (YL%LACTIVE .OR. YI%LACTIVE .OR. & |
---|
| 598 | ! & YR%LACTIVE .OR. YS%LACTIVE .OR. YA%LACTIVE .OR. YCPF%LACTIVE ) ) THEN |
---|
| 599 | ! CALL COPY_GFLC_GFLC(YL_SAVE,YL) |
---|
| 600 | ! CALL COPY_GFLC_GFLC(YI_SAVE,YI) |
---|
| 601 | ! CALL COPY_GFLC_GFLC(YR_SAVE,YR) |
---|
| 602 | ! CALL COPY_GFLC_GFLC(YS_SAVE,YS) |
---|
| 603 | ! CALL COPY_GFLC_GFLC(YA_SAVE,YA) |
---|
| 604 | ! CALL COPY_GFLC_GFLC(YCPF_SAVE,YCPF) |
---|
| 605 | ! |
---|
| 606 | ! IF( .NOT. LENCLD2) THEN |
---|
| 607 | ! IF (YL%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 608 | ! IF (YI%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 609 | ! IF (YR%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 610 | ! IF (YS%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 611 | ! IF (YA%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 612 | ! IF (YCPF%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS-1 |
---|
| 613 | ! |
---|
| 614 | ! IF (YL%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 615 | ! IF (YI%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 616 | ! IF (YR%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 617 | ! IF (YS%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 618 | ! IF (YA%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 619 | ! IF (YCPF%LT5) YGFL%NUMFLDS5=YGFL%NUMFLDS5-1 |
---|
| 620 | ! |
---|
| 621 | ! CALL FALSIFY_GFLC(YL) |
---|
| 622 | ! CALL FALSIFY_GFLC(YI) |
---|
| 623 | ! CALL FALSIFY_GFLC(YR) |
---|
| 624 | ! CALL FALSIFY_GFLC(YS) |
---|
| 625 | ! CALL FALSIFY_GFLC(YA) |
---|
| 626 | ! CALL FALSIFY_GFLC(YCPF) |
---|
| 627 | ! ELSE |
---|
| 628 | ! CALL NOADVECT_GFLC(YL) |
---|
| 629 | ! CALL NOADVECT_GFLC(YI) |
---|
| 630 | ! CALL NOADVECT_GFLC(YR) |
---|
| 631 | ! CALL NOADVECT_GFLC(YS) |
---|
| 632 | ! CALL NOADVECT_GFLC(YA) |
---|
| 633 | ! CALL NOADVECT_GFLC(YCPF) |
---|
| 634 | ! ENDIF |
---|
| 635 | ! YGFL%NUMFLDS_SL1 = 0 |
---|
| 636 | ! DO JGFL=1,YGFL%NUMFLDS |
---|
| 637 | ! YGFLC(JGFL)%MP_SL1 = -HUGE(JPGFL) |
---|
| 638 | ! IF(YGFLC(JGFL)%LADV) THEN |
---|
| 639 | ! YGFL%NUMFLDS_SL1 = YGFL%NUMFLDS_SL1+1 |
---|
| 640 | ! YGFLC(JGFL)%MP_SL1 = YGFL%NUMFLDS_SL1 |
---|
| 641 | ! YGFLC(JGFL)%MP_SLX = (YGFLC(JGFL)%MP_SL1-1)*(NFLEVG+2*NFLSUL) |
---|
| 642 | ! ENDIF |
---|
| 643 | ! ENDDO |
---|
| 644 | ! CALL SUSLB |
---|
| 645 | ! |
---|
| 646 | ! L_CLD_DEACT=.TRUE. |
---|
| 647 | ! WRITE(NULOUT,*)' CLOUD FIELDS DE-ACTIVATAD, YGFL%NUMGPFLDS=', & |
---|
| 648 | ! & YGFL%NUMGPFLDS,' YGFL%NUMFLDS_SL1=', YGFL%NUMFLDS_SL1 |
---|
| 649 | !ENDIF |
---|
| 650 | ! |
---|
| 651 | !IF (LHOOK) CALL DR_HOOK('GFL_SUBS:DEACT_CLOUD_GFL',1,ZHOOK_HANDLE) |
---|
| 652 | ! |
---|
| 653 | !END SUBROUTINE DEACT_CLOUD_GFL |
---|
| 654 | ! |
---|
| 655 | !!========================================================================= |
---|
| 656 | ! |
---|
| 657 | !SUBROUTINE REACT_CLOUD_GFL |
---|
| 658 | !!**** *REACT_CLOUD_GFL* Reactivate prognostic cloud variables |
---|
| 659 | ! |
---|
| 660 | !INTEGER(KIND=JPIM) :: JGFL |
---|
| 661 | !REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 662 | !LOGICAL :: LLGPI,LLGPL,LLGPA |
---|
| 663 | !#include "suslb.intfb.h" |
---|
| 664 | !! ------------------------------------------------------------------ |
---|
| 665 | !IF (LHOOK) CALL DR_HOOK('GFL_SUBS:REACT_CLOUD_GFL',0,ZHOOK_HANDLE) |
---|
| 666 | ! |
---|
| 667 | !IF (L_CLD_DEACT) THEN |
---|
| 668 | ! LLGPL = YL%LGP |
---|
| 669 | ! LLGPI = YI%LGP |
---|
| 670 | ! LLGPA = YA%LGP |
---|
| 671 | ! |
---|
| 672 | ! CALL COPY_GFLC_GFLC(YL,YL_SAVE) |
---|
| 673 | ! CALL COPY_GFLC_GFLC(YI,YI_SAVE) |
---|
| 674 | ! CALL COPY_GFLC_GFLC(YA,YA_SAVE) |
---|
| 675 | ! |
---|
| 676 | ! IF (.NOT. LLGPL .AND. YL%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS+1 |
---|
| 677 | ! IF (.NOT. LLGPI .AND. YI%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS+1 |
---|
| 678 | ! IF (.NOT. LLGPA .AND. YA%LGP) YGFL%NUMGPFLDS=YGFL%NUMGPFLDS+1 |
---|
| 679 | ! |
---|
| 680 | ! YGFL%NUMFLDS_SL1 = 0 |
---|
| 681 | ! DO JGFL=1,YGFL%NUMFLDS |
---|
| 682 | ! YGFLC(JGFL)%MP_SL1 = -HUGE(JPGFL) |
---|
| 683 | ! IF(YGFLC(JGFL)%LADV) THEN |
---|
| 684 | ! YGFL%NUMFLDS_SL1 = YGFL%NUMFLDS_SL1+1 |
---|
| 685 | ! YGFLC(JGFL)%MP_SL1 = YGFL%NUMFLDS_SL1 |
---|
| 686 | ! YGFLC(JGFL)%MP_SLX = (YGFLC(JGFL)%MP_SL1-1)*(NFLEVG+2*NFLSUL) |
---|
| 687 | ! ENDIF |
---|
| 688 | ! ENDDO |
---|
| 689 | ! CALL SUSLB |
---|
| 690 | ! |
---|
| 691 | ! L_CLD_DEACT=.FALSE. |
---|
| 692 | ! WRITE(NULOUT,*)' CLOUD FIELDS RE-ACTIVATAD, YGFL%NUMGPFLDS=', & |
---|
| 693 | ! & YGFL%NUMGPFLDS,' YGFL%NUMFLDS_SL1=', YGFL%NUMFLDS_SL1 |
---|
| 694 | !ENDIF |
---|
| 695 | ! |
---|
| 696 | !IF (LHOOK) CALL DR_HOOK('GFL_SUBS:REACT_CLOUD_GFL',1,ZHOOK_HANDLE) |
---|
| 697 | ! |
---|
| 698 | !! ------------------------------------------------------------------ |
---|
| 699 | !END SUBROUTINE REACT_CLOUD_GFL |
---|
| 700 | |
---|
| 701 | !========================================================================= |
---|
| 702 | |
---|
| 703 | SUBROUTINE FALSIFY_GFLC(YDGFLC) |
---|
| 704 | |
---|
| 705 | ! Purpose. |
---|
| 706 | ! -------- |
---|
| 707 | ! Set field descriptors to false. |
---|
| 708 | |
---|
| 709 | ! Author. |
---|
| 710 | ! ------- |
---|
| 711 | ! Y. Tremolet |
---|
| 712 | |
---|
| 713 | ! Modifications. |
---|
| 714 | ! -------------- |
---|
| 715 | ! Original : 2004-03-12 |
---|
| 716 | !------------------------------------------------------------------------- |
---|
| 717 | |
---|
| 718 | TYPE(TYPE_GFL_COMP),INTENT(INOUT) :: YDGFLC |
---|
| 719 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 720 | |
---|
| 721 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:FALSIFY_GFLC',0,ZHOOK_HANDLE) |
---|
| 722 | YDGFLC%CNAME = '' |
---|
| 723 | YDGFLC%IGRBCODE = -HUGE(JPGFL) |
---|
| 724 | YDGFLC%LADV = .FALSE. |
---|
| 725 | YDGFLC%NREQIN = 0 |
---|
| 726 | YDGFLC%REFVALI = 0.0_JPRB |
---|
| 727 | YDGFLC%LREQOUT = .FALSE. |
---|
| 728 | YDGFLC%LGPINGP = .TRUE. |
---|
| 729 | YDGFLC%LTRAJIO = .FALSE. |
---|
| 730 | YDGFLC%LGP = .FALSE. |
---|
| 731 | YDGFLC%LSP = .FALSE. |
---|
| 732 | YDGFLC%LCDERS = .FALSE. |
---|
| 733 | YDGFLC%LACTIVE = .FALSE. |
---|
| 734 | YDGFLC%LTHERMACT = .FALSE. |
---|
| 735 | YDGFLC%LT9 = .FALSE. |
---|
| 736 | YDGFLC%LT1 = .FALSE. |
---|
| 737 | YDGFLC%LT5 = .FALSE. |
---|
| 738 | YDGFLC%LPHY = .FALSE. |
---|
| 739 | YDGFLC%LPT = .FALSE. |
---|
| 740 | YDGFLC%LPC = .FALSE. |
---|
| 741 | YDGFLC%LADJUST0 = .FALSE. |
---|
| 742 | YDGFLC%LADJUST1 = .FALSE. |
---|
| 743 | YDGFLC%NCOUPLING = 0 |
---|
| 744 | YDGFLC%REFVALC = 0.0_JPRB |
---|
| 745 | YDGFLC%LBIPER = .FALSE. |
---|
| 746 | YDGFLC%CSLINT = '' |
---|
| 747 | YDGFLC%R = 0.0_JPRB |
---|
| 748 | YDGFLC%RCP = 0.0_JPRB |
---|
| 749 | !yt YDGFLC%MP = -HUGE(JPGFL) |
---|
| 750 | !yt YDGFLC%MPL = -HUGE(JPGFL) |
---|
| 751 | !yt YDGFLC%MPM = -HUGE(JPGFL) |
---|
| 752 | !yt YDGFLC%MP9 = -HUGE(JPGFL) |
---|
| 753 | !yt YDGFLC%MP1 = -HUGE(JPGFL) |
---|
| 754 | !yt YDGFLC%MP5 = -HUGE(JPGFL) |
---|
| 755 | !yt YDGFLC%MP5L = -HUGE(JPGFL) |
---|
| 756 | !yt YDGFLC%MP5M = -HUGE(JPGFL) |
---|
| 757 | !yt YDGFLC%MPSLP = -HUGE(JPGFL) |
---|
| 758 | !yt YDGFLC%MPSP = -HUGE(JPGFL) |
---|
| 759 | !yt YDGFLC%MP_SPL = -HUGE(JPGFL) |
---|
| 760 | !yt;-) YDGFLC%MPPT = -HUGE(JPGFL) |
---|
| 761 | !yt;-) YDGFLC%MPPC = -HUGE(JPGFL) |
---|
| 762 | !yt NULLIFY(YDGFLC%PREVIOUS) |
---|
| 763 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:FALSIFY_GFLC',1,ZHOOK_HANDLE) |
---|
| 764 | |
---|
| 765 | END SUBROUTINE FALSIFY_GFLC |
---|
| 766 | !========================================================================= |
---|
| 767 | |
---|
| 768 | SUBROUTINE NOADVECT_GFLC(YDGFLC) |
---|
| 769 | |
---|
| 770 | ! Purpose. |
---|
| 771 | ! -------- |
---|
| 772 | ! Switch off advection ect. |
---|
| 773 | |
---|
| 774 | ! Author. |
---|
| 775 | ! ------- |
---|
| 776 | ! Y. Tremolet |
---|
| 777 | |
---|
| 778 | ! Modifications. |
---|
| 779 | ! -------------- |
---|
| 780 | ! Original : 2004-03-12 |
---|
| 781 | !------------------------------------------------------------------------- |
---|
| 782 | |
---|
| 783 | TYPE(TYPE_GFL_COMP),INTENT(INOUT) :: YDGFLC |
---|
| 784 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 785 | |
---|
| 786 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:NOADVECT_GFLC',0,ZHOOK_HANDLE) |
---|
| 787 | YDGFLC%LADV = .FALSE. |
---|
| 788 | YDGFLC%LCDERS = .FALSE. |
---|
| 789 | YDGFLC%LT1 = .FALSE. |
---|
| 790 | YDGFLC%LT5 = .FALSE. |
---|
| 791 | YDGFLC%LPHY = .FALSE. |
---|
| 792 | YDGFLC%LPT = .FALSE. |
---|
| 793 | YDGFLC%LADJUST0 = .FALSE. |
---|
| 794 | YDGFLC%LADJUST1 = .FALSE. |
---|
| 795 | YDGFLC%LBIPER = .FALSE. |
---|
| 796 | YDGFLC%CSLINT = '' |
---|
| 797 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:NOADVECT_GFLC',1,ZHOOK_HANDLE) |
---|
| 798 | |
---|
| 799 | END SUBROUTINE NOADVECT_GFLC |
---|
| 800 | |
---|
| 801 | !========================================================================= |
---|
| 802 | |
---|
| 803 | SUBROUTINE COPY_GFLC_GFLC(YDGFLC1,YDGFLC2) |
---|
| 804 | |
---|
| 805 | ! Purpose. |
---|
| 806 | ! -------- |
---|
| 807 | ! Copy field descriptors. |
---|
| 808 | |
---|
| 809 | ! Author. |
---|
| 810 | ! ------- |
---|
| 811 | ! Y. Tremolet |
---|
| 812 | |
---|
| 813 | ! Modifications. |
---|
| 814 | ! -------------- |
---|
| 815 | ! Original : 2004-03-12 |
---|
| 816 | !------------------------------------------------------------------------- |
---|
| 817 | |
---|
| 818 | TYPE (TYPE_GFL_COMP), INTENT(INOUT) :: YDGFLC1 |
---|
| 819 | TYPE (TYPE_GFL_COMP), INTENT(IN) :: YDGFLC2 |
---|
| 820 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 821 | |
---|
| 822 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:COPY_GFLC_GFLC',0,ZHOOK_HANDLE) |
---|
| 823 | YDGFLC1%CNAME = YDGFLC2%CNAME |
---|
| 824 | YDGFLC1%IGRBCODE = YDGFLC2%IGRBCODE |
---|
| 825 | YDGFLC1%LADV = YDGFLC2%LADV |
---|
| 826 | YDGFLC1%NREQIN = YDGFLC2%NREQIN |
---|
| 827 | YDGFLC1%REFVALI = YDGFLC2%REFVALI |
---|
| 828 | YDGFLC1%LREQOUT = YDGFLC2%LREQOUT |
---|
| 829 | YDGFLC1%LGPINGP = YDGFLC2%LGPINGP |
---|
| 830 | YDGFLC1%LTRAJIO = YDGFLC2%LTRAJIO |
---|
| 831 | YDGFLC1%LGP = YDGFLC2%LGP |
---|
| 832 | YDGFLC1%LSP = YDGFLC2%LSP |
---|
| 833 | YDGFLC1%LPT = YDGFLC2%LPT |
---|
| 834 | YDGFLC1%LPC = YDGFLC2%LPC |
---|
| 835 | YDGFLC1%LCDERS = YDGFLC2%LCDERS |
---|
| 836 | YDGFLC1%LACTIVE = YDGFLC2%LACTIVE |
---|
| 837 | YDGFLC1%LTHERMACT = YDGFLC2%LTHERMACT |
---|
| 838 | YDGFLC1%LT9 = YDGFLC2%LT9 |
---|
| 839 | YDGFLC1%LT1 = YDGFLC2%LT1 |
---|
| 840 | YDGFLC1%LT5 = YDGFLC2%LT5 |
---|
| 841 | YDGFLC1%LPHY = YDGFLC2%LPHY |
---|
| 842 | YDGFLC1%LADJUST0 = YDGFLC2%LADJUST0 |
---|
| 843 | YDGFLC1%LADJUST1 = YDGFLC2%LADJUST1 |
---|
| 844 | YDGFLC1%NCOUPLING = YDGFLC2%NCOUPLING |
---|
| 845 | YDGFLC1%REFVALC = YDGFLC2%REFVALC |
---|
| 846 | YDGFLC1%LBIPER = YDGFLC2%LBIPER |
---|
| 847 | YDGFLC1%CSLINT = YDGFLC2%CSLINT |
---|
| 848 | YDGFLC1%R = YDGFLC2%R |
---|
| 849 | YDGFLC1%RCP = YDGFLC2%RCP |
---|
| 850 | YDGFLC1%MP = YDGFLC2%MP |
---|
| 851 | YDGFLC1%MPL = YDGFLC2%MPL |
---|
| 852 | YDGFLC1%MPM = YDGFLC2%MPM |
---|
| 853 | YDGFLC1%MP9 = YDGFLC2%MP9 |
---|
| 854 | YDGFLC1%MP1 = YDGFLC2%MP1 |
---|
| 855 | YDGFLC1%MP5 = YDGFLC2%MP5 |
---|
| 856 | YDGFLC1%MP5L = YDGFLC2%MP5L |
---|
| 857 | YDGFLC1%MP5M = YDGFLC2%MP5M |
---|
| 858 | YDGFLC1%MPSLP = YDGFLC2%MPSLP |
---|
| 859 | YDGFLC1%MP_SPL = YDGFLC2%MP_SPL |
---|
| 860 | YDGFLC1%MP_SL1 = YDGFLC2%MP_SL1 |
---|
| 861 | YDGFLC1%MPSP = YDGFLC2%MPSP |
---|
| 862 | YDGFLC1%MPPT = YDGFLC2%MPPT |
---|
| 863 | YDGFLC1%MPPC = YDGFLC2%MPPC |
---|
| 864 | !yt YDGFLC1%PREVIOUS => YDGFLC2%PREVIOUS |
---|
| 865 | IF (LHOOK) CALL DR_HOOK('GFL_SUBS:COPY_GFLC_GFLC',1,ZHOOK_HANDLE) |
---|
| 866 | |
---|
| 867 | END SUBROUTINE COPY_GFLC_GFLC |
---|
| 868 | |
---|
| 869 | !========================================================================= |
---|
| 870 | |
---|
| 871 | END MODULE GFL_SUBS |
---|