[1989] | 1 | MODULE SURFACE_FIELDS |
---|
| 2 | |
---|
| 3 | ! Purpose. |
---|
| 4 | ! -------- |
---|
| 5 | |
---|
| 6 | ! SURFACE_FIELDS contains data structures and manipulation routines |
---|
| 7 | ! for the surface (physics) fields in the IFS |
---|
| 8 | |
---|
| 9 | ! This module is a mix of declarations, type definitions and |
---|
| 10 | ! subroutines linked with surface fields. There are four parts: |
---|
| 11 | ! 1/ Declaration of dimensions (including some parameter variables). |
---|
| 12 | ! 2/ Definition of types. |
---|
| 13 | ! 3/ Declarations: |
---|
| 14 | ! Declaration of variables SP_[group], YSP_[group]D, YSP_[group] |
---|
| 15 | ! (prognostic surface fields). |
---|
| 16 | ! Declaration of variables SD_[group], YSD_[group]D, YSD_[group] |
---|
| 17 | ! (diagnostic surface fields). |
---|
| 18 | ! 4/ Some routines linked to the surface data flow: |
---|
| 19 | ! * INI_SFLP3: Initialize 3-D surface field group |
---|
| 20 | ! * SETUP_SFLP3: Setup 3-D surface field |
---|
| 21 | ! * INI_SFLP2: Initialize 2-D surface field group |
---|
| 22 | ! * SETUP_SFLP2: Setup 2-D surface field |
---|
| 23 | ! * GPPOPER: Operations on prognostic surface fields |
---|
| 24 | ! * GPOPER: Operations on ALL surface groups |
---|
| 25 | ! * GPOPER_2: Operations on 2-D surface groups |
---|
| 26 | ! * GPOPER_3: Operations on 3-D surface groups |
---|
| 27 | ! * SURF_STORE: Store all surface fields |
---|
| 28 | ! * SURF_RESTORE: Restore all surface fields |
---|
| 29 | ! * ALLO_SURF: Allocate surface field arrays |
---|
| 30 | ! * DEALLO_SURF: Deallocate surface field arrays |
---|
| 31 | |
---|
| 32 | ! Author. |
---|
| 33 | ! ------- |
---|
| 34 | ! Mats Hamrud(ECMWF) |
---|
| 35 | |
---|
| 36 | ! Modifications. |
---|
| 37 | ! -------------- |
---|
| 38 | ! Original : 2006-07-01 |
---|
| 39 | ! Modifications: |
---|
| 40 | ! K. Yessad (25 Oct 2006): rephase ALARO0 contribution. |
---|
| 41 | ! K. Yessad (26 Oct 2006): add missing comments. |
---|
| 42 | |
---|
| 43 | !------------------------------------------------------------------------- |
---|
| 44 | |
---|
| 45 | USE PARKIND1 ,ONLY : JPIM ,JPRB |
---|
| 46 | USE YOMDIM ,ONLY : NPROMA, NGPBLKS, NUNDEFLD |
---|
| 47 | USE YOMLUN ,ONLY : NULOUT, NULERR |
---|
| 48 | USE YOMCT0 ,ONLY : LTWOTL |
---|
| 49 | USE YOMDYN , ONLY : REPSP1 |
---|
| 50 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK |
---|
| 51 | IMPLICIT NONE |
---|
| 52 | SAVE |
---|
| 53 | |
---|
| 54 | !#include "abor1.intfb.h" |
---|
| 55 | ! ------------------------------------------------------------------------- |
---|
| 56 | |
---|
| 57 | INTEGER(KIND=JPIM), PARAMETER :: JPMAXSFLDS=100 ! Max number of fields in individual group |
---|
| 58 | INTEGER(KIND=JPIM), PARAMETER :: JPMAXSTRAJ=100 ! Dimension of NSTRAJGRIB |
---|
| 59 | INTEGER(KIND=JPIM) :: NSURF=0 ! Number of surf var. |
---|
| 60 | INTEGER(KIND=JPIM) :: NSURFL=0 ! Number of surf flds (fields*levels) |
---|
| 61 | INTEGER(KIND=JPIM) :: NDIMSURF=0 ! Total of surf var (includes timelevels etc) |
---|
| 62 | INTEGER(KIND=JPIM) :: NDIMSURFL=0 ! Total dimension of all surface variables |
---|
| 63 | INTEGER(KIND=JPIM) :: NPROGSURF=0 ! Number of prognostic surf var. |
---|
| 64 | INTEGER(KIND=JPIM) :: NPROGSURFL=0 ! Number of prognostic surf flds (fields*levels) |
---|
| 65 | INTEGER(KIND=JPIM) :: NOFFTRAJ ! Offset in surf trajectory |
---|
| 66 | INTEGER(KIND=JPIM) :: NOFFTRAJ_CST ! Offset in "constant" surf trajectory |
---|
| 67 | INTEGER(KIND=JPIM) :: NPTRSURF ! Used by routine GPOPER |
---|
| 68 | INTEGER(KIND=JPIM) :: NSTRAJGRIB(JPMAXSTRAJ) ! Used in trajectory setup |
---|
| 69 | |
---|
| 70 | REAL(KIND=JPRB),ALLOCATABLE :: SURF_STORE_ARRAY(:,:,:) ! Backup array for surf (see routineSURF_STORE ) |
---|
| 71 | ! General type defintions |
---|
| 72 | |
---|
| 73 | ! 2D surface field structure |
---|
| 74 | TYPE TYPE_SURF_MTL_2D |
---|
| 75 | INTEGER(KIND=JPIM) :: MP ! Basic field pointer |
---|
| 76 | INTEGER(KIND=JPIM) :: MP0 ! Field pointer timelevel 0 (prognostic fields) |
---|
| 77 | INTEGER(KIND=JPIM) :: MP9 ! Field pointer timelevel -1 (prognostic fields) |
---|
| 78 | INTEGER(KIND=JPIM) :: MP1 ! Field pointer timelevel +1 (prognostic fields) |
---|
| 79 | INTEGER(KIND=JPIM) :: MP5 ! Field pointer trajectory |
---|
| 80 | INTEGER(KIND=JPIM) :: IGRBCODE ! GRIB parameter code (default: -999) |
---|
| 81 | CHARACTER(LEN=16) :: CNAME ! ARPEGE field name (default: all spaces) |
---|
| 82 | REAL(KIND=JPRB) :: REFVALI ! Default value (default: 0.0) |
---|
| 83 | INTEGER(KIND=JPIM) :: NREQIN ! -1 - initial value from default (default) |
---|
| 84 | ! +1 - initial value from reading file |
---|
| 85 | ! 0 - no initial value |
---|
| 86 | INTEGER(KIND=JPIM) :: ITRAJ ! 0 not in trajectory (default) |
---|
| 87 | ! 1 in trajectory |
---|
| 88 | ! 2 in "constant" trajectory |
---|
| 89 | END TYPE TYPE_SURF_MTL_2D |
---|
| 90 | |
---|
| 91 | ! 3D surface field structure |
---|
| 92 | TYPE TYPE_SURF_MTL_3D |
---|
| 93 | INTEGER(KIND=JPIM) :: MP ! Basic field pointer |
---|
| 94 | INTEGER(KIND=JPIM) :: MP0 ! Field pointer timelevel 0 (prognostic fields) |
---|
| 95 | INTEGER(KIND=JPIM) :: MP9 ! Field pointer timelevel -1 (prognostic fields) |
---|
| 96 | INTEGER(KIND=JPIM) :: MP1 ! Field pointer timelevel +1 (prognostic fields) |
---|
| 97 | INTEGER(KIND=JPIM) :: MP5 ! Field pointer trajectory |
---|
| 98 | INTEGER(KIND=JPIM),POINTER :: IGRBCODE(:) ! GRIB parameter code (default: -999) |
---|
| 99 | CHARACTER(LEN=16) ,POINTER :: CNAME(:) ! ARPEGE field name (default: all spaces) |
---|
| 100 | REAL(KIND=JPRB) ,POINTER :: REFVALI(:) ! Default value (default: 0.0) |
---|
| 101 | INTEGER(KIND=JPIM),POINTER :: NREQIN(:) ! -1 - initial value from default (default) |
---|
| 102 | ! +1 - initial value from reading file |
---|
| 103 | ! 0 - no initial value |
---|
| 104 | INTEGER(KIND=JPIM) :: ITRAJ ! 0 not in trajectory (default) |
---|
| 105 | ! 1 in trajectory |
---|
| 106 | ! 2 in "constant" trajectory |
---|
| 107 | END TYPE TYPE_SURF_MTL_3D |
---|
| 108 | |
---|
| 109 | ! Descriptor pertaining to group |
---|
| 110 | TYPE TYPE_SURF_GEN |
---|
| 111 | INTEGER(KIND=JPIM) :: NUMFLDS ! Number of field in group |
---|
| 112 | INTEGER(KIND=JPIM) :: NDIM ! Field dimenion |
---|
| 113 | INTEGER(KIND=JPIM) :: NLEVS ! Number of levels (for multi level groups) |
---|
| 114 | INTEGER(KIND=JPIM) :: IPTR ! Internal use |
---|
| 115 | INTEGER(KIND=JPIM) :: IPTR5 ! Internal use |
---|
| 116 | INTEGER(KIND=JPIM) :: NDIM5 ! Dimension of trajectory array |
---|
| 117 | INTEGER(KIND=JPIM) :: NOFFTRAJ ! Internal use |
---|
| 118 | INTEGER(KIND=JPIM) :: NOFFTRAJ_CST ! Internal use |
---|
| 119 | CHARACTER(LEN=16) :: CGRPNAME ! Name of group (for prints) |
---|
| 120 | LOGICAL :: L3D ! TRUE if multi-level field (3-D) |
---|
| 121 | LOGICAL :: LMTL ! TRUE if prognostic field (multi time level) |
---|
| 122 | END TYPE TYPE_SURF_GEN |
---|
| 123 | |
---|
| 124 | ! Type descriptor for derived type for communicating with GPOPER (see below) |
---|
| 125 | TYPE TYPE_SFL_COMM |
---|
| 126 | INTEGER(KIND=JPIM) :: IGRBCODE |
---|
| 127 | LOGICAL :: L_OK |
---|
| 128 | CHARACTER(LEN=16) :: CNAME |
---|
| 129 | INTEGER(KIND=JPIM) :: IFLDNUM |
---|
| 130 | REAL(KIND=JPRB) :: VALUE |
---|
| 131 | INTEGER(KIND=JPIM) :: IPTRSURF |
---|
| 132 | INTEGER(KIND=JPIM) :: ICODES(JPMAXSFLDS) |
---|
| 133 | INTEGER(KIND=JPIM) :: ICOUNT |
---|
| 134 | END TYPE TYPE_SFL_COMM |
---|
| 135 | |
---|
| 136 | ! Group specific type definitions |
---|
| 137 | |
---|
| 138 | ! * Group SB=SOILB: soil prognostic quantities for the different reservoirs |
---|
| 139 | ! (four reservoirs at ECMWF, deep reservoir at METEO-FRANCE): |
---|
| 140 | TYPE TYPE_SFL_SOILB |
---|
| 141 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YT ! temperature |
---|
| 142 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YQ ! liquid water content |
---|
| 143 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YTL ! ice water content (for MF) |
---|
| 144 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YSB(:) |
---|
| 145 | END TYPE TYPE_SFL_SOILB |
---|
| 146 | |
---|
| 147 | ! * Group SG=SNOWG: surface snow prognostic quantities: |
---|
| 148 | TYPE TYPE_SFL_SNOWG |
---|
| 149 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YF ! content of surface snow |
---|
| 150 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YA ! snow albedo |
---|
| 151 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YR ! snow density |
---|
| 152 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YT ! total albedo (diagnostic for MF for LVGSN) |
---|
| 153 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSG(:) |
---|
| 154 | END TYPE TYPE_SFL_SNOWG |
---|
| 155 | |
---|
| 156 | ! * Group RR=RESVR: surface prognostic quantities (ECMWF) or |
---|
| 157 | ! surface + superficial reservoir prognostic quantities (MF): |
---|
| 158 | ! Remark: |
---|
| 159 | ! at ECMWF there are 4 soil reservoirs and there is a |
---|
| 160 | ! clear distinction between the soil reservoirs (group SOILB) |
---|
| 161 | ! and the surface (group RESVR); |
---|
| 162 | ! at METEO-FRANCE there is a deep reservoir (group SOILB) and a |
---|
| 163 | ! superficial reservoir (group RESVR): |
---|
| 164 | ! - there is a skin surface temperature (Ts) which is the temperature at the |
---|
| 165 | ! interface surface/superficial reservoir (and not two separate quantities |
---|
| 166 | ! for superficial reservoir and surface) |
---|
| 167 | ! - there is a skin surface water content (denoted by Wl) and a superficial |
---|
| 168 | ! reservoir water content (denoted by Ws). |
---|
| 169 | ! - there is a superficial reservoir ice content but no surface ice content. |
---|
| 170 | ! (remark k.y.: it would have been more logical to use group name |
---|
| 171 | ! RESVR for internal reservoirs and group name SOILB for surface!). |
---|
| 172 | TYPE TYPE_SFL_RESVR |
---|
| 173 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YT ! skin temperature (Ts) |
---|
| 174 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YW ! skin water content (Wskin) at ECMWF |
---|
| 175 | ! superficial reservoir water content (Ws) at MF |
---|
| 176 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YFC ! skin water content (Wl) at MF |
---|
| 177 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIC ! superficial reservoir ice |
---|
| 178 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YFP1 ! interpolated Ts for 2nd part of 927-FULLPOS |
---|
| 179 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YRR(:) |
---|
| 180 | END TYPE TYPE_SFL_RESVR |
---|
| 181 | |
---|
| 182 | ! * Group WS=WAVES: surface prognostic quantities over sea: |
---|
| 183 | TYPE TYPE_SFL_WAVES |
---|
| 184 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YWS(:) |
---|
| 185 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCHAR ! Charnock constant |
---|
| 186 | END TYPE TYPE_SFL_WAVES |
---|
| 187 | |
---|
| 188 | ! * Group EP=EXTRP: extra 3-d prognostic fields: |
---|
| 189 | TYPE TYPE_SFL_EXTRP |
---|
| 190 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YEP(:) |
---|
| 191 | END TYPE TYPE_SFL_EXTRP |
---|
| 192 | |
---|
| 193 | ! * Group X2=XTRP2: extra 2-d prognostic fields: |
---|
| 194 | ! (is used for precipitation fields in CANARI) |
---|
| 195 | TYPE TYPE_SFL_XTRP2 |
---|
| 196 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YX2(:) |
---|
| 197 | END TYPE TYPE_SFL_XTRP2 |
---|
| 198 | |
---|
| 199 | ! * Group CI=CANRI: 2-d prognostic fields for CANARI: |
---|
| 200 | TYPE TYPE_SFL_CANRI |
---|
| 201 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCI(:) |
---|
| 202 | END TYPE TYPE_SFL_CANRI |
---|
| 203 | |
---|
| 204 | ! * Group VF=VARSF: climatological/geographical diagnostic fields: |
---|
| 205 | TYPE TYPE_SFL_VARSF |
---|
| 206 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YZ0F ! gravity * surface roughness length |
---|
| 207 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALBF ! surface shortwave albedo |
---|
| 208 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YEMISF ! surface longwave emissivity |
---|
| 209 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YGETRL ! standard deviation of orography |
---|
| 210 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YITM ! land-sea mask |
---|
| 211 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVEG ! vegetation cover |
---|
| 212 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVRLAN ! anisotropy of the sub-grid scale orography |
---|
| 213 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVRLDI ! angle of the direction of orography with the x axis |
---|
| 214 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSIG ! characteristic orographic slope |
---|
| 215 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALBSF ! soil shortwave albedo |
---|
| 216 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCONT ! fraction of land |
---|
| 217 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSST ! (open) sea surface temperature |
---|
| 218 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLZ0H ! logarithm of roughness length for heat |
---|
| 219 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCVL ! low vegetation cover |
---|
| 220 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCVH ! high vegetation cover |
---|
| 221 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTVL ! low vegetation type |
---|
| 222 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTVH ! high vegetation type |
---|
| 223 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCI ! sea ice fraction |
---|
| 224 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YUCUR ! U-component of the ocean current |
---|
| 225 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVCUR ! V-component of the ocean current |
---|
| 226 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YZ0RLF ! gravity * vegetation roughness length |
---|
| 227 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCO2O ! oceanic CO2 flux |
---|
| 228 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCO2B ! biosphere CO2 flux |
---|
| 229 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCO2A ! anthropogenic CO2 flux |
---|
| 230 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSDFOR ! SD filtered orography |
---|
| 231 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALUVP ! MODIS-derived parallel albedo for shortwave radiation |
---|
| 232 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALUVD ! MODIS-derived diffuse albedo for shortwave radiation |
---|
| 233 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALNIP ! MODIS-derived parallel albedo for longwave radiation |
---|
| 234 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALNID ! MODIS-derived diffuse albedo for longwave radiation |
---|
| 235 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSF6 ! anthropogenic SF6 flux |
---|
| 236 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YFP1 ! surface orography in the 2nd part of FULLPOS-927 |
---|
| 237 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVF(:) |
---|
| 238 | END TYPE TYPE_SFL_VARSF |
---|
| 239 | |
---|
| 240 | ! * Group VP=VCLIP: deep soil diagnostic fields: |
---|
| 241 | TYPE TYPE_SFL_VCLIP |
---|
| 242 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTPC ! climatological deep layer temperature |
---|
| 243 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YWPC ! climatological deep layer moisture |
---|
| 244 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVP(:) |
---|
| 245 | END TYPE TYPE_SFL_VCLIP |
---|
| 246 | |
---|
| 247 | ! * Group VV=VCLIV: vegetation diagnostic fields: |
---|
| 248 | TYPE TYPE_SFL_VCLIV |
---|
| 249 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YARG ! silt percentage within soil |
---|
| 250 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSAB ! percentage of sand within the soil |
---|
| 251 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YD2 ! soil depth |
---|
| 252 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIVEG ! type of vegetation |
---|
| 253 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YRSMIN ! stomatal minimum resistance |
---|
| 254 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLAI ! leaf area index |
---|
| 255 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YHV ! resistance to evapotranspiration |
---|
| 256 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YZ0H ! gravity * roughness length for heat |
---|
| 257 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALS ! albedo of bare ground |
---|
| 258 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALV ! albedo of vegetation |
---|
| 259 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVV(:) |
---|
| 260 | END TYPE TYPE_SFL_VCLIV |
---|
| 261 | |
---|
| 262 | ! * Group VN=VCLIN: cloudiness diagnostic predictors: |
---|
| 263 | TYPE TYPE_SFL_VCLIN |
---|
| 264 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTOP ! index of convective cloud top |
---|
| 265 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YBAS ! index of convective cloud base |
---|
| 266 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YACPR ! averaged convective precipitaion rate |
---|
| 267 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVN(:) |
---|
| 268 | END TYPE TYPE_SFL_VCLIN |
---|
| 269 | |
---|
| 270 | ! * Group VH=VCLIH: convective cloud diagnostic fields: |
---|
| 271 | TYPE TYPE_SFL_VCLIH |
---|
| 272 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCCH ! total convective cloudiness |
---|
| 273 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSCCH ! convective cloud summit |
---|
| 274 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YBCCH ! convective cloud base |
---|
| 275 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YPBLH ! PBL height |
---|
| 276 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSPSH ! variable for prognostic convection scheme (ALARO) |
---|
| 277 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVH(:) |
---|
| 278 | END TYPE TYPE_SFL_VCLIH |
---|
| 279 | |
---|
| 280 | ! * Group VA=VCLIA: aerosol diagnostic fields: |
---|
| 281 | TYPE TYPE_SFL_VCLIA |
---|
| 282 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSEA ! aerosol: sea |
---|
| 283 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLAN ! aerosol: land |
---|
| 284 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSOO ! aerosol: soot |
---|
| 285 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YDES ! aerosol: desert |
---|
| 286 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSUL ! aerosol: sulfate |
---|
| 287 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVOL ! aerosol: volcano |
---|
| 288 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YNUD ! aerosol: nudging |
---|
| 289 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVA(:) |
---|
| 290 | END TYPE TYPE_SFL_VCLIA |
---|
| 291 | |
---|
| 292 | ! * Group VG=VCLIG: ice-coupler diagnostic fields: |
---|
| 293 | TYPE TYPE_SFL_VCLIG |
---|
| 294 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YICFR ! sea-ice fraction |
---|
| 295 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSOUP ! upward solar flux over sea-ice |
---|
| 296 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIRUP ! upward IR flux over sea-ice |
---|
| 297 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCHSS ! sensible heat over sea-ice |
---|
| 298 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YEVAP ! evaporation over sea-ice |
---|
| 299 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTAUX ! U-component of stress over sea-ice |
---|
| 300 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTAUY ! V-component of stress over sea-ice |
---|
| 301 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVG(:) |
---|
| 302 | END TYPE TYPE_SFL_VCLIG |
---|
| 303 | |
---|
| 304 | ! * Group VC=VO3ABC: A,B and C (Climatological ozone profiles) diagnostic fields: |
---|
| 305 | TYPE TYPE_SFL_VO3ABC |
---|
| 306 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YA ! A climatological ozone profile |
---|
| 307 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YB ! B climatological ozone profile |
---|
| 308 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YC ! C climatological ozone profile |
---|
| 309 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVC(:) |
---|
| 310 | END TYPE TYPE_SFL_VO3ABC |
---|
| 311 | |
---|
| 312 | ! * Group VD=VDIAG: (ECMWF) diagnostic fields: |
---|
| 313 | TYPE TYPE_SFL_VDIAG |
---|
| 314 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLSP !Large scale precipitation |
---|
| 315 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCP !Convective precipitation |
---|
| 316 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSF !Snowfall |
---|
| 317 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YBLD !Boundary layer dissipation |
---|
| 318 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSSHF !Surface sensible heat flux |
---|
| 319 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSLHF !Surface latent heat flux |
---|
| 320 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YMSL !Mean sea level pressure |
---|
| 321 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCC !Total cloud cover |
---|
| 322 | TYPE(TYPE_SURF_MTL_2D),POINTER :: Y10U !U-wind at 10 m |
---|
| 323 | TYPE(TYPE_SURF_MTL_2D),POINTER :: Y10V !V-wind at 10 m |
---|
| 324 | TYPE(TYPE_SURF_MTL_2D),POINTER :: Y2T !Temperature at 2 m |
---|
| 325 | TYPE(TYPE_SURF_MTL_2D),POINTER :: Y2D !Dewpoint temperature at 2 m |
---|
| 326 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSSR !Surface solar radiation |
---|
| 327 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSTR !Surface thermal radiation |
---|
| 328 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTSR !Top solar radiation |
---|
| 329 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTTR !Top thermal radiation |
---|
| 330 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YEWSS !Instantaneous surface U-wind stress |
---|
| 331 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YNSSS !Instantaneous surface V-wind stress |
---|
| 332 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YE !Water evaporation |
---|
| 333 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCCC !Convective cloud cover |
---|
| 334 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLCC !Low cloud cover |
---|
| 335 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YMCC !Medium cloud cover |
---|
| 336 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YHCC !High cloud cover |
---|
| 337 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLGWS !Zonal gravity wave stress |
---|
| 338 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YMGWS !Meridian gravity wave stress |
---|
| 339 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YGWD !Gravity wave dissipation |
---|
| 340 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YMX2T !Maximum temperature at 2 m |
---|
| 341 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YMN2T !Minimum temperature at 2 m |
---|
| 342 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YRO !Runoff |
---|
| 343 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YALB !(surface shortwave) albedo |
---|
| 344 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIEWSS !Instantaneous surface zonal component of stress |
---|
| 345 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YINSSS !Instantaneous surface meridian component of stress |
---|
| 346 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YISSHF !Instantaneous surface heat flux |
---|
| 347 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIE !Instantaneous surface moisture flux |
---|
| 348 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCSF !Convective snow fall |
---|
| 349 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLSSF !Large scale snowfall |
---|
| 350 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YZ0F !Gravity * surface roughness length |
---|
| 351 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLZ0H !Logarithm of z0 times heat flux |
---|
| 352 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCW !Total water content in a vertical column |
---|
| 353 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCWV !Total water vapor content in a vertical column |
---|
| 354 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCLW !Total liquid water content in a vertical column |
---|
| 355 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCIW !Total ice water content in a vertical column |
---|
| 356 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSSRD !Downward surface solar radiation |
---|
| 357 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSTRD !Downward surface thermic radiation |
---|
| 358 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YBLH !Height of boundary layer |
---|
| 359 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSUND !Sunshine duration |
---|
| 360 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSPAR !Surface downward PARadiation |
---|
| 361 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSUVB !Surface downward UV-B radiation |
---|
| 362 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YCAPE !Conv.avail.potential energy (CAPE) |
---|
| 363 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTSRC !Top solar radiation clear sky |
---|
| 364 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTTRC !Top thermal radiation clear sky |
---|
| 365 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSSRC !Surface solar radiation clear sky |
---|
| 366 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSTRC !Surface thermal radiation clear sky |
---|
| 367 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YES !Evaporation of snow |
---|
| 368 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSMLT !Snow melt |
---|
| 369 | TYPE(TYPE_SURF_MTL_2D),POINTER :: Y10FG !Wind gust at 10 m (max since previous pp) |
---|
| 370 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLSPF !Large scale precipitation fraction |
---|
| 371 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCO3 !Total ozone content in a vertical column |
---|
| 372 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVIMD !Vertically integrated mass divergence |
---|
| 373 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSPARC !Surface clear-sky parallel radiation |
---|
| 374 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSTINC !TOA (top of atmosph?) incident solar radiation |
---|
| 375 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCGHG(:) !Total column greenhouse gases |
---|
| 376 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCGRG(:) !Total column reactive gases |
---|
| 377 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTCTRAC(:) !Total column tracers |
---|
| 378 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVD(:) |
---|
| 379 | END TYPE TYPE_SFL_VDIAG |
---|
| 380 | |
---|
| 381 | ! * Group VX=VCLIX: auxilary climatological diagnostic fields: |
---|
| 382 | TYPE TYPE_SFL_VCLIX |
---|
| 383 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YORO ! climatological surface geopotential |
---|
| 384 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTSC ! climatological surface temperature |
---|
| 385 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YPWS ! climatological surface max. prop. moisture |
---|
| 386 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YPWP ! climatological deep soil max. prop. moisture |
---|
| 387 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSNO ! climatological snow cover |
---|
| 388 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YTPC ! climatological deep soil temperature |
---|
| 389 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YSAB ! climatologic percentage of sand within the soil |
---|
| 390 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YXD2 ! climatologic soil depth |
---|
| 391 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YLSM ! climatologic land sea mask |
---|
| 392 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YIVEG ! climatologic type of vegetation |
---|
| 393 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YVX(:) |
---|
| 394 | END TYPE TYPE_SFL_VCLIX |
---|
| 395 | |
---|
| 396 | ! * Group XA=VEXTRA: extra 3-d diagnostic fields: |
---|
| 397 | TYPE TYPE_SFL_VEXTRA |
---|
| 398 | TYPE(TYPE_SURF_MTL_3D),POINTER :: YXA(:) |
---|
| 399 | END TYPE TYPE_SFL_VEXTRA |
---|
| 400 | |
---|
| 401 | ! * Group X2=VEXTR2: extra 2-d diagnostic fields: |
---|
| 402 | TYPE TYPE_SFL_VEXTR2 |
---|
| 403 | TYPE(TYPE_SURF_MTL_2D),POINTER :: YX2(:) |
---|
| 404 | END TYPE TYPE_SFL_VEXTR2 |
---|
| 405 | |
---|
| 406 | ! End of type definitions |
---|
| 407 | |
---|
| 408 | ! Data structures |
---|
| 409 | |
---|
| 410 | ! Prognostic (multi time level) fields |
---|
| 411 | |
---|
| 412 | ! Soilb |
---|
| 413 | REAL(KIND=JPRB),ALLOCATABLE :: SP_SB (:,:,:,:) |
---|
| 414 | TYPE(TYPE_SURF_GEN) :: YSP_SBD |
---|
| 415 | TYPE(TYPE_SFL_SOILB) :: YSP_SB |
---|
| 416 | |
---|
| 417 | ! Snowg |
---|
| 418 | REAL(KIND=JPRB),ALLOCATABLE :: SP_SG (:,:,:) |
---|
| 419 | TYPE(TYPE_SURF_GEN) :: YSP_SGD |
---|
| 420 | TYPE(TYPE_SFL_SNOWG) :: YSP_SG |
---|
| 421 | |
---|
| 422 | ! Resvr |
---|
| 423 | REAL(KIND=JPRB),ALLOCATABLE :: SP_RR (:,:,:) |
---|
| 424 | TYPE(TYPE_SURF_GEN) :: YSP_RRD |
---|
| 425 | TYPE(TYPE_SFL_RESVR) :: YSP_RR |
---|
| 426 | |
---|
| 427 | |
---|
| 428 | ! Extrp |
---|
| 429 | REAL(KIND=JPRB),ALLOCATABLE :: SP_EP (:,:,:,:) |
---|
| 430 | TYPE(TYPE_SURF_GEN) :: YSP_EPD |
---|
| 431 | TYPE(TYPE_SFL_EXTRP) :: YSP_EP |
---|
| 432 | |
---|
| 433 | ! Xtrp2 |
---|
| 434 | REAL(KIND=JPRB),ALLOCATABLE :: SP_X2 (:,:,:) |
---|
| 435 | TYPE(TYPE_SURF_GEN) :: YSP_X2D |
---|
| 436 | TYPE(TYPE_SFL_XTRP2) :: YSP_X2 |
---|
| 437 | |
---|
| 438 | ! Canri |
---|
| 439 | REAL(KIND=JPRB),ALLOCATABLE :: SP_CI (:,:,:) |
---|
| 440 | TYPE(TYPE_SURF_GEN) :: YSP_CID |
---|
| 441 | TYPE(TYPE_SFL_CANRI) :: YSP_CI |
---|
| 442 | |
---|
| 443 | ! One time level fields |
---|
| 444 | |
---|
| 445 | ! Varsf |
---|
| 446 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VF (:,:,:) |
---|
| 447 | TYPE(TYPE_SURF_GEN) :: YSD_VFD |
---|
| 448 | TYPE(TYPE_SFL_VARSF) :: YSD_VF |
---|
| 449 | |
---|
| 450 | ! Vclip |
---|
| 451 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VP (:,:,:) |
---|
| 452 | TYPE(TYPE_SURF_GEN) :: YSD_VPD |
---|
| 453 | TYPE(TYPE_SFL_VCLIP) :: YSD_VP |
---|
| 454 | |
---|
| 455 | ! Vcliv |
---|
| 456 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VV (:,:,:) |
---|
| 457 | TYPE(TYPE_SURF_GEN) :: YSD_VVD |
---|
| 458 | TYPE(TYPE_SFL_VCLIV) :: YSD_VV |
---|
| 459 | |
---|
| 460 | ! Vclin |
---|
| 461 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VN (:,:,:) |
---|
| 462 | TYPE(TYPE_SURF_GEN) :: YSD_VND |
---|
| 463 | TYPE(TYPE_SFL_VCLIN) :: YSD_VN |
---|
| 464 | |
---|
| 465 | ! Vclih |
---|
| 466 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VH (:,:,:) |
---|
| 467 | TYPE(TYPE_SURF_GEN) :: YSD_VHD |
---|
| 468 | TYPE(TYPE_SFL_VCLIH) :: YSD_VH |
---|
| 469 | |
---|
| 470 | ! Vclia |
---|
| 471 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VA (:,:,:) |
---|
| 472 | TYPE(TYPE_SURF_GEN) :: YSD_VAD |
---|
| 473 | TYPE(TYPE_SFL_VCLIA) :: YSD_VA |
---|
| 474 | |
---|
| 475 | ! Vo3abc |
---|
| 476 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VC (:,:,:) |
---|
| 477 | TYPE(TYPE_SURF_GEN) :: YSD_VCD |
---|
| 478 | TYPE(TYPE_SFL_VO3ABC) :: YSD_VC |
---|
| 479 | |
---|
| 480 | ! Vdiag |
---|
| 481 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VD (:,:,:) |
---|
| 482 | TYPE(TYPE_SURF_GEN) :: YSD_VDD |
---|
| 483 | TYPE(TYPE_SFL_VDIAG) :: YSD_VD |
---|
| 484 | |
---|
| 485 | ! Waves |
---|
| 486 | REAL(KIND=JPRB),ALLOCATABLE :: SD_WS (:,:,:) |
---|
| 487 | TYPE(TYPE_SURF_GEN) :: YSD_WSD |
---|
| 488 | TYPE(TYPE_SFL_WAVES) :: YSD_WS |
---|
| 489 | |
---|
| 490 | ! Vclix |
---|
| 491 | REAL(KIND=JPRB),ALLOCATABLE :: SD_VX (:,:,:) |
---|
| 492 | TYPE(TYPE_SURF_GEN) :: YSD_VXD |
---|
| 493 | TYPE(TYPE_SFL_VCLIX) :: YSD_VX |
---|
| 494 | |
---|
| 495 | ! Vextra |
---|
| 496 | |
---|
| 497 | REAL(KIND=JPRB),ALLOCATABLE :: SD_XA (:,:,:,:) |
---|
| 498 | TYPE(TYPE_SURF_GEN) :: YSD_XAD |
---|
| 499 | TYPE(TYPE_SFL_VEXTRA) :: YSD_XA |
---|
| 500 | |
---|
| 501 | ! Vextr2 |
---|
| 502 | |
---|
| 503 | REAL(KIND=JPRB),ALLOCATABLE :: SD_X2 (:,:,:) |
---|
| 504 | TYPE(TYPE_SURF_GEN) :: YSD_X2D |
---|
| 505 | TYPE(TYPE_SFL_VEXTR2) :: YSD_X2 |
---|
| 506 | |
---|
[2056] | 507 | !$OMP THREADPRIVATE(ndimsurf,ndimsurfl,nofftraj,nofftraj_cst,nprogsurf) |
---|
| 508 | !$OMP THREADPRIVATE(nprogsurfl,nptrsurf,nstrajgrib,nsurf,nsurfl,ysd_va,ysd_vad) |
---|
| 509 | !$OMP THREADPRIVATE(ysd_vc,ysd_vcd,ysd_vd,ysd_vdd,ysd_vf,ysd_vfd,ysd_vh,ysd_vhd) |
---|
| 510 | !$OMP THREADPRIVATE(ysd_vn,ysd_vnd,ysd_vp,ysd_vpd,ysd_vv,ysd_vvd,ysd_vx,ysd_vxd) |
---|
| 511 | !$OMP THREADPRIVATE(ysd_ws,ysd_wsd,ysd_x2,ysd_x2d,ysd_xa,ysd_xad,ysp_ci,ysp_cid) |
---|
| 512 | !$OMP THREADPRIVATE(ysp_ep,ysp_epd,ysp_rr,ysp_rrd,ysp_sb,ysp_sbd,ysp_sg,ysp_sgd) |
---|
| 513 | !$OMP THREADPRIVATE(ysp_x2,ysp_x2d) |
---|
| 514 | |
---|
| 515 | !$OMP THREADPRIVATE(sd_va,sd_vc,sd_vd,sd_vf,sd_vh,sd_vn,sd_vp,sd_vv,sd_vx,sd_ws) |
---|
| 516 | !$OMP THREADPRIVATE(sd_x2,sd_xa,sp_ci,sp_ep,sp_rr,sp_sb,sp_sg,sp_x2,surf_store_array) |
---|
| 517 | |
---|
| 518 | |
---|
[1989] | 519 | !------------------------------------------------------------------------- |
---|
| 520 | |
---|
| 521 | CONTAINS |
---|
| 522 | |
---|
| 523 | !========================================================================= |
---|
| 524 | |
---|
| 525 | SUBROUTINE INI_SFLP3(YDSC,YD,KFLDS,KLEVS,LDMTL,CDGRPNAME) |
---|
| 526 | ! Initialize 3-D surface field group |
---|
| 527 | TYPE(TYPE_SURF_GEN),INTENT(INOUT) :: YDSC |
---|
| 528 | TYPE(TYPE_SURF_MTL_3D),INTENT(INOUT) :: YD(:) |
---|
| 529 | INTEGER(KIND=JPIM),INTENT(IN) :: KFLDS |
---|
| 530 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEVS |
---|
| 531 | LOGICAL,INTENT(IN) :: LDMTL |
---|
| 532 | CHARACTER(LEN=*),INTENT(IN) :: CDGRPNAME |
---|
| 533 | |
---|
| 534 | INTEGER(KIND=JPIM) :: JFLD, IMAXF |
---|
| 535 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 536 | |
---|
| 537 | !------------------------------------------------------------------------- |
---|
| 538 | |
---|
| 539 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:INI_SFLP3',0,ZHOOK_HANDLE) |
---|
| 540 | |
---|
| 541 | IMAXF = SIZE(YD) |
---|
| 542 | YDSC%NUMFLDS = KFLDS |
---|
| 543 | YDSC%NLEVS = KLEVS |
---|
| 544 | YDSC%IPTR = 1 |
---|
| 545 | YDSC%LMTL = LDMTL |
---|
| 546 | YDSC%CGRPNAME = CDGRPNAME |
---|
| 547 | YDSC%NDIM5 = 0 |
---|
| 548 | YDSC%NOFFTRAJ = NOFFTRAJ |
---|
| 549 | YDSC%NOFFTRAJ_CST = NOFFTRAJ_CST |
---|
| 550 | |
---|
| 551 | NSURF = NSURF+YDSC%NUMFLDS |
---|
| 552 | NSURFL = NSURFL+YDSC%NUMFLDS*YDSC%NLEVS |
---|
| 553 | IF(LDMTL) THEN |
---|
| 554 | NPROGSURF = NPROGSURF+YDSC%NUMFLDS |
---|
| 555 | NPROGSURFL = NPROGSURFL+YDSC%NUMFLDS*YDSC%NLEVS |
---|
| 556 | ENDIF |
---|
| 557 | |
---|
| 558 | IF(LDMTL) THEN |
---|
| 559 | IF (LTWOTL) THEN |
---|
| 560 | YDSC%NDIM = 2*YDSC%NUMFLDS |
---|
| 561 | ELSE |
---|
| 562 | YDSC%NDIM = 3*YDSC%NUMFLDS |
---|
| 563 | ENDIF |
---|
| 564 | ELSE |
---|
| 565 | YDSC%NDIM = YDSC%NUMFLDS |
---|
| 566 | ENDIF |
---|
| 567 | NDIMSURF = NDIMSURF + YDSC%NDIM |
---|
| 568 | NDIMSURFL = NDIMSURFL + YDSC%NDIM*YDSC%NLEVS |
---|
| 569 | |
---|
| 570 | DO JFLD=1,KFLDS |
---|
| 571 | ALLOCATE(YD(JFLD)%IGRBCODE(KLEVS)) |
---|
| 572 | ALLOCATE(YD(JFLD)%CNAME(KLEVS)) |
---|
| 573 | ALLOCATE(YD(JFLD)%REFVALI(KLEVS)) |
---|
| 574 | ALLOCATE(YD(JFLD)%NREQIN(KLEVS)) |
---|
| 575 | YD(JFLD)%IGRBCODE(:) = -999 |
---|
| 576 | YD(JFLD)%CNAME(:) = '' |
---|
| 577 | YD(JFLD)%REFVALI(:) = 0.0_JPRB |
---|
| 578 | YD(JFLD)%NREQIN(:) = -1 |
---|
| 579 | YD(JFLD)%MP = JFLD |
---|
| 580 | IF (YDSC%LMTL) THEN |
---|
| 581 | YD(JFLD)%MP0 = YD(JFLD)%MP |
---|
| 582 | IF(LTWOTL) THEN |
---|
| 583 | YD(JFLD)%MP9 = YD(JFLD)%MP0 |
---|
| 584 | YD(JFLD)%MP1 = YD(JFLD)%MP0+YDSC%NUMFLDS |
---|
| 585 | ELSE |
---|
| 586 | YD(JFLD)%MP9 = YD(JFLD)%MP0+YDSC%NUMFLDS |
---|
| 587 | YD(JFLD)%MP1 = YD(JFLD)%MP0+2*YDSC%NUMFLDS |
---|
| 588 | ENDIF |
---|
| 589 | ELSE |
---|
| 590 | YD(JFLD)%MP0 = NUNDEFLD |
---|
| 591 | YD(JFLD)%MP9 = NUNDEFLD |
---|
| 592 | YD(JFLD)%MP1 = NUNDEFLD |
---|
| 593 | ENDIF |
---|
| 594 | YD(JFLD)%MP5 = NUNDEFLD |
---|
| 595 | YD(JFLD)%ITRAJ = 0 |
---|
| 596 | ENDDO |
---|
| 597 | |
---|
| 598 | DO JFLD=KFLDS+1,IMAXF |
---|
| 599 | YD(JFLD)%MP = NUNDEFLD |
---|
| 600 | YD(JFLD)%MP0 = NUNDEFLD |
---|
| 601 | YD(JFLD)%MP9 = NUNDEFLD |
---|
| 602 | YD(JFLD)%MP1 = NUNDEFLD |
---|
| 603 | YD(JFLD)%MP5 = NUNDEFLD |
---|
| 604 | YD(JFLD)%ITRAJ = 0 |
---|
| 605 | ENDDO |
---|
| 606 | |
---|
| 607 | WRITE(NULOUT,*) 'INITIALIZING 3-D SURFACE FIELD GROUP ', YDSC%CGRPNAME |
---|
| 608 | WRITE(NULOUT,*) 'NUMFLDS=',YDSC%NUMFLDS,' NLEVS=',YDSC%NLEVS,' LMTL=',YDSC%LMTL |
---|
| 609 | |
---|
| 610 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:INI_SFLP3',1,ZHOOK_HANDLE) |
---|
| 611 | END SUBROUTINE INI_SFLP3 |
---|
| 612 | |
---|
| 613 | !========================================================================= |
---|
| 614 | |
---|
| 615 | SUBROUTINE SETUP_SFLP3(YDSC,YD,KGRIB,CDNAME,PDEFAULT,KTRAJ,KREQIN) |
---|
| 616 | ! Setup 3-D surface field |
---|
| 617 | TYPE(TYPE_SURF_GEN),INTENT(INOUT) :: YDSC |
---|
| 618 | TYPE(TYPE_SURF_MTL_3D),INTENT(INOUT) :: YD |
---|
| 619 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KGRIB(:) |
---|
| 620 | CHARACTER(LEN=16) ,OPTIONAL,INTENT(IN) :: CDNAME(:) |
---|
| 621 | REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PDEFAULT(:) |
---|
| 622 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KTRAJ |
---|
| 623 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KREQIN(:) |
---|
| 624 | |
---|
| 625 | INTEGER(KIND=JPIM) :: IPTR,JLEV |
---|
| 626 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 627 | |
---|
| 628 | !------------------------------------------------------------------------- |
---|
| 629 | |
---|
| 630 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SETUP_SFLP3',0,ZHOOK_HANDLE) |
---|
| 631 | IPTR = YDSC%IPTR |
---|
| 632 | IF(IPTR > YDSC%NUMFLDS) THEN |
---|
| 633 | WRITE(NULERR,*) 'SURFACE FIELDS UNDER-DIMENSINED - GROUP ',& |
---|
| 634 | & YDSC%CGRPNAME,YDSC%NUMFLDS,KGRIB(1),CDNAME(1) |
---|
| 635 | CALL ABOR1('IPTR > YDSC%NUMFLDS') |
---|
| 636 | ENDIF |
---|
| 637 | IF(PRESENT(KGRIB)) THEN |
---|
| 638 | YD%IGRBCODE(:) = KGRIB(:) |
---|
| 639 | ENDIF |
---|
| 640 | IF(PRESENT(KREQIN)) THEN |
---|
| 641 | YD%NREQIN(:) = KREQIN(:) |
---|
| 642 | ENDIF |
---|
| 643 | IF(PRESENT(CDNAME)) THEN |
---|
| 644 | YD%CNAME(:) = CDNAME(:) |
---|
| 645 | ENDIF |
---|
| 646 | IF(PRESENT(PDEFAULT)) THEN |
---|
| 647 | YD%REFVALI(:) = PDEFAULT |
---|
| 648 | ENDIF |
---|
| 649 | IF(PRESENT(KTRAJ)) THEN |
---|
| 650 | IF(KTRAJ == 1) THEN |
---|
| 651 | DO JLEV=1,YDSC%NLEVS |
---|
| 652 | NSTRAJGRIB(NOFFTRAJ+JLEV) = YD%IGRBCODE(JLEV) |
---|
| 653 | ENDDO |
---|
| 654 | NOFFTRAJ = NOFFTRAJ+YDSC%NLEVS |
---|
| 655 | ELSEIF(KTRAJ == 2) THEN |
---|
| 656 | NOFFTRAJ_CST = NOFFTRAJ_CST+YDSC%NLEVS |
---|
| 657 | ELSEIF(KTRAJ /= 0) THEN |
---|
| 658 | CALL ABOR1('SURFACE_FIELDS:SETUP_SFLP3 - UNKNOWN KTRAJ') |
---|
| 659 | ENDIF |
---|
| 660 | YD%ITRAJ = KTRAJ |
---|
| 661 | YDSC%NDIM5 = YDSC%NDIM5+1 |
---|
| 662 | YD%MP5 = YDSC%NDIM5 |
---|
| 663 | ENDIF |
---|
| 664 | DO JLEV=1,YDSC%NLEVS |
---|
| 665 | IF(YDSC%LMTL) THEN |
---|
| 666 | WRITE(NULOUT,'(1X,A,2I4,1X,A,6I4)') & |
---|
| 667 | & YDSC%CGRPNAME(1:6),YDSC%IPTR,JLEV,YD%CNAME(JLEV),YD%IGRBCODE(JLEV),& |
---|
| 668 | & YD%MP0,YD%MP9,YD%MP1,YD%ITRAJ,YD%NREQIN(JLEV) |
---|
| 669 | ELSE |
---|
| 670 | WRITE(NULOUT,'(1X,A,2I4,1X,A,4I4)') & |
---|
| 671 | & YDSC%CGRPNAME(1:6),YDSC%IPTR,JLEV,YD%CNAME(JLEV),YD%IGRBCODE(JLEV),& |
---|
| 672 | & YD%MP,YD%ITRAJ,YD%NREQIN(JLEV) |
---|
| 673 | ENDIF |
---|
| 674 | ENDDO |
---|
| 675 | YDSC%IPTR = YDSC%IPTR+1 |
---|
| 676 | |
---|
| 677 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SETUP_SFLP3',1,ZHOOK_HANDLE) |
---|
| 678 | END SUBROUTINE SETUP_SFLP3 |
---|
| 679 | |
---|
| 680 | !========================================================================= |
---|
| 681 | |
---|
| 682 | SUBROUTINE INI_SFLP2(YDSC,YD,KFLDS,LDMTL,CDGRPNAME) |
---|
| 683 | ! Initialize 2-D surface field group |
---|
| 684 | TYPE(TYPE_SURF_GEN),INTENT(INOUT) :: YDSC |
---|
| 685 | TYPE(TYPE_SURF_MTL_2D),INTENT(INOUT) :: YD(:) |
---|
| 686 | INTEGER(KIND=JPIM),INTENT(IN) :: KFLDS |
---|
| 687 | LOGICAL,INTENT(IN) :: LDMTL |
---|
| 688 | CHARACTER(LEN=*),INTENT(IN) :: CDGRPNAME |
---|
| 689 | |
---|
| 690 | INTEGER(KIND=JPIM) :: JFLD, IMAXF |
---|
| 691 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 692 | |
---|
| 693 | !------------------------------------------------------------------------- |
---|
| 694 | |
---|
| 695 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:INI_SFLP2',0,ZHOOK_HANDLE) |
---|
| 696 | |
---|
| 697 | IMAXF = SIZE(YD) |
---|
| 698 | YDSC%NUMFLDS = KFLDS |
---|
| 699 | YDSC%NLEVS = -1 |
---|
| 700 | YDSC%IPTR = 1 |
---|
| 701 | YDSC%LMTL = LDMTL |
---|
| 702 | YDSC%CGRPNAME = CDGRPNAME |
---|
| 703 | YDSC%NDIM5 = 0 |
---|
| 704 | YDSC%NOFFTRAJ = NOFFTRAJ |
---|
| 705 | YDSC%NOFFTRAJ_CST = NOFFTRAJ_CST |
---|
| 706 | |
---|
| 707 | NSURF = NSURF+YDSC%NUMFLDS |
---|
| 708 | NSURFL = NSURFL+YDSC%NUMFLDS |
---|
| 709 | IF(LDMTL) THEN |
---|
| 710 | NPROGSURF = NPROGSURF+YDSC%NUMFLDS |
---|
| 711 | NPROGSURFL = NPROGSURFL+YDSC%NUMFLDS |
---|
| 712 | ENDIF |
---|
| 713 | |
---|
| 714 | IF(LDMTL) THEN |
---|
| 715 | IF (LTWOTL) THEN |
---|
| 716 | YDSC%NDIM = 2*YDSC%NUMFLDS |
---|
| 717 | ELSE |
---|
| 718 | YDSC%NDIM = 3*YDSC%NUMFLDS |
---|
| 719 | ENDIF |
---|
| 720 | ELSE |
---|
| 721 | YDSC%NDIM = YDSC%NUMFLDS |
---|
| 722 | ENDIF |
---|
| 723 | NDIMSURF = NDIMSURF + YDSC%NDIM |
---|
| 724 | NDIMSURFL = NDIMSURFL + YDSC%NDIM |
---|
| 725 | DO JFLD=1,KFLDS |
---|
| 726 | YD(JFLD)%IGRBCODE = -999 |
---|
| 727 | YD(JFLD)%CNAME = '' |
---|
| 728 | YD(JFLD)%REFVALI = 0.0_JPRB |
---|
| 729 | YD(JFLD)%NREQIN = -1 |
---|
| 730 | YD(JFLD)%MP = JFLD |
---|
| 731 | IF (YDSC%LMTL) THEN |
---|
| 732 | YD(JFLD)%MP0 = YD(JFLD)%MP |
---|
| 733 | IF(LTWOTL) THEN |
---|
| 734 | YD(JFLD)%MP9 = YD(JFLD)%MP0 |
---|
| 735 | YD(JFLD)%MP1 = YD(JFLD)%MP0+YDSC%NUMFLDS |
---|
| 736 | ELSE |
---|
| 737 | YD(JFLD)%MP9 = YD(JFLD)%MP0+YDSC%NUMFLDS |
---|
| 738 | YD(JFLD)%MP1 = YD(JFLD)%MP0+2*YDSC%NUMFLDS |
---|
| 739 | ENDIF |
---|
| 740 | ELSE |
---|
| 741 | YD(JFLD)%MP0 = NUNDEFLD |
---|
| 742 | YD(JFLD)%MP9 = NUNDEFLD |
---|
| 743 | YD(JFLD)%MP1 = NUNDEFLD |
---|
| 744 | ENDIF |
---|
| 745 | YD(JFLD)%MP5 = NUNDEFLD |
---|
| 746 | YD(JFLD)%ITRAJ = 0 |
---|
| 747 | ENDDO |
---|
| 748 | |
---|
| 749 | DO JFLD=KFLDS+1,IMAXF |
---|
| 750 | YD(JFLD)%MP = NUNDEFLD |
---|
| 751 | YD(JFLD)%MP0 = NUNDEFLD |
---|
| 752 | YD(JFLD)%MP9 = NUNDEFLD |
---|
| 753 | YD(JFLD)%MP1 = NUNDEFLD |
---|
| 754 | YD(JFLD)%MP5 = NUNDEFLD |
---|
| 755 | YD(JFLD)%ITRAJ = 0 |
---|
| 756 | ENDDO |
---|
| 757 | |
---|
| 758 | WRITE(NULOUT,*) 'INITIALIZING 2-D SURFACE FIELD GROUP ', YDSC%CGRPNAME |
---|
| 759 | WRITE(NULOUT,*) 'NUMFLDS=',YDSC%NUMFLDS,' LMTL=',YDSC%LMTL |
---|
| 760 | |
---|
| 761 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:INI_SFLP2',1,ZHOOK_HANDLE) |
---|
| 762 | END SUBROUTINE INI_SFLP2 |
---|
| 763 | |
---|
| 764 | !========================================================================= |
---|
| 765 | |
---|
| 766 | SUBROUTINE SETUP_SFLP2(YDSC,YD,KGRIB,CDNAME,PDEFAULT,KTRAJ,KREQIN) |
---|
| 767 | ! Setup 2-D surface field |
---|
| 768 | TYPE(TYPE_SURF_GEN),INTENT(INOUT) :: YDSC |
---|
| 769 | TYPE(TYPE_SURF_MTL_2D),INTENT(INOUT) :: YD |
---|
| 770 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KGRIB |
---|
| 771 | CHARACTER(LEN=16) ,OPTIONAL,INTENT(IN) :: CDNAME |
---|
| 772 | REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PDEFAULT |
---|
| 773 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KTRAJ |
---|
| 774 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KREQIN |
---|
| 775 | |
---|
| 776 | INTEGER(KIND=JPIM) :: IPTR |
---|
| 777 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 778 | |
---|
| 779 | !------------------------------------------------------------------------- |
---|
| 780 | |
---|
| 781 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SETUP_SFLP2',0,ZHOOK_HANDLE) |
---|
| 782 | IPTR = YDSC%IPTR |
---|
| 783 | IF(IPTR > YDSC%NUMFLDS) THEN |
---|
| 784 | WRITE(NULERR,*) 'SURFACE FIELDS UNDER-DIMENSINED - GROUP ',YDSC%CGRPNAME,YDSC%NUMFLDS,KGRIB,CDNAME |
---|
| 785 | CALL ABOR1('IPTR > YDSC%NUMFLDS') |
---|
| 786 | ENDIF |
---|
| 787 | IF(PRESENT(KGRIB)) THEN |
---|
| 788 | YD%IGRBCODE = KGRIB |
---|
| 789 | ENDIF |
---|
| 790 | IF(PRESENT(KREQIN)) THEN |
---|
| 791 | YD%NREQIN = KREQIN |
---|
| 792 | ENDIF |
---|
| 793 | IF(PRESENT(CDNAME)) THEN |
---|
| 794 | YD%CNAME = CDNAME |
---|
| 795 | ENDIF |
---|
| 796 | IF(PRESENT(PDEFAULT)) THEN |
---|
| 797 | YD%REFVALI = PDEFAULT |
---|
| 798 | ENDIF |
---|
| 799 | IF(PRESENT(KTRAJ)) THEN |
---|
| 800 | IF(KTRAJ == 1) THEN |
---|
| 801 | NSTRAJGRIB(NOFFTRAJ+1) = YD%IGRBCODE |
---|
| 802 | NOFFTRAJ = NOFFTRAJ+1 |
---|
| 803 | ELSEIF(KTRAJ == 2) THEN |
---|
| 804 | NOFFTRAJ_CST = NOFFTRAJ_CST+1 |
---|
| 805 | ELSEIF(KTRAJ /= 0) THEN |
---|
| 806 | CALL ABOR1('SURFACE_FIELDS:SETUP_SFLP2 - UNKNOWN KTRAJ') |
---|
| 807 | ENDIF |
---|
| 808 | YD%ITRAJ = KTRAJ |
---|
| 809 | YDSC%NDIM5 = YDSC%NDIM5+1 |
---|
| 810 | YD%MP5 = YDSC%NDIM5 |
---|
| 811 | ENDIF |
---|
| 812 | IF(YDSC%LMTL) THEN |
---|
| 813 | WRITE(NULOUT,'(1X,A,I4,1X,A,6I4)') & |
---|
| 814 | & YDSC%CGRPNAME(1:6),YDSC%IPTR,YD%CNAME,YD%IGRBCODE,& |
---|
| 815 | & YD%MP0,YD%MP9,YD%MP1,YD%ITRAJ,YD%NREQIN |
---|
| 816 | ELSE |
---|
| 817 | WRITE(NULOUT,'(1X,A,I4,1X,A,4I4)') & |
---|
| 818 | & YDSC%CGRPNAME(1:6),YDSC%IPTR,YD%CNAME,YD%IGRBCODE,YD%MP,YD%ITRAJ,YD%NREQIN |
---|
| 819 | ENDIF |
---|
| 820 | |
---|
| 821 | YDSC%IPTR = YDSC%IPTR+1 |
---|
| 822 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SETUP_SFLP2',1,ZHOOK_HANDLE) |
---|
| 823 | END SUBROUTINE SETUP_SFLP2 |
---|
| 824 | |
---|
| 825 | !========================================================================= |
---|
| 826 | |
---|
| 827 | SUBROUTINE GPPOPER(CDACT,KBL,PSP_SB,PSP_SG,PSP_RR,PSP_EP,PSP_X2,YDCOM) |
---|
| 828 | ! Operations on prognostic surface fields |
---|
| 829 | CHARACTER(LEN=*),INTENT(IN) :: CDACT |
---|
| 830 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KBL |
---|
| 831 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_SB(:,:,:) |
---|
| 832 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_SG(:,:) |
---|
| 833 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_RR(:,:) |
---|
| 834 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_EP(:,:,:) |
---|
| 835 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_X2(:,:) |
---|
| 836 | TYPE(TYPE_SFL_COMM),OPTIONAL,INTENT(INOUT) :: YDCOM |
---|
| 837 | |
---|
| 838 | |
---|
| 839 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 840 | |
---|
| 841 | !------------------------------------------------------------------------- |
---|
| 842 | |
---|
| 843 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPPOPER',0,ZHOOK_HANDLE) |
---|
| 844 | IF(PRESENT(KBL)) THEN |
---|
| 845 | CALL GPOPER_3(CDACT,SP_SB(:,:,:,KBL),YSP_SBD,YSP_SB%YSB,YDCOM) |
---|
| 846 | CALL GPOPER_2(CDACT,SP_SG(:,:,KBL) ,YSP_SGD,YSP_SG%YSG,YDCOM) |
---|
| 847 | CALL GPOPER_2(CDACT,SP_RR(:,:,KBL) ,YSP_RRD,YSP_RR%YRR,YDCOM) |
---|
| 848 | CALL GPOPER_3(CDACT,SP_EP(:,:,:,KBL),YSP_EPD,YSP_EP%YEP,YDCOM) |
---|
| 849 | CALL GPOPER_2(CDACT,SP_X2(:,:,KBL) ,YSP_X2D,YSP_X2%YX2,YDCOM) |
---|
| 850 | ELSE |
---|
| 851 | IF(PRESENT(PSP_SB)) CALL GPOPER_3(CDACT,PSP_SB(:,:,:),YSP_SBD,YSP_SB%YSB,YDCOM) |
---|
| 852 | IF(PRESENT(PSP_SG)) CALL GPOPER_2(CDACT,PSP_SG(:,:) ,YSP_SGD,YSP_SG%YSG,YDCOM) |
---|
| 853 | IF(PRESENT(PSP_RR)) CALL GPOPER_2(CDACT,PSP_RR(:,:) ,YSP_RRD,YSP_RR%YRR,YDCOM) |
---|
| 854 | IF(PRESENT(PSP_EP)) CALL GPOPER_3(CDACT,PSP_EP(:,:,:),YSP_EPD,YSP_EP%YEP,YDCOM) |
---|
| 855 | IF(PRESENT(PSP_X2)) CALL GPOPER_2(CDACT,PSP_X2(:,:) ,YSP_X2D,YSP_X2%YX2,YDCOM) |
---|
| 856 | ENDIF |
---|
| 857 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPPOPER',1,ZHOOK_HANDLE) |
---|
| 858 | END SUBROUTINE GPPOPER |
---|
| 859 | |
---|
| 860 | !========================================================================= |
---|
| 861 | |
---|
| 862 | SUBROUTINE GPOPER(CDACT,KBL,PSP_SB,PSP_SG,PSP_RR,PSD_VF,PSD_VV,YDCOM,PFIELD,PFIELD2) |
---|
| 863 | !Operations on ALL surface groups |
---|
| 864 | CHARACTER(LEN=*),INTENT(IN) :: CDACT |
---|
| 865 | INTEGER(KIND=JPIM),OPTIONAL,INTENT(IN) :: KBL |
---|
| 866 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_SB(:,:,:) |
---|
| 867 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_SG(:,:) |
---|
| 868 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSP_RR(:,:) |
---|
| 869 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSD_VF(:,:) |
---|
| 870 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PSD_VV(:,:) |
---|
| 871 | TYPE(TYPE_SFL_COMM),OPTIONAL,INTENT(INOUT) :: YDCOM |
---|
| 872 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD(:,:) |
---|
| 873 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD2(:,:) |
---|
| 874 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 875 | |
---|
| 876 | !------------------------------------------------------------------------- |
---|
| 877 | |
---|
| 878 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER',0,ZHOOK_HANDLE) |
---|
| 879 | IF(CDACT == 'PUTALLFLDS' .OR. CDACT == 'GETALLFLDS' .OR.& |
---|
| 880 | & CDACT == 'TRAJSTORE' .OR. CDACT == 'TRAJSTORECST' .OR. & |
---|
| 881 | & CDACT == 'SET0TOTRAJ' .OR. CDACT == 'GETTRAJ' ) THEN |
---|
| 882 | IF(.NOT.PRESENT(PFIELD)) CALL ABOR1('SURFACE_FIELDS:GPOPER - PFIELD MISSING') |
---|
| 883 | IF(SIZE(PFIELD,1) < NPROMA) CALL ABOR1('SURFACE_FIELDS:GPOPER - SIZE(PFIELD,1) < NPROMA)') |
---|
| 884 | ENDIF |
---|
| 885 | IF(CDACT == 'PUTALLFLDS' .OR. CDACT == 'GETALLFLDS') THEN |
---|
| 886 | IF(SIZE(PFIELD,2) < NPROGSURFL) CALL ABOR1('SURFACE_FIELDS:GPOPER - SIZE(PFIELD,2) < NPROGSURFL)') |
---|
| 887 | ENDIF |
---|
| 888 | IF(CDACT == 'GETTRAJ') THEN |
---|
| 889 | IF(.NOT.PRESENT(PFIELD2)) CALL ABOR1('SURFACE_FIELDS:GPOPER - PFIELD2 MISSING') |
---|
| 890 | IF(SIZE(PFIELD2,1) < NPROMA) CALL ABOR1('SURFACE_FIELDS:GPOPER - SIZE(PFIELD2,1) < NPROMA)') |
---|
| 891 | ENDIF |
---|
| 892 | IF(PRESENT(YDCOM)) THEN |
---|
| 893 | YDCOM%L_OK = .FALSE. |
---|
| 894 | YDCOM%IPTRSURF = 0 |
---|
| 895 | YDCOM%ICOUNT = 0 |
---|
| 896 | ENDIF |
---|
| 897 | |
---|
| 898 | NPTRSURF = 0 |
---|
| 899 | IF(PRESENT(KBL)) THEN |
---|
| 900 | IF(YSP_SBD%NDIM > 0) THEN |
---|
| 901 | CALL GPOPER_3(CDACT,SP_SB(:,:,:,KBL),YSP_SBD,YSP_SB%YSB,YDCOM,PFIELD,PFIELD2) |
---|
| 902 | ENDIF |
---|
| 903 | IF(YSP_SGD%NDIM > 0) THEN |
---|
| 904 | CALL GPOPER_2(CDACT,SP_SG(:,:,KBL) ,YSP_SGD,YSP_SG%YSG,YDCOM,PFIELD,PFIELD2) |
---|
| 905 | ENDIF |
---|
| 906 | IF(YSP_RRD%NDIM > 0) THEN |
---|
| 907 | CALL GPOPER_2(CDACT,SP_RR(:,:,KBL) ,YSP_RRD,YSP_RR%YRR,YDCOM,PFIELD,PFIELD2) |
---|
| 908 | ENDIF |
---|
| 909 | IF(YSP_EPD%NDIM > 0) THEN |
---|
| 910 | CALL GPOPER_3(CDACT,SP_EP(:,:,:,KBL),YSP_EPD,YSP_EP%YEP,YDCOM,PFIELD,PFIELD2) |
---|
| 911 | ENDIF |
---|
| 912 | IF(YSP_X2D%NDIM > 0) THEN |
---|
| 913 | CALL GPOPER_2(CDACT,SP_X2(:,:,KBL) ,YSP_X2D,YSP_X2%YX2,YDCOM,PFIELD,PFIELD2) |
---|
| 914 | ENDIF |
---|
| 915 | IF(YSD_VFD%NDIM > 0) THEN |
---|
| 916 | CALL GPOPER_2(CDACT,SD_VF(:,:,KBL) ,YSD_VFD,YSD_VF%YVF,YDCOM,PFIELD,PFIELD2) |
---|
| 917 | ENDIF |
---|
| 918 | IF(YSD_VPD%NDIM > 0) THEN |
---|
| 919 | CALL GPOPER_2(CDACT,SD_VP(:,:,KBL) ,YSD_VPD,YSD_VP%YVP,YDCOM,PFIELD,PFIELD2) |
---|
| 920 | ENDIF |
---|
| 921 | IF(YSD_VVD%NDIM > 0) THEN |
---|
| 922 | CALL GPOPER_2(CDACT,SD_VV(:,:,KBL) ,YSD_VVD,YSD_VV%YVV,YDCOM,PFIELD,PFIELD2) |
---|
| 923 | ENDIF |
---|
| 924 | IF(YSD_VND%NDIM > 0) THEN |
---|
| 925 | CALL GPOPER_2(CDACT,SD_VN(:,:,KBL) ,YSD_VND,YSD_VN%YVN,YDCOM,PFIELD,PFIELD2) |
---|
| 926 | ENDIF |
---|
| 927 | IF(YSD_VHD%NDIM > 0) THEN |
---|
| 928 | CALL GPOPER_2(CDACT,SD_VH(:,:,KBL) ,YSD_VHD,YSD_VH%YVH,YDCOM,PFIELD,PFIELD2) |
---|
| 929 | ENDIF |
---|
| 930 | IF(YSD_VAD%NDIM > 0) THEN |
---|
| 931 | CALL GPOPER_2(CDACT,SD_VA(:,:,KBL) ,YSD_VAD,YSD_VA%YVA,YDCOM,PFIELD,PFIELD2) |
---|
| 932 | ENDIF |
---|
| 933 | IF(YSD_VCD%NDIM > 0) THEN |
---|
| 934 | CALL GPOPER_2(CDACT,SD_VC(:,:,KBL) ,YSD_VCD,YSD_VC%YVC,YDCOM,PFIELD,PFIELD2) |
---|
| 935 | ENDIF |
---|
| 936 | IF(YSD_VDD%NDIM > 0) THEN |
---|
| 937 | CALL GPOPER_2(CDACT,SD_VD(:,:,KBL) ,YSD_VDD,YSD_VD%YVD,YDCOM,PFIELD,PFIELD2) |
---|
| 938 | ENDIF |
---|
| 939 | IF(YSD_WSD%NDIM > 0) THEN |
---|
| 940 | CALL GPOPER_2(CDACT,SD_WS(:,:,KBL) ,YSD_WSD,YSD_WS%YWS,YDCOM,PFIELD,PFIELD2) |
---|
| 941 | ENDIF |
---|
| 942 | IF(YSD_XAD%NDIM > 0) THEN |
---|
| 943 | CALL GPOPER_3(CDACT,SD_XA(:,:,:,KBL),YSD_XAD,YSD_XA%YXA,YDCOM,PFIELD,PFIELD2) |
---|
| 944 | ENDIF |
---|
| 945 | IF(YSD_X2D%NDIM > 0) THEN |
---|
| 946 | CALL GPOPER_2(CDACT,SD_X2(:,:,KBL) ,YSD_X2D,YSD_X2%YX2,YDCOM,PFIELD,PFIELD2) |
---|
| 947 | ENDIF |
---|
| 948 | IF(YSD_VXD%NDIM > 0) THEN |
---|
| 949 | CALL GPOPER_2(CDACT,SD_VX(:,:,KBL) ,YSD_VXD,YSD_VX%YVX,YDCOM,PFIELD,PFIELD2) |
---|
| 950 | ENDIF |
---|
| 951 | ELSE |
---|
| 952 | IF(YSP_SBD%NDIM > 0) THEN |
---|
| 953 | IF(PRESENT(PSP_SB)) & |
---|
| 954 | & CALL GPOPER_3(CDACT,PSP_SB,YSP_SBD,YSP_SB%YSB,YDCOM,PFIELD,PFIELD2) |
---|
| 955 | ENDIF |
---|
| 956 | IF(YSP_SGD%NDIM > 0) THEN |
---|
| 957 | IF(PRESENT(PSP_SG)) & |
---|
| 958 | & CALL GPOPER_2(CDACT,PSP_SG,YSP_SGD,YSP_SG%YSG,YDCOM,PFIELD,PFIELD2) |
---|
| 959 | ENDIF |
---|
| 960 | IF(YSP_RRD%NDIM > 0) THEN |
---|
| 961 | IF(PRESENT(PSP_RR)) & |
---|
| 962 | & CALL GPOPER_2(CDACT,PSP_RR,YSP_RRD,YSP_RR%YRR,YDCOM,PFIELD,PFIELD2) |
---|
| 963 | ENDIF |
---|
| 964 | IF(YSD_VFD%NDIM > 0) THEN |
---|
| 965 | IF(PRESENT(PSD_VF)) & |
---|
| 966 | & CALL GPOPER_2(CDACT,PSD_VF,YSD_VFD,YSD_VF%YVF,YDCOM,PFIELD,PFIELD2) |
---|
| 967 | ENDIF |
---|
| 968 | IF(YSD_VVD%NDIM > 0) THEN |
---|
| 969 | IF(PRESENT(PSD_VV)) & |
---|
| 970 | & CALL GPOPER_2(CDACT,PSD_VV,YSD_VVD,YSD_VV%YVV,YDCOM,PFIELD,PFIELD2) |
---|
| 971 | ENDIF |
---|
| 972 | ENDIF |
---|
| 973 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER',1,ZHOOK_HANDLE) |
---|
| 974 | END SUBROUTINE GPOPER |
---|
| 975 | |
---|
| 976 | !========================================================================= |
---|
| 977 | |
---|
| 978 | SUBROUTINE GPOPER_2(CDACT,PFLD,YDSC,YD,YDCOM,PFIELD,PFIELD2) |
---|
| 979 | ! Operations on 2-D surface groups |
---|
| 980 | CHARACTER(LEN=*),INTENT(IN) :: CDACT |
---|
| 981 | REAL(KIND=JPRB),INTENT(INOUT) :: PFLD(:,:) |
---|
| 982 | TYPE(TYPE_SURF_GEN),INTENT(IN) :: YDSC |
---|
| 983 | TYPE(TYPE_SURF_MTL_2D),INTENT(IN) :: YD(:) |
---|
| 984 | TYPE(TYPE_SFL_COMM),OPTIONAL,INTENT(INOUT) :: YDCOM |
---|
| 985 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD(:,:) |
---|
| 986 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD2(:,:) |
---|
| 987 | |
---|
| 988 | INTEGER(KIND=JPIM) :: J,IPTR,IPTR2 |
---|
| 989 | REAL(KIND=JPRB) :: ZZPHY |
---|
| 990 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 991 | |
---|
| 992 | !------------------------------------------------------------------------- |
---|
| 993 | |
---|
| 994 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER_2',0,ZHOOK_HANDLE) |
---|
| 995 | IF(CDACT == 'SET9TO0') THEN |
---|
| 996 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 997 | DO J=1,YDSC%NUMFLDS |
---|
| 998 | PFLD(:,YD(J)%MP9) = PFLD(:,YD(J)%MP0) |
---|
| 999 | ENDDO |
---|
| 1000 | ELSEIF(CDACT == 'SET1TO0') THEN |
---|
| 1001 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1002 | DO J=1,YDSC%NUMFLDS |
---|
| 1003 | PFLD(:,YD(J)%MP1) = PFLD(:,YD(J)%MP0) |
---|
| 1004 | ENDDO |
---|
| 1005 | ELSEIF(CDACT == 'SET1TO9') THEN |
---|
| 1006 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1007 | DO J=1,YDSC%NUMFLDS |
---|
| 1008 | PFLD(:,YD(J)%MP1) = PFLD(:,YD(J)%MP9) |
---|
| 1009 | ENDDO |
---|
| 1010 | ELSEIF(CDACT == 'SET1TO9AD') THEN |
---|
| 1011 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1012 | DO J=1,YDSC%NUMFLDS |
---|
| 1013 | PFLD(:,YD(J)%MP0) = PFLD(:,YD(J)%MP9)+PFLD(:,YD(J)%MP1) |
---|
| 1014 | PFLD(:,YD(J)%MP1) = 0.0_JPRB |
---|
| 1015 | ENDDO |
---|
| 1016 | ELSEIF(CDACT == 'SET0TO1') THEN |
---|
| 1017 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1018 | DO J=1,YDSC%NUMFLDS |
---|
| 1019 | PFLD(:,YD(J)%MP0) = PFLD(:,YD(J)%MP1) |
---|
| 1020 | ENDDO |
---|
| 1021 | ELSEIF(CDACT == 'SET0TO1AD') THEN |
---|
| 1022 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1023 | DO J=1,YDSC%NUMFLDS |
---|
| 1024 | PFLD(:,YD(J)%MP1) = PFLD(:,YD(J)%MP1)+PFLD(:,YD(J)%MP0) |
---|
| 1025 | PFLD(:,YD(J)%MP0) = 0.0_JPRB |
---|
| 1026 | ENDDO |
---|
| 1027 | ELSEIF(CDACT == 'SET9TO1') THEN |
---|
| 1028 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1029 | DO J=1,YDSC%NUMFLDS |
---|
| 1030 | PFLD(:,YD(J)%MP9) = PFLD(:,YD(J)%MP1) |
---|
| 1031 | ENDDO |
---|
| 1032 | ELSEIF(CDACT == 'PHTFILT') THEN |
---|
| 1033 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1034 | ZZPHY=1.0_JPRB-REPSP1 |
---|
| 1035 | DO J=1,YDSC%NUMFLDS |
---|
| 1036 | PFLD(:,YD(J)%MP9) = REPSP1*PFLD(:,YD(J)%MP1)+ZZPHY*PFLD(:,YD(J)%MP0) |
---|
| 1037 | PFLD(:,YD(J)%MP0) = PFLD(:,YD(J)%MP1) |
---|
| 1038 | ENDDO |
---|
| 1039 | ELSEIF(CDACT == 'PHTFILTAD') THEN |
---|
| 1040 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1041 | ZZPHY=1.0_JPRB-REPSP1 |
---|
| 1042 | DO J=1,YDSC%NUMFLDS |
---|
| 1043 | PFLD(:,YD(J)%MP1) = PFLD(:,YD(J)%MP1)+PFLD(:,YD(J)%MP0) |
---|
| 1044 | PFLD(:,YD(J)%MP0) = 0.0_JPRB |
---|
| 1045 | PFLD(:,YD(J)%MP1) = PFLD(:,YD(J)%MP1)+REPSP1*PFLD(:,YD(J)%MP9) |
---|
| 1046 | PFLD(:,YD(J)%MP0) = PFLD(:,YD(J)%MP0)+ZZPHY *PFLD(:,YD(J)%MP9) |
---|
| 1047 | PFLD(:,YD(J)%MP9) = 0.0_JPRB |
---|
| 1048 | ENDDO |
---|
| 1049 | ELSEIF(CDACT == 'SET0TOVAL') THEN |
---|
| 1050 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1051 | DO J=1,YDSC%NUMFLDS |
---|
| 1052 | PFLD(:,YD(J)%MP0) = YDCOM%VALUE |
---|
| 1053 | ENDDO |
---|
| 1054 | ELSEIF(CDACT == 'SET9TOVAL') THEN |
---|
| 1055 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1056 | DO J=1,YDSC%NUMFLDS |
---|
| 1057 | PFLD(:,YD(J)%MP9) = YDCOM%VALUE |
---|
| 1058 | ENDDO |
---|
| 1059 | ELSEIF(CDACT == 'SET1TOVAL') THEN |
---|
| 1060 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1061 | DO J=1,YDSC%NUMFLDS |
---|
| 1062 | PFLD(:,YD(J)%MP1) = YDCOM%VALUE |
---|
| 1063 | ENDDO |
---|
| 1064 | ELSEIF(CDACT == 'SETALLTOVAL') THEN |
---|
| 1065 | DO J=1,YDSC%NDIM |
---|
| 1066 | PFLD(:,J) = YDCOM%VALUE |
---|
| 1067 | ENDDO |
---|
| 1068 | ELSEIF(CDACT == 'SETDEFAULT') THEN |
---|
| 1069 | DO J=1,YDSC%NUMFLDS |
---|
| 1070 | IF(YD(J)%NREQIN == -1) THEN |
---|
| 1071 | PFLD(:,YD(J)%MP) = YD(J)%REFVALI |
---|
| 1072 | ENDIF |
---|
| 1073 | ENDDO |
---|
| 1074 | ELSEIF(CDACT == 'TRAJSTORE') THEN |
---|
| 1075 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1076 | IPTR = YDSC%NOFFTRAJ |
---|
| 1077 | DO J=1,YDSC%NUMFLDS |
---|
| 1078 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1079 | IPTR = IPTR+1 |
---|
| 1080 | PFIELD(:,IPTR) = PFLD(:,YD(J)%MP) |
---|
| 1081 | ENDIF |
---|
| 1082 | ENDDO |
---|
| 1083 | ENDIF |
---|
| 1084 | ELSEIF(CDACT == 'TRAJSTORECST') THEN |
---|
| 1085 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1086 | IPTR2 = YDSC%NOFFTRAJ_CST |
---|
| 1087 | DO J=1,YDSC%NUMFLDS |
---|
| 1088 | IF(YD(J)%ITRAJ == 2) THEN |
---|
| 1089 | IPTR2 = IPTR2+1 |
---|
| 1090 | PFIELD(:,IPTR2) = PFLD(:,YD(J)%MP) |
---|
| 1091 | ENDIF |
---|
| 1092 | ENDDO |
---|
| 1093 | ENDIF |
---|
| 1094 | ELSEIF(CDACT == 'SET0TOTRAJ') THEN |
---|
| 1095 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1096 | IPTR = YDSC%NOFFTRAJ |
---|
| 1097 | DO J=1,YDSC%NUMFLDS |
---|
| 1098 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1099 | IPTR = IPTR+1 |
---|
| 1100 | PFLD(:,YD(J)%MP) = PFIELD(:,IPTR) |
---|
| 1101 | ENDIF |
---|
| 1102 | ENDDO |
---|
| 1103 | ENDIF |
---|
| 1104 | ELSEIF(CDACT == 'GETTRAJ') THEN |
---|
| 1105 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1106 | IPTR = YDSC%NOFFTRAJ |
---|
| 1107 | IPTR2 = YDSC%NOFFTRAJ_CST |
---|
| 1108 | DO J=1,YDSC%NUMFLDS |
---|
| 1109 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1110 | IPTR = IPTR+1 |
---|
| 1111 | PFLD(:,YD(J)%MP5) = PFIELD(:,IPTR) |
---|
| 1112 | ELSEIF(YD(J)%ITRAJ == 2) THEN |
---|
| 1113 | IPTR2 = IPTR2+1 |
---|
| 1114 | PFLD(:,YD(J)%MP5) = PFIELD2(:,IPTR2) |
---|
| 1115 | ENDIF |
---|
| 1116 | ENDDO |
---|
| 1117 | ENDIF |
---|
| 1118 | ELSEIF(CDACT == 'GETALLFLDS') THEN |
---|
| 1119 | DO J=1,YDSC%NDIM |
---|
| 1120 | NPTRSURF = NPTRSURF+1 |
---|
| 1121 | PFIELD(:,NPTRSURF) = PFLD(:,J) |
---|
| 1122 | ENDDO |
---|
| 1123 | ELSEIF(CDACT == 'PUTALLFLDS') THEN |
---|
| 1124 | DO J=1,YDSC%NDIM |
---|
| 1125 | NPTRSURF = NPTRSURF+1 |
---|
| 1126 | PFLD(:,J) = PFIELD(:,NPTRSURF) |
---|
| 1127 | ENDDO |
---|
| 1128 | ELSEIF(CDACT == 'GETGRIBPOS') THEN |
---|
| 1129 | DO J=1,YDSC%NUMFLDS |
---|
| 1130 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1131 | IF(YD(J)%IGRBCODE == YDCOM%IGRBCODE) THEN |
---|
| 1132 | YDCOM%IFLDNUM = YDCOM%IPTRSURF |
---|
| 1133 | YDCOM%L_OK = .TRUE. |
---|
| 1134 | ENDIF |
---|
| 1135 | ENDDO |
---|
| 1136 | ELSEIF(CDACT == 'GETFIELD') THEN |
---|
| 1137 | DO J=1,YDSC%NUMFLDS |
---|
| 1138 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1139 | IF(YDCOM%IPTRSURF == YDCOM%IFLDNUM) THEN |
---|
| 1140 | PFIELD(:,1) = PFLD(:,J) |
---|
| 1141 | YDCOM%L_OK = .TRUE. |
---|
| 1142 | ENDIF |
---|
| 1143 | ENDDO |
---|
| 1144 | ELSEIF(CDACT == 'GRIBIN') THEN |
---|
| 1145 | DO J=1,YDSC%NUMFLDS |
---|
| 1146 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1147 | IF(YD(J)%NREQIN == 1) THEN |
---|
| 1148 | YDCOM%ICOUNT = YDCOM%ICOUNT+1 |
---|
| 1149 | YDCOM%ICODES(YDCOM%ICOUNT) = YD(J)%IGRBCODE |
---|
| 1150 | ENDIF |
---|
| 1151 | ENDDO |
---|
| 1152 | ELSE |
---|
| 1153 | WRITE(NULOUT,*) 'SURFACE_FIELD:GPPOPER UNKNOWN ACTION - ',CDACT |
---|
| 1154 | CALL ABOR1('SURFACE_FIELD:GPPOPER - UNKNOWN ACTION') |
---|
| 1155 | ENDIF |
---|
| 1156 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER_2',1,ZHOOK_HANDLE) |
---|
| 1157 | END SUBROUTINE GPOPER_2 |
---|
| 1158 | |
---|
| 1159 | !========================================================================= |
---|
| 1160 | |
---|
| 1161 | SUBROUTINE GPOPER_3(CDACT,PFLD,YDSC,YD,YDCOM,PFIELD,PFIELD2) |
---|
| 1162 | ! Operations on 3-D surface groups |
---|
| 1163 | CHARACTER(LEN=*),INTENT(IN) :: CDACT |
---|
| 1164 | REAL(KIND=JPRB),INTENT(INOUT) :: PFLD(:,:,:) |
---|
| 1165 | TYPE(TYPE_SURF_GEN),INTENT(IN) :: YDSC |
---|
| 1166 | TYPE(TYPE_SURF_MTL_3D),INTENT(IN) :: YD(:) |
---|
| 1167 | TYPE(TYPE_SFL_COMM),OPTIONAL,INTENT(INOUT) :: YDCOM |
---|
| 1168 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD(:,:) |
---|
| 1169 | REAL(KIND=JPRB),OPTIONAL,INTENT(INOUT) :: PFIELD2(:,:) |
---|
| 1170 | |
---|
| 1171 | INTEGER(KIND=JPIM) :: J,JLEV,IPTR,IPTR2 |
---|
| 1172 | REAL(KIND=JPRB) :: ZZPHY |
---|
| 1173 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 1174 | |
---|
| 1175 | !------------------------------------------------------------------------- |
---|
| 1176 | |
---|
| 1177 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER_3',0,ZHOOK_HANDLE) |
---|
| 1178 | IF(CDACT == 'SET9TO0') THEN |
---|
| 1179 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1180 | DO J=1,YDSC%NUMFLDS |
---|
| 1181 | PFLD(:,:,YD(J)%MP9) = PFLD(:,:,YD(J)%MP0) |
---|
| 1182 | ENDDO |
---|
| 1183 | ELSEIF(CDACT == 'SET1TO0') THEN |
---|
| 1184 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1185 | DO J=1,YDSC%NUMFLDS |
---|
| 1186 | PFLD(:,:,YD(J)%MP1) = PFLD(:,:,YD(J)%MP0) |
---|
| 1187 | ENDDO |
---|
| 1188 | ELSEIF(CDACT == 'SET1TO9') THEN |
---|
| 1189 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1190 | DO J=1,YDSC%NUMFLDS |
---|
| 1191 | PFLD(:,:,YD(J)%MP1) = PFLD(:,:,YD(J)%MP9) |
---|
| 1192 | ENDDO |
---|
| 1193 | ELSEIF(CDACT == 'SET1TO9AD') THEN |
---|
| 1194 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1195 | DO J=1,YDSC%NUMFLDS |
---|
| 1196 | PFLD(:,:,YD(J)%MP9) = PFLD(:,:,YD(J)%MP9)+PFLD(:,:,YD(J)%MP1) |
---|
| 1197 | PFLD(:,:,YD(J)%MP1) = 0.0_JPRB |
---|
| 1198 | ENDDO |
---|
| 1199 | ELSEIF(CDACT == 'SET0TO1') THEN |
---|
| 1200 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1201 | DO J=1,YDSC%NUMFLDS |
---|
| 1202 | PFLD(:,:,YD(J)%MP0) = PFLD(:,:,YD(J)%MP1) |
---|
| 1203 | ENDDO |
---|
| 1204 | ELSEIF(CDACT == 'SET0TO1AD') THEN |
---|
| 1205 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1206 | DO J=1,YDSC%NUMFLDS |
---|
| 1207 | PFLD(:,:,YD(J)%MP1) = PFLD(:,:,YD(J)%MP1)+PFLD(:,:,YD(J)%MP0) |
---|
| 1208 | PFLD(:,:,YD(J)%MP0) = 0.0_JPRB |
---|
| 1209 | ENDDO |
---|
| 1210 | ELSEIF(CDACT == 'SET9TO1') THEN |
---|
| 1211 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1212 | DO J=1,YDSC%NUMFLDS |
---|
| 1213 | PFLD(:,:,YD(J)%MP9) = PFLD(:,:,YD(J)%MP1) |
---|
| 1214 | ENDDO |
---|
| 1215 | ELSEIF(CDACT == 'PHTFILT') THEN |
---|
| 1216 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1217 | ZZPHY=1.0_JPRB-REPSP1 |
---|
| 1218 | DO J=1,YDSC%NUMFLDS |
---|
| 1219 | PFLD(:,:,YD(J)%MP9) = REPSP1*PFLD(:,:,YD(J)%MP1)+ZZPHY*PFLD(:,:,YD(J)%MP0) |
---|
| 1220 | PFLD(:,:,YD(J)%MP0) = PFLD(:,:,YD(J)%MP1) |
---|
| 1221 | ENDDO |
---|
| 1222 | ELSEIF(CDACT == 'PHTFILTAD') THEN |
---|
| 1223 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1224 | ZZPHY=1.0_JPRB-REPSP1 |
---|
| 1225 | DO J=1,YDSC%NUMFLDS |
---|
| 1226 | PFLD(:,:,YD(J)%MP1) = PFLD(:,:,YD(J)%MP1)+PFLD(:,:,YD(J)%MP0) |
---|
| 1227 | PFLD(:,:,YD(J)%MP0) = 0.0_JPRB |
---|
| 1228 | PFLD(:,:,YD(J)%MP1) = PFLD(:,:,YD(J)%MP1)+REPSP1*PFLD(:,:,YD(J)%MP9) |
---|
| 1229 | PFLD(:,:,YD(J)%MP0) = PFLD(:,:,YD(J)%MP0)+ZZPHY *PFLD(:,:,YD(J)%MP9) |
---|
| 1230 | PFLD(:,:,YD(J)%MP9) = 0.0_JPRB |
---|
| 1231 | ENDDO |
---|
| 1232 | ELSEIF(CDACT == 'SET0TOVAL') THEN |
---|
| 1233 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1234 | DO J=1,YDSC%NUMFLDS |
---|
| 1235 | PFLD(:,:,YD(J)%MP0) = YDCOM%VALUE |
---|
| 1236 | ENDDO |
---|
| 1237 | ELSEIF(CDACT == 'SET9TOVAL') THEN |
---|
| 1238 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1239 | DO J=1,YDSC%NUMFLDS |
---|
| 1240 | PFLD(:,:,YD(J)%MP9) = YDCOM%VALUE |
---|
| 1241 | ENDDO |
---|
| 1242 | ELSEIF(CDACT == 'SET1TOVAL') THEN |
---|
| 1243 | IF( .NOT. YDSC%LMTL) CALL ABOR1('SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL') |
---|
| 1244 | DO J=1,YDSC%NUMFLDS |
---|
| 1245 | PFLD(:,:,YD(J)%MP1) = YDCOM%VALUE |
---|
| 1246 | ENDDO |
---|
| 1247 | ELSEIF(CDACT == 'SETALLTOVAL') THEN |
---|
| 1248 | DO J=1,YDSC%NDIM |
---|
| 1249 | PFLD(:,:,J) = YDCOM%VALUE |
---|
| 1250 | ENDDO |
---|
| 1251 | ELSEIF(CDACT == 'SETDEFAULT') THEN |
---|
| 1252 | DO J=1,YDSC%NUMFLDS |
---|
| 1253 | DO JLEV=1,YDSC%NLEVS |
---|
| 1254 | IF(YD(J)%NREQIN(JLEV) == -1) THEN |
---|
| 1255 | PFLD(:,JLEV,YD(J)%MP) = YD(J)%REFVALI(JLEV) |
---|
| 1256 | ENDIF |
---|
| 1257 | ENDDO |
---|
| 1258 | ENDDO |
---|
| 1259 | ELSEIF(CDACT == 'TRAJSTORE') THEN |
---|
| 1260 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1261 | IPTR = YDSC%NOFFTRAJ |
---|
| 1262 | DO J=1,YDSC%NUMFLDS |
---|
| 1263 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1264 | DO JLEV=1,YDSC%NLEVS |
---|
| 1265 | IPTR = IPTR+1 |
---|
| 1266 | PFIELD(:,IPTR) = PFLD(:,JLEV,YD(J)%MP) |
---|
| 1267 | ENDDO |
---|
| 1268 | ENDIF |
---|
| 1269 | ENDDO |
---|
| 1270 | ENDIF |
---|
| 1271 | ELSEIF(CDACT == 'TRAJSTORECST') THEN |
---|
| 1272 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1273 | IPTR2 = YDSC%NOFFTRAJ_CST |
---|
| 1274 | DO J=1,YDSC%NUMFLDS |
---|
| 1275 | IF(YD(J)%ITRAJ == 2) THEN |
---|
| 1276 | DO JLEV=1,YDSC%NLEVS |
---|
| 1277 | IPTR2 = IPTR2+1 |
---|
| 1278 | PFIELD(:,IPTR2) = PFLD(:,JLEV,YD(J)%MP) |
---|
| 1279 | ENDDO |
---|
| 1280 | ENDIF |
---|
| 1281 | ENDDO |
---|
| 1282 | ENDIF |
---|
| 1283 | ELSEIF(CDACT == 'SET0TOTRAJ') THEN |
---|
| 1284 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1285 | IPTR = YDSC%NOFFTRAJ |
---|
| 1286 | DO J=1,YDSC%NUMFLDS |
---|
| 1287 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1288 | DO JLEV=1,YDSC%NLEVS |
---|
| 1289 | IPTR = IPTR+1 |
---|
| 1290 | PFLD(:,JLEV,YD(J)%MP) = PFIELD(:,IPTR) |
---|
| 1291 | ENDDO |
---|
| 1292 | ENDIF |
---|
| 1293 | ENDDO |
---|
| 1294 | ENDIF |
---|
| 1295 | ELSEIF(CDACT == 'GETTRAJ') THEN |
---|
| 1296 | IF(YDSC%NDIM5 > 0 ) THEN |
---|
| 1297 | IPTR = YDSC%NOFFTRAJ |
---|
| 1298 | IPTR2 = YDSC%NOFFTRAJ_CST |
---|
| 1299 | DO J=1,YDSC%NUMFLDS |
---|
| 1300 | IF(YD(J)%ITRAJ == 1) THEN |
---|
| 1301 | DO JLEV=1,YDSC%NLEVS |
---|
| 1302 | IPTR = IPTR+1 |
---|
| 1303 | PFLD(:,JLEV,YD(J)%MP5) = PFIELD(:,IPTR) |
---|
| 1304 | ENDDO |
---|
| 1305 | ELSEIF(YD(J)%ITRAJ == 2) THEN |
---|
| 1306 | DO JLEV=1,YDSC%NLEVS |
---|
| 1307 | IPTR2 = IPTR2+1 |
---|
| 1308 | PFLD(:,JLEV,YD(J)%MP5) = PFIELD2(:,IPTR2) |
---|
| 1309 | ENDDO |
---|
| 1310 | ENDIF |
---|
| 1311 | ENDDO |
---|
| 1312 | ENDIF |
---|
| 1313 | ELSEIF(CDACT == 'GETALLFLDS') THEN |
---|
| 1314 | DO J=1,YDSC%NDIM |
---|
| 1315 | DO JLEV=1,YDSC%NLEVS |
---|
| 1316 | NPTRSURF = NPTRSURF+1 |
---|
| 1317 | PFIELD(:,NPTRSURF) = PFLD(:,JLEV,J) |
---|
| 1318 | ENDDO |
---|
| 1319 | ENDDO |
---|
| 1320 | ELSEIF(CDACT == 'PUTALLFLDS') THEN |
---|
| 1321 | DO J=1,YDSC%NDIM |
---|
| 1322 | DO JLEV=1,YDSC%NLEVS |
---|
| 1323 | NPTRSURF = NPTRSURF+1 |
---|
| 1324 | PFLD(:,JLEV,J) = PFIELD(:,NPTRSURF) |
---|
| 1325 | ENDDO |
---|
| 1326 | ENDDO |
---|
| 1327 | ELSEIF(CDACT == 'GETGRIBPOS') THEN |
---|
| 1328 | DO J=1,YDSC%NUMFLDS |
---|
| 1329 | DO JLEV=1,YDSC%NLEVS |
---|
| 1330 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1331 | IF(YD(J)%IGRBCODE(JLEV) == YDCOM%IGRBCODE) THEN |
---|
| 1332 | YDCOM%IFLDNUM = YDCOM%IPTRSURF |
---|
| 1333 | YDCOM%L_OK = .TRUE. |
---|
| 1334 | ENDIF |
---|
| 1335 | ENDDO |
---|
| 1336 | ENDDO |
---|
| 1337 | ELSEIF(CDACT == 'GETFIELD') THEN |
---|
| 1338 | DO J=1,YDSC%NUMFLDS |
---|
| 1339 | DO JLEV=1,YDSC%NLEVS |
---|
| 1340 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1341 | IF(YDCOM%IPTRSURF == YDCOM%IFLDNUM) THEN |
---|
| 1342 | PFIELD(:,1) = PFLD(:,JLEV,J) |
---|
| 1343 | YDCOM%L_OK = .TRUE. |
---|
| 1344 | ENDIF |
---|
| 1345 | ENDDO |
---|
| 1346 | ENDDO |
---|
| 1347 | ELSEIF(CDACT == 'GRIBIN') THEN |
---|
| 1348 | DO J=1,YDSC%NUMFLDS |
---|
| 1349 | DO JLEV=1,YDSC%NLEVS |
---|
| 1350 | YDCOM%IPTRSURF = YDCOM%IPTRSURF+1 |
---|
| 1351 | IF(YD(J)%NREQIN(JLEV) == 1) THEN |
---|
| 1352 | YDCOM%ICOUNT = YDCOM%ICOUNT+1 |
---|
| 1353 | YDCOM%ICODES(YDCOM%ICOUNT) = YD(J)%IGRBCODE(JLEV) |
---|
| 1354 | ENDIF |
---|
| 1355 | ENDDO |
---|
| 1356 | ENDDO |
---|
| 1357 | ELSE |
---|
| 1358 | WRITE(NULOUT,*) 'SURFACE_FIELD:GPPOPER UNKNOWN ACTION - ',CDACT |
---|
| 1359 | CALL ABOR1('SURFACE_FIELD:GPPOPER - UNKNOWN ACTION') |
---|
| 1360 | ENDIF |
---|
| 1361 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:GPOPER_3',1,ZHOOK_HANDLE) |
---|
| 1362 | END SUBROUTINE GPOPER_3 |
---|
| 1363 | |
---|
| 1364 | !========================================================================= |
---|
| 1365 | |
---|
| 1366 | SUBROUTINE SURF_STORE |
---|
| 1367 | ! Store all surface fields |
---|
| 1368 | INTEGER(KIND=JPIM) :: JBL |
---|
| 1369 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 1370 | |
---|
| 1371 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SURF_STORE',0,ZHOOK_HANDLE) |
---|
| 1372 | ALLOCATE(SURF_STORE_ARRAY(NPROMA,NDIMSURFL,NGPBLKS)) |
---|
| 1373 | DO JBL=1,NGPBLKS |
---|
| 1374 | CALL GPOPER('GETALLFLDS',KBL=JBL,PFIELD=SURF_STORE_ARRAY(:,:,JBL)) |
---|
| 1375 | ENDDO |
---|
| 1376 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SURF_STORE',1,ZHOOK_HANDLE) |
---|
| 1377 | END SUBROUTINE SURF_STORE |
---|
| 1378 | |
---|
| 1379 | !========================================================================= |
---|
| 1380 | |
---|
| 1381 | SUBROUTINE SURF_RESTORE |
---|
| 1382 | ! Restore all surface fields |
---|
| 1383 | INTEGER(KIND=JPIM) :: JBL |
---|
| 1384 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 1385 | |
---|
| 1386 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SURF_RESTORE',0,ZHOOK_HANDLE) |
---|
| 1387 | IF(.NOT. ALLOCATED(SURF_STORE_ARRAY)) & |
---|
| 1388 | & CALL ABOR1('SURFACE_FIELDS:SURF_RESTORE - SURF_STORE NOT ALLOCATED') |
---|
| 1389 | DO JBL=1,NGPBLKS |
---|
| 1390 | CALL GPOPER('PUTALLFLDS',KBL=JBL,PFIELD=SURF_STORE_ARRAY(:,:,JBL)) |
---|
| 1391 | ENDDO |
---|
| 1392 | DEALLOCATE(SURF_STORE_ARRAY) |
---|
| 1393 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:SURF_RESTORE',1,ZHOOK_HANDLE) |
---|
| 1394 | |
---|
| 1395 | END SUBROUTINE SURF_RESTORE |
---|
| 1396 | |
---|
| 1397 | !========================================================================= |
---|
| 1398 | |
---|
| 1399 | SUBROUTINE ALLO_SURF |
---|
| 1400 | ! Allocate surface field arrays |
---|
| 1401 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 1402 | |
---|
| 1403 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:ALLO_SURF',0,ZHOOK_HANDLE) |
---|
| 1404 | ALLOCATE(SP_SB(NPROMA,YSP_SBD%NLEVS,YSP_SBD%NDIM,NGPBLKS)) |
---|
| 1405 | ALLOCATE(SP_SG(NPROMA,YSP_SGD%NDIM,NGPBLKS)) |
---|
| 1406 | ALLOCATE(SP_RR(NPROMA,YSP_RRD%NDIM,NGPBLKS)) |
---|
| 1407 | ALLOCATE(SP_EP(NPROMA,YSP_EPD%NLEVS,YSP_EPD%NDIM,NGPBLKS)) |
---|
| 1408 | ALLOCATE(SP_X2(NPROMA,YSP_X2D%NDIM,NGPBLKS)) |
---|
| 1409 | ALLOCATE(SP_CI(NPROMA,YSP_CID%NDIM,NGPBLKS)) |
---|
| 1410 | ALLOCATE(SD_VF(NPROMA,YSD_VFD%NDIM,NGPBLKS)) |
---|
| 1411 | ALLOCATE(SD_VP(NPROMA,YSD_VPD%NDIM,NGPBLKS)) |
---|
| 1412 | ALLOCATE(SD_VV(NPROMA,YSD_VVD%NDIM,NGPBLKS)) |
---|
| 1413 | ALLOCATE(SD_VN(NPROMA,YSD_VND%NDIM,NGPBLKS)) |
---|
| 1414 | ALLOCATE(SD_VH(NPROMA,YSD_VHD%NDIM,NGPBLKS)) |
---|
| 1415 | ALLOCATE(SD_VA(NPROMA,YSD_VAD%NDIM,NGPBLKS)) |
---|
| 1416 | ALLOCATE(SD_VC(NPROMA,YSD_VCD%NDIM,NGPBLKS)) |
---|
| 1417 | ALLOCATE(SD_VD(NPROMA,YSD_VDD%NDIM,NGPBLKS)) |
---|
| 1418 | ALLOCATE(SD_WS(NPROMA,YSD_WSD%NDIM,NGPBLKS)) |
---|
| 1419 | ALLOCATE(SD_XA(NPROMA,YSD_XAD%NLEVS,YSD_XAD%NDIM,NGPBLKS)) |
---|
| 1420 | ALLOCATE(SD_X2(NPROMA,YSD_X2D%NDIM,NGPBLKS)) |
---|
| 1421 | ALLOCATE(SD_VX(NPROMA,YSD_VXD%NDIM,NGPBLKS)) |
---|
| 1422 | |
---|
| 1423 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:ALLO_SURF',1,ZHOOK_HANDLE) |
---|
| 1424 | END SUBROUTINE ALLO_SURF |
---|
| 1425 | |
---|
| 1426 | !========================================================================= |
---|
| 1427 | |
---|
| 1428 | SUBROUTINE DEALLO_SURF |
---|
| 1429 | ! Deallocate surface field arrays |
---|
| 1430 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 1431 | |
---|
| 1432 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:DEALLO_SURF',0,ZHOOK_HANDLE) |
---|
| 1433 | IF(ALLOCATED(SP_SB)) DEALLOCATE(SP_SB) |
---|
| 1434 | IF(ALLOCATED(SP_SG)) DEALLOCATE(SP_SG) |
---|
| 1435 | IF(ALLOCATED(SP_RR)) DEALLOCATE(SP_RR) |
---|
| 1436 | IF(ALLOCATED(SP_EP)) DEALLOCATE(SP_EP) |
---|
| 1437 | IF(ALLOCATED(SP_X2)) DEALLOCATE(SP_X2) |
---|
| 1438 | IF(ALLOCATED(SP_CI)) DEALLOCATE(SP_CI) |
---|
| 1439 | IF(ALLOCATED(SD_VF)) DEALLOCATE(SD_VF) |
---|
| 1440 | IF(ALLOCATED(SD_VP)) DEALLOCATE(SD_VP) |
---|
| 1441 | IF(ALLOCATED(SD_VV)) DEALLOCATE(SD_VV) |
---|
| 1442 | IF(ALLOCATED(SD_VN)) DEALLOCATE(SD_VN) |
---|
| 1443 | IF(ALLOCATED(SD_VH)) DEALLOCATE(SD_VH) |
---|
| 1444 | IF(ALLOCATED(SD_VA)) DEALLOCATE(SD_VA) |
---|
| 1445 | IF(ALLOCATED(SD_VC)) DEALLOCATE(SD_VC) |
---|
| 1446 | IF(ALLOCATED(SD_VD)) DEALLOCATE(SD_VD) |
---|
| 1447 | IF(ALLOCATED(SD_WS)) DEALLOCATE(SD_WS) |
---|
| 1448 | IF(ALLOCATED(SD_XA)) DEALLOCATE(SD_XA) |
---|
| 1449 | IF(ALLOCATED(SD_X2)) DEALLOCATE(SD_X2) |
---|
| 1450 | IF(ALLOCATED(SD_VX)) DEALLOCATE(SD_VX) |
---|
| 1451 | IF (LHOOK) CALL DR_HOOK('SURFACE_FIELDS:DEALLO_SURF',1,ZHOOK_HANDLE) |
---|
| 1452 | END SUBROUTINE DEALLO_SURF |
---|
| 1453 | |
---|
| 1454 | !========================================================================= |
---|
| 1455 | |
---|
| 1456 | END MODULE SURFACE_FIELDS |
---|