forked from altMITgcm/MITgcm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
land_write_pickup.F
121 lines (98 loc) · 3.47 KB
/
land_write_pickup.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
C $Header: /u/gcmpack/MITgcm/pkg/land/land_write_pickup.F,v 1.6 2009/08/27 18:00:01 jmc Exp $
C $Name: $
#include "LAND_OPTIONS.h"
CBOP
C !ROUTINE: LAND_WRITE_PICKUP
C !INTERFACE:
SUBROUTINE LAND_WRITE_PICKUP( isperm, suff,
I myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | S/R LAND_WRITE_PICKUP
C | o Writes current state of land package to a pickup file
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "LAND_SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "LAND_PARAMS.h"
#include "LAND_VARS.h"
C !INPUT/OUTPUT PARAMETERS:
C == Routine Arguments ==
C isperm :: flag for permanent or rolling checkpoint
C suff :: suffix for pickup file (eg. ckptA or 0000000010)
C myTime :: current time
C myIter :: time-step number
C myThid :: Number of this instance
LOGICAL isperm
CHARACTER*(*) suff
_RL myTime
INTEGER myIter
INTEGER myThid
#ifdef ALLOW_LAND
C !FUNCTIONS:
INTEGER ILNBLNK
EXTERNAL ILNBLNK
C !LOCAL VARIABLES:
C fn :: character buffer for creating filename
C prec :: precision of pickup files
c INTEGER prec, iChar, lChar, k
INTEGER prec, lChar, k
CHARACTER*(MAX_LEN_FNAM) fn
CEOP
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
lChar = ILNBLNK(suff)
IF ( land_pickup_write_mdsio ) THEN
C-- Write fields as consecutive records
WRITE(fn,'(A,A)') 'pickup_land.',suff(1:lChar)
prec = precFloat64
CALL WRITE_REC_3D_RL( fn, prec, land_nLev,
& land_enthalp, 1, myIter, myThid )
CALL WRITE_REC_3D_RL( fn, prec, land_nLev,
& land_groundW, 2, myIter, myThid )
k=2*land_nLev
CALL WRITE_REC_3D_RL( fn, prec, 1,
& land_skinT, k+1, myIter, myThid )
CALL WRITE_REC_3D_RL( fn, prec, 1,
& land_hSnow, k+2, myIter, myThid )
CALL WRITE_REC_3D_RL( fn, prec, 1,
& land_snowAge,k+3, myIter, myThid )
ENDIF
#ifdef ALLOW_MNC
IF ( land_pickup_write_mnc ) THEN
DO k = 1,MAX_LEN_FNAM
fn(k:k) = ' '
ENDDO
IF ( isperm ) THEN
WRITE(fn,'(A)') 'pickup_land'
ELSE
WRITE(fn,'(A,A)') 'pickup_land.',suff(1:lChar)
ENDIF
CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
CALL MNC_CW_SET_UDIM(fn, 1, myThid)
IF ( isperm ) THEN
CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, 0, myThid)
ELSE
CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
ENDIF
CALL MNC_CW_SET_UDIM(fn, 1, myThid)
CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,
& 'land_enthalp', land_enthalp, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,
& 'land_groundW', land_groundW, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,
& 'land_skinT', land_skinT, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,
& 'land_hSnow', land_hSnow, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,
& 'land_snAge', land_snowAge, myThid)
ENDIF
#endif /* ALLOW_MNC */
#endif /* ALLOW_LAND */
RETURN
END