C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_pickup.F,v 1.9 2004/12/27 20:34:11 dimitri Exp $
C $Name:  $

#include "SEAICE_OPTIONS.h"

C--   File seaice_pickup.F: Routines to handle reading and writing
C--   sea ice pickup files.
C--   Contents
C--   o SEAICE_READ_PICKUP  - Read sea ice pickup file for restarting.
C--   o SEAICE_WRITE_PICKUP - Write out sea ice pickup file.

CStartofinterface
      SUBROUTINE SEAICE_READ_PICKUP ( myThid )
C     /==========================================================\
C     | SUBROUTINE SEAICE_READ_PICKUP                            |
C     | o Read in sea ice pickup file for restarting.            |
C     |==========================================================|
C     \==========================================================/
      IMPLICIT NONE

C     == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "SEAICE.h"

C     == Routine arguments ==
C     myThid - Thread number for this instance of the routine.
      INTEGER myThid
CEndofinterface

C     == Local variables ==
      CHARACTER*(MAX_LEN_FNAM) fn

C--    Going to do some IO. Make everyone except master thread wait.
       _BARRIER
       _BEGIN_MASTER( myThid )

C--    Read ice model fields
       WRITE(fn,'(A,I10.10)') 'pickup_seaice.',nIter0
#ifdef SEAICE_MULTILEVEL
       CALL MDSREADFIELD
     &      ( fn, precFloat64, 'RL', MULTDIM, TICES, 1, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 1, YNEG , 8, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 1, HSNOW, 9, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, UICE , 4, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, VICE , 5, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, HEFF , 6, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, AREA , 7, myThid )
#else /* SEAICE_MULTILEVEL */
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 1, TICE , 1, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 1, YNEG , 2, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 1, HSNOW, 3, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, UICE , 2, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, VICE , 3, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, HEFF , 4, myThid )
       CALL MDSREADFIELD( fn, precFloat64, 'RL', 3, AREA , 5, myThid )
#endif /* SEAICE_MULTILEVEL */

       _END_MASTER( myThid )
       _BARRIER

C--    Update overlap regions
       CALL SEAICE_EXCH_UV ( UICE, VICE, myThid )
       CALL SEAICE_EXCH ( HEFF, myThid )
       CALL SEAICE_EXCH ( AREA, myThid )
       _EXCH_XY_R8(TICE , myThid )
       _EXCH_XY_R8(YNEG , myThid )
       _EXCH_XY_R8(HSNOW, myThid )

      RETURN
      END


CStartofinterface SUBROUTINE SEAICE_WRITE_PICKUP ( I prec, lgf, permCheckPoint, myIt, myThid ) C /==========================================================\ C | SUBROUTINE SEAICE_WRITE_PICKUP | C | o Write sea ice pickup file for restarting. | C |==========================================================| C \==========================================================/ IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "SEAICE.h" C == Routine arguments == C prec - Precision of pickup file ( precFloat64 ) C lgf - Flag to indicate whether to use global file mode. C permCheckPoint - Flag indicating whether a permanent checkpoint C will be written. C myIt - Iteration number C myThid - Thread number for this instance of the routine. INTEGER prec LOGICAL permCheckPoint INTEGER myThid INTEGER myIt CEndofinterface C == Local variables == CHARACTER*(MAX_LEN_FNAM) fn LOGICAL lgf C-- Write model fields IF ( permCheckPoint ) THEN WRITE(fn,'(A,I10.10)') 'pickup_seaice.',myIt ELSE WRITE(fn,'(A,A)') 'pickup_seaice.',checkPtSuff(nCheckLev) ENDIF #ifdef SEAICE_MULTILEVEL CALL MDSWRITEFIELD & (fn,prec,lgf,'RL', MULTDIM, TICES,1, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1, YNEG, 8, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1, HSNOW, 9, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, UICE, 4, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, VICE, 5, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, HEFF, 6, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, AREA, 7, myIt,myThid) #else /* SEAICE_MULTILEVEL */ CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1, TICE, 1, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1, YNEG, 2, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1, HSNOW, 3, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, UICE, 2, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, VICE, 3, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, HEFF, 4, myIt,myThid) CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 3, AREA, 5, myIt,myThid) #endif /* SEAICE_MULTILEVEL */ RETURN END