forked from darwinproject/darwin3
-
Notifications
You must be signed in to change notification settings - Fork 1
/
addummy_in_dynamics.F
134 lines (116 loc) · 4.15 KB
/
addummy_in_dynamics.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
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "AUTODIFF_OPTIONS.h"
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
#include "AD_CONFIG.h"
CBOP
C !ROUTINE: ADDUMMY_IN_DYNAMICS
C !INTERFACE:
SUBROUTINE ADDUMMY_IN_DYNAMICS( myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE ADDUMMY_IN_DYNAMICS |
C *==========================================================*
C Extract adjoint variable from TAMC/TAF-generated
C adjoint common blocks, contained in adcommon.h
C and write fields to file;
C Make sure common blocks in adcommon.h are up-to-date
C w.r.t. current adjoint code.
C *==========================================================*
C | SUBROUTINE ADDUMMY_IN_DYNAMICS |
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "AUTODIFF_PARAMS.h"
#ifdef ALLOW_MNC
#include "MNC_PARAMS.h"
#endif
c#include "GRID.h"
#ifdef ALLOW_AUTODIFF_MONITOR
# include "adcommon.h"
# include "AUTODIFF.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myTime :: time counter for this thread
C myIter :: iteration counter for this thread
C myThid :: Thread number for this instance of the routine.
_RL myTime
INTEGER myIter
INTEGER myThid
#if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
#ifdef ALLOW_AUTODIFF_MONITOR
C !FUNCTIONS:
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL DIFFERENT_MULTIPLE
C !LOCAL VARIABLES:
c == local variables ==
C suff :: Hold suffix part of a filename
C msgBuf :: Error message buffer
CHARACTER*(10) suff
c CHARACTER*(MAX_LEN_MBUF) msgBuf
#ifdef ALLOW_AUTODIFF_MONITOR_DIAG
_RL var3Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
_RS dumRS(1)
#endif
CEOP
IF (
& DIFFERENT_MULTIPLE(adjDumpFreq,myTime,deltaTClock)
& ) THEN
CALL TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid )
c increment ad dump record number (used only if dumpAdByRec is true)
dumpAdRecDy=dumpAdRecDy+1
c#ifdef ALLOW_DEBUG
c IF ( debugMode ) print*,'dumpAdRecDy',dumpAdRecDy
c#endif
IF ( dumpAdVarExch.EQ.1 ) THEN
#ifdef AUTODIFF_TAMC_COMPATIBILITY
C
#else /* ndfef AUTODIFF_TAMC_COMPATIBILITY */
# ifdef ALLOW_AUTODIFF_MONITOR_DIAG
CALL ADEXCH_3D_RL( adrhoinsitu, Nr, myThid )
CALL ADEXCH_3D_RL( adtotphihyd, Nr, myThid )
# endif
#endif /* AUTODIFF_TAMC_COMPATIBILITY */
ENDIF
C-- Set suffix for this set of data files.
IF ( rwSuffixType.EQ.0 ) THEN
WRITE(suff,'(I10.10)') myIter
ELSE
CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
ENDIF
C ==>> Resetting run-time parameter writeBinaryPrec in the middle of a run
C ==>> is very very very nasty !!!
c writeBinaryPrec = writeStatePrec
C <<== If you really want to mess-up with this at your own risk,
C <<== uncomment the line above
#ifdef ALLOW_AUTODIFF_MONITOR_DIAG
IF ( dumpAdVarExch.NE.2 ) THEN
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJrhoinsitu.',
& suff, adrhoinsitu, myIter, myThid )
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJrhoinsitu',
& adrhoinsitu, dumpAdRecDy, myIter, myThid )
cph( is set to zero in addiags_phi_hyd
c CALL WRITE_FLD_XYZ_RL( 'ADJtotphihyd.', suff,
c adtotphihyd, myIter, myThid )
cph)
ELSE
C case dumpAdVarExch = 2
CALL COPY_ADVAR_OUTP( dumRS,adrhoinsitu,var3Du,Nr,12,myThid )
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJrhoinsitu.',
& suff, var3Du, myIter, myThid )
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJrhoinsitu',
& var3Du, dumpAdRecDy, myIter, myThid )
ENDIF
#endif
CALL TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid )
ENDIF
#endif /* ALLOW_AUTODIFF_MONITOR */
#endif /* ALLOW_ADJOINT_RUN */
RETURN
END