% 表題 対流雲層 p2ccll.F
%
% 履歴  94/01/20 保坂征宏
\Drireki{94/01/20 保坂征宏}
%

\section{サブルーチンの説明 : 対流雲層 \verb!p2ccll!}

\subsection{CCLLEV}
\label{ccllev}
\begin{itemize}
  \item 機能 
    \begin{quote}
      対流雲層のレベルを調べる. 
    \end{quote}

  \item 呼び出し方法
       \begin{verbatim}
      SUBROUTINE CCLLEV     !" 対流雲層
     O         ( GDTC  , GDQC  , KBTM  , KTOP  ,
     I           GDT   , GDQ   , GDP   , GDZ   ,
     I           IREUSE,
     W           ADIAF                           )
       \end{verbatim}

  \item パラメタの説明
       \begin{verbatim}
*
*   [OUTPUT] 
      REAL       GDTC  ( IDIM*JDIM, KMAX )   !" 雲の温度
      REAL       GDQC  ( IDIM*JDIM, KMAX )   !" 雲の比湿
      INTEGER    KBTM  ( IDIM*JDIM )         !" 雲底レベル
      INTEGER    KTOP  ( IDIM*JDIM )         !" 雲頂レベル
*
*   [INPUT] 
      REAL       GDT   ( IDIM*JDIM, KMAX )   !" 温度  Ｔ
      REAL       GDQ   ( IDIM*JDIM, KMAX )   !" 比湿  ｑ
      REAL       GDP   ( IDIM*JDIM, KMAX )   !" 気圧  Ｐ
      REAL       GDZ   ( IDIM*JDIM, KMAX )   !" 高度  Ｚ 
*
      INTEGER    IREUSE                      !" 前値再利用フラグ
*
*   [WORK] 
      REAL       ADIAF ( IDIM*JDIM, KMAX )   !" 乾燥断熱降温率
*
*  ネームリスト
      NAMELIST   NMCCLL
*
        \end{verbatim}

  \item 備考
     \begin{enumerate}
       \item デフォルトでは対流雲層の下限レベルは 1 , 
             上限レベルは \verb!KMAX! である.
             また, エントレインはしない. 
       \item 例えば Kuo スキームなどでこのスキームを用いて
             雲層を調べた直後に, 
             浅い積雲スキームでこのスキームを用いて
             雲層を調べる必要があることもあろう. 
             そのような場合に二度計算するのを避けるために 
             IREUSE という変数が用意され,  
             前値再利用ができるように設計しようとはしている. 
             しかしながら, 
             Kuo 以外のスキームを選択する場合のことも考えてであろうか, 
             現状では必ず雲層のレベルを計算している. 
             これを避けるためには前値再利用の IF 節に RETURN 文
             を入れる必要がある. 
       \item 計算の手順は以下の通り. 
         \begin{enumerate}
           \item 

<<<<<<<<<<< ここまで 94/01/20 pochaka >>>>>>>>>>>>>

             
             




*
*"         < 1. ファクター計算 >
*
      AKAPPA = RAIR / CP
      DO 1100 K = 1, KMAX-1
         DO 1100 IJ = 1, IDIM*JDIM
            ADIAF( IJ,K ) = ( GDP( IJ,K+1 )/GDP( IJ,K ) ) **AKAPPA
 1100 CONTINUE
*
      ELF    = EL / CP
*
*"         < 2. 初期設定 >
*
      DO 2100 IJ = 1, IDIM*JDIM
         KBTM  ( IJ ) = KUNDEF
         KTOP  ( IJ ) = KUNDEF
 2100 CONTINUE
*
      DO 2200 IJ = 1, IDIM*JDIM
         GDTC( IJ,1 ) = GDT( IJ,1 )
         GDQC( IJ,1 ) = GDQ( IJ,1 )
 2200 CONTINUE
*
*"         < 3. 雲底・雲頂 >
*
      DO 3100 K = 2, KMAX
         DO 3110 IJ = 1, IDIM*JDIM
*
            IF ( KBTM( IJ ) .EQ. KUNDEF ) THEN
*
*"               < 3.1 持ち上げ凝結高度 >
*
               GDTC( IJ,K ) = GDTC( IJ,K-1 ) * ADIAF( IJ,K-1 )
               GDQC( IJ,K ) = GDQC( IJ,K-1 )
               QSAT         = FQSAT( GDTC( IJ,K ),GDP( IJ,K ) )
*
               IF (  ( GDQC( IJ,K ) .GE. QSAT ).AND.
     &               ( K .GE. KBMIN )          .AND.
     &               ( K .LE. KBMAX )                ) THEN
                  KBTM( IJ )   = K
                  GDTC( IJ,K ) = GDT( IJ,K )
                  GDQC( IJ,K ) = FQSAT( GDTC( IJ,K ), GDP( IJ,K ) )
               ENDIF
*
            ELSE IF ( KTOP( IJ ) .EQ. KUNDEF )  THEN
*
*"               < 3.2 湿潤上昇 >
*
               RENTR        = ENTR * ( GDZ( IJ,K ) - GDZ( IJ,K-1 ) )
               RENTR        = MIN( RENTR, 1. )
*
               GDTC( IJ,K ) = ( 1.-RENTR ) 
     &                         * GDTC( IJ,K-1 ) * ADIAF( IJ,K-1 )
     &                       + RENTR 
     &                         * ( GDT( IJ,K-1 ) + GDT( IJ,K ) )/2.  
               GDQC( IJ,K ) = ( 1.  -RENTR ) * GDQC( IJ,K-1 )
     &                       + RENTR 
     &                         * ( GDQ( IJ,K-1 ) + GDQ( IJ,K ) )/2.  
*
               QSAT         = FQSAT( GDTC( IJ,K ),GDP( IJ,K ) )
*
               IF ( GDQC( IJ,K ) .GT. QSAT ) THEN
                  DQSAT        = FDQSAT( GDTC( IJ,K ), QSAT  )
                  QEXE         = GDQC ( IJ,K ) - QSAT
                  DT           = ELF * QEXE / ( 1. + ELF * DQSAT )
                  DQ           = DQSAT * DT
*
                  GDTC( IJ,K ) = GDTC( IJ,K ) + DT
                  GDQC( IJ,K ) = QSAT         + DQ
               ENDIF
*
*"               < 3.3 安定度チェック >
*
               IF ( GDTC( IJ,K ) .LT. GDT( IJ,K )-EPST ) THEN
*
                  IF ( K .EQ. KBTM( IJ )+1  ) THEN
                     KBTM( IJ   ) = K
                     GDTC( IJ,K ) = GDT( IJ,K )
                     GDQC( IJ,K ) = FQSAT( GDTC( IJ,K ), GDP( IJ,K ) )
                  ELSE
                     KTOP( IJ ) = K - 1
                  ENDIF
*
               ELSE IF ( K .EQ. KMAX ) THEN
                  KTOP( IJ ) = K
               ENDIF
*
            ENDIF
*
 3110    CONTINUE
 3100 CONTINUE
*
      DO 3300 IJ = 1, IDIM*JDIM
         IF ( KTOP( IJ ) .EQ. KUNDEF ) THEN
            KBTM( IJ ) = KUNDEF
         ENDIF
*
         KBTMZ ( IJ ) = KBTM ( IJ )
         KTOPZ ( IJ ) = KTOP ( IJ )
 3300 CONTINUE
*
      RETURN
      END
