| 1 | !WRF:MODEL_LAYER:BOUNDARY |
|---|
| 2 | ! |
|---|
| 3 | MODULE module_bc_em |
|---|
| 4 | |
|---|
| 5 | USE module_bc |
|---|
| 6 | USE module_configure |
|---|
| 7 | USE module_wrf_error |
|---|
| 8 | |
|---|
| 9 | CONTAINS |
|---|
| 10 | |
|---|
| 11 | !------------------------------------------------------------------------ |
|---|
| 12 | |
|---|
| 13 | SUBROUTINE spec_bdyupdate_ph( ph_save, field, & |
|---|
| 14 | field_tend, mu_tend, muts, dt, & |
|---|
| 15 | variable_in, config_flags, & |
|---|
| 16 | spec_zone, & |
|---|
| 17 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 18 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 19 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 20 | its,ite, jts,jte, kts,kte ) |
|---|
| 21 | |
|---|
| 22 | ! This subroutine adds the tendencies in the boundary specified region. |
|---|
| 23 | ! spec_zone is the width of the outer specified b.c.s that are set here. |
|---|
| 24 | ! (JD August 2000) |
|---|
| 25 | |
|---|
| 26 | IMPLICIT NONE |
|---|
| 27 | |
|---|
| 28 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 29 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 30 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 31 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 32 | INTEGER, INTENT(IN ) :: spec_zone |
|---|
| 33 | CHARACTER, INTENT(IN ) :: variable_in |
|---|
| 34 | REAL, INTENT(IN ) :: dt |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(INOUT) :: field |
|---|
| 38 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(IN ) :: field_tend, ph_save |
|---|
| 39 | REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ) :: mu_tend, muts |
|---|
| 40 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 41 | |
|---|
| 42 | CHARACTER :: variable |
|---|
| 43 | INTEGER :: i, j, k, ibs, ibe, jbs, jbe, itf, jtf, ktf |
|---|
| 44 | INTEGER :: b_dist, b_limit |
|---|
| 45 | |
|---|
| 46 | ! Local array |
|---|
| 47 | |
|---|
| 48 | REAL, DIMENSION( its:ite , jts:jte ) :: mu_old |
|---|
| 49 | LOGICAL :: periodic_x |
|---|
| 50 | |
|---|
| 51 | periodic_x = config_flags%periodic_x |
|---|
| 52 | |
|---|
| 53 | variable = variable_in |
|---|
| 54 | |
|---|
| 55 | IF (variable == 'U') variable = 'u' |
|---|
| 56 | IF (variable == 'V') variable = 'v' |
|---|
| 57 | IF (variable == 'M') variable = 'm' |
|---|
| 58 | IF (variable == 'H') variable = 'h' |
|---|
| 59 | |
|---|
| 60 | ibs = ids |
|---|
| 61 | ibe = ide-1 |
|---|
| 62 | itf = min(ite,ide-1) |
|---|
| 63 | jbs = jds |
|---|
| 64 | jbe = jde-1 |
|---|
| 65 | jtf = min(jte,jde-1) |
|---|
| 66 | ktf = kde-1 |
|---|
| 67 | IF (variable == 'u') ibe = ide |
|---|
| 68 | IF (variable == 'u') itf = min(ite,ide) |
|---|
| 69 | IF (variable == 'v') jbe = jde |
|---|
| 70 | IF (variable == 'v') jtf = min(jte,jde) |
|---|
| 71 | IF (variable == 'm') ktf = kte |
|---|
| 72 | IF (variable == 'h') ktf = kte |
|---|
| 73 | |
|---|
| 74 | IF (jts - jbs .lt. spec_zone) THEN |
|---|
| 75 | ! Y-start boundary |
|---|
| 76 | DO j = jts, min(jtf,jbs+spec_zone-1) |
|---|
| 77 | b_dist = j - jbs |
|---|
| 78 | b_limit = b_dist |
|---|
| 79 | IF(periodic_x)b_limit = 0 |
|---|
| 80 | DO k = kts, ktf |
|---|
| 81 | DO i = max(its,b_limit+ibs), min(itf,ibe-b_limit) |
|---|
| 82 | |
|---|
| 83 | mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j) |
|---|
| 84 | |
|---|
| 85 | field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + & |
|---|
| 86 | dt*field_tend(i,k,j)/muts(i,j) + & |
|---|
| 87 | ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.) |
|---|
| 88 | |
|---|
| 89 | ENDDO |
|---|
| 90 | ENDDO |
|---|
| 91 | ENDDO |
|---|
| 92 | ENDIF |
|---|
| 93 | IF (jbe - jtf .lt. spec_zone) THEN |
|---|
| 94 | ! Y-end boundary |
|---|
| 95 | DO j = max(jts,jbe-spec_zone+1), jtf |
|---|
| 96 | b_dist = jbe - j |
|---|
| 97 | b_limit = b_dist |
|---|
| 98 | IF(periodic_x)b_limit = 0 |
|---|
| 99 | DO k = kts, ktf |
|---|
| 100 | DO i = max(its,b_limit+ibs), min(itf,ibe-b_limit) |
|---|
| 101 | |
|---|
| 102 | mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j) |
|---|
| 103 | |
|---|
| 104 | field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + & |
|---|
| 105 | dt*field_tend(i,k,j)/muts(i,j) + & |
|---|
| 106 | ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.) |
|---|
| 107 | |
|---|
| 108 | ENDDO |
|---|
| 109 | ENDDO |
|---|
| 110 | ENDDO |
|---|
| 111 | ENDIF |
|---|
| 112 | |
|---|
| 113 | IF(.NOT.periodic_x)THEN |
|---|
| 114 | IF (its - ibs .lt. spec_zone) THEN |
|---|
| 115 | ! X-start boundary |
|---|
| 116 | DO i = its, min(itf,ibs+spec_zone-1) |
|---|
| 117 | b_dist = i - ibs |
|---|
| 118 | DO k = kts, ktf |
|---|
| 119 | DO j = max(jts,b_dist+jbs+1), min(jtf,jbe-b_dist-1) |
|---|
| 120 | |
|---|
| 121 | mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j) |
|---|
| 122 | |
|---|
| 123 | field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + & |
|---|
| 124 | dt*field_tend(i,k,j)/muts(i,j) + & |
|---|
| 125 | ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.) |
|---|
| 126 | |
|---|
| 127 | ENDDO |
|---|
| 128 | ENDDO |
|---|
| 129 | ENDDO |
|---|
| 130 | ENDIF |
|---|
| 131 | |
|---|
| 132 | IF (ibe - itf .lt. spec_zone) THEN |
|---|
| 133 | ! X-end boundary |
|---|
| 134 | DO i = max(its,ibe-spec_zone+1), itf |
|---|
| 135 | b_dist = ibe - i |
|---|
| 136 | DO k = kts, ktf |
|---|
| 137 | DO j = max(jts,b_dist+jbs+1), min(jtf,jbe-b_dist-1) |
|---|
| 138 | |
|---|
| 139 | mu_old(i,j) = muts(i,j) - dt*mu_tend(i,j) |
|---|
| 140 | |
|---|
| 141 | field(i,k,j) = field(i,k,j)*mu_old(i,j)/muts(i,j) + & |
|---|
| 142 | dt*field_tend(i,k,j)/muts(i,j) + & |
|---|
| 143 | ph_save(i,k,j)*(mu_old(i,j)/muts(i,j) - 1.) |
|---|
| 144 | |
|---|
| 145 | ENDDO |
|---|
| 146 | ENDDO |
|---|
| 147 | ENDDO |
|---|
| 148 | ENDIF |
|---|
| 149 | ENDIF |
|---|
| 150 | |
|---|
| 151 | END SUBROUTINE spec_bdyupdate_ph |
|---|
| 152 | |
|---|
| 153 | !------------------------------------------------------------------------ |
|---|
| 154 | |
|---|
| 155 | SUBROUTINE relax_bdy_dry ( config_flags, & |
|---|
| 156 | ru_tendf, rv_tendf, ph_tendf, t_tendf, & |
|---|
| 157 | rw_tendf, mu_tend, & |
|---|
| 158 | ru, rv, ph, t, & |
|---|
| 159 | w, mu, mut, & |
|---|
| 160 | u_b, v_b, ph_b, t_b, & |
|---|
| 161 | w_b, mu_b, & |
|---|
| 162 | u_bt, v_bt, ph_bt, t_bt, & |
|---|
| 163 | w_bt, mu_bt, & |
|---|
| 164 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 165 | dtbc, fcx, gcx, & |
|---|
| 166 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 167 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 168 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 169 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 170 | its, ite, jts, jte, kts, kte) |
|---|
| 171 | IMPLICIT NONE |
|---|
| 172 | |
|---|
| 173 | ! Input data. |
|---|
| 174 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 175 | |
|---|
| 176 | INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, & |
|---|
| 177 | ims, ime, jms, jme, kms, kme, & |
|---|
| 178 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 179 | its, ite, jts, jte, kts, kte |
|---|
| 180 | INTEGER , INTENT(IN ) :: ijds, ijde |
|---|
| 181 | INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone, relax_zone |
|---|
| 182 | |
|---|
| 183 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(IN ) :: ru, & |
|---|
| 184 | rv, & |
|---|
| 185 | ph, & |
|---|
| 186 | w, & |
|---|
| 187 | t |
|---|
| 188 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: mu , & |
|---|
| 189 | mut |
|---|
| 190 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: ru_tendf, & |
|---|
| 191 | rv_tendf, & |
|---|
| 192 | ph_tendf, & |
|---|
| 193 | rw_tendf, & |
|---|
| 194 | t_tendf |
|---|
| 195 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: mu_tend |
|---|
| 196 | REAL , DIMENSION( spec_bdy_width) , INTENT(IN ) :: fcx, gcx |
|---|
| 197 | |
|---|
| 198 | REAL, DIMENSION( ijds:ijde , kds:kde , spec_bdy_width, 4 ), INTENT(IN ) :: u_b, & |
|---|
| 199 | v_b, & |
|---|
| 200 | ph_b, & |
|---|
| 201 | w_b, & |
|---|
| 202 | t_b, & |
|---|
| 203 | u_bt, & |
|---|
| 204 | v_bt, & |
|---|
| 205 | ph_bt, & |
|---|
| 206 | w_bt, & |
|---|
| 207 | t_bt |
|---|
| 208 | |
|---|
| 209 | REAL, DIMENSION( ijds:ijde , 1:1 , spec_bdy_width, 4 ), INTENT(IN ) :: mu_b, & |
|---|
| 210 | mu_bt |
|---|
| 211 | REAL, INTENT(IN ) :: dtbc |
|---|
| 212 | |
|---|
| 213 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) :: rfield |
|---|
| 214 | INTEGER :: i_start, i_end, j_start, j_end, i, j, k |
|---|
| 215 | |
|---|
| 216 | CALL relax_bdytend ( ru, ru_tendf, & |
|---|
| 217 | u_b, u_bt, & |
|---|
| 218 | 'u' , config_flags, & |
|---|
| 219 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 220 | dtbc, fcx, gcx, & |
|---|
| 221 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 222 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 223 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 224 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 225 | its,ite, jts,jte, kts,kte ) |
|---|
| 226 | CALL relax_bdytend ( rv, rv_tendf, & |
|---|
| 227 | v_b, v_bt, & |
|---|
| 228 | 'v' , config_flags, & |
|---|
| 229 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 230 | dtbc, fcx, gcx, & |
|---|
| 231 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 232 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 233 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 234 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 235 | its,ite, jts,jte, kts,kte ) |
|---|
| 236 | |
|---|
| 237 | ! rfield will be calculated beyond tile limits because relax_bdytend |
|---|
| 238 | ! requires a 5-point stencil, and this avoids need for inter-tile/patch |
|---|
| 239 | ! communication here |
|---|
| 240 | i_start = max(its-1, ids) |
|---|
| 241 | i_end = min(ite+1, ide-1) |
|---|
| 242 | j_start = max(jts-1, jds) |
|---|
| 243 | j_end = min(jte+1, jde-1) |
|---|
| 244 | |
|---|
| 245 | DO j=j_start,j_end |
|---|
| 246 | DO k=kts,kte |
|---|
| 247 | DO i=i_start,i_end |
|---|
| 248 | rfield(i,k,j) = ph(i,k,j)*mut(i,j) |
|---|
| 249 | ENDDO |
|---|
| 250 | ENDDO |
|---|
| 251 | ENDDO |
|---|
| 252 | |
|---|
| 253 | CALL relax_bdytend ( rfield, ph_tendf, & |
|---|
| 254 | ph_b, ph_bt, & |
|---|
| 255 | 'h' , config_flags, & |
|---|
| 256 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 257 | dtbc, fcx, gcx, & |
|---|
| 258 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 259 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 260 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 261 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 262 | its,ite, jts,jte, kts,kte ) |
|---|
| 263 | DO j=j_start,j_end |
|---|
| 264 | DO k=kts,kte-1 |
|---|
| 265 | DO i=i_start,i_end |
|---|
| 266 | rfield(i,k,j) = t(i,k,j)*mut(i,j) |
|---|
| 267 | ENDDO |
|---|
| 268 | ENDDO |
|---|
| 269 | ENDDO |
|---|
| 270 | CALL relax_bdytend ( rfield, t_tendf, & |
|---|
| 271 | t_b, t_bt, & |
|---|
| 272 | 't' , config_flags, & |
|---|
| 273 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 274 | dtbc, fcx, gcx, & |
|---|
| 275 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 276 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 277 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 278 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 279 | its,ite, jts,jte, kts,kte ) |
|---|
| 280 | CALL relax_bdytend ( mu, mu_tend, & |
|---|
| 281 | mu_b, mu_bt, & |
|---|
| 282 | 'm' , config_flags, & |
|---|
| 283 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 284 | dtbc, fcx, gcx, & |
|---|
| 285 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 286 | ids,ide, jds,jde, 1 ,1 , & ! domain dims |
|---|
| 287 | ims,ime, jms,jme, 1 ,1 , & ! memory dims |
|---|
| 288 | ips,ipe, jps,jpe, 1 ,1 , & ! patch dims |
|---|
| 289 | its,ite, jts,jte, 1 ,1 ) |
|---|
| 290 | |
|---|
| 291 | IF( config_flags%nested) THEN |
|---|
| 292 | |
|---|
| 293 | i_start = max(its-1, ids) |
|---|
| 294 | i_end = min(ite+1, ide-1) |
|---|
| 295 | j_start = max(jts-1, jds) |
|---|
| 296 | j_end = min(jte+1, jde-1) |
|---|
| 297 | |
|---|
| 298 | DO j=j_start,j_end |
|---|
| 299 | DO k=kts,kte |
|---|
| 300 | DO i=i_start,i_end |
|---|
| 301 | rfield(i,k,j) = w(i,k,j)*mut(i,j) |
|---|
| 302 | ENDDO |
|---|
| 303 | ENDDO |
|---|
| 304 | ENDDO |
|---|
| 305 | |
|---|
| 306 | CALL relax_bdytend ( rfield, rw_tendf, & |
|---|
| 307 | w_b, w_bt, & |
|---|
| 308 | 'h' , config_flags, & |
|---|
| 309 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 310 | dtbc, fcx, gcx, & |
|---|
| 311 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 312 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 313 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 314 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 315 | its,ite, jts,jte, kts,kte ) |
|---|
| 316 | |
|---|
| 317 | END IF |
|---|
| 318 | |
|---|
| 319 | END SUBROUTINE relax_bdy_dry |
|---|
| 320 | !------------------------------------------------------------------------ |
|---|
| 321 | SUBROUTINE relax_bdy_scalar ( scalar_tend, & |
|---|
| 322 | scalar, mu, & |
|---|
| 323 | scalar_b, scalar_bt, & |
|---|
| 324 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 325 | dtbc, fcx, gcx, & |
|---|
| 326 | config_flags, & |
|---|
| 327 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 328 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 329 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 330 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 331 | its, ite, jts, jte, kts, kte) |
|---|
| 332 | IMPLICIT NONE |
|---|
| 333 | |
|---|
| 334 | ! Input data. |
|---|
| 335 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 336 | |
|---|
| 337 | INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, & |
|---|
| 338 | ims, ime, jms, jme, kms, kme, & |
|---|
| 339 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 340 | its, ite, jts, jte, kts, kte |
|---|
| 341 | INTEGER , INTENT(IN ) :: ijds, ijde |
|---|
| 342 | INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone, relax_zone |
|---|
| 343 | |
|---|
| 344 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(IN ) :: scalar |
|---|
| 345 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: mu |
|---|
| 346 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: scalar_tend |
|---|
| 347 | REAL , DIMENSION( spec_bdy_width) , INTENT(IN ) :: fcx, gcx |
|---|
| 348 | |
|---|
| 349 | REAL, DIMENSION( ijds:ijde , kds:kde , spec_bdy_width, 4 ), INTENT(IN ) :: scalar_b, & |
|---|
| 350 | scalar_bt |
|---|
| 351 | REAL, INTENT(IN ) :: dtbc |
|---|
| 352 | !Local |
|---|
| 353 | INTEGER :: i,j,k, i_start, i_end, j_start, j_end |
|---|
| 354 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) :: rscalar |
|---|
| 355 | |
|---|
| 356 | ! rscalar will be calculated beyond tile limits because relax_bdytend |
|---|
| 357 | ! requires a 5-point stencil, and this avoids need for inter-tile/patch |
|---|
| 358 | ! communication here |
|---|
| 359 | i_start = max(its-1, ids) |
|---|
| 360 | i_end = min(ite+1, ide-1) |
|---|
| 361 | j_start = max(jts-1, jds) |
|---|
| 362 | j_end = min(jte+1, jde-1) |
|---|
| 363 | |
|---|
| 364 | DO j=j_start,j_end |
|---|
| 365 | DO k=kts,min(kte,kde-1) |
|---|
| 366 | DO i=i_start,i_end |
|---|
| 367 | rscalar(i,k,j) = scalar(i,k,j)*mu(i,j) |
|---|
| 368 | ENDDO |
|---|
| 369 | ENDDO |
|---|
| 370 | ENDDO |
|---|
| 371 | |
|---|
| 372 | CALL relax_bdytend (rscalar, scalar_tend, & |
|---|
| 373 | scalar_b, scalar_bt, & |
|---|
| 374 | 'q' , config_flags, & |
|---|
| 375 | spec_bdy_width, spec_zone, relax_zone, & |
|---|
| 376 | dtbc, fcx, gcx, & |
|---|
| 377 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 378 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 379 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 380 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 381 | its,ite, jts,jte, kts,kte ) |
|---|
| 382 | |
|---|
| 383 | |
|---|
| 384 | END SUBROUTINE relax_bdy_scalar |
|---|
| 385 | |
|---|
| 386 | !------------------------------------------------------------------------ |
|---|
| 387 | SUBROUTINE spec_bdy_dry ( config_flags, & |
|---|
| 388 | ru_tend, rv_tend, ph_tend, t_tend, & |
|---|
| 389 | rw_tend, mu_tend, & |
|---|
| 390 | u_b, v_b, ph_b, t_b, & |
|---|
| 391 | w_b, mu_b, & |
|---|
| 392 | u_bt, v_bt, ph_bt, t_bt, & |
|---|
| 393 | w_bt, mu_bt, & |
|---|
| 394 | spec_bdy_width, spec_zone, & |
|---|
| 395 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 396 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 397 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 398 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 399 | its, ite, jts, jte, kts, kte) |
|---|
| 400 | IMPLICIT NONE |
|---|
| 401 | |
|---|
| 402 | ! Input data. |
|---|
| 403 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 404 | |
|---|
| 405 | |
|---|
| 406 | INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, & |
|---|
| 407 | ims, ime, jms, jme, kms, kme, & |
|---|
| 408 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 409 | its, ite, jts, jte, kts, kte |
|---|
| 410 | INTEGER , INTENT(IN ) :: ijds, ijde |
|---|
| 411 | INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone |
|---|
| 412 | |
|---|
| 413 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(OUT ) :: ru_tend, & |
|---|
| 414 | rv_tend, & |
|---|
| 415 | ph_tend, & |
|---|
| 416 | rw_tend, & |
|---|
| 417 | t_tend |
|---|
| 418 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: mu_tend |
|---|
| 419 | REAL, DIMENSION( ijds:ijde , kds:kde , spec_bdy_width, 4 ), INTENT(IN ) :: u_b, & |
|---|
| 420 | v_b, & |
|---|
| 421 | ph_b, & |
|---|
| 422 | w_b, & |
|---|
| 423 | t_b, & |
|---|
| 424 | u_bt, & |
|---|
| 425 | v_bt, & |
|---|
| 426 | ph_bt, & |
|---|
| 427 | w_bt, & |
|---|
| 428 | t_bt |
|---|
| 429 | |
|---|
| 430 | REAL, DIMENSION( ijds:ijde , 1:1 , spec_bdy_width, 4 ), INTENT(IN ) :: mu_b, & |
|---|
| 431 | mu_bt |
|---|
| 432 | |
|---|
| 433 | CALL spec_bdytend ( ru_tend, & |
|---|
| 434 | u_b, u_bt, & |
|---|
| 435 | 'u' , config_flags, & |
|---|
| 436 | spec_bdy_width, spec_zone, & |
|---|
| 437 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 438 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 439 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 440 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 441 | its,ite, jts,jte, kts,kte ) |
|---|
| 442 | CALL spec_bdytend ( rv_tend, & |
|---|
| 443 | v_b, v_bt, & |
|---|
| 444 | 'v' , config_flags, & |
|---|
| 445 | spec_bdy_width, spec_zone, & |
|---|
| 446 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 447 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 448 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 449 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 450 | its,ite, jts,jte, kts,kte ) |
|---|
| 451 | CALL spec_bdytend ( ph_tend, & |
|---|
| 452 | ph_b, ph_bt, & |
|---|
| 453 | 'h' , config_flags, & |
|---|
| 454 | spec_bdy_width, spec_zone, & |
|---|
| 455 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 456 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 457 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 458 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 459 | its,ite, jts,jte, kts,kte ) |
|---|
| 460 | CALL spec_bdytend ( t_tend, & |
|---|
| 461 | t_b, t_bt, & |
|---|
| 462 | 't' , config_flags, & |
|---|
| 463 | spec_bdy_width, spec_zone, & |
|---|
| 464 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 465 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 466 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 467 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 468 | its,ite, jts,jte, kts,kte ) |
|---|
| 469 | CALL spec_bdytend ( mu_tend, & |
|---|
| 470 | mu_b, mu_bt, & |
|---|
| 471 | 'm' , config_flags, & |
|---|
| 472 | spec_bdy_width, spec_zone, & |
|---|
| 473 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 474 | ids,ide, jds,jde, 1 ,1 , & ! domain dims |
|---|
| 475 | ims,ime, jms,jme, 1 ,1 , & ! memory dims |
|---|
| 476 | ips,ipe, jps,jpe, 1 ,1 , & ! patch dims |
|---|
| 477 | its,ite, jts,jte, 1 ,1 ) |
|---|
| 478 | |
|---|
| 479 | if(config_flags%nested) & |
|---|
| 480 | CALL spec_bdytend ( rw_tend, & |
|---|
| 481 | w_b, w_bt, & |
|---|
| 482 | 'h' , config_flags, & |
|---|
| 483 | spec_bdy_width, spec_zone, & |
|---|
| 484 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 485 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 486 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 487 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 488 | its,ite, jts,jte, kts,kte ) |
|---|
| 489 | |
|---|
| 490 | END SUBROUTINE spec_bdy_dry |
|---|
| 491 | |
|---|
| 492 | !------------------------------------------------------------------------ |
|---|
| 493 | SUBROUTINE spec_bdy_scalar ( scalar_tend, & |
|---|
| 494 | scalar_b, scalar_bt, & |
|---|
| 495 | spec_bdy_width, spec_zone, & |
|---|
| 496 | config_flags, & |
|---|
| 497 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 498 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 499 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 500 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 501 | its, ite, jts, jte, kts, kte) |
|---|
| 502 | IMPLICIT NONE |
|---|
| 503 | |
|---|
| 504 | ! Input data. |
|---|
| 505 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 506 | |
|---|
| 507 | |
|---|
| 508 | INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, & |
|---|
| 509 | ims, ime, jms, jme, kms, kme, & |
|---|
| 510 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 511 | its, ite, jts, jte, kts, kte |
|---|
| 512 | INTEGER , INTENT(IN ) :: ijds, ijde |
|---|
| 513 | INTEGER , INTENT(IN ) :: spec_bdy_width, spec_zone |
|---|
| 514 | |
|---|
| 515 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(OUT ) :: scalar_tend |
|---|
| 516 | REAL, DIMENSION( ijds:ijde , kds:kde , spec_bdy_width, 4 ), INTENT(IN ) :: scalar_b, & |
|---|
| 517 | scalar_bt |
|---|
| 518 | !Local |
|---|
| 519 | INTEGER :: i,j,k |
|---|
| 520 | |
|---|
| 521 | |
|---|
| 522 | CALL spec_bdytend ( scalar_tend, & |
|---|
| 523 | scalar_b, scalar_bt, & |
|---|
| 524 | ! scalar_xbdy, scalar_ybdy, & |
|---|
| 525 | 'q' , config_flags, & |
|---|
| 526 | spec_bdy_width, spec_zone, & |
|---|
| 527 | ijds, ijde, & ! min/max(id,jd) |
|---|
| 528 | ids,ide, jds,jde, kds,kde, & ! domain dims |
|---|
| 529 | ims,ime, jms,jme, kms,kme, & ! memory dims |
|---|
| 530 | ips,ipe, jps,jpe, kps,kpe, & ! patch dims |
|---|
| 531 | its,ite, jts,jte, kts,kte ) |
|---|
| 532 | |
|---|
| 533 | |
|---|
| 534 | END SUBROUTINE spec_bdy_scalar |
|---|
| 535 | |
|---|
| 536 | !------------------------------------------------------------------------ |
|---|
| 537 | |
|---|
| 538 | SUBROUTINE set_phys_bc_dry_1( config_flags, u_1, u_2, v_1, v_2, & |
|---|
| 539 | rw_1, rw_2, w_1, w_2, & |
|---|
| 540 | t_1, t_2, tp_1, tp_2, pp, pip, & |
|---|
| 541 | ids,ide, jds,jde, kds,kde, & |
|---|
| 542 | ims,ime, jms,jme, kms,kme, & |
|---|
| 543 | ips,ipe, jps,jpe, kps,kpe, & |
|---|
| 544 | its,ite, jts,jte, kts,kte ) |
|---|
| 545 | |
|---|
| 546 | ! |
|---|
| 547 | ! this is just a wraper to call the boundary condition routines |
|---|
| 548 | ! for each variable |
|---|
| 549 | ! |
|---|
| 550 | |
|---|
| 551 | IMPLICIT NONE |
|---|
| 552 | |
|---|
| 553 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 554 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 555 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 556 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 557 | |
|---|
| 558 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 559 | |
|---|
| 560 | REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: & |
|---|
| 561 | u_1,u_2, v_1, v_2, rw_1, rw_2, w_1, w_2, & |
|---|
| 562 | t_1, t_2, tp_1, tp_2, pp, pip |
|---|
| 563 | |
|---|
| 564 | |
|---|
| 565 | |
|---|
| 566 | CALL set_physical_bc3d( u_1 , 'u', config_flags, & |
|---|
| 567 | ids, ide, jds, jde, kds, kde, & |
|---|
| 568 | ims, ime, jms, jme, kms, kme, & |
|---|
| 569 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 570 | its, ite, jts, jte, kts, kte ) |
|---|
| 571 | CALL set_physical_bc3d( u_2 , 'u', config_flags, & |
|---|
| 572 | ids, ide, jds, jde, kds, kde, & |
|---|
| 573 | ims, ime, jms, jme, kms, kme, & |
|---|
| 574 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 575 | its, ite, jts, jte, kts, kte ) |
|---|
| 576 | CALL set_physical_bc3d( v_1 , 'v', config_flags, & |
|---|
| 577 | ids, ide, jds, jde, kds, kde, & |
|---|
| 578 | ims, ime, jms, jme, kms, kme, & |
|---|
| 579 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 580 | its, ite, jts, jte, kts, kte ) |
|---|
| 581 | CALL set_physical_bc3d( v_2 , 'v', config_flags, & |
|---|
| 582 | ids, ide, jds, jde, kds, kde, & |
|---|
| 583 | ims, ime, jms, jme, kms, kme, & |
|---|
| 584 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 585 | its, ite, jts, jte, kts, kte ) |
|---|
| 586 | CALL set_physical_bc3d( rw_1 , 'w', config_flags, & |
|---|
| 587 | ids, ide, jds, jde, kds, kde, & |
|---|
| 588 | ims, ime, jms, jme, kms, kme, & |
|---|
| 589 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 590 | its, ite, jts, jte, kts, kte ) |
|---|
| 591 | CALL set_physical_bc3d( rw_2 , 'w', config_flags, & |
|---|
| 592 | ids, ide, jds, jde, kds, kde, & |
|---|
| 593 | ims, ime, jms, jme, kms, kme, & |
|---|
| 594 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 595 | its, ite, jts, jte, kts, kte ) |
|---|
| 596 | CALL set_physical_bc3d( w_1 , 'w', config_flags, & |
|---|
| 597 | ids, ide, jds, jde, kds, kde, & |
|---|
| 598 | ims, ime, jms, jme, kms, kme, & |
|---|
| 599 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 600 | its, ite, jts, jte, kts, kte ) |
|---|
| 601 | CALL set_physical_bc3d( w_2 , 'w', config_flags, & |
|---|
| 602 | ids, ide, jds, jde, kds, kde, & |
|---|
| 603 | ims, ime, jms, jme, kms, kme, & |
|---|
| 604 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 605 | its, ite, jts, jte, kts, kte ) |
|---|
| 606 | CALL set_physical_bc3d( t_1, 'p', config_flags, & |
|---|
| 607 | ids, ide, jds, jde, kds, kde, & |
|---|
| 608 | ims, ime, jms, jme, kms, kme, & |
|---|
| 609 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 610 | its, ite, jts, jte, kts, kte ) |
|---|
| 611 | CALL set_physical_bc3d( t_2, 'p', config_flags, & |
|---|
| 612 | ids, ide, jds, jde, kds, kde, & |
|---|
| 613 | ims, ime, jms, jme, kms, kme, & |
|---|
| 614 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 615 | its, ite, jts, jte, kts, kte ) |
|---|
| 616 | CALL set_physical_bc3d( tp_1, 'p', config_flags, & |
|---|
| 617 | ids, ide, jds, jde, kds, kde, & |
|---|
| 618 | ims, ime, jms, jme, kms, kme, & |
|---|
| 619 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 620 | its, ite, jts, jte, kts, kte ) |
|---|
| 621 | CALL set_physical_bc3d( tp_2, 'p', config_flags, & |
|---|
| 622 | ids, ide, jds, jde, kds, kde, & |
|---|
| 623 | ims, ime, jms, jme, kms, kme, & |
|---|
| 624 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 625 | its, ite, jts, jte, kts, kte ) |
|---|
| 626 | CALL set_physical_bc3d( pp , 'p', config_flags, & |
|---|
| 627 | ids, ide, jds, jde, kds, kde, & |
|---|
| 628 | ims, ime, jms, jme, kms, kme, & |
|---|
| 629 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 630 | its, ite, jts, jte, kts, kte ) |
|---|
| 631 | CALL set_physical_bc3d( pip , 'p', config_flags, & |
|---|
| 632 | ids, ide, jds, jde, kds, kde, & |
|---|
| 633 | ims, ime, jms, jme, kms, kme, & |
|---|
| 634 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 635 | its, ite, jts, jte, kts, kte ) |
|---|
| 636 | |
|---|
| 637 | END SUBROUTINE set_phys_bc_dry_1 |
|---|
| 638 | |
|---|
| 639 | !-------------------------------------------------------------- |
|---|
| 640 | |
|---|
| 641 | SUBROUTINE set_phys_bc_dry_2( config_flags, & |
|---|
| 642 | u_1, u_2, v_1, v_2, w_1, w_2, & |
|---|
| 643 | t_1, t_2, ph_1, ph_2, mu_1, mu_2, & |
|---|
| 644 | ids,ide, jds,jde, kds,kde, & |
|---|
| 645 | ims,ime, jms,jme, kms,kme, & |
|---|
| 646 | ips,ipe, jps,jpe, kps,kpe, & |
|---|
| 647 | its,ite, jts,jte, kts,kte ) |
|---|
| 648 | |
|---|
| 649 | ! |
|---|
| 650 | ! this is just a wraper to call the boundary condition routines |
|---|
| 651 | ! for each variable |
|---|
| 652 | ! |
|---|
| 653 | |
|---|
| 654 | IMPLICIT NONE |
|---|
| 655 | |
|---|
| 656 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 657 | |
|---|
| 658 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 659 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 660 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 661 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 662 | |
|---|
| 663 | REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: & |
|---|
| 664 | u_1, u_2, v_1, v_2, w_1, w_2, & |
|---|
| 665 | t_1, t_2, ph_1, ph_2 |
|---|
| 666 | |
|---|
| 667 | REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: & |
|---|
| 668 | mu_1, mu_2 |
|---|
| 669 | |
|---|
| 670 | |
|---|
| 671 | CALL set_physical_bc3d( u_1, 'U', config_flags, & |
|---|
| 672 | ids, ide, jds, jde, kds, kde, & |
|---|
| 673 | ims, ime, jms, jme, kms, kme, & |
|---|
| 674 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 675 | its, ite, jts, jte, kts, kte ) |
|---|
| 676 | |
|---|
| 677 | CALL set_physical_bc3d( u_2, 'U', config_flags, & |
|---|
| 678 | ids, ide, jds, jde, kds, kde, & |
|---|
| 679 | ims, ime, jms, jme, kms, kme, & |
|---|
| 680 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 681 | its, ite, jts, jte, kts, kte ) |
|---|
| 682 | |
|---|
| 683 | CALL set_physical_bc3d( v_1 , 'V', config_flags, & |
|---|
| 684 | ids, ide, jds, jde, kds, kde, & |
|---|
| 685 | ims, ime, jms, jme, kms, kme, & |
|---|
| 686 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 687 | its, ite, jts, jte, kts, kte ) |
|---|
| 688 | CALL set_physical_bc3d( v_2 , 'V', config_flags, & |
|---|
| 689 | ids, ide, jds, jde, kds, kde, & |
|---|
| 690 | ims, ime, jms, jme, kms, kme, & |
|---|
| 691 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 692 | its, ite, jts, jte, kts, kte ) |
|---|
| 693 | |
|---|
| 694 | CALL set_physical_bc3d( w_1, 'w', config_flags, & |
|---|
| 695 | ids, ide, jds, jde, kds, kde, & |
|---|
| 696 | ims, ime, jms, jme, kms, kme, & |
|---|
| 697 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 698 | its, ite, jts, jte, kts, kte ) |
|---|
| 699 | CALL set_physical_bc3d( w_2, 'w', config_flags, & |
|---|
| 700 | ids, ide, jds, jde, kds, kde, & |
|---|
| 701 | ims, ime, jms, jme, kms, kme, & |
|---|
| 702 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 703 | its, ite, jts, jte, kts, kte ) |
|---|
| 704 | |
|---|
| 705 | CALL set_physical_bc3d( t_1, 'p', config_flags, & |
|---|
| 706 | ids, ide, jds, jde, kds, kde, & |
|---|
| 707 | ims, ime, jms, jme, kms, kme, & |
|---|
| 708 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 709 | its, ite, jts, jte, kts, kte ) |
|---|
| 710 | |
|---|
| 711 | CALL set_physical_bc3d( t_2, 'p', config_flags, & |
|---|
| 712 | ids, ide, jds, jde, kds, kde, & |
|---|
| 713 | ims, ime, jms, jme, kms, kme, & |
|---|
| 714 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 715 | its, ite, jts, jte, kts, kte ) |
|---|
| 716 | |
|---|
| 717 | CALL set_physical_bc3d( ph_1 , 'w', config_flags, & |
|---|
| 718 | ids, ide, jds, jde, kds, kde, & |
|---|
| 719 | ims, ime, jms, jme, kms, kme, & |
|---|
| 720 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 721 | its, ite, jts, jte, kts, kte ) |
|---|
| 722 | |
|---|
| 723 | CALL set_physical_bc3d( ph_2 , 'w', config_flags, & |
|---|
| 724 | ids, ide, jds, jde, kds, kde, & |
|---|
| 725 | ims, ime, jms, jme, kms, kme, & |
|---|
| 726 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 727 | its, ite, jts, jte, kts, kte ) |
|---|
| 728 | |
|---|
| 729 | CALL set_physical_bc2d( mu_1, 't', config_flags, & |
|---|
| 730 | ids, ide, jds, jde, & |
|---|
| 731 | ims, ime, jms, jme, & |
|---|
| 732 | ips, ipe, jps, jpe, & |
|---|
| 733 | its, ite, jts, jte ) |
|---|
| 734 | |
|---|
| 735 | CALL set_physical_bc2d( mu_2, 't', config_flags, & |
|---|
| 736 | ids, ide, jds, jde, & |
|---|
| 737 | ims, ime, jms, jme, & |
|---|
| 738 | ips, ipe, jps, jpe, & |
|---|
| 739 | its, ite, jts, jte ) |
|---|
| 740 | |
|---|
| 741 | END SUBROUTINE set_phys_bc_dry_2 |
|---|
| 742 | |
|---|
| 743 | !------------------------------------------------------------------------ |
|---|
| 744 | |
|---|
| 745 | SUBROUTINE set_phys_bc_smallstep_1( config_flags, ru_1, du, rv_1, dv, & |
|---|
| 746 | ids,ide, jds,jde, kds,kde, & |
|---|
| 747 | ims,ime, jms,jme, kms,kme, & |
|---|
| 748 | ips,ipe, jps,jpe, kps,kpe, & |
|---|
| 749 | its,ite, jts,jte, kts,kte ) |
|---|
| 750 | |
|---|
| 751 | ! |
|---|
| 752 | ! this is just a wraper to call the boundary condition routines |
|---|
| 753 | ! for each variable |
|---|
| 754 | ! |
|---|
| 755 | |
|---|
| 756 | IMPLICIT NONE |
|---|
| 757 | |
|---|
| 758 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 759 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 760 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 761 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 762 | |
|---|
| 763 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 764 | |
|---|
| 765 | REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: & |
|---|
| 766 | ru_1,du, rv_1, dv |
|---|
| 767 | |
|---|
| 768 | CALL set_physical_bc3d( ru_1 , 'u', config_flags, & |
|---|
| 769 | ids, ide, jds, jde, kds, kde, & |
|---|
| 770 | ims, ime, jms, jme, kms, kme, & |
|---|
| 771 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 772 | its, ite, jts, jte, kts, kde ) |
|---|
| 773 | CALL set_physical_bc3d( du , 'u', config_flags, & |
|---|
| 774 | ids, ide, jds, jde, kds, kde, & |
|---|
| 775 | ims, ime, jms, jme, kms, kme, & |
|---|
| 776 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 777 | its, ite, jts, jte, kts, kde ) |
|---|
| 778 | CALL set_physical_bc3d( rv_1 , 'v', config_flags, & |
|---|
| 779 | ids, ide, jds, jde, kds, kde, & |
|---|
| 780 | ims, ime, jms, jme, kms, kme, & |
|---|
| 781 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 782 | its, ite, jts, jte, kts, kde ) |
|---|
| 783 | CALL set_physical_bc3d( dv , 'v', config_flags, & |
|---|
| 784 | ids, ide, jds, jde, kds, kde, & |
|---|
| 785 | ims, ime, jms, jme, kms, kme, & |
|---|
| 786 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 787 | its, ite, jts, jte, kts, kde ) |
|---|
| 788 | |
|---|
| 789 | END SUBROUTINE set_phys_bc_smallstep_1 |
|---|
| 790 | |
|---|
| 791 | !------------------------------------------------------------------- |
|---|
| 792 | |
|---|
| 793 | SUBROUTINE rk_phys_bc_dry_1( config_flags, u, v, rw, w, & |
|---|
| 794 | muu, muv, mut, php, alt, p, & |
|---|
| 795 | ids,ide, jds,jde, kds,kde, & |
|---|
| 796 | ims,ime, jms,jme, kms,kme, & |
|---|
| 797 | ips,ipe, jps,jpe, kps,kpe, & |
|---|
| 798 | its,ite, jts,jte, kts,kte ) |
|---|
| 799 | |
|---|
| 800 | ! |
|---|
| 801 | ! this is just a wraper to call the boundary condition routines |
|---|
| 802 | ! for each variable |
|---|
| 803 | ! |
|---|
| 804 | |
|---|
| 805 | IMPLICIT NONE |
|---|
| 806 | |
|---|
| 807 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 808 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 809 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 810 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 811 | |
|---|
| 812 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 813 | |
|---|
| 814 | REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & |
|---|
| 815 | INTENT(INOUT) :: u, v, rw, w, php, alt, p |
|---|
| 816 | REAL, DIMENSION( ims:ime, jms:jme ), & |
|---|
| 817 | INTENT(INOUT) :: muu, muv, mut |
|---|
| 818 | |
|---|
| 819 | CALL set_physical_bc3d( u , 'u', config_flags, & |
|---|
| 820 | ids, ide, jds, jde, kds, kde, & |
|---|
| 821 | ims, ime, jms, jme, kms, kme, & |
|---|
| 822 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 823 | its, ite, jts, jte, kts, kte ) |
|---|
| 824 | CALL set_physical_bc3d( v , 'v', config_flags, & |
|---|
| 825 | ids, ide, jds, jde, kds, kde, & |
|---|
| 826 | ims, ime, jms, jme, kms, kme, & |
|---|
| 827 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 828 | its, ite, jts, jte, kts, kte ) |
|---|
| 829 | CALL set_physical_bc3d(rw , 'w', config_flags, & |
|---|
| 830 | ids, ide, jds, jde, kds, kde, & |
|---|
| 831 | ims, ime, jms, jme, kms, kme, & |
|---|
| 832 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 833 | its, ite, jts, jte, kts, kte ) |
|---|
| 834 | CALL set_physical_bc3d( w , 'w', config_flags, & |
|---|
| 835 | ids, ide, jds, jde, kds, kde, & |
|---|
| 836 | ims, ime, jms, jme, kms, kme, & |
|---|
| 837 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 838 | its, ite, jts, jte, kts, kte ) |
|---|
| 839 | CALL set_physical_bc3d( php , 'w', config_flags, & |
|---|
| 840 | ids, ide, jds, jde, kds, kde, & |
|---|
| 841 | ims, ime, jms, jme, kms, kme, & |
|---|
| 842 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 843 | its, ite, jts, jte, kts, kte ) |
|---|
| 844 | CALL set_physical_bc3d( alt, 't', config_flags, & |
|---|
| 845 | ids, ide, jds, jde, kds, kde, & |
|---|
| 846 | ims, ime, jms, jme, kms, kme, & |
|---|
| 847 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 848 | its, ite, jts, jte, kts, kte ) |
|---|
| 849 | |
|---|
| 850 | CALL set_physical_bc3d( p, 'p', config_flags, & |
|---|
| 851 | ids, ide, jds, jde, kds, kde, & |
|---|
| 852 | ims, ime, jms, jme, kms, kme, & |
|---|
| 853 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 854 | its, ite, jts, jte, kts, kte ) |
|---|
| 855 | |
|---|
| 856 | CALL set_physical_bc2d( muu, 'u', config_flags, & |
|---|
| 857 | ids, ide, jds, jde, & |
|---|
| 858 | ims, ime, jms, jme, & |
|---|
| 859 | ips, ipe, jps, jpe, & |
|---|
| 860 | its, ite, jts, jte ) |
|---|
| 861 | |
|---|
| 862 | CALL set_physical_bc2d( muv, 'v', config_flags, & |
|---|
| 863 | ids, ide, jds, jde, & |
|---|
| 864 | ims, ime, jms, jme, & |
|---|
| 865 | ips, ipe, jps, jpe, & |
|---|
| 866 | its, ite, jts, jte ) |
|---|
| 867 | |
|---|
| 868 | CALL set_physical_bc2d( mut, 't', config_flags, & |
|---|
| 869 | ids, ide, jds, jde, & |
|---|
| 870 | ims, ime, jms, jme, & |
|---|
| 871 | ips, ipe, jps, jpe, & |
|---|
| 872 | its, ite, jts, jte ) |
|---|
| 873 | |
|---|
| 874 | END SUBROUTINE rk_phys_bc_dry_1 |
|---|
| 875 | |
|---|
| 876 | !------------------------------------------------------------------------ |
|---|
| 877 | |
|---|
| 878 | SUBROUTINE rk_phys_bc_dry_2( config_flags, u, v, w, & |
|---|
| 879 | t, ph, mu, & |
|---|
| 880 | ids,ide, jds,jde, kds,kde, & |
|---|
| 881 | ims,ime, jms,jme, kms,kme, & |
|---|
| 882 | ips,ipe, jps,jpe, kps,kpe, & |
|---|
| 883 | its,ite, jts,jte, kts,kte ) |
|---|
| 884 | |
|---|
| 885 | ! |
|---|
| 886 | ! this is just a wraper to call the boundary condition routines |
|---|
| 887 | ! for each variable |
|---|
| 888 | ! |
|---|
| 889 | |
|---|
| 890 | IMPLICIT NONE |
|---|
| 891 | |
|---|
| 892 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde |
|---|
| 893 | INTEGER, INTENT(IN ) :: ims,ime, jms,jme, kms,kme |
|---|
| 894 | INTEGER, INTENT(IN ) :: ips,ipe, jps,jpe, kps,kpe |
|---|
| 895 | INTEGER, INTENT(IN ) :: its,ite, jts,jte, kts,kte |
|---|
| 896 | |
|---|
| 897 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 898 | |
|---|
| 899 | REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: & |
|---|
| 900 | u, v, w, t, ph |
|---|
| 901 | |
|---|
| 902 | REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: & |
|---|
| 903 | mu |
|---|
| 904 | |
|---|
| 905 | CALL set_physical_bc3d( u , 'U', config_flags, & |
|---|
| 906 | ids, ide, jds, jde, kds, kde, & |
|---|
| 907 | ims, ime, jms, jme, kms, kme, & |
|---|
| 908 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 909 | its, ite, jts, jte, kts, kte ) |
|---|
| 910 | CALL set_physical_bc3d( v , 'V', config_flags, & |
|---|
| 911 | ids, ide, jds, jde, kds, kde, & |
|---|
| 912 | ims, ime, jms, jme, kms, kme, & |
|---|
| 913 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 914 | its, ite, jts, jte, kts, kte ) |
|---|
| 915 | CALL set_physical_bc3d( w , 'w', config_flags, & |
|---|
| 916 | ids, ide, jds, jde, kds, kde, & |
|---|
| 917 | ims, ime, jms, jme, kms, kme, & |
|---|
| 918 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 919 | its, ite, jts, jte, kts, kte ) |
|---|
| 920 | CALL set_physical_bc3d( t, 'p', config_flags, & |
|---|
| 921 | ids, ide, jds, jde, kds, kde, & |
|---|
| 922 | ims, ime, jms, jme, kms, kme, & |
|---|
| 923 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 924 | its, ite, jts, jte, kts, kte ) |
|---|
| 925 | CALL set_physical_bc3d( ph , 'w', config_flags, & |
|---|
| 926 | ids, ide, jds, jde, kds, kde, & |
|---|
| 927 | ims, ime, jms, jme, kms, kme, & |
|---|
| 928 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 929 | its, ite, jts, jte, kts, kte ) |
|---|
| 930 | |
|---|
| 931 | CALL set_physical_bc2d( mu, 't', config_flags, & |
|---|
| 932 | ids, ide, jds, jde, & |
|---|
| 933 | ims, ime, jms, jme, & |
|---|
| 934 | ips, ipe, jps, jpe, & |
|---|
| 935 | its, ite, jts, jte ) |
|---|
| 936 | |
|---|
| 937 | END SUBROUTINE rk_phys_bc_dry_2 |
|---|
| 938 | |
|---|
| 939 | !--------------------------------------------------------------------- |
|---|
| 940 | |
|---|
| 941 | SUBROUTINE set_w_surface( config_flags, & |
|---|
| 942 | w, ht, u, v, cf1, cf2, cf3, rdx, rdy, msft, & |
|---|
| 943 | ids, ide, jds, jde, kds, kde, & |
|---|
| 944 | ips, ipe, jps, jpe, kps, kpe, & |
|---|
| 945 | its, ite, jts, jte, kts, kte, & |
|---|
| 946 | ims, ime, jms, jme, kms, kme ) |
|---|
| 947 | implicit none |
|---|
| 948 | |
|---|
| 949 | TYPE( grid_config_rec_type ) config_flags |
|---|
| 950 | |
|---|
| 951 | INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, & |
|---|
| 952 | ims, ime, jms, jme, kms, kme, & |
|---|
| 953 | its, ite, jts, jte, kts, kte, & |
|---|
| 954 | ips, ipe, jps, jpe, kps, kpe |
|---|
| 955 | |
|---|
| 956 | REAL :: cf1, cf2, cf3, rdx, rdy |
|---|
| 957 | |
|---|
| 958 | |
|---|
| 959 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , & |
|---|
| 960 | INTENT(IN ) :: u, & |
|---|
| 961 | v |
|---|
| 962 | |
|---|
| 963 | REAL , DIMENSION( ims:ime , kms:kme, jms:jme ) , & |
|---|
| 964 | INTENT(INOUT) :: w |
|---|
| 965 | |
|---|
| 966 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: ht, msft |
|---|
| 967 | |
|---|
| 968 | INTEGER :: i,j |
|---|
| 969 | INTEGER :: ip1,im1,jp1,jm1 |
|---|
| 970 | |
|---|
| 971 | ! set kinematic lower boundary condition on W |
|---|
| 972 | |
|---|
| 973 | DO j = jts,min(jte,jde-1) |
|---|
| 974 | jm1 = max(j-1,jds) |
|---|
| 975 | jp1 = min(j+1,jde-1) |
|---|
| 976 | DO i = its,min(ite,ide-1) |
|---|
| 977 | im1 = max(i-1,ids) |
|---|
| 978 | ip1 = min(i+1,ide-1) |
|---|
| 979 | |
|---|
| 980 | w(i,1,j)= msft(i,j)*( & |
|---|
| 981 | .5*rdy*( & |
|---|
| 982 | (ht(i,jp1)-ht(i,j )) & |
|---|
| 983 | *(cf1*v(i,1,j+1)+cf2*v(i,2,j+1)+cf3*v(i,3,j+1)) & |
|---|
| 984 | +(ht(i,j )-ht(i,jm1)) & |
|---|
| 985 | *(cf1*v(i,1,j )+cf2*v(i,2,j )+cf3*v(i,3,j )) ) & |
|---|
| 986 | +.5*rdx*( & |
|---|
| 987 | (ht(ip1,j)-ht(i,j )) & |
|---|
| 988 | *(cf1*u(i+1,1,j)+cf2*u(i+1,2,j)+cf3*u(i+1,3,j)) & |
|---|
| 989 | +(ht(i ,j)-ht(im1,j)) & |
|---|
| 990 | *(cf1*u(i ,1,j)+cf2*u(i ,2,j)+cf3*u(i ,3,j)) ) & |
|---|
| 991 | ) |
|---|
| 992 | ENDDO |
|---|
| 993 | ENDDO |
|---|
| 994 | |
|---|
| 995 | END SUBROUTINE set_w_surface |
|---|
| 996 | |
|---|
| 997 | END MODULE module_bc_em |
|---|