Changeset 1936 for palm/trunk/SOURCE/lpm_exchange_horiz.f90
- Timestamp:
- Jun 13, 2016 1:37:44 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/lpm_exchange_horiz.f90
r1930 r1936 19 19 ! Current revisions: 20 20 ! ------------------ 21 ! 21 ! Deallocation of unused memory 22 22 ! 23 23 ! Former revisions: … … 138 138 139 139 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 141 142 142 143 INTERFACE lpm_exchange_horiz … … 152 153 END INTERFACE realloc_particles_array 153 154 155 INTERFACE dealloc_particles_array 156 MODULE PROCEDURE dealloc_particles_array 157 END INTERFACE dealloc_particles_array 154 158 CONTAINS 155 159 … … 1057 1061 TYPE(particle_type), DIMENSION(500) :: tmp_particles_s !< 1058 1062 1059 1060 1063 old_size = SIZE(grid_particles(k,j,i)%particles) 1061 1064 … … 1097 1100 END SUBROUTINE realloc_particles_array 1098 1101 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 1099 1179 END MODULE lpm_exchange_horiz_mod
Note: See TracChangeset
for help on using the changeset viewer.