| 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) |