File indexing completed on 2018-03-02 18:41:45 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
108a00eab9 Ryan*0001 #include "LAYERS_OPTIONS.h"
0002
0003
0004
0005 SUBROUTINE LAYERS_INIT_FIXED( myThid )
0006
0007
0008
0009
0010
0011 IMPLICIT NONE
0012 #include "EEPARAMS.h"
0013 #include "SIZE.h"
0014 #include "PARAMS.h"
0015 #include "GRID.h"
0016 #include "LAYERS_SIZE.h"
0017 #include "LAYERS.h"
0018
0019
0020
0021 INTEGER myThid
0022
0023
0024
0025
0026
0027
0028
0029
14cf1d4767 Jean*0030
406891c1a3 Gael*0031 INTEGER k,kk,kkinit,iLa
108a00eab9 Ryan*0032 _RL Zf(Nr+1)
0033 _RL Zc(Nr)
0034 _RL ZZf(FineGridMax+1)
0035 _RL ZZc(FineGridMax)
0036
406891c1a3 Gael*0037 CHARACTER*11 tmpName
108a00eab9 Ryan*0038 CHARACTER*(MAX_LEN_MBUF) msgBuf
0039
406891c1a3 Gael*0040
0041 INTEGER ILNBLNK
0042 EXTERNAL ILNBLNK
0043
108a00eab9 Ryan*0044 #ifdef ALLOW_MNC
0045 #ifdef LAYERS_MNC
0046 IF (layers_MNC) THEN
0047 CALL LAYERS_MNC_INIT( myThid )
0048 ENDIF
0049 #endif /* LAYERS_MNC */
0050 #endif /* ALLOW_MNC */
0051
0052
0053
0054
0055 NZZ = FineGridMax
0056
0057
0058
0059
0060
0061
0062
0063 kkinit = 1
0064 DO k=1,Nr
0065 DO kk=kkinit,kkinit+FineGridFact-1
0066 dZZf(kk) = dRf(k) / FineGridFact
0067 ENDDO
0068 kkinit = kkinit + FineGridFact
0069 ENDDO
0070
0071
0072 Zf(1) = 0. _d 0
0073 Zc(1) = drC(1)
0074 DO k=2,Nr
0075 Zf(k) = Zf(k-1) + drF(k-1)
0076 Zc(k) = Zc(k-1) + drC(k)
0077 ENDDO
0078 Zf(Nr+1) = Zf(Nr) + drF(Nr)
0079
0080
0081 ZZf(1) = 0. _d 0
f61c9be03a Ryan*0082 ZZc(1) = 0.5 _d 0 * dZZf(1)
108a00eab9 Ryan*0083
f61c9be03a Ryan*0084 DO kk=2,NZZ+1
108a00eab9 Ryan*0085 ZZf(kk) = ZZf(kk-1) + dZZf(kk-1)
f61c9be03a Ryan*0086 ZZc(kk-1) = 0.5 _d 0 * (ZZf(kk) + ZZf(kk-1))
108a00eab9 Ryan*0087 ENDDO
0088
0089
0090 k = 1
0091 DO kk=1,NZZ
0092
0093 IF ( ZZc(kk) .LT. Zc(1) ) THEN
0094 MapIndex(kk) = 1
0095 MapFact(kk) = 1.0 _d 0
0096
0097 ELSE IF ( (ZZc(kk) .GE. Zc(Nr)) .OR. (k .EQ. Nr) ) THEN
0098 MapIndex(kk) = Nr - 1
0099 MapFact(kk) = 0.0 _d 0
0100
0101 ELSE IF ( (ZZc(kk) .GE. Zc(k))
0102 & .AND. (ZZc(kk) .LT. Zc(Nr)) ) THEN
0103
0104 DO WHILE (ZZc(kk) .GE. Zc(k+1))
0105 k = k + 1
0106 ENDDO
0107
0108 MapIndex(kk) = k
0109 MapFact(kk) = 1.0 - (( ZZc(kk) - Zc(k) ) / drC(k+1))
0110 ELSE
0111
0112 WRITE(msgBuf,'(A,I4,A,I4,A,1E14.6,A,2E14.6)')
0113 & 'S/R LAYERS_INIT_FIXED: kk=', kk, ', k=', k,
0114 & ', ZZc(kk)=', ZZc(kk),' , Zc(k)=',Zc(k)
0115 CALL PRINT_ERROR( msgBuf, myThid )
0116 STOP 'ABNORMAL END: S/R LAYERS_INIT_FIXED'
14cf1d4767 Jean*0117 ENDIF
108a00eab9 Ryan*0118
0119
e643b51506 Jean*0120 IF ( ZZc(kk).LT.Zf(MapIndex(kk)+1) ) THEN
108a00eab9 Ryan*0121 CellIndex(kk) = MapIndex(kk)
0122 ELSE
0123 CellIndex(kk) = MapIndex(kk)+1
14cf1d4767 Jean*0124 ENDIF
108a00eab9 Ryan*0125 ENDDO
0126
8830b8f970 Jean*0127 IF ( debugLevel .GE. debLevB ) THEN
108a00eab9 Ryan*0128 CALL PRINT_MESSAGE( 'LAYERS_INIT_FIXED Debugging:',
8830b8f970 Jean*0129 & standardMessageUnit, SQUEEZE_RIGHT, myThid )
108a00eab9 Ryan*0130 DO kk=1,NZZ
0131 WRITE(msgBuf,'(A,1F6.1,A,I3,A,I3,A,I3,A,1F6.4,A,I3,A,I3)')
0132 & '// ZZc=', ZZc(kk),
0133 & ', MapIndex(',kk,')=',MapIndex(kk),
0134 & ', MapFact(',kk,')=',MapFact(kk),
0135 & ', CellIndex(',kk,')=',CellIndex(kk)
0136 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
8830b8f970 Jean*0137 & SQUEEZE_RIGHT, myThid )
108a00eab9 Ryan*0138 ENDDO
14cf1d4767 Jean*0139 ENDIF
108a00eab9 Ryan*0140
f61c9be03a Ryan*0141
406891c1a3 Gael*0142 DO iLa=1,layers_maxNum
0143 IF ( layers_num(iLa).NE.0 ) THEN
0144 WRITE(tmpName,'(A7,I1,A3)') 'layers',iLa,layers_name(iLa)
f8fe443de1 Davi*0145 CALL WRITE_GLVEC_RL( tmpName, ' ',layers_bounds(1,iLa),1+Nlayers,
f61c9be03a Ryan*0146 & -1, myThid )
406891c1a3 Gael*0147 ENDIF
0148 ENDDO
50d8304171 Ryan*0149
0150
0151 #ifdef LAYERS_THERMODYNAMICS
0152 DO iLa=1,layers_maxNum
0153 IF ( layers_num(iLa).NE.0 ) THEN
0154 DO k=1,Nlayers
0155 layers_bounds_w(k,iLa) = 0.5 _d 0 * (
0156 & layers_bounds(k+1,iLa) +
0157 & layers_bounds(k,iLa) )
0158 ENDDO
0159 DO k=1,Nlayers-1
0160 layers_recip_delta(k,iLa) = 1.0 _d 0 / (
0161 & layers_bounds_w(k+1,iLa) -
a3d5c99c9c Ryan*0162 & layers_bounds_w(k,iLa) )
50d8304171 Ryan*0163 ENDDO
0164 ENDIF
0165 ENDDO
0166 #endif /* LAYERS_THERMODYNAMICS */
f61c9be03a Ryan*0167
6e34151e15 Gael*0168 #ifdef ALLOW_DIAGNOSTICS
0169 IF ( useDiagnostics ) THEN
0170 CALL LAYERS_DIAGNOSTICS_INIT( myThid )
0171 ENDIF
0172 #endif
0173
108a00eab9 Ryan*0174 RETURN
0175 END