! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE SPLITRESTART ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE splitrestart(fileheader,nx,ny,nz,nzsoil,nstyps, exbcvarsz) 1,4 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Split the original restart file into indivdual files for the ! processors to read. ! !----------------------------------------------------------------------- ! ! AUTHOR: Yunheng Wang ! 4/16/2001. ! ! MODIFICATION: ! ! Yunheng Wang (2003/02/27) ! Changed the input and output format for exbcbuf. It is now outputted ! as 22 separated varaibles instead of a big buffer. Actually, it should ! be a bug fix because it did not consider the contents in exbcbuf before. ! !----------------------------------------------------------------------- ! ! INPUT: ! ! fileheader Restart file name ! nx Dimension in x-direction (each processor) ! ny Dimension in y-direction (each processor) ! nz Dimension in z-direction ! nzsoil Number of soil levels ! !----------------------------------------------------------------------- IMPLICIT NONE CHARACTER (LEN=*) :: fileheader INTEGER :: nx,ny,nz,nzsoil INTEGER :: nstyps, exbcvarsz INCLUDE 'mp.inc' ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! INTEGER :: lenstr CHARACTER (LEN=256) :: filename INTEGER :: fi, fj, i, j, k, l, var INTEGER :: nxlg, nylg, nzlg,nzsoillg ! Dimension in the whole ! computation domain INTEGER, ALLOCATABLE :: ounit(:) INTEGER, ALLOCATABLE :: ffi(:), ffj(:) INTEGER :: ierr INTEGER :: nfields, fcnt INTEGER :: ii,jj,iiend INTEGER, PARAMETER :: unit0=110, maxunit=60 !---------------------------------------------------------------------- ! ! Variable to read and write out. ! !---------------------------------------------------------------------- REAL :: ctime INTEGER :: nxin, nyin, nzin,nzsoilin INTEGER :: basrstout, grdrstout, icerstout, sfcrstout, prcrstout, & rcumout, exbcout, mapfout, radrstout, nstyp, kfrsout, & bmjsout, idummy ! Control parameters INTEGER :: abstfcst0, abstfcst, & ubcrd,vbcrd,wbcrd,ptbcrd,prbcrd, & qvbcrd,qcbcrd,qrbcrd,qibcrd,qsbcrd,qhbcrd ! exbc.inc ! REAL :: exbcbuf (exbcbufsz) REAL :: dx, dy, dz, umove, vmove, xgrdorg, ygrdorg, trulat1, trulat2,& trulon, sclfct, latitud, ctrlat, ctrlon, rdummy ! Header info. REAL, ALLOCATABLE :: x (:), y (:), z(:), zp (:,:,:), zpsoil(:,:,:) REAL, ALLOCATABLE :: xsm (:), ysm (:) REAL, ALLOCATABLE :: a3dlg (:,:,:), a3dsm (:, :, :) REAL, ALLOCATABLE :: a3dsoillg (:,:,:), a3dsoilsm (:, :, :) REAL, ALLOCATABLE :: a4dlg (:,:,:,:), a4dsm (:, :, :, :) REAL, ALLOCATABLE :: a2dxlg (:,:), a2dxsm (:, :) REAL, ALLOCATABLE :: a2dylg (:,:), a2dysm (:, :) REAL, ALLOCATABLE :: a2dxylg (:,:), a2dxysm (:,:) REAL, ALLOCATABLE :: a2dxy8lg (:,:,:), a2dxy8sm (:,:,:) REAL, ALLOCATABLE :: soil1lg (:,:,:), soil1sm (:,:,:) REAL, ALLOCATABLE :: soil2lg (:,:,:), soil2sm (:,:,:) REAL, ALLOCATABLE :: soil3lg (:,:,:), soil3sm (:,:,:) REAL, ALLOCATABLE :: soil4lg (:,:,:,:), soil4sm (:,:,:,:) INTEGER, ALLOCATABLE :: a2dilg(:,:), a2dism(:,:) INTEGER, ALLOCATABLE :: a3dilg(:,:,:), a3dism(:,:,:) ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! WRITE(6,*) "======== Beginning of executable code... =========" if ( mp_opt > 0 ) then write(6,*) 'splitstart: not MP ready' call arpsstop('splitrestart: not MP ready') return endif nxlg = (nx-3)*nproc_x+3 nylg = (ny-3)*nproc_y+3 nzlg = nz nzsoillg = nzsoil ALLOCATE(ounit(nproc_x*nproc_y)) ALLOCATE(ffi(nproc_x*nproc_y)) ALLOCATE(ffj(nproc_x*nproc_y)) ALLOCATE(x(nxlg)) ALLOCATE(xsm(nx)) ALLOCATE(y(nylg)) ALLOCATE(ysm(ny)) ALLOCATE(z(nzlg)) ALLOCATE(zp(nxlg, nylg, nzlg)) ALLOCATE(zpsoil(nxlg, nylg, nzsoillg)) ALLOCATE(a3dlg(nxlg, nylg, nzlg)) ALLOCATE(a3dsm(nx, ny, nz)) ALLOCATE(a3dsoillg(nxlg, nylg, nzsoillg)) ALLOCATE(a3dsoilsm(nx, ny, nzsoil)) ALLOCATE(a4dlg(nxlg, nylg, nzlg, 5)) ALLOCATE(a4dsm(nx, ny, nz, 5)) ALLOCATE(a2dxlg(nxlg, nzlg)) ALLOCATE(a2dxsm(nx, nz)) ALLOCATE(a2dylg(nylg, nzlg)) ALLOCATE(a2dysm(ny, nz )) ALLOCATE(a2dxylg(nxlg, nylg)) ALLOCATE(a2dxysm(nx, ny)) ALLOCATE(a2dxy8lg(nxlg, nylg, 8)) ALLOCATE(a2dxy8sm(nx, ny, 8)) ALLOCATE(soil1lg(nxlg, nylg, nstyps)) ALLOCATE(soil1sm(nx, ny, nstyps)) ALLOCATE(soil2lg(nxlg, nylg, 0:nstyps)) ALLOCATE(soil2sm(nx, ny, 0:nstyps)) ALLOCATE(soil3lg(nxlg, nylg, 4)) ALLOCATE(soil3sm(nx, ny, 4)) ALLOCATE(soil4lg(nxlg, nylg, nzsoillg, 0:nstyps)) ALLOCATE(soil4sm(nx, ny, nzsoil, 0:nstyps)) ALLOCATE(a2dilg(nxlg,nylg)) ALLOCATE(a2dism(nx, ny )) ALLOCATE(a3dilg(nxlg,nylg,nstyps)) ALLOCATE(a3dism(nx, ny, nstyps)) lenstr = 0 100 lenstr = lenstr + 1 IF (fileheader(lenstr:lenstr) /= " ") GO TO 100 lenstr = lenstr - 1 ! !----------------------------------------------------------------------- ! ! Open the splitting file and splitted files. ! !----------------------------------------------------------------------- ! CALL asnctl ('NEWLOCAL', 1, ierr) DO fj=1,nproc_y DO fi=1,nproc_x ii = fi+nproc_x*(fj-1) ffi(ii) = fi ffj(ii) = fj ounit(ii) = unit0 + ii END DO END DO DO jj = 1,1+(nproc_x*nproc_y-1)/maxunit iiend = MIN(jj*maxunit,nproc_x*nproc_y) DO ii=1+(jj-1)*maxunit,iiend ! !----------------------------------------------------------------------- ! ! --- Since T3D processors only support COS and IEEE double precision ! format, we have to translate the files into COS format. ! !----------------------------------------------------------------------- ! WRITE (filename, '(a,a,2i2.2)') & fileheader(1:lenstr),'_',ffi(ii),ffj(ii) CALL asnfile(filename, '-F f77 -N ieee', ierr) OPEN (UNIT=ounit(ii), FILE=filename, FORM='unformatted') END DO CALL asnfile(fileheader(1:lenstr), '-F f77 -N ieee', ierr) OPEN (UNIT=10, FILE=fileheader(1:lenstr), FORM='unformatted') !---------------------------------------------------------------------- ! ! Read in time and dimensions. And ! Check against the dimensions passed to this subroutine. ! !---------------------------------------------------------------------- ! ! WRITE(6,*) "==== Begin to read ==== filename: ", fileheader(1:lenstr) READ (10) ctime READ (10) nxin, nyin, nzin, nzsoilin IF ((nxin /= nxlg).OR.(nyin /= nylg).OR.(nzin /= nzlg).OR. & (nzsoilin /= nzsoillg)) THEN WRITE (*,*) "ERROR: mismatch in sizes." WRITE (*,*) "nxin,nyin,nzin,nzsoilin: ",nxin,nyin,nzin,nzsoilin WRITE (*,*) "nxlg,nylg,nzlg,nzsoillg: ",nxlg,nylg,nzlg,nzsoillg CLOSE (10) DO ii=1+(jj-1)*maxunit,iiend CLOSE (ounit(ii)) END DO GOTO 999 END IF !--------------------------------------------------------------------- ! ! Write time and dimensions for each processor. ! !--------------------------------------------------------------------- DO ii=1+(jj-1)*maxunit,iiend WRITE (ounit(ii)) ctime WRITE (ounit(ii)) nx, ny, nz, nzsoilin END DO ! !----------------------------------------------------------------------- ! ! Read/write header info. ! !----------------------------------------------------------------------- ! READ (10) basrstout,grdrstout,icerstout,sfcrstout,prcrstout, & rcumout,exbcout,mapfout,radrstout,nstyp, & kfrsout,idummy,bmjsout,idummy,idummy,idummy, & idummy,idummy,idummy,idummy,idummy DO ii=1+(jj-1)*maxunit,iiend WRITE (ounit(ii)) basrstout,grdrstout,icerstout,sfcrstout, & prcrstout, & rcumout,exbcout,mapfout,radrstout,nstyp, & kfrsout,idummy,bmjsout,idummy,idummy,idummy, & idummy,idummy,idummy,idummy,idummy END DO READ (10) dx,dy,dz,umove,vmove, & xgrdorg,ygrdorg,trulat1,trulat2,trulon, & sclfct,latitud,ctrlat,ctrlon,rdummy, & rdummy,rdummy,rdummy,rdummy,rdummy DO ii=1+(jj-1)*maxunit,iiend WRITE (ounit(ii)) dx,dy,dz,umove,vmove, & xgrdorg,ygrdorg,trulat1,trulat2,trulon, & sclfct,latitud,ctrlat,ctrlon,rdummy, & rdummy,rdummy,rdummy,rdummy,rdummy END DO IF (grdrstout == 1) THEN READ(10) x READ(10) y READ(10) z READ(10) zp READ(10) zpsoil DO ii = 1 + (jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO i = 1, nx xsm(i) = x(i+(fi-1)*(nx-3)) END DO DO j = 1, ny ysm(j) = y(j+(fj-1)*(ny-3)) END DO DO k = 1, nz DO j = 1, ny DO i = 1, nx a3dsm(i,j,k) = zp (i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO DO k = 1, nzsoil DO j = 1, ny DO i = 1, nx a3dsoilsm(i,j,k) = zpsoil (i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) xsm WRITE (ounit(ii)) ysm WRITE (ounit(ii)) z WRITE (ounit(ii)) a3dsm WRITE (ounit(ii)) a3dsoilsm END DO END IF !--------------------------------------------------------------------- ! ! 3 dimensions variable READ and WRITE ! !--------------------------------------------------------------------- ! WRITE(6,*) '======== Processing 3 dimensions variables ===============' nfields = 18 ! 9 for tpast, 9 for tpresent IF (basrstout == 1) nfields = nfields + 6 ! ubar, var, ptbar ! pbar, rhostr, qvbar IF (icerstout /= 0) nfields = nfields + 6 ! 3 past 3 present ! for qi, qs, qh DO fcnt = 1,nfields READ (10) a3dlg DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO k = 1,nz DO j = 1,ny DO i = 1,nx a3dsm(i,j,k) = & a3dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dsm END DO END DO !--------------------------------------------------------------------- ! ! 2 dimensions variables ! !--------------------------------------------------------------------- ! WRITE(6,*) '======== Processing 2 dimensions variables ===============' nfields = 2 DO fcnt = 1, 2 DO nfields =1, 2 ! udteb, uetwb; pdteb, pdtwb READ (10) a2dylg DO ii = 1+(jj-1)*maxunit, iiend fj = ffj(ii) DO k = 1, nz DO j = 1, ny a2dysm(j,k) = a2dylg (j+(fj-1)*(ny-3), k) END DO END DO WRITE (ounit(ii)) a2dysm END DO END DO DO nfields =1, 2 ! vdtnb, vdtsb; pdtnb, pdtsb READ (10) a2dxlg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) DO k = 1, nz DO i = 1,nx a2dxsm(i,k) = a2dxlg (i+(fi-1)*(nx-3), k) END DO END DO WRITE (ounit(ii)) a2dxsm END DO END DO END DO ! fcnt !------------------------------------------------------------------ ! ! sfc/soil variables ! !------------------------------------------------------------------ ! WRITE(6,*) '======== Processing sfc/soil variables ===============' IF (sfcrstout /= 0) THEN ! DO fcnt = 1, 2 READ (10) a3dilg ! soiltyp DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 1, nstyps DO j = 1, ny DO i = 1, nx a3dism(i, j, k) = a3dilg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dism END DO READ (10) soil1lg ! stypfrct DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 1, nstyps DO j = 1, ny DO i = 1, nx soil1sm(i, j, k) = soil1lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) soil1sm END DO ! END DO ! fcnt READ (10) a2dilg ! vegtyp DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dism(i, j) = a2dilg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dism END DO DO fcnt = 1, 3 ! lai, roufns, veg READ (10) a2dxylg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO END DO ! fcnt ! qvsfc READ (10) soil2lg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 0, nstyps DO j = 1, ny DO i = 1, nx soil2sm(i, j, k) = soil2lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) soil2sm END DO ! tsoil, qsoil DO fcnt = 1, 2 READ (10) soil4lg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO l = 0, nstyps DO k = 1, nzsoil DO j = 1, ny DO i = 1, nx soil4sm(i, j, k, l) = & soil4lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k, l) END DO END DO END DO END DO WRITE (ounit(ii)) soil4sm END DO END DO ! fcnt ! wetcanp READ (10) soil2lg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 0, nstyps DO j = 1, ny DO i = 1, nx soil2sm(i, j, k) = soil2lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) soil2sm END DO !snowdpth READ (10) a2dxylg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO END IF !--------------------------------------------------------------------- ! ! prcrstout ! !--------------------------------------------------------------------- ! WRITE(6,*) '======== Processing prcrstout variables ===============' IF (prcrstout /= 0) THEN DO fcnt = 1, 2 READ (10) a2dxylg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO END DO ! fcnt READ (10) soil3lg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 1, 4 DO j = 1, ny DO i = 1, nx soil3sm(i, j, k) = soil3lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) soil3sm END DO END IF !--------------------------------------------------------------------- ! ! rcumout ! !--------------------------------------------------------------------- ! WRITE(6,*) '======== Processing rcumout variables ===============' IF (rcumout /= 0) THEN READ (10) a3dlg DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO k = 1,nz DO j = 1,ny DO i = 1,nx a3dsm(i,j,k) = & a3dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dsm END DO READ (10) a4dlg DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO l = 1, 5 DO k = 1,nz DO j = 1,ny DO i = 1,nx a4dsm(i,j,k,l) = & a4dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k, l) END DO END DO END DO END DO WRITE (ounit(ii)) a4dsm END DO END IF !------------------------------------------------------------------ ! ! exbcout /= 0 ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Processing exbcout variables ===============' IF (exbcout /= 0) THEN READ (10) abstfcst0, abstfcst, & ubcrd,vbcrd,wbcrd,ptbcrd,prbcrd, & qvbcrd,qcbcrd,qrbcrd,qibcrd,qsbcrd,qhbcrd DO ii=1+(jj-1)*maxunit,iiend WRITE(ounit(ii)) abstfcst0, abstfcst, & ubcrd,vbcrd,wbcrd,ptbcrd,prbcrd, & qvbcrd,qcbcrd,qrbcrd,qibcrd,qsbcrd,qhbcrd END DO ! READ (10) exbcbuf DO var = 1, exbcvarsz READ (10) a3dlg DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO k = 1,nz DO j = 1,ny DO i = 1,nx a3dsm(i,j,k) = & a3dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dsm END DO END DO ! var END IF !------------------------------------------------------------------ ! ! mapfout == 1 ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Processing mapfout variables ===============' IF (mapfout == 1) THEN READ (10) a2dxy8lg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO k = 1, 8 DO j = 1, ny DO i = 1, nx a2dxy8sm(i, j, k) = a2dxy8lg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a2dxy8sm END DO END IF !------------------------------------------------------------------ ! ! radrstout == 1 ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Processing radsrtout variables ===============' IF (radrstout ==1 ) THEN READ (10) a3dlg ! radfrc DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO k = 1,nz DO j = 1,ny DO i = 1,nx a3dsm(i,j,k) = & a3dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dsm END DO DO fcnt = 1, 4 ! radsw, rnflx, radswnet, radlwin READ (10) a2dxylg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO ! ii END DO ! fcnt END IF !------------------------------------------------------------------ ! ! kfrsout /= 0 ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Processing kfrsout variables ===============' IF (kfrsout /= 0 ) THEN READ (10) a3dlg ! w0avg DO ii=1+(jj-1)*maxunit,iiend fi = ffi(ii) fj = ffj(ii) DO k = 1,nz DO j = 1,ny DO i = 1,nx a3dsm(i,j,k) = & a3dlg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3), k) END DO END DO END DO WRITE (ounit(ii)) a3dsm END DO READ (10) a2dilg ! nca DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dism(i, j) = a2dilg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dism END DO ! ii READ (10) a2dxylg ! kfraincv DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO ! ii END IF !EMK BMJ !------------------------------------------------------------------ ! ! bmjsout /= 0 ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Processing bmjsout variables ===============' IF (bmjsout /= 0 ) THEN DO fcnt = 1, 3 ! cldefi, xland, bmjraincv READ (10) a2dxylg DO ii = 1+(jj-1)*maxunit, iiend fi = ffi(ii) fj = ffj(ii) DO j = 1, ny DO i = 1, nx a2dxysm(i, j) = a2dxylg(i+(fi-1)*(nx-3), j+(fj-1)*(ny-3)) END DO END DO WRITE (ounit(ii)) a2dxysm END DO ! ii END DO ! fcnt END IF !------------------------------------------------------------------ ! ! Close files ! !----------------------------------------------------------------- ! WRITE(6,*) '======== Successful !!!!!!!!!!!!!!!!! ===============' CLOSE (10) DO ii=1+(jj-1)*maxunit,iiend CLOSE (ounit(ii)) END DO END DO ! jj 999 CONTINUE !------------------------------------------------------------------- ! ! Deallocate the variables before return ! !------------------------------------------------------------------- DEALLOCATE(ounit) DEALLOCATE(ffi) DEALLOCATE(ffj) DEALLOCATE(x) DEALLOCATE(xsm) DEALLOCATE(y) DEALLOCATE(ysm) DEALLOCATE(z) DEALLOCATE(zp) DEALLOCATE(zpsoil) DEALLOCATE(a3dlg) DEALLOCATE(a3dsm) DEALLOCATE(a3dsoillg) DEALLOCATE(a3dsoilsm) DEALLOCATE(a4dlg) DEALLOCATE(a4dsm) DEALLOCATE(a2dxlg) DEALLOCATE(a2dxsm) DEALLOCATE(a2dylg) DEALLOCATE(a2dysm) DEALLOCATE(a2dxylg) DEALLOCATE(a2dxysm) DEALLOCATE(soil1lg) DEALLOCATE(soil1sm) DEALLOCATE(soil2lg) DEALLOCATE(soil2sm) DEALLOCATE(soil3lg) DEALLOCATE(soil3sm) DEALLOCATE(soil4lg) DEALLOCATE(soil4sm) DEALLOCATE(a2dilg, a2dism, a3dilg, a3dism) RETURN END SUBROUTINE splitrestart