Ignore:
Timestamp:
Jun 13, 2016 1:37:44 PM (8 years ago)
Author:
suehring
Message:

deallocation of unused particle memory, formatting adjustments

File:
1 edited

Legend:

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

    r1930 r1936  
    1919! Current revisions:
    2020! ------------------
    21 !
     21! Deallocation of unused memory
    2222!
    2323! Former revisions:
     
    138138
    139139    PRIVATE
    140     PUBLIC lpm_exchange_horiz, lpm_move_particle, realloc_particles_array
     140    PUBLIC lpm_exchange_horiz, lpm_move_particle, realloc_particles_array,     &
     141           dealloc_particles_array
    141142
    142143    INTERFACE lpm_exchange_horiz
     
    152153    END INTERFACE realloc_particles_array
    153154
     155    INTERFACE dealloc_particles_array
     156       MODULE PROCEDURE dealloc_particles_array
     157    END INTERFACE dealloc_particles_array
    154158CONTAINS
    155159
     
    10571061    TYPE(particle_type), DIMENSION(500)            :: tmp_particles_s !<
    10581062
    1059 
    10601063    old_size = SIZE(grid_particles(k,j,i)%particles)
    10611064
     
    10971100 END SUBROUTINE realloc_particles_array
    10981101
     1102
     1103
     1104
     1105
     1106 SUBROUTINE dealloc_particles_array
     1107
     1108    IMPLICIT NONE
     1109
     1110    INTEGER(iwp) ::  i
     1111    INTEGER(iwp) ::  j
     1112    INTEGER(iwp) ::  k
     1113    INTEGER(iwp) :: old_size        !<
     1114    INTEGER(iwp) :: new_size        !<
     1115
     1116    LOGICAL                                        :: dealloc 
     1117
     1118    TYPE(particle_type), DIMENSION(:), ALLOCATABLE :: tmp_particles_d !<
     1119    TYPE(particle_type), DIMENSION(500)            :: tmp_particles_s !<
     1120
     1121    DO  i = nxl, nxr
     1122       DO  j = nys, nyn
     1123          DO  k = nzb+1, nzt
     1124!
     1125!--          Determine number of active particles
     1126             number_of_particles = prt_count(k,j,i)
     1127!
     1128!--          Determine allocated memory size
     1129             old_size = SIZE( grid_particles(k,j,i)%particles )
     1130!
     1131!--          Check for large unused memory
     1132             dealloc = ( ( number_of_particles < min_nr_particle .AND.         &
     1133                           old_size            > min_nr_particle )  .OR.       &
     1134                         ( number_of_particles > min_nr_particle .AND.         &
     1135                           old_size - number_of_particles *                    &
     1136                              ( 1.0_wp + 0.01_wp * alloc_factor ) > 0.0_wp ) )
     1137                         
     1138
     1139             IF ( dealloc )  THEN
     1140                IF ( number_of_particles < min_nr_particle )  THEN
     1141                   new_size = min_nr_particle
     1142                ELSE
     1143                   new_size = INT( number_of_particles * ( 1.0_wp + 0.01_wp * alloc_factor ) )
     1144                ENDIF
     1145
     1146                IF ( number_of_particles <= 500 )  THEN
     1147
     1148                   tmp_particles_s(1:number_of_particles) = grid_particles(k,j,i)%particles(1:number_of_particles)
     1149
     1150                   DEALLOCATE(grid_particles(k,j,i)%particles)
     1151                   ALLOCATE(grid_particles(k,j,i)%particles(new_size))
     1152
     1153                   grid_particles(k,j,i)%particles(1:number_of_particles)          = tmp_particles_s(1:number_of_particles)
     1154                   grid_particles(k,j,i)%particles(number_of_particles+1:new_size) = zero_particle
     1155
     1156                ELSE
     1157
     1158                   ALLOCATE(tmp_particles_d(number_of_particles))
     1159                   tmp_particles_d(1:number_of_particles) = grid_particles(k,j,i)%particles(1:number_of_particles)
     1160
     1161                   DEALLOCATE(grid_particles(k,j,i)%particles)
     1162                   ALLOCATE(grid_particles(k,j,i)%particles(new_size))
     1163
     1164                   grid_particles(k,j,i)%particles(1:number_of_particles)          = tmp_particles_d(1:number_of_particles)
     1165                   grid_particles(k,j,i)%particles(number_of_particles+1:new_size) = zero_particle
     1166
     1167                   DEALLOCATE(tmp_particles_d)
     1168
     1169                ENDIF
     1170
     1171             ENDIF
     1172          ENDDO
     1173       ENDDO
     1174    ENDDO
     1175
     1176 END SUBROUTINE dealloc_particles_array
     1177
     1178
    10991179END MODULE lpm_exchange_horiz_mod
Note: See TracChangeset for help on using the changeset viewer.