175 | | ! Physical bounds of boxes |
176 | | box_0=64000*reshape((/-1,-1,-1,1,1,1/),(/3,2/)) |
177 | | box_4=4000*reshape((/-1,-1,-1,1,1,1/),(/3,2/)) |
178 | | box_7=750*reshape((/-1,-1,-1,1,1,1/),(/3,2/)) |
179 | | |
180 | | ! index of boxes in each level's index space |
181 | | ibox_0=nint(box_0-spread(GxBounds(:,1),2,2))/levels(0)%dx + spread((/1,0/),1,3) |
182 | | if (maxlevel >= 4) then |
183 | | ibox_4=nint(box_4-spread(GxBounds(:,1),2,2))/levels(4)%dx + spread((/1,0/),1,3) |
184 | | if (maxlevel >= 7) then |
185 | | ibox_7=nint(box_7-spread(GxBounds(:,1),2,2))/levels(7)%dx + spread((/1,0/),1,3) |
186 | | end if |
187 | | end if |
188 | | |
189 | | |
| 175 | nx=Info%mx(1) |
| 176 | ny=Info%mx(2) |
| 177 | nz=Info%mx(3) |
| 178 | IF (lRestart) RETURN |
| 179 | IF (.NOT. ANY(Info%level == (/0,4,7/))) RETURN |
| 180 | SELECT CASE(Info%level) |
211 | | select case(info%level) |
212 | | case(0) |
213 | | do k=1,128 |
214 | | do j=1,128 |
215 | | read(195,*),a(1,:) |
216 | | read(196,*),a(2,:) |
217 | | read(197,*),a(3,:) |
218 | | read(198,*),a(4,:) |
219 | | read(199,*),a(5,:) |
220 | | if (j.ge.57.and.j.le.72) then |
221 | | do i=1,16 |
222 | | Info%q(i,j-56,k,1)=a(1,56+i)/rscale |
223 | | Info%q(i,j-56,k,2)=a(1,56+i)*a(2,56+i)/rscale/velscale |
224 | | Info%q(i,j-56,k,3)=a(1,56+i)*a(3,56+i)/rscale/velscale |
225 | | Info%q(i,j-56,k,4)=a(1,56+i)*a(4,56+i)/rscale/velscale |
226 | | Info%q(i,j-56,k,5)=a(1,56+i)*(a(5,56+i)+0.5*(a(2,56+i)& |
227 | | *a(2,56+i)+a(3,56+i)*a(3,56+i)+a(4,56+i)*a(4,56+i)))/pscale |
228 | | end do |
229 | | end if |
230 | | end do |
231 | | end do |
232 | | case(4) |
233 | | do k=1,128 |
234 | | do j=1,128 |
235 | | read(195,*),a(1,:) |
236 | | read(196,*),a(2,:) |
237 | | read(197,*),a(3,:) |
238 | | read(198,*),a(4,:) |
239 | | read(199,*),a(5,:) |
240 | | Info%q(1:128,j,k,1)=a(1,:)/rscale |
241 | | Info%q(1:128,j,k,2)=a(1,1:128)*a(2,1:128)/rscale/velscale |
242 | | Info%q(1:128,j,k,3)=a(1,1:128)*a(3,1:128)/rscale/velscale |
243 | | Info%q(1:128,j,k,4)=a(1,1:128)*a(4,1:128)/rscale/velscale |
244 | | Info%q(1:128,j,k,5)=a(1,1:128)*(a(5,1:128)+0.5*(a(2,1:128)*a(2,1:128)+a(3,1:128)*a(3,1:128)+a(4,1:128)*a(4,1:128)))/pscale |
245 | | end do |
246 | | end do |
247 | | case(7) |
248 | | do k=1,192 |
249 | | do j=1,192 |
250 | | read(195,*),b(1,:) |
251 | | read(196,*),b(2,:) |
252 | | read(197,*),b(3,:) |
253 | | read(198,*),b(4,:) |
254 | | read(199,*),b(5,:) |
255 | | Info%q(1:192,j,k,1)=b(1,:)/rscale |
256 | | Info%q(1:192,j,k,2)=b(1,1:192)*b(2,1:192)/rscale/velscale |
257 | | Info%q(1:192,j,k,3)=b(1,1:192)*b(3,1:192)/rscale/velscale |
258 | | Info%q(1:192,j,k,4)=b(1,1:192)*b(4,1:192)/rscale/velscale |
259 | | Info%q(1:192,j,k,5)=b(1,1:192)*(b(5,1:192)+0.5*(b(2,1:192)*b(2,1:192)+b(3,1:192)*b(3,1:192)+b(4,1:192)*b(4,1:192)))/pscale |
260 | | end do |
261 | | end do |
| 202 | END SELECT |
| 203 | |
| 204 | do i=1,19 !< Reads the first 19 lines from each file - presumably containing meta data |
| 205 | read(195,*) |
| 206 | read(196,*) |
| 207 | read(197,*) |
| 208 | read(198,*) |
| 209 | read(199,*) |
| 210 | end do |
| 211 | |
| 212 | |
| 213 | ! Allocate space to store local box |
| 214 | allocate(a(ibox(1,1):ibox(1,2), ibox(2,1):ibox(2,2), ibox(3,1):ibox(3,2), 5)) |
| 215 | |
| 216 | ! Read in data |
| 217 | read(195,*),a(:,:,:,1) !< must be density in g |
| 218 | read(196,*),a(:,:,:,2) !< x-velocity in cm/s |
| 219 | read(197,*),a(:,:,:,3) !< y-velocity in cm/s |
| 220 | read(198,*),a(:,:,:,4) !< z-velocity in cm/s |
| 221 | read(199,*),a(:,:,:,5) !< internal energy in erg/g |
| 222 | close(195) |
| 223 | close(196) |
| 224 | close(197) |
| 225 | close(198) |
| 226 | close(199) |
| 227 | |
| 228 | a(:,:,:,5)=a(:,:,:,5)*a(:,:,:,1)*efact / pscale !< rescale internal energy for simulation gamma |
| 229 | a(:,:,:,1)=a(:,:,:,1)/rscale |
| 230 | a(:,:,:,2:4)=a(:,:,:,2:4)/velscale * spread(a(:,:,:,1),4,3) |
| 231 | a(:,:,:,5)=a(:,:,:,5)+.5*sum(a(:,:,:,2:4)**2,4)/a(:,:,:,1) |
| 232 | |
| 233 | ! Calculate overlap |
| 234 | mb(:,2)=min(ibox(:,2), info%mglobal(:,2)) |
| 235 | mb(:,1)=max(ibox(:,1), info%mglobal(:,1)) |
| 236 | mc=mb-spread(info%mglobal(:,1),2,2)+1 |
| 237 | |
| 238 | ! Update Info%q |
| 239 | Info%q(mc(1,1):mc(1,2), mc(2,1):mc(2,2), mc(3,1):mc(3,2),1:5)=a(mb(1,1):mb(1,2), mb(2,1):mb(2,2), mb(3,1):mb(3,2), :) |
| 240 | deallocate(a) |