/[MITgcm]/MITgcm/pkg/gmredi/gmredi_check.F
ViewVC logotype

Contents of /MITgcm/pkg/gmredi/gmredi_check.F

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


Revision 1.20 - (show annotations) (download)
Tue Nov 16 17:44:21 2010 UTC (13 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62q, checkpoint62p, checkpoint62o
Changes since 1.19: +8 -26 lines
refine overlap minimum size criteria (final check is done in GAD_CHECK)

1 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_check.F,v 1.19 2010/03/24 21:21:49 jmc Exp $
2 C $Name: $
3
4 #include "GMREDI_OPTIONS.h"
5 #ifdef ALLOW_PTRACERS
6 # include "PTRACERS_OPTIONS.h"
7 #endif
8
9 CBOP
10 C !ROUTINE: GMREDI_CHECK
11 C !INTERFACE:
12 SUBROUTINE GMREDI_CHECK( myThid )
13
14 C !DESCRIPTION: \bv
15 C *==========================================================*
16 C | SUBROUTINE GMREDI_CHECK
17 C | o Check consistency with model configuration
18 C *==========================================================*
19 C *==========================================================*
20 C \ev
21
22 C !USES:
23 IMPLICIT NONE
24
25 C === Global variables ===
26 #include "SIZE.h"
27 #include "EEPARAMS.h"
28 #include "PARAMS.h"
29 #include "GMREDI.h"
30 #ifdef ALLOW_GENERIC_ADVDIFF
31 # include "GAD.h"
32 #endif
33 #ifdef ALLOW_PTRACERS
34 # include "PTRACERS_SIZE.h"
35 # include "PTRACERS_PARAMS.h"
36 #endif
37
38 C !INPUT/OUTPUT PARAMETERS:
39 C === Routine arguments ===
40 C myThid :: my Thread Id number
41 INTEGER myThid
42
43 #ifdef ALLOW_GMREDI
44 C !LOCAL VARIABLES:
45 C === Local variables ===
46 C msgBuf :: Informational/error message buffer
47 CHARACTER*(MAX_LEN_MBUF) msgBuf
48 CEOP
49 #ifdef ALLOW_PTRACERS
50 INTEGER iTr
51 LOGICAL redFlag
52 #endif
53
54 _BEGIN_MASTER(myThid)
55
56 WRITE(msgBuf,'(A)') 'GMREDI_CHECK: #define GMREDI'
57 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
58 & SQUEEZE_RIGHT , myThid )
59
60 C- print out some kee parameters :
61 CALL WRITE_0D_L( GM_AdvForm, INDEX_NONE,
62 & 'GM_AdvForm =', ' /* if FALSE => use SkewFlux Form */')
63 CALL WRITE_0D_L( GM_InMomAsStress, INDEX_NONE,
64 & 'GM_InMomAsStress =', ' /* if TRUE => apply as Eddy Stress */')
65 CALL WRITE_0D_L( GM_AdvSeparate, INDEX_NONE,
66 & 'GM_AdvSeparate =',' /* Calc Bolus & Euler Adv. separately */')
67 CALL WRITE_0D_L( GM_ExtraDiag, INDEX_NONE,
68 & 'GM_ExtraDiag =',' /* Tensor Extra Diag (line 1&2) non 0 */')
69 CALL WRITE_0D_RL( GM_isopycK, INDEX_NONE, 'GM_isopycK =',
70 & ' /* Background Isopyc. Diffusivity [m^2/s] */')
71 CALL WRITE_0D_RL( GM_background_K*GM_skewflx, INDEX_NONE,
72 & 'GM_skewflx*K =',
73 & ' /* Background GM_SkewFlx Diffusivity [m^2/s] */')
74 CALL WRITE_0D_RL( GM_background_K*GM_advect, INDEX_NONE,
75 & 'GM_advec*K =',
76 & ' /* Backg. GM-Advec(=Bolus) Diffusivity [m^2/s]*/')
77 CALL WRITE_0D_RL( GM_Kmin_horiz, INDEX_NONE, 'GM_Kmin_horiz =',
78 & ' /* Minimum Horizontal Diffusivity [m^2/s] */')
79 CALL WRITE_0D_RL( GM_Visbeck_alpha, INDEX_NONE,
80 & 'GM_Visbeck_alpha =', ' /* Visbeck alpha coeff. [-] */')
81 CALL WRITE_0D_RL( GM_Small_Number, INDEX_NONE,
82 & 'GM_Small_Number =', ' /* epsilon used in slope calc */')
83 CALL WRITE_0D_RL( GM_slopeSqCutoff, INDEX_NONE,
84 & 'GM_slopeSqCutoff =', ' /* Slope^2 cut-off value */')
85 CALL WRITE_0D_C( GM_taper_scheme, 0, INDEX_NONE,
86 & 'GM_taper_scheme =',
87 & ' /* Type of Tapering/Clipping scheme */')
88 CALL WRITE_0D_RL( GM_maxSlope, INDEX_NONE,
89 & 'GM_maxSlope =', ' /* Maximum Slope (Tapering/Clipping) */')
90 CALL WRITE_0D_RL( GM_facTrL2dz, INDEX_NONE,
91 & 'GM_facTrL2dz =',
92 & ' /* Minimum Trans.Layer Thick. (factor of dz) */')
93 CALL WRITE_0D_RL( GM_facTrL2ML, INDEX_NONE,
94 & 'GM_facTrL2ML =',
95 & ' /* Max.Trans.Layer Thick. (factor of MxL Depth)*/')
96 CALL WRITE_0D_RL( GM_maxTransLay, INDEX_NONE,
97 & 'GM_maxTransLay =',
98 & ' /* Maximum Transition Layer Thickness [m] */')
99
100 C-- Check parameters:
101
102 C- GM/Redi needs implicit diffusion (will be packaged later)
103 IF ( .NOT.implicitDiffusion ) THEN
104 WRITE(msgBuf,'(A)') 'GM/Redi needs implicitDiffusion=.true.'
105 CALL PRINT_ERROR( msgBuf , myThid )
106 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
107 ENDIF
108
109 #ifndef GM_VISBECK_VARIABLE_K
110 C Make sure we are not trying to use something that is unavailable
111 IF ( GM_Visbeck_alpha.NE.0. ) THEN
112 WRITE(msgBuf,'(A)')
113 & ' GMREDI_CHECK: Visbeck variables used in data.gmredi'
114 CALL PRINT_ERROR( msgBuf, myThid )
115 WRITE(msgBuf,'(A)')
116 & ' GMREDI_CHECK: without #define GM_VISBECK_VARIABLE_K'
117 CALL PRINT_ERROR( msgBuf, myThid )
118 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
119 ENDIF
120 #endif
121
122 #ifndef GM_BOLUS_ADVEC
123 C Make sure we are not trying to use some arrays that are unavailable
124 IF ( GM_AdvForm ) THEN
125 WRITE(msgBuf,'(A)')
126 & ' GMREDI_CHECK: GM Advection form used in data.gmredi'
127 CALL PRINT_ERROR( msgBuf, myThid )
128 WRITE(msgBuf,'(A)')
129 & ' GMREDI_CHECK: without #define GM_BOLUS_ADVEC'
130 CALL PRINT_ERROR( msgBuf, myThid )
131 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
132 ENDIF
133 #endif
134
135 #ifndef GM_EXTRA_DIAGONAL
136 C Make sure we are not trying to use some arrays that are unavailable
137 IF ( GM_ExtraDiag ) THEN
138 WRITE(msgBuf,'(A)')
139 & ' GMREDI_CHECK: GM_skew_Flux_K & GM_isopycK not equal'
140 CALL PRINT_ERROR( msgBuf, myThid )
141 WRITE(msgBuf,'(A)')
142 & ' GMREDI_CHECK: without #define GM_EXTRA_DIAGONAL'
143 CALL PRINT_ERROR( msgBuf, myThid )
144 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
145 ENDIF
146 #endif
147
148 #ifdef ALLOW_PTRACERS
149 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
150 & .AND. usePTRACERS ) THEN
151 redFlag = .FALSE.
152 DO iTr=1,PTRACERS_numInUse
153 IF ( .NOT.PTRACERS_useGMRedi(iTr) ) THEN
154 redFlag = .TRUE.
155 WRITE(msgBuf,'(2A,I3,A,L5)') ' GMREDI_CHECK:',
156 & ' pTracers_useGMRedi(',iTr,' )=', PTRACERS_useGMRedi(iTr)
157 CALL PRINT_ERROR( msgBuf, myThid )
158 ENDIF
159 ENDDO
160 IF ( redFlag ) THEN
161 WRITE(msgBuf,'(2A)') ' GMREDI_CHECK:',
162 & ' but GM Advective Form applies to all tracers !'
163 CALL PRINT_ERROR( msgBuf, myThid )
164 STOP 'ABNORMAL END: S/R GMREDI_CHECK'
165 ENDIF
166 ENDIF
167 #endif /* ALLOW_PTRACERS */
168
169 #ifdef ALLOW_GENERIC_ADVDIFF
170 C Check size of overlap region
171 IF ( GM_AdvForm .AND. .NOT.GM_AdvSeparate
172 & .AND. GM_Visbeck_alpha.NE.0.
173 & .AND. useMultiDimAdvec ) THEN
174 C Visbeck variable K requires 1 more row/column in the overlap:
175 C might need to increase Olx,Oly from 2 to 3 if GM advective
176 C form & multi-dim advection are used. This happens when:
177 C a) using a 5 points stencil advection scheme ; or
178 C b) using a 3 points stencil advection scheme on CS-grid
179 GAD_OlMinSize(2) = MAX( GAD_OlMinSize(2), 1)
180 WRITE(msgBuf,'(A,9I3)')
181 & 'GMREDI_CHECK: GAD_OlMinSize=', GAD_OlMinSize
182 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
183 & SQUEEZE_RIGHT , myThid )
184 ENDIF
185 #endif /* ALLOW_GENERIC_ADVDIFF */
186
187 _END_MASTER(myThid)
188
189 #endif /* ALLOW_GMREDI */
190 RETURN
191 END

  ViewVC Help
Powered by ViewVC 1.1.22