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

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

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


Revision 1.4 - (show annotations) (download)
Wed May 18 15:41:32 2011 UTC (12 years, 11 months ago) by utke
Branch: MAIN
Changes since 1.3: +5 -3 lines
guard AUTODIFF.h include and reorder tamc.h include to permit common block to module conversion

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

  ViewVC Help
Powered by ViewVC 1.1.22