c*** Reads H and iobsloc subroutine ReadObsMat(mobs,iobsloc) implicit none integer, intent(in) :: mobs integer, intent(out) :: iobsloc(mobs) open(unit=3,file='assimilate/iobsloc') read(unit=3,'(1I7)') iobsloc close(unit=3) call flush() end subroutine ReadObsMat c*** Reads a pickup file... subroutine ReadPickup(n,nx,ny,nz,y) implicit none integer, intent(in) :: n,nx,ny,nz real*8, intent(out) :: y(n) real*8 r8seg(nx) integer i, irec,j,k open(unit=3,file='pickup',status='old',access='direct',recl=nx*8) ccc Set counter for state i =1 ccc Reading uVel do k = 1,nz do j = 1,ny irec = (k-1)*ny + j read(3,rec=irec) r8seg call DA_BYTESWAPR8(nx,r8seg) y(i:i+nx) = r8seg(1:nx) i = i+nx enddo enddo ccc Skip Next Two gU and gUnm1 ccc Read vVel do k = 1,nz do j = 1,ny irec = (k-1)*ny + j + nz*ny*3 read(3,rec=irec) r8seg call DA_BYTESWAPR8(nx,r8seg) y(i:i+nx) = r8seg(1:nx) i=i+nx enddo enddo ccc Skip Next two gV and gVnm1 ccc Read wVel do k = 1,nz do j = 1,ny irec = (k-1)*ny + j + nz*ny*6 read(3,rec=irec) r8seg call DA_BYTESWAPR8(nx,r8seg) y(i:i+nx) = r8seg(1:nx) i=i+nx enddo enddo ccc Read theta do k = 1,nz do j = 1,ny irec = (k-1)*ny + j + nz*ny*7 read(3,rec=irec) r8seg call DA_BYTESWAPR8(nx,r8seg) y(i:i+nx) = r8seg(1:nx) i=i+nx enddo enddo ccc Now close the file close(unit=3) ccc Open Non-Hydrostatic open(unit=3,file='pickup_nh',status='old',access='direct',recl=nx*8) ccc Read pressure Non-hydrostatic do k = 1,nz do j = 1,ny irec = (k-1)*ny + j read(3,rec=irec) r8seg call DA_BYTESWAPR8(nx,r8seg) y(i:i+nx) = r8seg(1:nx) i = i+nx enddo enddo close(unit=3) ccc Done Reading State call flush() end subroutine ReadPickup subroutine DA_BYTESWAPR8( na, arr ) C IN: C n integer - Number of 8-byte words in arr C IN/OUT: C arr real*8 - Array declared as real*4(n) C C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!) implicit none C Arguments integer na character*(*) arr C Local integer i character*(1) cc C ------------------------------------------------------------------ do i=1,8*na,8 cc=arr(i:i) arr(i:i)=arr(i+7:i+7) arr(i+7:i+7)=cc cc=arr(i+1:i+1) arr(i+1:i+1)=arr(i+6:i+6) arr(i+6:i+6)=cc cc=arr(i+2:i+2) arr(i+2:i+2)=arr(i+5:i+5) arr(i+5:i+5)=cc cc=arr(i+3:i+3) arr(i+3:i+3)=arr(i+4:i+4) arr(i+4:i+4)=cc enddo C ------------------------------------------------------------------ return end C==========================