/[MITgcm]/MITgcm/pkg/autodiff/autodiff_whtapeio_sync.F
ViewVC logotype

Annotation of /MITgcm/pkg/autodiff/autodiff_whtapeio_sync.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.11 - (hide annotations) (download)
Wed Jul 22 20:54:42 2015 UTC (8 years, 9 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65n, checkpoint65o, HEAD
Changes since 1.10: +3 -3 lines
- autodiff_findunit.F (new): selects a valid, unused unit number
  as done by mdsfindunit.F but in the 1000,1999 range
- autodiff_whtapeio_sync.F: unless AUTODIFF_USE_MDSFINDUNITS
  is defined, use autodiff_findunit.F in place of mdsfindunit.F
- AUTODIFF_OPTIONS.h: undef AUTODIFF_USE_MDSFINDUNITS

1 gforget 1.11 C $Header: /u/gcmpack/MITgcm/pkg/autodiff/autodiff_whtapeio_sync.F,v 1.10 2015/03/23 21:06:13 gforget Exp $
2 gforget 1.1 C $Name: $
3    
4     #include "AUTODIFF_OPTIONS.h"
5 gforget 1.2 #include "MDSIO_OPTIONS.h"
6 jmc 1.9 #ifdef ALLOW_CTRL
7     # include "CTRL_OPTIONS.h"
8     #endif
9 gforget 1.1
10     subroutine autodiff_whtapeio_sync( myLev, myStep, myThid )
11     IMPLICIT NONE
12     C /==========================================================\
13     C | SUBROUTINE autodiff_whtapeio_sync |
14     C |==========================================================|
15     C == Global variables ===
16    
17     #include "SIZE.h"
18     #include "EEPARAMS.h"
19     #include "PARAMS.h"
20     #include "ctrl.h"
21 jmc 1.9 #ifndef ALLOW_OPENAD
22 utke 1.4 # include "AUTODIFF.h"
23     #endif
24 gforget 1.2 #ifdef ALLOW_WHIO_3D
25 utke 1.4 # include "tamc.h"
26 gforget 1.2 # include "MDSIO_BUFF_WH.h"
27     #endif
28 gforget 1.1
29     C == Routine arguments ==
30     C myThid - Thread number for this instance of the routine.
31     integer myThid
32     integer myLev
33     integer myStep
34    
35     #ifdef ALLOW_AUTODIFF_WHTAPEIO
36    
37     character*(MAX_LEN_FNAM) fName
38     integer filePrec, IL, length_of_rec
39     LOGICAL iAmDoingIO
40    
41     C sNxWh :: x tile size with halo included
42     C sNyWh :: y tile size with halo included
43     C pocNyWh :: processor sum of sNyWh
44     C gloNyWh :: global sum of sNyWh
45     INTEGER sNxWh
46     INTEGER sNyWh
47     INTEGER procNyWh
48     INTEGER gloNyWh
49     PARAMETER ( sNxWh = sNx+2*Olx )
50     PARAMETER ( sNyWh = sNy+2*Oly )
51     PARAMETER ( procNyWh = sNyWh*nSy*nSx )
52     PARAMETER ( gloNyWh = procNyWh*nPy*nPx )
53 gforget 1.6 logical exst
54     #ifdef ALLOW_WHIO_3D
55     character*(max_len_mbuf) msgBuf
56     integer ioUnit
57     #endif
58 gforget 1.1
59     c == functions ==
60     INTEGER ILNBLNK
61     INTEGER MDS_RECLEN
62     EXTERNAL ILNBLNK
63     EXTERNAL MDS_RECLEN
64    
65 gforget 1.10 IF ( .NOT.useAUTODIFF ) THEN
66     RETURN
67     ENDIF
68    
69 gforget 1.1 IF ( tapeConcatIO ) THEN
70    
71     IF ( doSinglePrecTapelev ) THEN
72     filePrec = 32
73     ELSE
74     filePrec = 64
75 jmc 1.9 ENDIF
76 gforget 1.1
77     C Only do I/O if I am the master thread (and mpi process 0 IF tapeSingleCpuIO):
78     iAmDoingIO = .FALSE.
79     IF ( .NOT.tapeSingleCpuIO .OR. myProcId.EQ.0 ) THEN
80     _BEGIN_MASTER( myThid )
81     iAmDoingIO = .TRUE.
82     _END_MASTER( myThid )
83 jmc 1.9 ENDIF
84 gforget 1.5
85 gforget 1.1 IF ( iAmDoingIO ) THEN
86 gforget 1.5 IL = ilnblnk( adTapeDir )
87 gforget 1.1 IF ( .NOT.tapeSingleCpuIO ) THEN
88 jmc 1.9 WRITE(fName,'(2A,I1.1,A,I3.3,A)')
89 gforget 1.5 & adTapeDir(1:IL),'tapes',myLev,'.',myProcId,'.data'
90 gforget 1.1 length_of_rec = MDS_RECLEN( filePrec,sNxWh*procNyWh,myThid )
91     ELSE
92 jmc 1.9 WRITE(fName,'(2A,I1.1,A)')
93 gforget 1.5 & adTapeDir(1:IL),'tapes',myLev,'.data'
94 gforget 1.1 length_of_rec = MDS_RECLEN( filePrec,sNxWh*gloNyWh,myThid)
95     ENDIF
96     ENDIF
97 gforget 1.2 #ifdef ALLOW_WHIO_3D
98     length_of_rec=length_of_rec*nWh
99     #endif
100 gforget 1.1
101     tapeFileUnit=tapeFileUnitS(myLev)
102     tapeFileCounter=0
103    
104     IF ( iAmDoingIO.AND.(myStep.EQ.0).AND.
105     & (myLev.GT.0).AND.(tapeFileUnit.EQ.0) ) THEN
106 gforget 1.6 inquire( file=fName, exist=exst )
107 gforget 1.11 #ifdef AUTODIFF_USE_MDSFINDUNITS
108 gforget 1.8 CALL MDSFINDUNIT( tapeFileUnit, myThid )
109     #else
110 gforget 1.11 CALL AUTODIFF_FINDUNIT( tapeFileUnit, myThid )
111 gforget 1.8 #endif
112 gforget 1.1 OPEN( tapeFileUnit, file=fName, status='unknown',
113     & access='direct', recl=length_of_rec )
114     tapeFileUnitS(myLev)=tapeFileUnit
115 gforget 1.3 #if (defined (ALLOW_INIT_WHTAPEIO) && defined (ALLOW_WHIO_3D))
116 gforget 1.6 c exst needs to have been tested before opening the file
117     IF (.NOT.exst) then
118 gforget 1.3 iWh=tapeMaxCounter*MAX(nchklev_2,nchklev_3)/nWh+1
119 gforget 1.6 write(msgBuf,'(a,i1,a,i3)') 'whio : create lev ',
120     & myLev,' rec ',iWh
121     ioUnit=standardMessageUnit
122     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
123 gforget 1.3 IF ( .NOT.tapeSingleCpuIO ) then
124     IF (filePrec .EQ. precFloat32) THEN
125     WRITE(tapeFileUnit,rec=iWh) fld3d_procbuff_r4
126     ELSE
127     WRITE(tapeFileUnit,rec=iWh) fld3d_procbuff_r8
128 jmc 1.9 ENDIF
129 gforget 1.3 ELSE
130     # ifdef INCLUDE_WHIO_GLOBUFF_3D
131     IF (filePrec .EQ. precFloat32) THEN
132     WRITE(tapeFileUnit,rec=iWh) fld3d_globuff_r4
133     ELSE
134     WRITE(tapeFileUnit,rec=iWh) fld3d_globuff_r8
135     ENDIF
136 jmc 1.9 # endif
137 gforget 1.3 ENDIF
138     iWh=0
139 gforget 1.6 ENDIF
140 jmc 1.9 #endif
141 gforget 1.1 ENDIF
142    
143 gforget 1.2 #ifdef ALLOW_WHIO_3D
144     _BARRIER
145     IF ((myStep.EQ.1).AND.iAmDoingIO.AND.
146     & tapeBufferIO.AND.writeWh) THEN
147     if (iWh.LT.1) stop
148 gforget 1.6 write(msgBuf,'(a,i1,a,i3)') 'whio : write lev ',
149     & myLev,' rec ',iWh
150     ioUnit=standardMessageUnit
151     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
152 gforget 1.2 IF ( .NOT.tapeSingleCpuIO ) then
153     IF (filePrec .EQ. precFloat32) THEN
154     WRITE(tapeFileUnit,rec=iWh) fld3d_procbuff_r4
155     ELSE
156     WRITE(tapeFileUnit,rec=iWh) fld3d_procbuff_r8
157     ENDIF
158     ELSE
159     # ifdef INCLUDE_WHIO_GLOBUFF_3D
160     IF (filePrec .EQ. precFloat32) THEN
161     WRITE(tapeFileUnit,rec=iWh) fld3d_globuff_r4
162     ELSE
163     WRITE(tapeFileUnit,rec=iWh) fld3d_globuff_r8
164     ENDIF
165     # endif
166     ENDIF
167     ENDIF
168     _BARRIER
169    
170     IF (myStep.EQ.0) THEN
171     tapeBufferIO=.TRUE.
172     ELSE
173     tapeBufferIO=.FALSE.
174     writeWh=.FALSE.
175     ENDIF
176     iWh=0
177     jWh=0
178     #endif /* ALLOW_WHIO_3D */
179    
180 gforget 1.1 ENDIF !IF ( tapeConcatIO ) THEN
181    
182     #endif /* ALLOW_AUTODIFF_WHTAPEIO */
183    
184     end

  ViewVC Help
Powered by ViewVC 1.1.22