/[MITgcm]/MITgcm/pkg/generic_advdiff/gad_check.F
ViewVC logotype

Contents of /MITgcm/pkg/generic_advdiff/gad_check.F

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


Revision 1.9 - (show annotations) (download)
Sun Aug 3 03:12:37 2014 UTC (9 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65b
Changes since 1.8: +24 -7 lines
- stop if doAB_onGtGs is set to FALSE but ignored
- refine warning related to stability of tracer time-stepping
  regarding internal wave dynamics.

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_check.F,v 1.8 2014/04/04 20:29:08 jmc Exp $
2 C $Name: $
3
4 #include "GAD_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: GAD_CHECK
8 C !INTERFACE:
9 SUBROUTINE GAD_CHECK( myThid )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE GAD_CHECK
14 C | o Check consistency with model configuration
15 C *==========================================================*
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21
22 C === Global variables ===
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "GAD.h"
27
28 C !INPUT/OUTPUT PARAMETERS:
29 C === Routine arguments ===
30 C myThid :: my Thread Id number
31 INTEGER myThid
32
33 #ifdef ALLOW_GENERIC_ADVDIFF
34 C !LOCAL VARIABLES:
35 C === Local variables ===
36 C msgBuf :: Informational/error message buffer
37 CHARACTER*(MAX_LEN_MBUF) msgBuf
38 INTEGER minOlSize, n
39 CEOP
40
41 _BEGIN_MASTER(myThid)
42
43 WRITE(msgBuf,'(A)') 'GAD_CHECK: #define ALLOW_GENERIC_ADVDIFF'
44 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
45 & SQUEEZE_RIGHT , myThid )
46
47 C-- Print out some kee parameters :
48 C (better chance to know why it is stopping if print first & check after)
49
50 C-- Check Options:
51 #ifdef DISABLE_MULTIDIM_ADVECTION
52 c IF ( useMultiDimAdvec ) THEN
53 IF ( useMultiDimAdvec .OR.
54 & tempSOM_Advection .OR. saltSOM_Advection
55 & ) THEN
56 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
57 & 'trying to use Multi-Dim. Advection code that is not compiled'
58 CALL PRINT_ERROR( msgBuf , myThid )
59 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
60 & 'Re-compile with: #undef DISABLE_MULTIDIM_ADVECTION'
61 CALL PRINT_ERROR( msgBuf , myThid)
62 STOP 'ABNORMAL END: S/R GAD_CHECK'
63 ENDIF
64 #endif /* DISABLE_MULTIDIM_ADVECTION */
65
66 #ifndef GAD_ALLOW_TS_SOM_ADV
67 IF ( tempAdvScheme.EQ.ENUM_SOM_PRATHER
68 & .OR.saltAdvScheme.EQ.ENUM_SOM_PRATHER
69 & .OR.tempAdvScheme.EQ.ENUM_SOM_LIMITER
70 & .OR.saltAdvScheme.EQ.ENUM_SOM_LIMITER ) THEN
71 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
72 & 'trying to use 2nd.Order-Moment Advection that is not compiled'
73 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
74 & 'Re-compile with: #define GAD_ALLOW_TS_SOM_ADV'
75 CALL PRINT_ERROR( msgBuf , myThid)
76 STOP 'ABNORMAL END: S/R GAD_CHECK'
77 ENDIF
78 #endif /* ndef GAD_ALLOW_TS_SOM_ADV */
79
80 C-- Check parameters:
81
82 IF ( .NOT.doAB_onGtGs .AND. AdamsBashforthGt ) THEN
83 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
84 & 'unable to use AdamsBashforth_T (from "data": doAB_onGtGs=F)'
85 CALL PRINT_ERROR( msgBuf, myThid )
86 ENDIF
87 IF ( .NOT.doAB_onGtGs .AND. AdamsBashforthGs ) THEN
88 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
89 & 'unable to use AdamsBashforth_S (from "data": doAB_onGtGs=F)'
90 CALL PRINT_ERROR( msgBuf, myThid )
91 ENDIF
92 IF ( .NOT.doAB_onGtGs .AND.
93 & ( AdamsBashforthGt .OR. AdamsBashforthGs ) ) THEN
94 #ifndef ALLOW_ADAMSBASHFORTH_3
95 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
96 & 'since Adams-Bashforth_3 code was not compiled'
97 CALL PRINT_ERROR( msgBuf, myThid )
98 #endif
99 STOP 'ABNORMAL END: S/R GAD_CHECK'
100 ENDIF
101
102 C- Check internal wave dynamics stability regarding active tracer time-stepping
103 IF ( .NOT.(staggerTimeStep.OR.implicitIntGravWave) ) THEN
104 IF ( ( tempIsActiveTr .AND. .NOT.AdamsBashforthGt )
105 & .OR. ( saltIsActiveTr .AND. .NOT.AdamsBashforthGs ) ) THEN
106 C- issue a warning in Error msg file:
107 WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
108 & 'potentially unstable time-stepping (Internal Wave)'
109 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
110 & SQUEEZE_RIGHT , myThid)
111 WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
112 & 'need "staggerTimeStep=.TRUE." in "data", nml PARM01'
113 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
114 & SQUEEZE_RIGHT , myThid)
115 ENDIF
116 ENDIF
117
118 C-- Check size of overlap region
119 C-- Note: checking minimum size of overlap due to tracer limitations moved here;
120 C previously done in GAD_INIT_FIXED, PTRACERS_INIT_FIXED and GMREDI_CHECK;
121 C for mom limitations, done in CONFIG_CHECK, but can move to MOM_INIT_FIXED
122
123 minOlSize = MAX( GAD_OlMinSize(1)+GAD_OlMinSize(2),
124 & GAD_OlMinSize(2)+GAD_OlMinSize(3),
125 & GAD_OlMinSize(1)*GAD_OlMinSize(3) )
126 IF ( OLx.LT.minOlSize .OR. OLy.LT.minOlSize ) THEN
127 WRITE(msgBuf,'(A,2I3,A)') 'GAD_CHECK: Overlap Size OLx,OLy=',
128 & OLx, OLy,' too small'
129 CALL PRINT_ERROR( msgBuf, myThid )
130 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
131 & 'One tracer (T,S,pTrac, ...) advection scheme'
132 CALL PRINT_ERROR( msgBuf, myThid )
133 WRITE(msgBuf,'(2A,I3,A,3I2,A)') 'GAD_CHECK: ',
134 & 'needs at least OLx,OLy=', minOlSize,
135 & ' (OlMinSize=', (GAD_OlMinSize(n),n=1,3), ')'
136 CALL PRINT_ERROR( msgBuf, myThid )
137 STOP 'ABNORMAL END: S/R GAD_CHECK'
138 ENDIF
139
140 C Check compatibility with adjoint
141 #ifdef ALLOW_AUTODIFF
142 IF ( tempAdvScheme.EQ.ENUM_OS7MP .OR.
143 & saltAdvScheme.EQ.ENUM_OS7MP ) THEN
144 WRITE(msgBuf,'(A,I3,A)') 'GAD_CHECK: advection scheme OS7MP ',
145 & ENUM_OS7MP,
146 & ' not yet implemented for adjoint'
147 CALL PRINT_ERROR( msgBuf, myThid )
148 STOP 'ABNORMAL END: S/R GAD_CHECK'
149 ENDIF
150 #endif /* ALLOW_AUTODIFF */
151
152 _END_MASTER(myThid)
153
154 #endif /* ALLOW_GENERIC_ADVDIFF */
155 RETURN
156 END

  ViewVC Help
Powered by ViewVC 1.1.22