Ignore:
Timestamp:
Mar 15, 2012 10:35:09 AM (12 years ago)
Author:
raasch
Message:

Changed:


Original routine advec_particles split into several new subroutines and renamed
lpm.
init_particles renamed lpm_init
user_advec_particles renamed user_lpm_advec,
particle_boundary_conds renamed lpm_boundary_conds,
set_particle_attributes renamed lpm_set_attributes,
user_init_particles renamed user_lpm_init,
user_particle_attributes renamed user_lpm_set_attributes
(Makefile, lpm_droplet_collision, lpm_droplet_condensation, init_3d_model, modules, palm, read_var_list, time_integration, write_var_list, deleted: advec_particles, init_particles, particle_boundary_conds, set_particle_attributes, user_advec_particles, user_init_particles, user_particle_attributes, new: lpm, lpm_advec, lpm_boundary_conds, lpm_calc_liquid_water_content, lpm_data_output_particles, lpm_droplet_collision, lpm_drollet_condensation, lpm_exchange_horiz, lpm_extend_particle_array, lpm_extend_tails, lpm_extend_tail_array, lpm_init, lpm_init_sgs_tke, lpm_pack_arrays, lpm_read_restart_file, lpm_release_set, lpm_set_attributes, lpm_sort_arrays, lpm_write_exchange_statistics, lpm_write_restart_file, user_lpm_advec, user_lpm_init, user_lpm_set_attributes

File:
1 moved

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/lpm_boundary_conds.f90

    r848 r849  
    1  SUBROUTINE particle_boundary_conds
     1 SUBROUTINE lpm_boundary_conds( range )
    22
    33!------------------------------------------------------------------------------!
    44! Current revisions:
    55! -----------------
    6 !
     6! routine renamed lpm_boundary_conds, bottom and top boundary conditions
     7! included
    78!
    89! Former revisions:
     
    2021! Description:
    2122! ------------
    22 ! Calculates the reflection of particles from vertical walls.
    23 ! Routine developed by Jin Zhang (2006-2007)
     23! Boundary conditions for the Lagrangian particles.
     24! The routine consists of two different parts. One handles the bottom (flat)
     25! and top boundary. In this part, also particles which exceeded their lifetime
     26! are deleted.
     27! The other part handles the reflection of particles from vertical walls.
     28! This part was developed by Jin Zhang during 2006-2007.
     29!
    2430! To do: Code structure for finding the t_index values and for checking the
    25 !        reflection conditions is basically the same for all four cases, so it
     31! -----  reflection conditions is basically the same for all four cases, so it
    2632!        should be possible to further simplify/shorten it.
    27 ! THIS ROUTINE HAS NOT BEEN TESTED FOR OCEAN RUNS SO FAR! (see offset_ocean_*)
     33!
     34! THE WALLS PART OF THIS ROUTINE HAS NOT BEEN TESTED FOR OCEAN RUNS SO FAR!!!!
     35! (see offset_ocean_*)
    2836!------------------------------------------------------------------------------!
    2937
     38    USE arrays_3d
    3039    USE control_parameters
    3140    USE cpulog
     
    3847    IMPLICIT NONE
    3948
     49    CHARACTER (LEN=*) ::  range
     50
    4051    INTEGER ::  i, inc, ir, i1, i2, i3, i5, j, jr, j1, j2, j3, j5, k, k1, k2, &
    41                 k3, k5, n, t_index, t_index_number
     52                k3, k5, n, nn, t_index, t_index_number
    4253
    4354    LOGICAL ::  reflect_x, reflect_y, reflect_z
     
    4859    REAL ::  t(1:200)
    4960
    50     CALL cpu_log( log_point_s(48), 'advec_part_refle', 'start' )
    51 
    52 
    53 
    54     reflect_x = .FALSE.
    55     reflect_y = .FALSE.
    56     reflect_z = .FALSE.
    57 
    58     DO  n = 1, number_of_particles
    59 
    60        dt_particle = particles(n)%age - particles(n)%age_m
    61 
    62        i2 = ( particles(n)%x + 0.5 * dx ) * ddx
    63        j2 = ( particles(n)%y + 0.5 * dy ) * ddy
    64        k2 = particles(n)%z / dz + 1 + offset_ocean_nzt_m1
    65 
    66        prt_x = particles(n)%x
    67        prt_y = particles(n)%y
    68        prt_z = particles(n)%z
    69 
    70 !
    71 !--    If the particle position is below the surface, it has to be reflected
    72        IF ( k2 <= nzb_s_inner(j2,i2)  .AND.  nzb_s_inner(j2,i2) /=0 )  THEN
    73 
    74           pos_x_old = particles(n)%x - particles(n)%speed_x * dt_particle
    75           pos_y_old = particles(n)%y - particles(n)%speed_y * dt_particle
    76           pos_z_old = particles(n)%z - particles(n)%speed_z * dt_particle
    77           i1 = ( pos_x_old + 0.5 * dx ) * ddx
    78           j1 = ( pos_y_old + 0.5 * dy ) * ddy
    79           k1 = pos_z_old / dz + offset_ocean_nzt_m1
    80 
    81 !
    82 !--       Case 1
    83           IF ( particles(n)%x > pos_x_old  .AND.  particles(n)%y > pos_y_old ) &
     61
     62
     63    IF ( range == 'bottom/top' )  THEN
     64
     65!
     66!--    Apply boundary conditions to those particles that have crossed the top or
     67!--    bottom boundary and delete those particles, which are older than allowed
     68       DO  n = 1, number_of_particles
     69
     70          nn = particles(n)%tail_id
     71
     72!
     73!--       Stop if particles have moved further than the length of one
     74!--       PE subdomain (newly released particles have age = age_m!)
     75          IF ( particles(n)%age /= particles(n)%age_m )  THEN
     76             IF ( ABS(particles(n)%speed_x) >                                  &
     77                  ((nxr-nxl+2)*dx)/(particles(n)%age-particles(n)%age_m)  .OR. &
     78                  ABS(particles(n)%speed_y) >                                  &
     79                  ((nyn-nys+2)*dy)/(particles(n)%age-particles(n)%age_m) )  THEN
     80
     81                  WRITE( message_string, * )  'particle too fast.  n = ',  n
     82                  CALL message( 'lpm_boundary_conds', 'PA0148', 2, 2, -1, 6, 1 )
     83             ENDIF
     84          ENDIF
     85
     86          IF ( particles(n)%age > particle_maximum_age  .AND.  &
     87               particle_mask(n) )                              &
    8488          THEN
    85              t_index = 1
    86 
    87              DO  i = i1, i2
    88                 xline      = i * dx + 0.5 * dx
    89                 t(t_index) = ( xline - pos_x_old ) / &
    90                              ( particles(n)%x - pos_x_old )
    91                 t_index    = t_index + 1
    92              ENDDO
    93 
    94              DO  j = j1, j2
    95                 yline      = j * dy + 0.5 * dy
    96                 t(t_index) = ( yline - pos_y_old ) / &
    97                              ( particles(n)%y - pos_y_old )
    98                 t_index    = t_index + 1
    99              ENDDO
    100 
    101              IF ( particles(n)%z < pos_z_old )  THEN
    102                 DO  k = k1, k2 , -1
    103                    zline      = k * dz
    104                    t(t_index) = ( pos_z_old - zline ) / &
    105                                 ( pos_z_old - particles(n)%z )
    106                    t_index    = t_index + 1
    107                 ENDDO
    108              ENDIF
    109 
    110              t_index_number = t_index - 1
    111 
    112 !
    113 !--          Sorting t
    114              inc = 1
    115              jr  = 1
    116              DO WHILE ( inc <= t_index_number )
    117                 inc = 3 * inc + 1
    118              ENDDO
    119 
    120              DO WHILE ( inc > 1 )
    121                 inc = inc / 3
    122                 DO  ir = inc+1, t_index_number
    123                    tmp_t = t(ir)
    124                    jr    = ir
    125                    DO WHILE ( t(jr-inc) > tmp_t )
    126                       t(jr) = t(jr-inc)
    127                       jr    = jr - inc
    128                       IF ( jr <= inc )  EXIT
    129                    ENDDO
    130                    t(jr) = tmp_t
    131                 ENDDO
    132              ENDDO
    133 
    134       case1: DO  t_index = 1, t_index_number
    135 
    136                 pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
    137                 pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
    138                 pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    139 
    140                 i3 = ( pos_x + 0.5 * dx ) * ddx   
    141                 j3 = ( pos_y + 0.5 * dy ) * ddy
    142                 k3 = pos_z / dz + offset_ocean_nzt_m1
    143 
    144                 i5 = pos_x * ddx
    145                 j5 = pos_y * ddy
    146                 k5 = pos_z / dz + offset_ocean_nzt_m1
    147 
    148                 IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
    149                      nzb_s_inner(j5,i3) /= 0 )  THEN
    150 
    151                    IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
    152                         k3 == nzb_s_inner(j5,i3) )  THEN
    153                       reflect_z = .TRUE.
    154                       EXIT case1
    155                    ENDIF
    156 
    157                 ENDIF
    158 
    159                 IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
    160                      nzb_s_inner(j3,i5) /= 0 )  THEN
    161 
    162                    IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
    163                         k3 == nzb_s_inner(j3,i5) )  THEN
    164                       reflect_z = .TRUE.
    165                       EXIT case1
    166                    ENDIF
    167 
    168                 ENDIF
    169 
    170                 IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
    171                      nzb_s_inner(j3,i3) /= 0 )  THEN
    172 
    173                    IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
    174                         k3 == nzb_s_inner(j3,i3) )  THEN
    175                       reflect_z = .TRUE.
    176                       EXIT case1
    177                    ENDIF
    178 
    179                    IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
    180                         pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    181                       reflect_y = .TRUE.
    182                       EXIT case1
    183                    ENDIF
    184 
    185                    IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
    186                         pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    187                       reflect_x = .TRUE.
    188                       EXIT case1
    189                    ENDIF
    190 
    191                 ENDIF
    192 
    193              ENDDO case1
    194 
    195 !
    196 !--       Case 2
    197           ELSEIF ( particles(n)%x > pos_x_old  .AND. &
    198                    particles(n)%y < pos_y_old )  THEN
    199 
    200              t_index = 1
    201 
    202              DO  i = i1, i2
    203                 xline      = i * dx + 0.5 * dx
    204                 t(t_index) = ( xline - pos_x_old ) / &
    205                              ( particles(n)%x - pos_x_old )
    206                 t_index    = t_index + 1
    207              ENDDO
    208 
    209              DO  j = j1, j2, -1
    210                 yline      = j * dy - 0.5 * dy
    211                 t(t_index) = ( pos_y_old - yline ) / &
    212                              ( pos_y_old - particles(n)%y )
    213                 t_index    = t_index + 1
    214              ENDDO
    215 
    216              IF ( particles(n)%z < pos_z_old )  THEN
    217                 DO  k = k1, k2 , -1
    218                    zline      = k * dz
    219                    t(t_index) = ( pos_z_old - zline ) / &
    220                                 ( pos_z_old - particles(n)%z )
    221                    t_index    = t_index + 1
    222                 ENDDO
    223              ENDIF
    224              t_index_number = t_index-1
    225 
    226 !
    227 !--          Sorting t
    228              inc = 1
    229              jr  = 1
    230              DO WHILE ( inc <= t_index_number )
    231                 inc = 3 * inc + 1
    232              ENDDO
    233 
    234              DO WHILE ( inc > 1 )
    235                 inc = inc / 3
    236                 DO  ir = inc+1, t_index_number
    237                    tmp_t = t(ir)
    238                    jr    = ir
    239                    DO WHILE ( t(jr-inc) > tmp_t )
    240                       t(jr) = t(jr-inc)
    241                       jr    = jr - inc
    242                       IF ( jr <= inc )  EXIT
    243                    ENDDO
    244                    t(jr) = tmp_t
    245                 ENDDO
    246              ENDDO
    247 
    248       case2: DO  t_index = 1, t_index_number
    249 
    250                 pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
    251                 pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
    252                 pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    253 
    254                 i3 = ( pos_x + 0.5 * dx ) * ddx
    255                 j3 = ( pos_y + 0.5 * dy ) * ddy
    256                 k3 = pos_z / dz + offset_ocean_nzt_m1
    257 
    258                 i5 = pos_x * ddx
    259                 j5 = pos_y * ddy
    260                 k5 = pos_z / dz + offset_ocean_nzt_m1
    261 
    262                 IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
    263                      nzb_s_inner(j3,i5) /= 0 )  THEN
    264 
    265                    IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
    266                         k3 == nzb_s_inner(j3,i5) )  THEN
    267                       reflect_z = .TRUE.
    268                       EXIT case2
    269                    ENDIF
    270 
    271                 ENDIF
    272 
    273                 IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
    274                      nzb_s_inner(j3,i3) /= 0 )  THEN
    275 
    276                    IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
    277                         k3 == nzb_s_inner(j3,i3) )  THEN
    278                       reflect_z = .TRUE.
    279                       EXIT case2
    280                    ENDIF
    281 
    282                    IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
    283                         pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    284                       reflect_x = .TRUE.
    285                       EXIT case2
    286                    ENDIF
    287 
    288                 ENDIF
    289 
    290                 IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
    291                      nzb_s_inner(j5,i3) /= 0 )  THEN
    292 
    293                    IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
    294                         k3 == nzb_s_inner(j5,i3) )  THEN
    295                       reflect_z = .TRUE.
    296                       EXIT case2
    297                    ENDIF
    298 
    299                    IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
    300                         pos_z < nzb_s_inner(j5,i3) * dz )  THEN
    301                       reflect_y = .TRUE.
    302                       EXIT case2
    303                    ENDIF
    304 
    305                 ENDIF
    306 
    307              ENDDO case2
    308 
    309 !
    310 !--       Case 3
    311           ELSEIF ( particles(n)%x < pos_x_old  .AND. &
    312                    particles(n)%y > pos_y_old )  THEN
    313 
    314              t_index = 1
    315 
    316              DO  i = i1, i2, -1
    317                 xline      = i * dx - 0.5 * dx
    318                 t(t_index) = ( pos_x_old - xline ) / &
    319                              ( pos_x_old - particles(n)%x )
    320                 t_index    = t_index + 1
    321              ENDDO
    322 
    323              DO  j = j1, j2
    324                 yline      = j * dy + 0.5 * dy
    325                 t(t_index) = ( yline - pos_y_old ) / &
    326                              ( particles(n)%y - pos_y_old )
    327                 t_index    = t_index + 1
    328              ENDDO
    329 
    330              IF ( particles(n)%z < pos_z_old )  THEN
    331                 DO  k = k1, k2 , -1
    332                    zline      = k * dz
    333                    t(t_index) = ( pos_z_old - zline ) / &
    334                                 ( pos_z_old - particles(n)%z )
    335                    t_index    = t_index + 1
    336                 ENDDO
    337              ENDIF
    338              t_index_number = t_index - 1
    339 
    340 !
    341 !--          Sorting t
    342              inc = 1
    343              jr  = 1
    344 
    345              DO WHILE ( inc <= t_index_number )
    346                 inc = 3 * inc + 1
    347              ENDDO
    348 
    349              DO WHILE ( inc > 1 )
    350                 inc = inc / 3
    351                 DO  ir = inc+1, t_index_number
    352                    tmp_t = t(ir)
    353                    jr    = ir
    354                    DO WHILE ( t(jr-inc) > tmp_t )
    355                       t(jr) = t(jr-inc)
    356                       jr    = jr - inc
    357                       IF ( jr <= inc )  EXIT
    358                    ENDDO
    359                    t(jr) = tmp_t
    360                 ENDDO
    361              ENDDO
    362 
    363       case3: DO  t_index = 1, t_index_number
    364 
    365                 pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
    366                 pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
    367                 pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    368 
    369                 i3 = ( pos_x + 0.5 * dx ) * ddx
    370                 j3 = ( pos_y + 0.5 * dy ) * ddy
    371                 k3 = pos_z / dz + offset_ocean_nzt_m1
    372 
    373                 i5 = pos_x * ddx
    374                 j5 = pos_y * ddy
    375                 k5 = pos_z / dz + offset_ocean_nzt_m1
    376 
    377                 IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
    378                      nzb_s_inner(j5,i3) /= 0 )  THEN
    379 
    380                    IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
    381                         k3 == nzb_s_inner(j5,i3) )  THEN
    382                       reflect_z = .TRUE.
    383                       EXIT case3
    384                    ENDIF
    385 
    386                 ENDIF
    387 
    388                 IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
    389                      nzb_s_inner(j3,i3) /= 0 )  THEN
    390 
    391                    IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
    392                         k3 == nzb_s_inner(j3,i3) )  THEN
    393                       reflect_z = .TRUE.
    394                       EXIT case3
    395                    ENDIF
    396 
    397                    IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
    398                         pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    399                       reflect_y = .TRUE.
    400                       EXIT case3
    401                    ENDIF
    402 
    403                 ENDIF
    404 
    405                 IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
    406                      nzb_s_inner(j3,i5) /= 0 )  THEN
    407 
    408                    IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
    409                         k3 == nzb_s_inner(j3,i5) )  THEN
    410                       reflect_z = .TRUE.
    411                       EXIT case3
    412                    ENDIF
    413 
    414                    IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
    415                         pos_z < nzb_s_inner(j3,i5) * dz )  THEN
    416                       reflect_x = .TRUE.
    417                       EXIT case3
    418                    ENDIF
    419 
    420                 ENDIF
    421 
    422              ENDDO case3
    423 
    424 !
    425 !--       Case 4
    426           ELSEIF ( particles(n)%x < pos_x_old  .AND. &
    427                    particles(n)%y < pos_y_old )  THEN
    428 
    429              t_index = 1
    430 
    431              DO  i = i1, i2, -1
    432                 xline      = i * dx - 0.5 * dx
    433                 t(t_index) = ( pos_x_old - xline ) / &
    434                              ( pos_x_old - particles(n)%x )
    435                 t_index    = t_index + 1
    436              ENDDO
    437 
    438              DO  j = j1, j2, -1
    439                 yline      = j * dy - 0.5 * dy
    440                 t(t_index) = ( pos_y_old - yline ) / &
    441                              ( pos_y_old - particles(n)%y )
    442                 t_index    = t_index + 1
    443              ENDDO
    444 
    445              IF ( particles(n)%z < pos_z_old )  THEN
    446                 DO  k = k1, k2 , -1
    447                    zline      = k * dz
    448                    t(t_index) = ( pos_z_old - zline ) / &
    449                                 ( pos_z_old-particles(n)%z )
    450                    t_index    = t_index + 1
    451                 ENDDO
    452              ENDIF
    453              t_index_number = t_index-1
    454 
    455 !
    456 !--          Sorting t
    457              inc = 1
    458              jr  = 1
    459 
    460              DO WHILE ( inc <= t_index_number )
    461                 inc = 3 * inc + 1
    462              ENDDO
    463 
    464              DO WHILE ( inc > 1 )
    465                 inc = inc / 3
    466                 DO  ir = inc+1, t_index_number
    467                    tmp_t = t(ir)
    468                    jr = ir
    469                    DO WHILE ( t(jr-inc) > tmp_t )
    470                       t(jr) = t(jr-inc)
    471                       jr    = jr - inc
    472                       IF ( jr <= inc )  EXIT
    473                    ENDDO
    474                    t(jr) = tmp_t
    475                 ENDDO
    476              ENDDO
    477 
    478       case4: DO  t_index = 1, t_index_number
    479 
    480                 pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
    481                 pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
    482                 pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    483 
    484                 i3 = ( pos_x + 0.5 * dx ) * ddx   
    485                 j3 = ( pos_y + 0.5 * dy ) * ddy
    486                 k3 = pos_z / dz + offset_ocean_nzt_m1
    487 
    488                 i5 = pos_x * ddx
    489                 j5 = pos_y * ddy
    490                 k5 = pos_z / dz + offset_ocean_nzt_m1
    491 
    492                 IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
    493                      nzb_s_inner(j3,i3) /= 0 )  THEN
    494 
    495                    IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
    496                         k3 == nzb_s_inner(j3,i3) )  THEN
    497                       reflect_z = .TRUE.
    498                       EXIT case4
    499                    ENDIF
    500 
    501                 ENDIF
    502 
    503                 IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
    504                      nzb_s_inner(j3,i5) /= 0 )  THEN
    505 
    506                    IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
    507                         k3 == nzb_s_inner(j3,i5) )  THEN
    508                       reflect_z = .TRUE.
    509                       EXIT case4
    510                    ENDIF
    511 
    512                    IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
    513                         nzb_s_inner(j3,i5) /=0  .AND.          &
    514                         pos_z < nzb_s_inner(j3,i5) * dz )  THEN
    515                       reflect_x = .TRUE.
    516                       EXIT case4
    517                    ENDIF
    518 
    519                 ENDIF
    520 
    521                 IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
    522                      nzb_s_inner(j5,i3) /= 0 )  THEN
    523 
    524                    IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
    525                         k5 == nzb_s_inner(j5,i3) )  THEN
    526                       reflect_z = .TRUE.
    527                       EXIT case4
    528                    ENDIF
    529 
    530                    IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
    531                         nzb_s_inner(j5,i3) /= 0  .AND.         &
    532                         pos_z < nzb_s_inner(j5,i3) * dz )  THEN
    533                       reflect_y = .TRUE.
    534                       EXIT case4
    535                    ENDIF
    536 
    537                 ENDIF
     89             particle_mask(n)  = .FALSE.
     90             deleted_particles = deleted_particles + 1
     91             IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     92                tail_mask(nn) = .FALSE.
     93                deleted_tails = deleted_tails + 1
     94             ENDIF
     95          ENDIF
     96
     97          IF ( particles(n)%z >= zu(nz)  .AND.  particle_mask(n) )  THEN
     98             IF ( ibc_par_t == 1 )  THEN
     99!
     100!--             Particle absorption
     101                particle_mask(n)  = .FALSE.
     102                deleted_particles = deleted_particles + 1
     103                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     104                   tail_mask(nn) = .FALSE.
     105                   deleted_tails = deleted_tails + 1
     106                ENDIF
     107             ELSEIF ( ibc_par_t == 2 )  THEN
     108!
     109!--             Particle reflection
     110                particles(n)%z       = 2.0 * zu(nz) - particles(n)%z
     111                particles(n)%speed_z = -particles(n)%speed_z
     112                IF ( use_sgs_for_particles  .AND. &
     113                     particles(n)%rvar3 > 0.0 )  THEN
     114                   particles(n)%rvar3 = -particles(n)%rvar3
     115                ENDIF
     116                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     117                   particle_tail_coordinates(1,3,nn) = 2.0 * zu(nz) - &
     118                                               particle_tail_coordinates(1,3,nn)
     119                ENDIF
     120             ENDIF
     121          ENDIF
     122          IF ( particles(n)%z < zw(0)  .AND.  particle_mask(n) )  THEN
     123             IF ( ibc_par_b == 1 )  THEN
     124!
     125!--             Particle absorption
     126                particle_mask(n)  = .FALSE.
     127                deleted_particles = deleted_particles + 1
     128                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     129                   tail_mask(nn) = .FALSE.
     130                   deleted_tails = deleted_tails + 1
     131                ENDIF
     132             ELSEIF ( ibc_par_b == 2 )  THEN
     133!
     134!--             Particle reflection
     135                particles(n)%z       = 2.0 * zw(0) - particles(n)%z
     136                particles(n)%speed_z = -particles(n)%speed_z
     137                IF ( use_sgs_for_particles  .AND. &
     138                     particles(n)%rvar3 < 0.0 )  THEN
     139                   particles(n)%rvar3 = -particles(n)%rvar3
     140                ENDIF
     141                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     142                   particle_tail_coordinates(1,3,nn) = 2.0 * zu(nz) - &
     143                                               particle_tail_coordinates(1,3,nn)
     144                ENDIF
     145                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     146                   particle_tail_coordinates(1,3,nn) = 2.0 * zw(0) - &
     147                                               particle_tail_coordinates(1,3,nn)
     148                ENDIF
     149             ENDIF
     150          ENDIF
     151       ENDDO
     152
     153    ELSEIF ( range == 'walls' )  THEN
     154
     155       CALL cpu_log( log_point_s(48), 'lpm_wall_reflect', 'start' )
     156
     157       reflect_x = .FALSE.
     158       reflect_y = .FALSE.
     159       reflect_z = .FALSE.
     160
     161       DO  n = 1, number_of_particles
     162
     163          dt_particle = particles(n)%age - particles(n)%age_m
     164
     165          i2 = ( particles(n)%x + 0.5 * dx ) * ddx
     166          j2 = ( particles(n)%y + 0.5 * dy ) * ddy
     167          k2 = particles(n)%z / dz + 1 + offset_ocean_nzt_m1
     168
     169          prt_x = particles(n)%x
     170          prt_y = particles(n)%y
     171          prt_z = particles(n)%z
     172
     173!
     174!--       If the particle position is below the surface, it has to be reflected
     175          IF ( k2 <= nzb_s_inner(j2,i2)  .AND.  nzb_s_inner(j2,i2) /=0 )  THEN
     176
     177             pos_x_old = particles(n)%x - particles(n)%speed_x * dt_particle
     178             pos_y_old = particles(n)%y - particles(n)%speed_y * dt_particle
     179             pos_z_old = particles(n)%z - particles(n)%speed_z * dt_particle
     180             i1 = ( pos_x_old + 0.5 * dx ) * ddx
     181             j1 = ( pos_y_old + 0.5 * dy ) * ddy
     182             k1 = pos_z_old / dz + offset_ocean_nzt_m1
     183
     184!
     185!--          Case 1
     186             IF ( particles(n)%x > pos_x_old .AND. particles(n)%y > pos_y_old )&
     187             THEN
     188                t_index = 1
     189
     190                DO  i = i1, i2
     191                   xline      = i * dx + 0.5 * dx
     192                   t(t_index) = ( xline - pos_x_old ) / &
     193                                ( particles(n)%x - pos_x_old )
     194                   t_index    = t_index + 1
     195                ENDDO
     196
     197                DO  j = j1, j2
     198                   yline      = j * dy + 0.5 * dy
     199                   t(t_index) = ( yline - pos_y_old ) / &
     200                                ( particles(n)%y - pos_y_old )
     201                   t_index    = t_index + 1
     202                ENDDO
     203
     204                IF ( particles(n)%z < pos_z_old )  THEN
     205                   DO  k = k1, k2 , -1
     206                      zline      = k * dz
     207                      t(t_index) = ( pos_z_old - zline ) / &
     208                                   ( pos_z_old - particles(n)%z )
     209                      t_index    = t_index + 1
     210                   ENDDO
     211                ENDIF
     212
     213                t_index_number = t_index - 1
     214
     215!
     216!--             Sorting t
     217                inc = 1
     218                jr  = 1
     219                DO WHILE ( inc <= t_index_number )
     220                   inc = 3 * inc + 1
     221                ENDDO
     222
     223                DO WHILE ( inc > 1 )
     224                   inc = inc / 3
     225                   DO  ir = inc+1, t_index_number
     226                      tmp_t = t(ir)
     227                      jr    = ir
     228                      DO WHILE ( t(jr-inc) > tmp_t )
     229                         t(jr) = t(jr-inc)
     230                         jr    = jr - inc
     231                         IF ( jr <= inc )  EXIT
     232                      ENDDO
     233                      t(jr) = tmp_t
     234                   ENDDO
     235                ENDDO
     236
     237         case1: DO  t_index = 1, t_index_number
     238
     239                   pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
     240                   pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
     241                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
     242
     243                   i3 = ( pos_x + 0.5 * dx ) * ddx   
     244                   j3 = ( pos_y + 0.5 * dy ) * ddy
     245                   k3 = pos_z / dz + offset_ocean_nzt_m1
     246
     247                   i5 = pos_x * ddx
     248                   j5 = pos_y * ddy
     249                   k5 = pos_z / dz + offset_ocean_nzt_m1
     250
     251                   IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
     252                        nzb_s_inner(j5,i3) /= 0 )  THEN
     253
     254                      IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
     255                           k3 == nzb_s_inner(j5,i3) )  THEN
     256                         reflect_z = .TRUE.
     257                         EXIT case1
     258                      ENDIF
     259
     260                   ENDIF
     261
     262                   IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
     263                        nzb_s_inner(j3,i5) /= 0 )  THEN
     264
     265                      IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
     266                           k3 == nzb_s_inner(j3,i5) )  THEN
     267                         reflect_z = .TRUE.
     268                         EXIT case1
     269                      ENDIF
     270
     271                   ENDIF
     272
     273                   IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
     274                        nzb_s_inner(j3,i3) /= 0 )  THEN
     275
     276                      IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
     277                           k3 == nzb_s_inner(j3,i3) )  THEN
     278                         reflect_z = .TRUE.
     279                         EXIT case1
     280                      ENDIF
     281
     282                      IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
     283                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
     284                         reflect_y = .TRUE.
     285                         EXIT case1
     286                      ENDIF
     287
     288                      IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
     289                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
     290                         reflect_x = .TRUE.
     291                         EXIT case1
     292                      ENDIF
     293
     294                   ENDIF
     295
     296                ENDDO case1
     297
     298!
     299!--          Case 2
     300             ELSEIF ( particles(n)%x > pos_x_old  .AND. &
     301                      particles(n)%y < pos_y_old )  THEN
     302
     303                t_index = 1
     304
     305                DO  i = i1, i2
     306                   xline      = i * dx + 0.5 * dx
     307                   t(t_index) = ( xline - pos_x_old ) / &
     308                                ( particles(n)%x - pos_x_old )
     309                   t_index    = t_index + 1
     310                ENDDO
     311
     312                DO  j = j1, j2, -1
     313                   yline      = j * dy - 0.5 * dy
     314                   t(t_index) = ( pos_y_old - yline ) / &
     315                                ( pos_y_old - particles(n)%y )
     316                   t_index    = t_index + 1
     317                ENDDO
     318
     319                IF ( particles(n)%z < pos_z_old )  THEN
     320                   DO  k = k1, k2 , -1
     321                      zline      = k * dz
     322                      t(t_index) = ( pos_z_old - zline ) / &
     323                                   ( pos_z_old - particles(n)%z )
     324                      t_index    = t_index + 1
     325                   ENDDO
     326                ENDIF
     327                t_index_number = t_index-1
     328
     329!
     330!--             Sorting t
     331                inc = 1
     332                jr  = 1
     333                DO WHILE ( inc <= t_index_number )
     334                   inc = 3 * inc + 1
     335                ENDDO
     336
     337                DO WHILE ( inc > 1 )
     338                   inc = inc / 3
     339                   DO  ir = inc+1, t_index_number
     340                      tmp_t = t(ir)
     341                      jr    = ir
     342                      DO WHILE ( t(jr-inc) > tmp_t )
     343                         t(jr) = t(jr-inc)
     344                         jr    = jr - inc
     345                         IF ( jr <= inc )  EXIT
     346                      ENDDO
     347                      t(jr) = tmp_t
     348                   ENDDO
     349                ENDDO
     350
     351         case2: DO  t_index = 1, t_index_number
     352
     353                   pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
     354                   pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
     355                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
     356
     357                   i3 = ( pos_x + 0.5 * dx ) * ddx
     358                   j3 = ( pos_y + 0.5 * dy ) * ddy
     359                   k3 = pos_z / dz + offset_ocean_nzt_m1
     360
     361                   i5 = pos_x * ddx
     362                   j5 = pos_y * ddy
     363                   k5 = pos_z / dz + offset_ocean_nzt_m1
     364
     365                   IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
     366                        nzb_s_inner(j3,i5) /= 0 )  THEN
     367
     368                      IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
     369                           k3 == nzb_s_inner(j3,i5) )  THEN
     370                         reflect_z = .TRUE.
     371                         EXIT case2
     372                      ENDIF
     373
     374                   ENDIF
     375
     376                   IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
     377                        nzb_s_inner(j3,i3) /= 0 )  THEN
     378
     379                      IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
     380                           k3 == nzb_s_inner(j3,i3) )  THEN
     381                         reflect_z = .TRUE.
     382                         EXIT case2
     383                      ENDIF
     384
     385                      IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
     386                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
     387                         reflect_x = .TRUE.
     388                         EXIT case2
     389                      ENDIF
     390
     391                   ENDIF
     392
     393                   IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
     394                        nzb_s_inner(j5,i3) /= 0 )  THEN
     395
     396                      IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
     397                           k3 == nzb_s_inner(j5,i3) )  THEN
     398                         reflect_z = .TRUE.
     399                         EXIT case2
     400                      ENDIF
     401
     402                      IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
     403                           pos_z < nzb_s_inner(j5,i3) * dz )  THEN
     404                         reflect_y = .TRUE.
     405                         EXIT case2
     406                      ENDIF
     407
     408                   ENDIF
     409
     410                ENDDO case2
     411
     412!
     413!--          Case 3
     414             ELSEIF ( particles(n)%x < pos_x_old  .AND. &
     415                      particles(n)%y > pos_y_old )  THEN
     416
     417                t_index = 1
     418
     419                DO  i = i1, i2, -1
     420                   xline      = i * dx - 0.5 * dx
     421                   t(t_index) = ( pos_x_old - xline ) / &
     422                                ( pos_x_old - particles(n)%x )
     423                   t_index    = t_index + 1
     424                ENDDO
     425
     426                DO  j = j1, j2
     427                   yline      = j * dy + 0.5 * dy
     428                   t(t_index) = ( yline - pos_y_old ) / &
     429                                ( particles(n)%y - pos_y_old )
     430                   t_index    = t_index + 1
     431                ENDDO
     432
     433                IF ( particles(n)%z < pos_z_old )  THEN
     434                   DO  k = k1, k2 , -1
     435                      zline      = k * dz
     436                      t(t_index) = ( pos_z_old - zline ) / &
     437                                   ( pos_z_old - particles(n)%z )
     438                      t_index    = t_index + 1
     439                   ENDDO
     440                ENDIF
     441                t_index_number = t_index - 1
     442
     443!
     444!--             Sorting t
     445                inc = 1
     446                jr  = 1
     447
     448                DO WHILE ( inc <= t_index_number )
     449                   inc = 3 * inc + 1
     450                ENDDO
     451
     452                DO WHILE ( inc > 1 )
     453                   inc = inc / 3
     454                   DO  ir = inc+1, t_index_number
     455                      tmp_t = t(ir)
     456                      jr    = ir
     457                      DO WHILE ( t(jr-inc) > tmp_t )
     458                         t(jr) = t(jr-inc)
     459                         jr    = jr - inc
     460                         IF ( jr <= inc )  EXIT
     461                      ENDDO
     462                      t(jr) = tmp_t
     463                   ENDDO
     464                ENDDO
     465
     466         case3: DO  t_index = 1, t_index_number
     467
     468                   pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
     469                   pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
     470                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
     471
     472                   i3 = ( pos_x + 0.5 * dx ) * ddx
     473                   j3 = ( pos_y + 0.5 * dy ) * ddy
     474                   k3 = pos_z / dz + offset_ocean_nzt_m1
     475
     476                   i5 = pos_x * ddx
     477                   j5 = pos_y * ddy
     478                   k5 = pos_z / dz + offset_ocean_nzt_m1
     479
     480                   IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
     481                        nzb_s_inner(j5,i3) /= 0 )  THEN
     482
     483                      IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
     484                           k3 == nzb_s_inner(j5,i3) )  THEN
     485                         reflect_z = .TRUE.
     486                         EXIT case3
     487                      ENDIF
     488
     489                   ENDIF
     490
     491                   IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
     492                        nzb_s_inner(j3,i3) /= 0 )  THEN
     493
     494                      IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
     495                           k3 == nzb_s_inner(j3,i3) )  THEN
     496                         reflect_z = .TRUE.
     497                         EXIT case3
     498                      ENDIF
     499
     500                      IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
     501                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
     502                         reflect_y = .TRUE.
     503                         EXIT case3
     504                      ENDIF
     505
     506                   ENDIF
     507
     508                   IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
     509                        nzb_s_inner(j3,i5) /= 0 )  THEN
     510
     511                      IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
     512                           k3 == nzb_s_inner(j3,i5) )  THEN
     513                         reflect_z = .TRUE.
     514                         EXIT case3
     515                      ENDIF
     516
     517                      IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
     518                           pos_z < nzb_s_inner(j3,i5) * dz )  THEN
     519                         reflect_x = .TRUE.
     520                         EXIT case3
     521                      ENDIF
     522
     523                   ENDIF
     524
     525                ENDDO case3
     526
     527!
     528!--          Case 4
     529             ELSEIF ( particles(n)%x < pos_x_old  .AND. &
     530                      particles(n)%y < pos_y_old )  THEN
     531
     532                t_index = 1
     533
     534                DO  i = i1, i2, -1
     535                   xline      = i * dx - 0.5 * dx
     536                   t(t_index) = ( pos_x_old - xline ) / &
     537                                ( pos_x_old - particles(n)%x )
     538                   t_index    = t_index + 1
     539                ENDDO
     540
     541                DO  j = j1, j2, -1
     542                   yline      = j * dy - 0.5 * dy
     543                   t(t_index) = ( pos_y_old - yline ) / &
     544                                ( pos_y_old - particles(n)%y )
     545                   t_index    = t_index + 1
     546                ENDDO
     547
     548                IF ( particles(n)%z < pos_z_old )  THEN
     549                   DO  k = k1, k2 , -1
     550                      zline      = k * dz
     551                      t(t_index) = ( pos_z_old - zline ) / &
     552                                   ( pos_z_old-particles(n)%z )
     553                      t_index    = t_index + 1
     554                   ENDDO
     555                ENDIF
     556                t_index_number = t_index-1
     557
     558!
     559!--             Sorting t
     560                inc = 1
     561                jr  = 1
     562
     563                DO WHILE ( inc <= t_index_number )
     564                   inc = 3 * inc + 1
     565                ENDDO
     566
     567                DO WHILE ( inc > 1 )
     568                   inc = inc / 3
     569                   DO  ir = inc+1, t_index_number
     570                      tmp_t = t(ir)
     571                      jr = ir
     572                      DO WHILE ( t(jr-inc) > tmp_t )
     573                         t(jr) = t(jr-inc)
     574                         jr    = jr - inc
     575                         IF ( jr <= inc )  EXIT
     576                      ENDDO
     577                      t(jr) = tmp_t
     578                   ENDDO
     579                ENDDO
     580
     581         case4: DO  t_index = 1, t_index_number
     582
     583                   pos_x = pos_x_old + t(t_index) * ( prt_x - pos_x_old )
     584                   pos_y = pos_y_old + t(t_index) * ( prt_y - pos_y_old )
     585                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
     586
     587                   i3 = ( pos_x + 0.5 * dx ) * ddx   
     588                   j3 = ( pos_y + 0.5 * dy ) * ddy
     589                   k3 = pos_z / dz + offset_ocean_nzt_m1
     590
     591                   i5 = pos_x * ddx
     592                   j5 = pos_y * ddy
     593                   k5 = pos_z / dz + offset_ocean_nzt_m1
     594
     595                   IF ( k3 <= nzb_s_inner(j3,i3)  .AND. &
     596                        nzb_s_inner(j3,i3) /= 0 )  THEN
     597
     598                      IF ( pos_z == nzb_s_inner(j3,i3) * dz  .AND. &
     599                           k3 == nzb_s_inner(j3,i3) )  THEN
     600                         reflect_z = .TRUE.
     601                         EXIT case4
     602                      ENDIF
     603
     604                   ENDIF
     605
     606                   IF ( k5 <= nzb_s_inner(j3,i5)  .AND. &
     607                        nzb_s_inner(j3,i5) /= 0 )  THEN
     608
     609                      IF ( pos_z == nzb_s_inner(j3,i5) * dz  .AND. &
     610                           k3 == nzb_s_inner(j3,i5) )  THEN
     611                         reflect_z = .TRUE.
     612                         EXIT case4
     613                      ENDIF
     614
     615                      IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
     616                           nzb_s_inner(j3,i5) /=0  .AND.          &
     617                           pos_z < nzb_s_inner(j3,i5) * dz )  THEN
     618                         reflect_x = .TRUE.
     619                         EXIT case4
     620                      ENDIF
     621
     622                   ENDIF
     623
     624                   IF ( k5 <= nzb_s_inner(j5,i3)  .AND. &
     625                        nzb_s_inner(j5,i3) /= 0 )  THEN
     626
     627                      IF ( pos_z == nzb_s_inner(j5,i3) * dz  .AND. &
     628                           k5 == nzb_s_inner(j5,i3) )  THEN
     629                         reflect_z = .TRUE.
     630                         EXIT case4
     631                      ENDIF
     632
     633                      IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
     634                           nzb_s_inner(j5,i3) /= 0  .AND.         &
     635                           pos_z < nzb_s_inner(j5,i3) * dz )  THEN
     636                         reflect_y = .TRUE.
     637                         EXIT case4
     638                      ENDIF
     639
     640                   ENDIF
    538641 
    539              ENDDO case4
    540 
    541           ENDIF
    542 
    543        ENDIF      ! Check, if particle position is below the surface
    544 
    545 !
    546 !--    Do the respective reflection, in case that one of the above conditions
    547 !--    is found to be true
    548        IF ( reflect_z )  THEN
    549 
    550           particles(n)%z       = 2.0 * pos_z - prt_z
    551           particles(n)%speed_z = - particles(n)%speed_z
    552 
    553           IF ( use_sgs_for_particles )  THEN
    554              particles(n)%rvar3 = - particles(n)%rvar3
    555           ENDIF
    556           reflect_z = .FALSE.
    557 
    558        ELSEIF ( reflect_y )  THEN
    559 
    560           particles(n)%y       = 2.0 * pos_y - prt_y
    561           particles(n)%speed_y = - particles(n)%speed_y
    562 
    563           IF ( use_sgs_for_particles )  THEN
    564              particles(n)%rvar2 = - particles(n)%rvar2
    565           ENDIF
    566           reflect_y = .FALSE.
    567 
    568        ELSEIF ( reflect_x )  THEN
    569 
    570           particles(n)%x       = 2.0 * pos_x - prt_x
    571           particles(n)%speed_x = - particles(n)%speed_x
    572 
    573           IF ( use_sgs_for_particles )  THEN
    574              particles(n)%rvar1 = - particles(n)%rvar1
    575           ENDIF
    576           reflect_x = .FALSE.
    577 
    578        ENDIF       
     642                ENDDO case4
     643
     644             ENDIF
     645
     646          ENDIF      ! Check, if particle position is below the surface
     647
     648!
     649!--       Do the respective reflection, in case that one of the above conditions
     650!--       is found to be true
     651          IF ( reflect_z )  THEN
     652
     653             particles(n)%z       = 2.0 * pos_z - prt_z
     654             particles(n)%speed_z = - particles(n)%speed_z
     655
     656             IF ( use_sgs_for_particles )  THEN
     657                particles(n)%rvar3 = - particles(n)%rvar3
     658             ENDIF
     659             reflect_z = .FALSE.
     660
     661          ELSEIF ( reflect_y )  THEN
     662
     663             particles(n)%y       = 2.0 * pos_y - prt_y
     664             particles(n)%speed_y = - particles(n)%speed_y
     665
     666             IF ( use_sgs_for_particles )  THEN
     667                particles(n)%rvar2 = - particles(n)%rvar2
     668             ENDIF
     669             reflect_y = .FALSE.
     670
     671          ELSEIF ( reflect_x )  THEN
     672
     673             particles(n)%x       = 2.0 * pos_x - prt_x
     674             particles(n)%speed_x = - particles(n)%speed_x
     675
     676             IF ( use_sgs_for_particles )  THEN
     677                particles(n)%rvar1 = - particles(n)%rvar1
     678             ENDIF
     679             reflect_x = .FALSE.
     680
     681          ENDIF       
    579682   
    580     ENDDO
    581 
    582     CALL cpu_log( log_point_s(48), 'advec_part_refle', 'stop' )
    583 
    584 
    585  END SUBROUTINE particle_boundary_conds
     683       ENDDO
     684
     685       CALL cpu_log( log_point_s(48), 'lpm_wall_reflect', 'stop' )
     686
     687    ENDIF
     688
     689 END SUBROUTINE lpm_boundary_conds
Note: See TracChangeset for help on using the changeset viewer.