Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:43 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
3221ad5c59 Jean*0001 #include "OBCS_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
70a7b4285e Mart*0005 C     !ROUTINE: OBCS_WRITE_PICKUP
3221ad5c59 Jean*0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE OBCS_WRITE_PICKUP(
                0009      &                          suff, myTime, myIter, myThid )
                0010 
                0011 C     !DESCRIPTION:
                0012 C     *==========================================================*
                0013 C     | SUBROUTINE OBCS_WRITE_PICKUP
                0014 C     | o Write open boundary pickup file
                0015 C     *==========================================================*
                0016 C     |   Note: only Orlanski OBC needs pickup files to restart
                0017 C     *==========================================================*
                0018 
                0019 C     !USES:
                0020       IMPLICIT NONE
                0021 C     === Global variables ===
                0022 #include "SIZE.h"
                0023 #include "EEPARAMS.h"
                0024 #include "PARAMS.h"
                0025 #include "RESTART.h"
9b4f2a04e2 Jean*0026 #include "OBCS_PARAMS.h"
                0027 #include "OBCS_FIELDS.h"
3221ad5c59 Jean*0028 #include "ORLANSKI.h"
                0029 
                0030 C     !INPUT/OUTPUT PARAMETERS:
                0031       CHARACTER*(*) suff
                0032       _RL     myTime
                0033       INTEGER myIter
                0034       INTEGER myThid
                0035 CEOP
                0036 
2c64c37c71 Mart*0037 #if (defined ALLOW_ORLANSKI) || (defined ALLOW_OBCS_STEVENS)
3221ad5c59 Jean*0038 
                0039 C     !FUNCTIONS:
                0040       INTEGER  ILNBLNK
                0041       EXTERNAL ILNBLNK
                0042 
                0043 C     !LOCAL VARIABLES:
                0044       CHARACTER*(MAX_LEN_FNAM) fn
                0045       INTEGER prec
                0046       INTEGER iL
                0047 
                0048       iL = ILNBLNK(suff)
                0049       iL = MAX(1,iL)
                0050       prec = precFloat64
                0051 
58a0264bb8 Jean*0052 C--   Unlike horizontal 2D or 3D IO routines, no thread synchronisation is
                0053 C     done within  Vertical Section IO routines. Since only thread one is
                0054 C     doing IO, we need a barrier here to wait for every one to finish.
                0055       _BARRIER
                0056 
2c64c37c71 Mart*0057 #ifdef ALLOW_ORLANSKI
3221ad5c59 Jean*0058 C     Write N and S OB storage and phase speed arrays
                0059 #ifdef ALLOW_OBCS_NORTH
                0060       IF ( useOrlanskiNorth ) THEN
                0061         WRITE(fn,'(2A)') 'pickup_orlanskiN.',suff(1:iL)
                0062         CALL WRITE_REC_XZ_RL(fn,prec,Nr,UN_STORE_1, 1,myIter,myThid)
                0063         CALL WRITE_REC_XZ_RL(fn,prec,Nr,UN_STORE_2, 2,myIter,myThid)
                0064         CALL WRITE_REC_XZ_RL(fn,prec,Nr,UN_STORE_3, 3,myIter,myThid)
                0065         CALL WRITE_REC_XZ_RL(fn,prec,Nr,UN_STORE_4, 4,myIter,myThid)
                0066         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VN_STORE_1, 5,myIter,myThid)
                0067         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VN_STORE_2, 6,myIter,myThid)
                0068         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VN_STORE_3, 7,myIter,myThid)
                0069         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VN_STORE_4, 8,myIter,myThid)
                0070         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TN_STORE_1, 9,myIter,myThid)
                0071         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TN_STORE_2,10,myIter,myThid)
                0072         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TN_STORE_3,11,myIter,myThid)
                0073         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TN_STORE_4,12,myIter,myThid)
                0074         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SN_STORE_1,13,myIter,myThid)
                0075         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SN_STORE_2,14,myIter,myThid)
                0076         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SN_STORE_3,15,myIter,myThid)
                0077         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SN_STORE_4,16,myIter,myThid)
                0078         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_UN , 17,myIter,myThid)
                0079         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_VN , 18,myIter,myThid)
                0080         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_TN , 19,myIter,myThid)
                0081         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_SN , 20,myIter,myThid)
                0082 #ifdef ALLOW_NONHYDROSTATIC
                0083        IF ( nonHydrostatic ) THEN
                0084         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WN_STORE_1,21,myIter,myThid)
                0085         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WN_STORE_2,22,myIter,myThid)
                0086         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WN_STORE_3,23,myIter,myThid)
                0087         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WN_STORE_4,24,myIter,myThid)
                0088         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_WN , 25,myIter,myThid)
                0089         CALL WRITE_REC_XZ_RL(fn,prec,Nr, OBNw    , 26,myIter,myThid)
                0090        ENDIF
                0091 #endif
                0092       ENDIF
                0093 #endif /* ALLOW_OBCS_NORTH */
                0094 
                0095 #ifdef ALLOW_OBCS_SOUTH
                0096       IF ( useOrlanskiSouth ) THEN
                0097         WRITE(fn,'(2A)') 'pickup_orlanskiS.',suff(1:iL)
                0098         CALL WRITE_REC_XZ_RL(fn,prec,Nr,US_STORE_1, 1,myIter,myThid)
                0099         CALL WRITE_REC_XZ_RL(fn,prec,Nr,US_STORE_2, 2,myIter,myThid)
                0100         CALL WRITE_REC_XZ_RL(fn,prec,Nr,US_STORE_3, 3,myIter,myThid)
                0101         CALL WRITE_REC_XZ_RL(fn,prec,Nr,US_STORE_4, 4,myIter,myThid)
                0102         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VS_STORE_1, 5,myIter,myThid)
                0103         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VS_STORE_2, 6,myIter,myThid)
                0104         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VS_STORE_3, 7,myIter,myThid)
                0105         CALL WRITE_REC_XZ_RL(fn,prec,Nr,VS_STORE_4, 8,myIter,myThid)
                0106         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TS_STORE_1, 9,myIter,myThid)
                0107         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TS_STORE_2,10,myIter,myThid)
                0108         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TS_STORE_3,11,myIter,myThid)
                0109         CALL WRITE_REC_XZ_RL(fn,prec,Nr,TS_STORE_4,12,myIter,myThid)
                0110         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SS_STORE_1,13,myIter,myThid)
                0111         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SS_STORE_2,14,myIter,myThid)
                0112         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SS_STORE_3,15,myIter,myThid)
                0113         CALL WRITE_REC_XZ_RL(fn,prec,Nr,SS_STORE_4,16,myIter,myThid)
                0114         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_US , 17,myIter,myThid)
                0115         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_VS , 18,myIter,myThid)
                0116         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_TS , 19,myIter,myThid)
                0117         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_SS , 20,myIter,myThid)
                0118 #ifdef ALLOW_NONHYDROSTATIC
                0119        IF ( nonHydrostatic ) THEN
                0120         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WS_STORE_1,21,myIter,myThid)
                0121         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WS_STORE_2,22,myIter,myThid)
                0122         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WS_STORE_3,23,myIter,myThid)
                0123         CALL WRITE_REC_XZ_RL(fn,prec,Nr,WS_STORE_4,24,myIter,myThid)
                0124         CALL WRITE_REC_XZ_RL(fn,prec,Nr, CVEL_WS , 25,myIter,myThid)
                0125         CALL WRITE_REC_XZ_RL(fn,prec,Nr, OBSw    , 26,myIter,myThid)
                0126        ENDIF
                0127 #endif
                0128       ENDIF
                0129 #endif /* ALLOW_OBCS_SOUTH */
                0130 
                0131 C     Write E and W OB storage and phase speed arrays
                0132 #ifdef ALLOW_OBCS_EAST
                0133       IF ( useOrlanskiEast ) THEN
                0134         WRITE(fn,'(2A)') 'pickup_orlanskiE.',suff(1:iL)
                0135         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UE_STORE_1, 1,myIter,myThid)
                0136         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UE_STORE_2, 2,myIter,myThid)
                0137         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UE_STORE_3, 3,myIter,myThid)
                0138         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UE_STORE_4, 4,myIter,myThid)
                0139         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VE_STORE_1, 5,myIter,myThid)
                0140         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VE_STORE_2, 6,myIter,myThid)
                0141         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VE_STORE_3, 7,myIter,myThid)
                0142         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VE_STORE_4, 8,myIter,myThid)
                0143         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TE_STORE_1, 9,myIter,myThid)
                0144         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TE_STORE_2,10,myIter,myThid)
                0145         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TE_STORE_3,11,myIter,myThid)
                0146         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TE_STORE_4,12,myIter,myThid)
                0147         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SE_STORE_1,13,myIter,myThid)
                0148         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SE_STORE_2,14,myIter,myThid)
                0149         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SE_STORE_3,15,myIter,myThid)
                0150         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SE_STORE_4,16,myIter,myThid)
                0151         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_UE , 17,myIter,myThid)
                0152         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_VE , 18,myIter,myThid)
                0153         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_TE , 19,myIter,myThid)
                0154         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_SE , 20,myIter,myThid)
                0155 #ifdef ALLOW_NONHYDROSTATIC
                0156        IF ( nonHydrostatic ) THEN
                0157         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WE_STORE_1,21,myIter,myThid)
                0158         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WE_STORE_2,22,myIter,myThid)
                0159         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WE_STORE_3,23,myIter,myThid)
                0160         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WE_STORE_4,24,myIter,myThid)
                0161         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_WE , 25,myIter,myThid)
                0162         CALL WRITE_REC_YZ_RL(fn,prec,Nr, OBEw    , 26,myIter,myThid)
                0163        ENDIF
                0164 #endif
                0165       ENDIF
                0166 #endif /* ALLOW_OBCS_EAST */
                0167 
                0168 #ifdef ALLOW_OBCS_WEST
                0169       IF ( useOrlanskiWest ) THEN
                0170         WRITE(fn,'(2A)') 'pickup_orlanskiW.',suff(1:iL)
                0171         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UW_STORE_1, 1,myIter,myThid)
                0172         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UW_STORE_2, 2,myIter,myThid)
                0173         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UW_STORE_3, 3,myIter,myThid)
                0174         CALL WRITE_REC_YZ_RL(fn,prec,Nr,UW_STORE_4, 4,myIter,myThid)
                0175         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VW_STORE_1, 5,myIter,myThid)
                0176         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VW_STORE_2, 6,myIter,myThid)
                0177         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VW_STORE_3, 7,myIter,myThid)
                0178         CALL WRITE_REC_YZ_RL(fn,prec,Nr,VW_STORE_4, 8,myIter,myThid)
                0179         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TW_STORE_1, 9,myIter,myThid)
                0180         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TW_STORE_2,10,myIter,myThid)
                0181         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TW_STORE_3,11,myIter,myThid)
                0182         CALL WRITE_REC_YZ_RL(fn,prec,Nr,TW_STORE_4,12,myIter,myThid)
                0183         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SW_STORE_1,13,myIter,myThid)
                0184         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SW_STORE_2,14,myIter,myThid)
                0185         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SW_STORE_3,15,myIter,myThid)
                0186         CALL WRITE_REC_YZ_RL(fn,prec,Nr,SW_STORE_4,16,myIter,myThid)
                0187         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_UW , 17,myIter,myThid)
                0188         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_VW , 18,myIter,myThid)
                0189         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_TW , 19,myIter,myThid)
                0190         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_SW , 20,myIter,myThid)
                0191 #ifdef ALLOW_NONHYDROSTATIC
                0192        IF ( nonHydrostatic ) THEN
                0193         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WW_STORE_1,21,myIter,myThid)
                0194         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WW_STORE_2,22,myIter,myThid)
                0195         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WW_STORE_3,23,myIter,myThid)
                0196         CALL WRITE_REC_YZ_RL(fn,prec,Nr,WW_STORE_4,24,myIter,myThid)
                0197         CALL WRITE_REC_YZ_RL(fn,prec,Nr, CVEL_WW , 25,myIter,myThid)
                0198         CALL WRITE_REC_YZ_RL(fn,prec,Nr, OBWw    , 26,myIter,myThid)
                0199        ENDIF
                0200 #endif
                0201       ENDIF
                0202 #endif /* ALLOW_OBCS_WEST */
2c64c37c71 Mart*0203 #endif /* ALLOW_ORLANSKI */
                0204 
                0205 #ifdef ALLOW_OBCS_STEVENS
                0206 #ifdef ALLOW_OBCS_NORTH
                0207       IF ( useStevensNorth ) THEN
                0208         WRITE(fn,'(2A)') 'pickup_stevensN.',suff(1:iL)
                0209         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNvStevens, 1,myIter,myThid)
b1353a35da Mart*0210         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNtStevens, 2,myIter,myThid)
                0211         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNsStevens, 3,myIter,myThid)
2c64c37c71 Mart*0212       ENDIF
                0213 #endif /* ALLOW_OBCS_NORTH */
                0214 
                0215 #ifdef ALLOW_OBCS_SOUTH
                0216       IF ( useStevensSouth ) THEN
                0217         WRITE(fn,'(2A)') 'pickup_stevensS.',suff(1:iL)
                0218         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSvStevens, 1,myIter,myThid)
b1353a35da Mart*0219         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBStStevens, 2,myIter,myThid)
                0220         CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSsStevens, 3,myIter,myThid)
2c64c37c71 Mart*0221       ENDIF
                0222 #endif /* ALLOW_OBCS_SOUTH */
                0223 
                0224 #ifdef ALLOW_OBCS_EAST
                0225       IF ( useStevensEast ) THEN
                0226         WRITE(fn,'(2A)') 'pickup_stevensE.',suff(1:iL)
                0227         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEuStevens, 1,myIter,myThid)
b1353a35da Mart*0228         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEtStevens, 2,myIter,myThid)
                0229         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEsStevens, 3,myIter,myThid)
2c64c37c71 Mart*0230       ENDIF
                0231 #endif /* ALLOW_OBCS_EAST */
                0232 
                0233 #ifdef ALLOW_OBCS_WEST
                0234       IF ( useStevensWest ) THEN
                0235         WRITE(fn,'(2A)') 'pickup_stevensW.',suff(1:iL)
                0236         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWuStevens, 1,myIter,myThid)
b1353a35da Mart*0237         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWtStevens, 2,myIter,myThid)
                0238         CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWsStevens, 3,myIter,myThid)
2c64c37c71 Mart*0239       ENDIF
                0240 #endif /* ALLOW_OBCS_WEST */
                0241 #endif /* ALLOW_OBCS_STEVENS */
3221ad5c59 Jean*0242 
58a0264bb8 Jean*0243 C--   Every one wait for thread 1 to finish (see comment @ the top)
                0244       _BARRIER
                0245 
2c64c37c71 Mart*0246 #endif /* ALLOW_ORLANSKI or ALLOW_OBCS_STEVENS */
3221ad5c59 Jean*0247       RETURN
                0248       END