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

Diff of /MITgcm/pkg/generic_advdiff/gad_init_fixed.F

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

revision 1.6 by jmc, Tue Apr 28 23:27:24 2009 UTC revision 1.7 by jmc, Tue Nov 16 17:39:13 2010 UTC
# Line 25  C     myThid  :: My Thread Id. number Line 25  C     myThid  :: My Thread Id. number
25        INTEGER myThid        INTEGER myThid
26  CEOP  CEOP
27    
28    C     !FUNCTIONS
29          LOGICAL  GAD_VALID_ADVSCHEME
30          EXTERNAL GAD_VALID_ADVSCHEME
31    
32    C     !LOCAL VARIABLES:
33  C     === Local variables ===  C     === Local variables ===
34  C     msgBuf  :: Informational/error meesage buffer  C     msgBuf  :: Informational/error message buffer
35        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
36        INTEGER   minOlSize        LOGICAL   validNum
37        INTEGER   n        INTEGER   n
38    
39  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
40    
41        _BEGIN_MASTER(myThid)        _BEGIN_MASTER(myThid)
42    
43  C-- Set SOM I/O suffix (used for pickup, diagnostics ...)  C-- Initialise advection scheme parameter
44          DO n=1,GAD_Scheme_MaxNum
45            GAD_Scheme_olSize(n) = 0
46          ENDDO
47          validNum = GAD_VALID_ADVSCHEME( ENUM_UPWIND_1RST     )
48         &     .AND. GAD_VALID_ADVSCHEME( ENUM_CENTERED_2ND    )
49         &     .AND. GAD_VALID_ADVSCHEME( ENUM_UPWIND_3RD      )
50         &     .AND. GAD_VALID_ADVSCHEME( ENUM_CENTERED_4TH    )
51         &     .AND. GAD_VALID_ADVSCHEME( ENUM_DST2            )
52         &     .AND. GAD_VALID_ADVSCHEME( ENUM_FLUX_LIMIT      )
53         &     .AND. GAD_VALID_ADVSCHEME( ENUM_DST3            )
54         &     .AND. GAD_VALID_ADVSCHEME( ENUM_DST3_FLUX_LIMIT )
55         &     .AND. GAD_VALID_ADVSCHEME( ENUM_OS7MP           )
56         &     .AND. GAD_VALID_ADVSCHEME( ENUM_SOM_PRATHER     )
57         &     .AND. GAD_VALID_ADVSCHEME( ENUM_SOM_LIMITER     )
58          IF ( .NOT.validNum ) THEN
59            WRITE(msgBuf,'(A)')
60         &     'GAD_INIT_FIXED: Coding error in Advection-Scheme Number'
61            CALL PRINT_ERROR( msgBuf, myThid )
62            WRITE(msgBuf,'(2A,I4)') 'GAD_INIT_FIXED:',
63         &     ' one exceeds GAD_Scheme_MaxNum=', GAD_Scheme_MaxNum
64            CALL PRINT_ERROR( msgBuf, myThid )
65            STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
66          ENDIF
67    C-  Set overlap minimum size for each advection scheme:
68          GAD_Scheme_olSize( ENUM_UPWIND_1RST     ) = 1
69          GAD_Scheme_olSize( ENUM_CENTERED_2ND    ) = 1
70          GAD_Scheme_olSize( ENUM_UPWIND_3RD      ) = 2
71          GAD_Scheme_olSize( ENUM_CENTERED_4TH    ) = 2
72          GAD_Scheme_olSize( ENUM_DST2            ) = 1
73          GAD_Scheme_olSize( ENUM_FLUX_LIMIT      ) = 2
74          GAD_Scheme_olSize( ENUM_DST3            ) = 2
75          GAD_Scheme_olSize( ENUM_DST3_FLUX_LIMIT ) = 2
76          GAD_Scheme_olSize( ENUM_OS7MP           ) = 4
77          GAD_Scheme_olSize( ENUM_SOM_PRATHER     ) = 1
78          GAD_Scheme_olSize( ENUM_SOM_LIMITER     ) = 1
79    C-  Initialise overlap minimum size for GAD pkg:
80          GAD_OlMinSize(1) = 0
81          GAD_OlMinSize(2) = 0
82          GAD_OlMinSize(3) = 1
83    
84    C-  Set SOM I/O suffix (used for pickup, diagnostics ...)
85        DO n=1,nSOM        DO n=1,nSOM
86          somSfx(n) = '  '          somSfx(n) = '  '
87          IF (n.EQ.1) somSfx(n) = '_x'          IF (n.EQ.1) somSfx(n) = '_x'
# Line 49  C-- Set SOM I/O suffix (used for pickup, Line 95  C-- Set SOM I/O suffix (used for pickup,
95          IF (n.EQ.9) somSfx(n) = 'yz'          IF (n.EQ.9) somSfx(n) = 'yz'
96        ENDDO        ENDDO
97    
98    C-- Check that Temp & Salt have valid advection scheme number:
99          validNum = GAD_VALID_ADVSCHEME(tempAdvScheme)
100          IF ( .NOT.validNum ) THEN
101            WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED:',
102         &   ' invalid Temp. advection scheme number=', tempAdvScheme
103            CALL PRINT_ERROR( msgBuf, myThid )
104            STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
105          ENDIF
106          validNum = GAD_VALID_ADVSCHEME(tempVertAdvScheme)
107          IF ( .NOT.validNum ) THEN
108            WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED:',
109         &   ' invalid Temp. Vert. Adv.scheme number=', tempVertAdvScheme
110            CALL PRINT_ERROR( msgBuf, myThid )
111            STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
112          ENDIF
113          validNum = GAD_VALID_ADVSCHEME(saltAdvScheme)
114          IF ( .NOT.validNum ) THEN
115            WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED:',
116         &   ' invalid Salt. advection scheme number=', saltAdvScheme
117            CALL PRINT_ERROR( msgBuf, myThid )
118            STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
119          ENDIF
120          validNum = GAD_VALID_ADVSCHEME(saltVertAdvScheme)
121          IF ( .NOT.validNum ) THEN
122            WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED:',
123         &   ' invalid Salt. Vert. Adv.scheme number=', saltVertAdvScheme
124            CALL PRINT_ERROR( msgBuf, myThid )
125            STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
126          ENDIF
127    
128  C-- Set Temp & Salt 2nd-Order Moment Advec. flag according to advection scheme  C-- Set Temp & Salt 2nd-Order Moment Advec. flag according to advection scheme
129        tempSOM_Advection = tempAdvScheme.GE.ENUM_SOM_PRATHER        tempSOM_Advection = tempAdvScheme.GE.ENUM_SOM_PRATHER
130       &              .AND. tempAdvScheme.LE.ENUM_SOM_LIMITER       &              .AND. tempAdvScheme.LE.ENUM_SOM_LIMITER
# Line 106  C     with synchronous time-step, which Line 182  C     with synchronous time-step, which
182        SmolarkiewiczMaxFrac = 1. _d 0        SmolarkiewiczMaxFrac = 1. _d 0
183  #endif  #endif
184    
185    C-- Set Overlap minimum size according to Temp & Salt advection
186          IF ( tempAdvection ) THEN
187             GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1),
188         &                           GAD_Scheme_olSize(tempAdvScheme) )
189          ENDIF
190          IF ( saltAdvection ) THEN
191             GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1),
192         &                           GAD_Scheme_olSize(saltAdvScheme) )
193          ENDIF
194          IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
195    C-    multi-dim-advection on CS-grid requires to double the size of Olx,Oly
196            GAD_OlMinSize(3) = MAX( GAD_OlMinSize(3), 2 )
197          ENDIF
198          WRITE(msgBuf,'(A,9I3)')
199         &      'GAD_INIT_FIXED: GAD_OlMinSize=', GAD_OlMinSize
200          CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
201    
202        _END_MASTER(myThid)        _END_MASTER(myThid)
203    
204  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 179  C-- Print out GAD parameters : Line 272  C-- Print out GAD parameters :
272    
273  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
274    
 C--   Check size of the overlap :  
       IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN  
 C-    multi-dim-advection on CS-grid requires to double the size of Olx,Oly  
         minOlSize = 2  
         IF ( tempMultiDimAdvec ) THEN  
           IF ( tempAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.  
      &         tempAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.  
      &         tempAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4  
         ENDIF  
         IF ( saltMultiDimAdvec ) THEN  
           IF ( saltAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.  
      &         saltAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.  
      &         saltAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4  
         ENDIF  
         IF ( Olx.LT.minOlSize .OR. Oly.LT.minOlSize ) THEN  
           WRITE(msgBuf,'(A)')  
      &     'GAD_INIT_FIXED: Multi-Dim Advection with 5-points stencil'  
           CALL PRINT_ERROR( msgBuf , myThid)  
           WRITE(msgBuf,'(A,I2)')  
      &     'GAD_INIT_FIXED: advection scheme needs at least Olx,Oly=',  
      &      minOlSize  
           CALL PRINT_ERROR( msgBuf , myThid)  
           STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'  
         ENDIF  
       ENDIF  
   
275        _END_MASTER(myThid)        _END_MASTER(myThid)
276        _BARRIER        _BARRIER
277    

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.22