program convert_ocean_to_new ! Purpose ! ------- ! Converts an original-style OGCM restart file to the new format ! ! History ! ------- ! 2003 Sep 3 Steve Phipps Original version implicit none ! Define constants integer, parameter :: imt=66, jmt=58, km=21, lseg=5, lsegf=5, nisle=3, & njtbft=12, njtbfu=12, nslab=5676, nt=2, ntb=689060, & inunit=21, outunit=22 ! Declare variables integer :: i, j, k, l, m, n integer(kind=8) :: odam_itt real :: odam_ttsec, odam_area, odam_volume real, dimension(ntb) :: big real, dimension(nisle) :: odam_isis, odam_ieis, odam_jsis, odam_jeis real, dimension(jmt, lseg) :: odam_isz, odam_iez real, dimension(imt, jmt) :: odam_hr real, dimension(njtbfu, lsegf) :: odam_iszf, odam_iezf real, dimension(njtbft, lsegf, km) :: odam_istf, odam_ietf real, dimension(njtbfu, lsegf, km) :: odam_isuf, odam_ieuf real, dimension(imt, jmt, 2) :: odam_ptd, odam_fkm, odam_ws real, dimension(imt, jmt, 3) :: odam_p real, dimension(imt, jmt, km, nt, 2) :: odam_t real, dimension(imt, jmt, km, 2) :: odam_u, odam_v ! Read restart file read (inunit) big ! Read data into output arrays call silly(big(1), odam_itt) odam_ttsec = big(2) odam_area = big(3) odam_volume = big(4) n = 21 do k = 1, 3 do j = 1, jmt do i = 1, imt odam_p(i, j, k) = big(n) n = n + 1 end do end do end do do j = 1, jmt do i = 1, imt odam_hr(i, j) = big(n) n = n + 1 end do end do do k = 1, 2 do j = 1, jmt do i = 1, imt odam_ptd(i, j, k) = big(n) n = n + 1 end do end do end do do j = 1, lseg do i = 1, jmt odam_isz(i, j) = big(n) n = n + 1 end do end do do j = 1, lseg do i = 1, jmt odam_iez(i, j) = big(n) n = n + 1 end do end do do i = 1, nisle odam_isis(i) = big(n) n = n + 1 end do do i = 1, nisle odam_ieis(i) = big(n) n = n + 1 end do do i = 1, nisle odam_jsis(i) = big(n) n = n + 1 end do do i = 1, nisle odam_jeis(i) = big(n) n = n + 1 end do do k = 1, km do j = 1, lsegf do i = 1, njtbft odam_istf(i, j, k) = big(n) n = n + 1 end do end do end do do k = 1, km do j = 1, lsegf do i = 1, njtbft odam_ietf(i, j, k) = big(n) n = n + 1 end do end do end do do k = 1, km do j = 1, lsegf do i = 1, njtbfu odam_isuf(i, j, k) = big(n) n = n + 1 end do end do end do do k = 1, km do j = 1, lsegf do i = 1, njtbfu odam_ieuf(i, j, k) = big(n) n = n + 1 end do end do end do do j = 1, lsegf do i = 1, njtbfu odam_iszf(i, j) = big(n) n = n + 1 end do end do do j = 1, lsegf do i = 1, njtbfu odam_iezf(i, j) = big(n) n = n + 1 end do end do do m = 1, 2 do j = 1, jmt n = (2*j + m - 3) * nslab + 30645 do l = 1, nt do k = 1, km do i = 1, imt odam_t(i, j, k, l, m) = big(n) n = n + 1 end do end do end do do k = 1, km do i = 1, imt odam_u(i, j, k, m) = big(n) n = n + 1 end do end do do k = 1, km do i = 1, imt odam_v(i, j, k, m) = big(n) n = n + 1 end do end do do i = 1, imt odam_fkm(i, j, m) = big(n) n = n + 1 end do do i = 1, imt odam_ws(i, j, m) = big(n) n = n + 1 end do end do end do ! Write data to new restart file write (outunit) int(odam_itt, 4) write (outunit) odam_ttsec write (outunit) odam_area write (outunit) odam_volume write (outunit) odam_p(:, :, mod(int(odam_itt, 4), 3)+1) write (outunit) odam_p(:, :, mod(int(odam_itt, 4)+1, 3)+1) write (outunit) odam_hr write (outunit) odam_ptd write (outunit) int(odam_isz+0.1, 4) write (outunit) int(odam_iez+0.1, 4) write (outunit) int(odam_isis+0.1, 4) write (outunit) int(odam_ieis+0.1, 4) write (outunit) int(odam_jsis+0.1, 4) write (outunit) int(odam_jeis+0.1, 4) write (outunit) int(odam_istf+0.1, 4) write (outunit) int(odam_ietf+0.1, 4) write (outunit) int(odam_isuf+0.1, 4) write (outunit) int(odam_ieuf+0.1, 4) write (outunit) int(odam_iszf+0.1, 4) write (outunit) int(odam_iezf+0.1, 4) write (outunit) odam_t write (outunit) odam_u write (outunit) odam_v write (outunit) int(odam_fkm(:, :, 2)+0.1, 4) write (outunit) int(odam_fkm(:, :, 1)+0.1, 4) stop end program convert_ocean_to_new subroutine silly(a, b) implicit none real, intent(in) :: a real, intent(out) :: b b = a return end subroutine silly