/[MITgcm]/MITgcm/pkg/ptracers/ptracers_init_fixed.F
ViewVC logotype

Contents of /MITgcm/pkg/ptracers/ptracers_init_fixed.F

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


Revision 1.15 - (show annotations) (download)
Wed Sep 16 16:50:49 2015 UTC (8 years, 9 months ago) by jahn
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, HEAD
Changes since 1.14: +6 -6 lines
fix determination of minimum overlap for ptracers

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_init_fixed.F,v 1.14 2015/06/02 20:09:22 gforget Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: PTRACERS_INIT_FIXED
9
10 C !INTERFACE:
11 SUBROUTINE PTRACERS_INIT_FIXED( myThid )
12
13 C !DESCRIPTION:
14 C Initialize PTRACERS constant
15
16 C !USES:
17 #include "PTRACERS_MOD.h"
18 IMPLICIT NONE
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "PTRACERS_SIZE.h"
23 #include "PTRACERS_PARAMS.h"
24 #include "GAD.h"
25
26 C !INPUT PARAMETERS:
27 INTEGER myThid
28 CEOP
29
30 #ifdef ALLOW_PTRACERS
31 C !FUNCTIONS
32 INTEGER GAD_ADVSCHEME_GET
33 EXTERNAL GAD_ADVSCHEME_GET
34
35 C !LOCAL VARIABLES:
36 C iTracer :: tracer index
37 C errCount :: error counter
38 C tracMinSize :: overlap minimum size for ptracers advection
39 C msgBuf :: Informational/error message buffer
40 INTEGER iTracer
41 INTEGER errCount
42 INTEGER tracMinSize, minSize
43 LOGICAL updateMinSize
44 CHARACTER*(MAX_LEN_MBUF) msgBuf
45
46 _BEGIN_MASTER( myThid )
47 errCount = 0
48
49 C Initialise internal parameter in common block:
50 DO iTracer = 1, PTRACERS_num
51 PTRACERS_MultiDimAdv(iTracer) = multiDimAdvection
52 PTRACERS_SOM_Advection(iTracer)= .FALSE.
53 PTRACERS_AdamsBashGtr(iTracer) = .FALSE.
54 PTRACERS_AdamsBash_Tr(iTracer) = .FALSE.
55 ENDDO
56
57 C-- Loop over tracers
58 tracMinSize = 0
59 DO iTracer = 1, PTRACERS_numInUse
60
61 C- Check for valid advection-scheme number
62 IF ( PTRACERS_advScheme(iTracer).NE.0 ) THEN
63 minSize = GAD_ADVSCHEME_GET( PTRACERS_advScheme(iTracer) )
64 IF ( minSize.LT.0 ) THEN
65 WRITE(msgBuf,'(2A,I6)') 'PTRACERS_INIT_FIXED: ',
66 & 'invalid Adv. Scheme number=', PTRACERS_advScheme(iTracer)
67 CALL PRINT_ERROR( msgBuf, myThid )
68 WRITE(msgBuf,'(2A,I6)') 'PTRACERS_INIT_FIXED: ',
69 & 'for tracer #', iTracer
70 CALL PRINT_ERROR( msgBuf, myThid )
71 errCount = errCount + 1
72 ENDIF
73 ELSE
74 minSize = 1
75 ENDIF
76 C Overlap minimum size consistent with ptracers advection
77 tracMinSize = MAX( tracMinSize, minSize )
78
79 IF (
80 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND .OR.
81 & PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD .OR.
82 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH .OR.
83 & PTRACERS_advScheme(iTracer).EQ.0
84 & ) PTRACERS_MultiDimAdv(iTracer) = .FALSE.
85 useMultiDimAdvec = useMultiDimAdvec
86 & .OR. PTRACERS_MultiDimAdv(iTracer)
87 PTRACERS_AdamsBashGtr(iTracer) =
88 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND .OR.
89 & PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD .OR.
90 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH
91 IF ( .NOT.PTRACERS_doAB_onGpTr ) THEN
92 PTRACERS_AdamsBash_Tr(iTracer) = PTRACERS_AdamsBashGtr(iTracer)
93 PTRACERS_AdamsBashGtr(iTracer) = .FALSE.
94 ENDIF
95
96 PTRACERS_SOM_Advection(iTracer) =
97 & PTRACERS_advScheme(iTracer).GE.ENUM_SOM_PRATHER
98 & .AND. PTRACERS_advScheme(iTracer).LE.ENUM_SOM_LIMITER
99 #ifndef PTRACERS_ALLOW_DYN_STATE
100 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
101 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
102 & 'trying to use 2nd.Order-Moment Advection without'
103 CALL PRINT_ERROR( msgBuf, myThid )
104 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
105 & 'dynamical internal state data structures compiled'
106 CALL PRINT_ERROR( msgBuf, myThid )
107 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
108 & 'Re-compile with: #define PTRACERS_ALLOW_DYN_STATE'
109 CALL PRINT_ERROR( msgBuf, myThid )
110 errCount = errCount + 1
111 ENDIF
112 #endif /* ndef PTRACERS_ALLOW_DYN_STATE */
113
114 C-- end of Tracer loop
115 ENDDO
116
117 C-- Update Overlap minimum size according to tracer advection
118 updateMinSize = GAD_OlMinSize(1).LT.tracMinSize
119 GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1), tracMinSize )
120 C- Constraint on size of the overlap (after updating "useMultiDimAdvec"):
121 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
122 C- multi-dim-advection on CS-grid requires to double the size of OLx,OLy
123 updateMinSize = updateMinSize .OR. ( GAD_OlMinSize(3).LT.2 )
124 GAD_OlMinSize(3) = MAX( GAD_OlMinSize(3), 2 )
125 ENDIF
126 IF ( updateMinSize ) THEN
127 WRITE(msgBuf,'(2A,9I3)') 'PTRACERS_INIT_FIXED: ',
128 & 'updated GAD_OlMinSize=', GAD_OlMinSize
129 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
130 & SQUEEZE_RIGHT, myThid )
131 ENDIF
132
133 #ifdef PTRACERS_ALLOW_DYN_STATE
134 CALL PTRACERS_INIT_FIXED_DYNAMIC( PtrISt,
135 & PTRACERS_numInUse,
136 & PTRACERS_SOM_Advection,
137 & sNx, sNy, Nr, OLx, OLy,
138 & nSx, nSy, nSOM,
139 & myThid )
140 #endif
141
142 C-- Stop if any error was found:
143 IF ( errCount .GE. 1 ) THEN
144 WRITE(msgBuf,'(A,I3,A)')
145 & 'S/R PTRACERS_INIT_FIXED: detected', errCount,' fatal error(s)'
146 CALL PRINT_ERROR( msgBuf, myThid )
147 CALL ALL_PROC_DIE( 0 )
148 STOP 'ABNORMAL END: S/R PTRACERS_INIT_FIXED'
149 ENDIF
150
151 _END_MASTER( myThid )
152 _BARRIER
153
154 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
155
156 #ifdef ALLOW_MNC
157 IF (useMNC) THEN
158 C Initialize the MNC variable types for PTRACERS
159 CALL PTRACERS_MNC_INIT( myThid )
160 ENDIF
161 #endif
162
163 #ifdef ALLOW_DIAGNOSTICS
164 IF ( useDiagnostics ) THEN
165 CALL PTRACERS_DIAGNOSTICS_INIT( myThid )
166 ENDIF
167 #endif
168
169 #endif /* ALLOW_PTRACERS */
170
171 RETURN
172 END

  ViewVC Help
Powered by ViewVC 1.1.22