Ignore:
Timestamp:
Apr 11, 2014 5:15:14 PM (7 years ago)
Author:
hoffmann
Message:

new Lagrangian particle structure integrated

File:
1 edited

Legend:

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

    r1321 r1359  
    2020! Current revisions:
    2121! -----------------
     22! New particle structure integrated.
     23! Kind definition added to all floating point numbers.
    2224!
    2325! Former revisions:
     
    6668
    6769    USE control_parameters,                                                    &
    68         ONLY:  dz, message_string, particle_maximum_age
     70        ONLY:  dz, message_string, particle_maximum_age, simulated_time
    6971
    7072    USE cpulog,                                                                &
     
    8183    USE particle_attributes,                                                   &
    8284        ONLY:  deleted_particles, deleted_tails, ibc_par_b, ibc_par_t,         &
    83                number_of_particles, particles, particle_mask,                  &
     85               number_of_particles, particles,                                 &
    8486               particle_tail_coordinates, particle_type, offset_ocean_nzt_m1,  &
    8587               tail_mask, use_particle_tails, use_sgs_for_particles
     
    158160
    159161          IF ( particles(n)%age > particle_maximum_age  .AND.  &
    160                particle_mask(n) )                              &
     162               particles(n)%particle_mask )                              &
    161163          THEN
    162              particle_mask(n)  = .FALSE.
     164             particles(n)%particle_mask  = .FALSE.
    163165             deleted_particles = deleted_particles + 1
    164166             IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     
    168170          ENDIF
    169171
    170           IF ( particles(n)%z >= zu(nz)  .AND.  particle_mask(n) )  THEN
     172          IF ( particles(n)%z >= zu(nz)  .AND.  particles(n)%particle_mask )  THEN
    171173             IF ( ibc_par_t == 1 )  THEN
    172174!
    173175!--             Particle absorption
    174                 particle_mask(n)  = .FALSE.
     176                particles(n)%particle_mask  = .FALSE.
    175177                deleted_particles = deleted_particles + 1
    176178                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     
    181183!
    182184!--             Particle reflection
    183                 particles(n)%z       = 2.0 * zu(nz) - particles(n)%z
     185                particles(n)%z       = 2.0_wp * zu(nz) - particles(n)%z
    184186                particles(n)%speed_z = -particles(n)%speed_z
    185187                IF ( use_sgs_for_particles  .AND. &
    186                      particles(n)%rvar3 > 0.0 )  THEN
     188                     particles(n)%rvar3 > 0.0_wp )  THEN
    187189                   particles(n)%rvar3 = -particles(n)%rvar3
    188190                ENDIF
    189191                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
    190                    particle_tail_coordinates(1,3,nn) = 2.0 * zu(nz) - &
     192                   particle_tail_coordinates(1,3,nn) = 2.0_wp * zu(nz) - &
    191193                                               particle_tail_coordinates(1,3,nn)
    192194                ENDIF
    193195             ENDIF
    194196          ENDIF
    195           IF ( particles(n)%z < zw(0)  .AND.  particle_mask(n) )  THEN
     197         
     198          IF ( particles(n)%z < zw(0)  .AND.  particles(n)%particle_mask )  THEN
    196199             IF ( ibc_par_b == 1 )  THEN
    197200!
    198201!--             Particle absorption
    199                 particle_mask(n)  = .FALSE.
     202                particles(n)%particle_mask  = .FALSE.
    200203                deleted_particles = deleted_particles + 1
    201204                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
     
    206209!
    207210!--             Particle reflection
    208                 particles(n)%z       = 2.0 * zw(0) - particles(n)%z
     211                particles(n)%z       = 2.0_wp * zw(0) - particles(n)%z
    209212                particles(n)%speed_z = -particles(n)%speed_z
    210213                IF ( use_sgs_for_particles  .AND. &
    211                      particles(n)%rvar3 < 0.0 )  THEN
     214                     particles(n)%rvar3 < 0.0_wp )  THEN
    212215                   particles(n)%rvar3 = -particles(n)%rvar3
    213216                ENDIF
    214217                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
    215                    particle_tail_coordinates(1,3,nn) = 2.0 * zu(nz) - &
     218                   particle_tail_coordinates(1,3,nn) = 2.0_wp * zu(nz) - &
    216219                                               particle_tail_coordinates(1,3,nn)
    217220                ENDIF
    218221                IF ( use_particle_tails  .AND.  nn /= 0 )  THEN
    219                    particle_tail_coordinates(1,3,nn) = 2.0 * zw(0) - &
     222                   particle_tail_coordinates(1,3,nn) = 2.0_wp * zw(0) - &
    220223                                               particle_tail_coordinates(1,3,nn)
    221224                ENDIF
     
    236239          dt_particle = particles(n)%age - particles(n)%age_m
    237240
    238           i2 = ( particles(n)%x + 0.5 * dx ) * ddx
    239           j2 = ( particles(n)%y + 0.5 * dy ) * ddy
     241          i2 = ( particles(n)%x + 0.5_wp * dx ) * ddx
     242          j2 = ( particles(n)%y + 0.5_wp * dy ) * ddy
    240243          k2 = particles(n)%z / dz + 1 + offset_ocean_nzt_m1
    241244
     
    251254             pos_y_old = particles(n)%y - particles(n)%speed_y * dt_particle
    252255             pos_z_old = particles(n)%z - particles(n)%speed_z * dt_particle
    253              i1 = ( pos_x_old + 0.5 * dx ) * ddx
    254              j1 = ( pos_y_old + 0.5 * dy ) * ddy
     256             i1 = ( pos_x_old + 0.5_wp * dx ) * ddx
     257             j1 = ( pos_y_old + 0.5_wp * dy ) * ddy
    255258             k1 = pos_z_old / dz + offset_ocean_nzt_m1
    256259
    257260!
    258261!--          Case 1
    259              IF ( particles(n)%x > pos_x_old .AND. particles(n)%y > pos_y_old )&
     262             IF ( particles(n)%x > pos_x_old  .AND. particles(n)%y > pos_y_old )&
    260263             THEN
    261264                t_index = 1
    262265
    263266                DO  i = i1, i2
    264                    xline      = i * dx + 0.5 * dx
     267                   xline      = i * dx + 0.5_wp * dx
    265268                   t(t_index) = ( xline - pos_x_old ) / &
    266269                                ( particles(n)%x - pos_x_old )
     
    269272
    270273                DO  j = j1, j2
    271                    yline      = j * dy + 0.5 * dy
     274                   yline      = j * dy + 0.5_wp * dy
    272275                   t(t_index) = ( yline - pos_y_old ) / &
    273276                                ( particles(n)%y - pos_y_old )
     
    314317                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    315318
    316                    i3 = ( pos_x + 0.5 * dx ) * ddx   
    317                    j3 = ( pos_y + 0.5 * dy ) * ddy
     319                   i3 = ( pos_x + 0.5_wp * dx ) * ddx   
     320                   j3 = ( pos_y + 0.5_wp * dy ) * ddy
    318321                   k3 = pos_z / dz + offset_ocean_nzt_m1
    319322
     
    353356                      ENDIF
    354357
    355                       IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
     358                      IF ( pos_y == ( j3 * dy - 0.5_wp * dy )  .AND. &
    356359                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    357360                         reflect_y = .TRUE.
     
    359362                      ENDIF
    360363
    361                       IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
     364                      IF ( pos_x == ( i3 * dx - 0.5_wp * dx )  .AND. &
    362365                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    363366                         reflect_x = .TRUE.
     
    377380
    378381                DO  i = i1, i2
    379                    xline      = i * dx + 0.5 * dx
     382                   xline      = i * dx + 0.5_wp * dx
    380383                   t(t_index) = ( xline - pos_x_old ) / &
    381384                                ( particles(n)%x - pos_x_old )
     
    384387
    385388                DO  j = j1, j2, -1
    386                    yline      = j * dy - 0.5 * dy
     389                   yline      = j * dy - 0.5_wp * dy
    387390                   t(t_index) = ( pos_y_old - yline ) / &
    388391                                ( pos_y_old - particles(n)%y )
     
    428431                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    429432
    430                    i3 = ( pos_x + 0.5 * dx ) * ddx
    431                    j3 = ( pos_y + 0.5 * dy ) * ddy
     433                   i3 = ( pos_x + 0.5_wp * dx ) * ddx
     434                   j3 = ( pos_y + 0.5_wp * dy ) * ddy
    432435                   k3 = pos_z / dz + offset_ocean_nzt_m1
    433436
     
    456459                      ENDIF
    457460
    458                       IF ( pos_x == ( i3 * dx - 0.5 * dx )  .AND. &
     461                      IF ( pos_x == ( i3 * dx - 0.5_wp * dx )  .AND. &
    459462                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    460463                         reflect_x = .TRUE.
     
    473476                      ENDIF
    474477
    475                       IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
     478                      IF ( pos_y == ( j5 * dy + 0.5_wp * dy )  .AND. &
    476479                           pos_z < nzb_s_inner(j5,i3) * dz )  THEN
    477480                         reflect_y = .TRUE.
     
    491494
    492495                DO  i = i1, i2, -1
    493                    xline      = i * dx - 0.5 * dx
     496                   xline      = i * dx - 0.5_wp * dx
    494497                   t(t_index) = ( pos_x_old - xline ) / &
    495498                                ( pos_x_old - particles(n)%x )
     
    498501
    499502                DO  j = j1, j2
    500                    yline      = j * dy + 0.5 * dy
     503                   yline      = j * dy + 0.5_wp * dy
    501504                   t(t_index) = ( yline - pos_y_old ) / &
    502505                                ( particles(n)%y - pos_y_old )
     
    543546                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    544547
    545                    i3 = ( pos_x + 0.5 * dx ) * ddx
    546                    j3 = ( pos_y + 0.5 * dy ) * ddy
     548                   i3 = ( pos_x + 0.5_wp * dx ) * ddx
     549                   j3 = ( pos_y + 0.5_wp * dy ) * ddy
    547550                   k3 = pos_z / dz + offset_ocean_nzt_m1
    548551
     
    571574                      ENDIF
    572575
    573                       IF ( pos_y == ( j3 * dy - 0.5 * dy )  .AND. &
     576                      IF ( pos_y == ( j3 * dy - 0.5_wp * dy )  .AND. &
    574577                           pos_z < nzb_s_inner(j3,i3) * dz )  THEN
    575578                         reflect_y = .TRUE.
     
    588591                      ENDIF
    589592
    590                       IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
     593                      IF ( pos_x == ( i5 * dx + 0.5_wp * dx )  .AND. &
    591594                           pos_z < nzb_s_inner(j3,i5) * dz )  THEN
    592595                         reflect_x = .TRUE.
     
    606609
    607610                DO  i = i1, i2, -1
    608                    xline      = i * dx - 0.5 * dx
     611                   xline      = i * dx - 0.5_wp * dx
    609612                   t(t_index) = ( pos_x_old - xline ) / &
    610613                                ( pos_x_old - particles(n)%x )
     
    613616
    614617                DO  j = j1, j2, -1
    615                    yline      = j * dy - 0.5 * dy
     618                   yline      = j * dy - 0.5_wp * dy
    616619                   t(t_index) = ( pos_y_old - yline ) / &
    617620                                ( pos_y_old - particles(n)%y )
     
    658661                   pos_z = pos_z_old + t(t_index) * ( prt_z - pos_z_old )
    659662
    660                    i3 = ( pos_x + 0.5 * dx ) * ddx   
    661                    j3 = ( pos_y + 0.5 * dy ) * ddy
     663                   i3 = ( pos_x + 0.5_wp * dx ) * ddx   
     664                   j3 = ( pos_y + 0.5_wp * dy ) * ddy
    662665                   k3 = pos_z / dz + offset_ocean_nzt_m1
    663666
     
    686689                      ENDIF
    687690
    688                       IF ( pos_x == ( i5 * dx + 0.5 * dx )  .AND. &
     691                      IF ( pos_x == ( i5 * dx + 0.5_wp * dx )  .AND. &
    689692                           nzb_s_inner(j3,i5) /=0  .AND.          &
    690693                           pos_z < nzb_s_inner(j3,i5) * dz )  THEN
     
    704707                      ENDIF
    705708
    706                       IF ( pos_y == ( j5 * dy + 0.5 * dy )  .AND. &
     709                      IF ( pos_y == ( j5 * dy + 0.5_wp * dy )  .AND. &
    707710                           nzb_s_inner(j5,i3) /= 0  .AND.         &
    708711                           pos_z < nzb_s_inner(j5,i3) * dz )  THEN
     
    724727          IF ( reflect_z )  THEN
    725728
    726              particles(n)%z       = 2.0 * pos_z - prt_z
     729             particles(n)%z       = 2.0_wp * pos_z - prt_z
    727730             particles(n)%speed_z = - particles(n)%speed_z
    728731
     
    734737          ELSEIF ( reflect_y )  THEN
    735738
    736              particles(n)%y       = 2.0 * pos_y - prt_y
     739             particles(n)%y       = 2.0_wp * pos_y - prt_y
    737740             particles(n)%speed_y = - particles(n)%speed_y
    738741
     
    744747          ELSEIF ( reflect_x )  THEN
    745748
    746              particles(n)%x       = 2.0 * pos_x - prt_x
     749             particles(n)%x       = 2.0_wp * pos_x - prt_x
    747750             particles(n)%speed_x = - particles(n)%speed_x
    748751
Note: See TracChangeset for help on using the changeset viewer.