/[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.10 - (show annotations) (download)
Mon Aug 18 14:29:29 2014 UTC (9 years, 8 months ago) by jmc
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, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.9: +2 -22 lines
- allow to apply Adams-Bashforth on Temp & Salt (instead of on gT,gS)
  with AB-2 code (previously only available with AB-3 code).

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_check.F,v 1.9 2014/08/03 03:12:37 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 C-- Check internal wave dynamics stability regarding active tracer time-stepping
83 IF ( .NOT.(staggerTimeStep.OR.implicitIntGravWave) ) THEN
84 IF ( ( tempIsActiveTr .AND. .NOT.AdamsBashforthGt )
85 & .OR. ( saltIsActiveTr .AND. .NOT.AdamsBashforthGs ) ) THEN
86 C- issue a warning in Error msg file:
87 WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
88 & 'potentially unstable time-stepping (Internal Wave)'
89 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
90 & SQUEEZE_RIGHT , myThid)
91 WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
92 & 'need "staggerTimeStep=.TRUE." in "data", nml PARM01'
93 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
94 & SQUEEZE_RIGHT , myThid)
95 ENDIF
96 ENDIF
97
98 C-- Check size of overlap region
99 C-- Note: checking minimum size of overlap due to tracer limitations moved here;
100 C previously done in GAD_INIT_FIXED, PTRACERS_INIT_FIXED and GMREDI_CHECK;
101 C for mom limitations, done in CONFIG_CHECK, but can move to MOM_INIT_FIXED
102
103 minOlSize = MAX( GAD_OlMinSize(1)+GAD_OlMinSize(2),
104 & GAD_OlMinSize(2)+GAD_OlMinSize(3),
105 & GAD_OlMinSize(1)*GAD_OlMinSize(3) )
106 IF ( OLx.LT.minOlSize .OR. OLy.LT.minOlSize ) THEN
107 WRITE(msgBuf,'(A,2I3,A)') 'GAD_CHECK: Overlap Size OLx,OLy=',
108 & OLx, OLy,' too small'
109 CALL PRINT_ERROR( msgBuf, myThid )
110 WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
111 & 'One tracer (T,S,pTrac, ...) advection scheme'
112 CALL PRINT_ERROR( msgBuf, myThid )
113 WRITE(msgBuf,'(2A,I3,A,3I2,A)') 'GAD_CHECK: ',
114 & 'needs at least OLx,OLy=', minOlSize,
115 & ' (OlMinSize=', (GAD_OlMinSize(n),n=1,3), ')'
116 CALL PRINT_ERROR( msgBuf, myThid )
117 STOP 'ABNORMAL END: S/R GAD_CHECK'
118 ENDIF
119
120 C Check compatibility with adjoint
121 #ifdef ALLOW_AUTODIFF
122 IF ( tempAdvScheme.EQ.ENUM_OS7MP .OR.
123 & saltAdvScheme.EQ.ENUM_OS7MP ) THEN
124 WRITE(msgBuf,'(A,I3,A)') 'GAD_CHECK: advection scheme OS7MP ',
125 & ENUM_OS7MP,
126 & ' not yet implemented for adjoint'
127 CALL PRINT_ERROR( msgBuf, myThid )
128 STOP 'ABNORMAL END: S/R GAD_CHECK'
129 ENDIF
130 #endif /* ALLOW_AUTODIFF */
131
132 _END_MASTER(myThid)
133
134 #endif /* ALLOW_GENERIC_ADVDIFF */
135 RETURN
136 END

  ViewVC Help
Powered by ViewVC 1.1.22