Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:35:02 2011
FILE NAME: surfaceflux_bulk.f90
PROGRAM NAME: surfaceflux_bulk
DIAGNOSTIC LIST

  LINE  LEVEL( NO.): DIAGNOSTIC MESSAGE

   162  vec  (   3): Unvectorized loop.
   194  vec  (   3): Unvectorized loop.
   225  vec  (   3): Unvectorized loop.
   326  opt  (  11): Fused array assignments. :line 326 - 327
   326  vec  (   4): Vectorized array expression.
   326  vec  (   4): Vectorized array expression.
   328  vec  (   4): Vectorized array expression.
   328  vec  (   4): Vectorized array expression.
   331  vec  (   4): Vectorized array expression.
   331  vec  (   4): Vectorized array expression.
   340  vec  (   4): Vectorized array expression.
   340  vec  (   4): Vectorized array expression.
   349  vec  (   4): Vectorized array expression.
   349  vec  (   4): Vectorized array expression.
   352  vec  (   4): Vectorized array expression.
   353  vec  (   3): Unvectorized loop.
   354  vec  (   4): Vectorized array expression.
   354  vec  (   4): Vectorized array expression.
   364  opt  (  11): Fused array assignments. :line 364 - 371
   364  vec  (   4): Vectorized array expression.
   364  vec  (   4): Vectorized array expression.
   372  vec  (   4): Vectorized array expression.
   377  vec  (   4): Vectorized array expression.
   377  vec  (   4): Vectorized array expression.
   379  vec  (   4): Vectorized array expression.
   379  vec  (   4): Vectorized array expression.
   381  opt  (  11): Fused array assignments. :line 381 - 388
   381  vec  (   4): Vectorized array expression.
   381  vec  (   4): Vectorized array expression.
   389  vec  (   3): Unvectorized loop.
   390  vec  (   4): Vectorized array expression.
   390  vec  (   4): Vectorized array expression.
   392  opt  (  11): Fused array assignments. :line 392 - 393
   392  vec  (   4): Vectorized array expression.
   392  vec  (   4): Vectorized array expression.
   399  vec  (   4): Vectorized array expression.
   400  vec  (   4): Vectorized array expression.
   401  opt  (  11): Fused array assignments. :line 401 - 402
   401  vec  (   4): Vectorized array expression.
   401  vec  (   4): Vectorized array expression.
   404  vec  (   4): Vectorized array expression.
   404  vec  (   4): Vectorized array expression.
   405  vec  (   3): Unvectorized loop.
   406  vec  (   4): Vectorized array expression.
   406  vec  (   4): Vectorized array expression.
   408  opt  (  11): Fused array assignments. :line 408 - 409
   408  vec  (   4): Vectorized array expression.
   408  vec  (   4): Vectorized array expression.
   414  vec  (   3): Unvectorized loop.
   423  vec  (   3): Unvectorized loop.
   428  vec  (   4): Vectorized array expression.
   428  vec  (   4): Vectorized array expression.
   431  vec  (   4): Vectorized array expression.
   431  vec  (   4): Vectorized array expression.
   433  vec  (   4): Vectorized array expression.
   433  vec  (   4): Vectorized array expression.
   435  vec  (   3): Unvectorized loop.
   436  vec  (   4): Vectorized array expression.
   436  vec  (   4): Vectorized array expression.
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:35:02 2011
FILE NAME: surfaceflux_bulk.f90
PROGRAM NAME: surfaceflux_bulk
TRANSFORMATION LIST

  LINE                   FORTRAN STATEMENT

     1  != Module HeatFlux
     2  !
     3  ! Authors::   ODAKA Masatsugu, TAKAHASHI Yoshiyuki
     4  ! Version::   $Id: surfaceflux_bulk.f90,v 1.13 2011-10-10 15:44:24 yot Exp $
     5  ! Tag Name::  $Name: arare5-20111010 $
     6  ! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved.
     7  ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8  !
     9  !== Overview
    10  !
    11  !
    12  ! *** Explanation below are obsolete. (YOT, 2011/09/01) ***
    13  !
    14  !
    15  ! 下部境界からのフラックスによる温度と凝結成分の変化率をバルク方法に
    16  ! 基づいて計算するモジュール. これは中島 (1994) で用いられた方法である.
    17  !
    18  ! 熱フラックスを Fh と凝結物質のフラックス Fq とすると, 温度と凝結物質
    19  ! の変化率 H, Q は
    20  !
    21  !   H = Fh/Δz_1
    22  !   Q = Fq/Δz_1
    23  !
    24  ! と表される. ここで Δz_1 は最下層の格子間隔である.
    25  !
    26  ! 熱フラックス Fh と凝結物質のフラックス Fq は以下の式にしたがって
    27  ! 計算する.
    28  !
    29  !   Fh = - Cdρ|V| * (π_1θ_1 - T_sfc)
    30  !   Fh = - Cdρ|V| * (Q_1 - Q*(T_sfc))
    31  !
    32  ! ここで θ_1, Q_1, π_1 は最下層の温度と凝結物質の混合比および無次元
    33  ! 圧力関数, T_sfc は下部境界の温度, Q*(T_sfc) は T_sfc で決まる飽和混
    34  ! 合比である.
    35  !
    36  ! バルク係数 Cd は一定とする. 無次元圧力関数 π_1 は基本場の値を用いる.
    37  ! 風速値 |V| は
    38  !
    39  !   V = ( V^2 + V_0^2 )^(1/2)
    40  !
    41  ! と計算する.
    42  !
    43  !== Error Handling
    44  !
    45  !== Bugs
    46  !
    47  !== Note
    48  !
    49  !
    50  !== Future Plans
    51  !
    52  !
    53  
    54  module Surfaceflux_bulk
    55    !
    56    !下部境界でのフラックスの計算モジュール
    57    !
    58  
    59    !モジュール読み込み
    60    use dc_types, only: DP, STRING
    61    use dc_iounit,  only: FileOpen
    62    use dc_message, only: MessageNotify
    63    use gtool_historyauto, only: HistoryAutoAddVariable, HistoryAutoPut
    64  
    65    use mpi_wrapper,only: myrank
    66    use gridset,  only: imin,         & !x 方向の配列の下限
    67      &                 imax,         & !x 方向の配列の上限
    68      &                 jmin,         & !y 方向の配列の下限
    69      &                 jmax,         & !y 方向の配列の上限
    70      &                 kmin,         & !z 方向の配列の下限
    71      &                 kmax,         & !z 方向の配列の上限
    72      &                 nx, ny, nz, ncmax
    73    use axesset, only:  z_dz,         & !z 方向の格子点間隔
    74      &                 xyz_avr_pyz,  &
    75      &                 xyz_avr_xqz,  &
    76      &                 pyz_avr_xyz,  &
    77      &                 xqz_avr_xyz
    78    use basicset, only: xyz_ExnerBZ,  & !エクスナー関数の基本場
    79      &                 xyz_PressBZ,  & !
    80      &                 xyz_PTempBZ,  & !温位の基本場
    81      &                 xyz_TempBZ,   & !
    82      &                 xyzf_QMixBZ,  & !温位の基本場
    83      &                 xyz_DensBZ      !基本場の密度
    84    use constants,only: MolWtDry, PressBasis, TempSfc, PressSfc, CpDry, GasRDry
    85    use composition,only : IdxCC, IdxCG, SpcWetID, CondNum, MolWtWet, SpcWetSymbol
    86    use chemcalc,only : SvapPress
    87    use namelist_util, only: namelist_filename
    88    use timeset, only:  TimeN
    89    use setmargin,only: SetMargin_xyz, SetMargin_xyzf, SetMargin_pyz, SetMargin_xqz
    90  
    91  
    92    !暗黙の型宣言禁止
    93    implicit none
    94  
    95    !属性の指定
    96    private
    97  
    98    !関数を public に設定
    99    public surfaceflux_bulk_init
   100    public surfaceflux_bulk_forcing
   101  
   102    !変数定義
   103    real(DP), save  :: Bulk = 1.5d-3    !熱・運動量フラックスのバルク係数
   104  
   105  
   106    real(DP), save  :: Vel0 = 0.0d0    !下層での水平速度嵩上げ値
   107  
   108  
   109    character(*), parameter:: module_name = 'surfaceflux_bulk'
   110                                ! モジュールの名称.
   111                                ! Module name
   112  
   113  contains
   114  !!!------------------------------------------------------------------------!!!
   115    subroutine Surfaceflux_Bulk_init
   116      !
   117      !NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う.
   118      !
   119  
   120      !暗黙の型宣言禁止
   121      implicit none
   122  
   123      !内部変数
   124      integer    :: l, unit
   125  
   126      !---------------------------------------------------------------
   127      ! NAMELIST から情報を取得
   128      !
   129      NAMELIST /surfaceflux_bulk_nml/ Bulk, Vel0
   130  
   131      call FileOpen(unit, file=namelist_filename, mode='r')
   132      read(unit, NML=surfaceflux_bulk_nml)
   133      close(unit)
   134  
   135      if (myrank == 0) then
   136        call MessageNotify( "M", module_name, "Bulk = %f", d=(/Bulk/) )
   137        call MessageNotify( "M", module_name, "Vel0 = %f", d=(/Vel0/))
   138      end if
   139  
   140  
   141      call HistoryAutoAddVariable(      &
   142        & varname='PTempSfcFlux',       &
   143        & dims=(/'x','y','t'/),         &
   144        & longname='surface potential temperature flux (heat flux divided by density and specific heat)', &
   145        & units='K.m.s-1',             &
   146        & xtype='float')
   147  
   148      call HistoryAutoAddVariable(  &
   149        & varname='VelXSfcFlux',    &
   150        & dims=(/'x','y','t'/),     &
   151        & longname='surface flux of x-component of velocity (momentum flux divided by density)', &
   152        & units='m2.s-2',           &
   153        & xtype='float')
   154  
   155      call HistoryAutoAddVariable(  &
   156        & varname='VelYSfcFlux',    &
   157        & dims=(/'x','y','t'/),     &
   158        & longname='surface flux of y-component of velocity (momentum flux divided by density)', &
   159        & units='m2.s-2',           &
   160        & xtype='float')
   161  
   162      do l = 1, ncmax
   163        call HistoryAutoAddVariable(  &
   164          & varname=trim(SpcWetSymbol(l))//'_SfcFlux', &
   165          & dims=(/'x','y','t'/),     &
   166          & longname='surface flux of '          &
   167          &           //trim(SpcWetSymbol(l))//' mixing ratio (mass flux divided by density)',  &
   168          & units='m.s-1',    &
   169          & xtype='float')
   170      end do
   171  
   172  
   173      call HistoryAutoAddVariable(  &
   174        & varname='PTempSfc',         &
   175        & dims=(/'x','y','z','t'/), &
   176        & longname='potential temperature tendency by surface flux', &
   177        & units='K.s-1',            &
   178        & xtype='float')
   179  
   180      call HistoryAutoAddVariable(  &
   181        & varname='VelXSfc',         &
   182        & dims=(/'x','y','z','t'/), &
   183        & longname='x-component velocity tendency by surface flux', &
   184        & units='m.s-2',            &
   185        & xtype='float')
   186  
   187      call HistoryAutoAddVariable(  &
   188        & varname='VelYSfc',         &
   189        & dims=(/'x','y','z','t'/), &
   190        & longname='y-component velocity tendency by surface flux', &
   191        & units='m.s-2',            &
   192        & xtype='float')
   193  
   194      do l = 1, ncmax
   195        call HistoryAutoAddVariable(  &
   196          & varname=trim(SpcWetSymbol(l))//'_Sfc', &
   197          & dims=(/'x','y','z','t'/),     &
   198          & longname=trim(SpcWetSymbol(l))//' mixing ratio tendency by surface flux',  &
   199          & units='s-1',    &
   200          & xtype='float')
   201      end do
   202  
   203  
   204      call HistoryAutoAddVariable(       &
   205        & varname='SfcHeatFlux',         &
   206        & dims=(/'x','y','t'/),          &
   207        & longname='surface heat flux',  &
   208        & units='W.m-2',                 &
   209        & xtype='float')
   210  
   211      call HistoryAutoAddVariable(                      &
   212        & varname='SfcXMomFlux',                        &
   213        & dims=(/'x','y','t'/),                         &
   214        & longname='surface x-component momentum flux', &
   215        & units='kg.m-2.s-1',                           &
   216        & xtype='float')
   217  
   218      call HistoryAutoAddVariable(                      &
   219        & varname='SfcYMomFlux',                        &
   220        & dims=(/'x','y','t'/),                         &
   221        & longname='surface y-component momentum flux', &
   222        & units='kg.m-2.s-1',                           &
   223        & xtype='float')
   224  
   225      do l = 1, ncmax
   226        call HistoryAutoAddVariable(                               &
   227          & varname=trim(SpcWetSymbol(l))//'_SfcMassFlux',         &
   228          & dims=(/'x','y','t'/),                              &
   229          & longname=trim(SpcWetSymbol(l))//' surface mass flux',  &
   230          & units='kg.m-2.s-1',                                    &
   231          & xtype='float')
   232      end do
   233  
   234    end subroutine Surfaceflux_Bulk_init
   235  
   236  
   237  !!!------------------------------------------------------------------------!!!
   238    subroutine Surfaceflux_Bulk_forcing( &
   239      &   pyz_VelX, xqz_VelY, xyz_PTemp, xyz_Exner, xyzf_QMix, &
   240      &   pyz_DVelXDt, xqz_DVelYDt, xyz_DPTempDt, xyzf_DQMixDt &
   241      & )
   242      !
   243      ! 下部境界からのフラックスによる温度の変化率を,
   244      ! バルク方法に基づいて計算する.
   245      !
   246  
   247      !暗黙の型宣言禁止
   248      implicit none
   249  
   250      !変数定義
   251      real(DP), intent(in)   :: pyz_VelX(imin:imax,jmin:jmax,kmin:kmax)
   252                                             !水平風速
   253      real(DP), intent(in)   :: xqz_VelY(imin:imax,jmin:jmax,kmin:kmax)
   254                                             !水平風速
   255      real(DP), intent(in)   :: xyz_PTemp(imin:imax,jmin:jmax,kmin:kmax)
   256                                             !温位の擾乱成分
   257      real(DP), intent(in)   :: xyz_Exner(imin:imax,jmin:jmax,kmin:kmax)
   258                                             !温位の擾乱成分
   259      real(DP), intent(in)   :: xyzf_QMix(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   260                                             !温位の擾乱成分
   261      real(DP), intent(inout):: pyz_DVelXDt(imin:imax,jmin:jmax,kmin:kmax)
   262      real(DP), intent(inout):: xqz_DVelYDt(imin:imax,jmin:jmax,kmin:kmax)
   263      real(DP), intent(inout):: xyz_DPTempDt(imin:imax,jmin:jmax,kmin:kmax)
   264      real(DP), intent(inout):: xyzf_DQMixDt(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   265      real(DP)               :: py_VelXflux (imin:imax,jmin:jmax)
   266                                             !運動量フラックス
   267                                             !(strictly speaking, this value is not
   268                                             !momentum flux, but is it divided by density)
   269      real(DP)               :: xq_VelYflux (imin:imax,jmin:jmax)
   270                                             !運動量フラックス
   271                                             !(strictly speaking, this value is not
   272                                             !momentum flux, but is it divided by density)
   273      real(DP)               :: xy_PTempFlux(imin:imax,jmin:jmax)
   274                                             !地表面熱フラックス
   275                                             !(strictly speaking, this value is not
   276                                             !heat flux, but is it divided by density and
   277                                             !specific heat)
   278      real(DP)               :: xyf_QMixFlux(imin:imax,jmin:jmax,ncmax)
   279                                             !物質的フラックス
   280      real(DP)               :: xyz_VelX(imin:imax,jmin:jmax,kmin:kmax)
   281                                             !水平風速 (xyz 格子)
   282      real(DP)               :: xyz_VelY(imin:imax,jmin:jmax,kmin:kmax)
   283                                             !水平風速 (xyz 格子)
   284      real(DP)               :: xyz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   285                                             !水平風速 (xyz 格子)
   286      real(DP)               :: pyz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   287                                             !水平風速 (pyz 格子)
   288      real(DP)               :: xqz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   289                                             !水平風速 (xqz 格子)
   290      real(DP)               :: xyz_PTempAll(imin:imax,jmin:jmax,kmin:kmax)
   291                                             !Total value of potential temperature
   292      real(DP)               :: xyz_TempAll (imin:imax,jmin:jmax,kmin:kmax)
   293                                             !Total value of temperature
   294      real(DP)               :: xyzf_QMixAll(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   295                                             !Total value of mixing ratios
   296      real(DP)               :: xy_DPTempDtBulk(imin:imax,jmin:jmax)
   297                                          !potential temperature tendency by surface flux
   298      real(DP)               :: xyf_DQMixDtBulk(imin:imax,jmin:jmax, ncmax)
   299                                          !mixing ratio tendency by surface flux
   300      real(DP)               :: py_DVelXDtBulk (imin:imax,jmin:jmax)
   301                                          !x-component velocity tendency by surface flux
   302      real(DP)               :: xq_DVelYDtBulk (imin:imax,jmin:jmax)
   303                                          !y-component velocity tendency by surface flux
   304  
   305      real(DP)               :: xyz_DPTempDtBulk(imin:imax,jmin:jmax,kmin:kmax)
   306                                          ! variable for output
   307      real(DP)               :: xyzf_DQMixDtBulk(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   308                                          ! variable for output
   309      real(DP)               :: pyz_DVelXDtBulk (imin:imax,jmin:jmax,kmin:kmax)
   310                                          ! variable for output
   311      real(DP)               :: xqz_DVelYDtBulk (imin:imax,jmin:jmax,kmin:kmax)
   312                                          ! variable for output
   313  
   314      real(DP)               :: ExnerBZSfc
   315                                          ! Basic state Exner function at the surface
   316      real(DP)               :: xy_PressSfc(imin:imax,jmin:jmax)
   317                                          ! Total pressure at the surface
   318  
   319      integer                :: kz            !配列添字
   320      integer                :: s             !ループ変数
   321  
   322      ! 初期化
   323      !
   324      kz = 1
   325  
   326      xyz_PTempAll  = xyz_PTemp + xyz_PTempBZ
     .        if (jmax + 1 - jmin .gt. 0) then                                  
     .           J1 = and(jmax + 1 - jmin,1)                                    
     .  !CDIR    NODEP                                                          
     .           do t1235 = 1, J1                                               
     .  !CDIR       NODEP                                                       
     .              do t1237 = 1, imax + 1 - imin                               
     .                 xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235-1+        
     .       1            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3) =      
     .       2            xyz_ptemp(t312+t1237-1,t1235-1+t314,t1233+t316) +     
     .       3            xyz_ptempbz(xyz_ptempbz.DSC.L1+t1237-1,t1235-1+       
     .       4            xyz_ptempbz.DSC.L2,t1233+xyz_ptempbz.DSC.L3)          
     .                 xyz_tempall(xyz_tempall.DSC.L1+t1237-1,t1235-1+          
     .       1            xyz_tempall.DSC.L2,t1233+xyz_tempall.DSC.L3) = (      
     .       2            xyz_exner(t322+t1237-1,t1235-1+t324,t1233+t326)+      
     .       3            xyz_exnerbz(xyz_exnerbz.DSC.L1+t1237-1,t1235-1+       
     .       4            xyz_exnerbz.DSC.L2,t1233+xyz_exnerbz.DSC.L3))*        
     .       5            xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235-1+     
     .       6            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3)        
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1235 = J1 + 1, jmax + 1 - jmin, 2                          
     .  !CDIR       NODEP                                                       
     .              do t1237 = 1, imax + 1 - imin                               
     .                 xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235-1+        
     .       1            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3) =      
     .       2            xyz_ptemp(t312+t1237-1,t1235-1+t314,t1233+t316) +     
     .       3            xyz_ptempbz(xyz_ptempbz.DSC.L1+t1237-1,t1235-1+       
     .       4            xyz_ptempbz.DSC.L2,t1233+xyz_ptempbz.DSC.L3)          
     .                 xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235+          
     .       1            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3) =      
     .       2            xyz_ptemp(t312+t1237-1,t1235+t314,t1233+t316) +       
     .       3            xyz_ptempbz(xyz_ptempbz.DSC.L1+t1237-1,t1235+         
     .       4            xyz_ptempbz.DSC.L2,t1233+xyz_ptempbz.DSC.L3)          
     .                 xyz_tempall(xyz_tempall.DSC.L1+t1237-1,t1235-1+          
     .       1            xyz_tempall.DSC.L2,t1233+xyz_tempall.DSC.L3) = (      
     .       2            xyz_exner(t322+t1237-1,t1235-1+t324,t1233+t326)+      
     .       3            xyz_exnerbz(xyz_exnerbz.DSC.L1+t1237-1,t1235-1+       
     .       4            xyz_exnerbz.DSC.L2,t1233+xyz_exnerbz.DSC.L3))*        
     .       5            xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235-1+     
     .       6            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3)        
     .                 xyz_tempall(xyz_tempall.DSC.L1+t1237-1,t1235+            
     .       1            xyz_tempall.DSC.L2,t1233+xyz_tempall.DSC.L3) = (      
     .       2            xyz_exner(t322+t1237-1,t1235+t324,t1233+t326)+        
     .       3            xyz_exnerbz(xyz_exnerbz.DSC.L1+t1237-1,t1235+         
     .       4            xyz_exnerbz.DSC.L2,t1233+xyz_exnerbz.DSC.L3))*        
     .       5            xyz_ptempall(xyz_ptempall.DSC.L1+t1237-1,t1235+       
     .       6            xyz_ptempall.DSC.L2,t1233+xyz_ptempall.DSC.L3)        
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   327      xyz_TempAll   = (xyz_Exner + xyz_ExnerBZ) * xyz_PTempAll
   328      xyzf_QMixAll  = xyzf_QMix + xyzf_QMixBZ
     .        if (jmax + 1 - jmin .gt. 0) then                                  
     .           J2 = and(jmax + 1 - jmin,3)                                    
     .  !CDIR    NODEP                                                          
     .           do t1264 = 1, J2                                               
     .  !CDIR       NODEP                                                       
     .              do t1266 = 1, imax + 1 - imin                               
     .                 xyzf_qmixall(xyzf_qmixall.DSC.L1+t1266-1,t1264-1+        
     .       1            xyzf_qmixall.DSC.L2,t1262+xyzf_qmixall.DSC.L3,t1260+1)
     .       2             = xyzf_qmix(t332+t1266-1,t1264-1+t334,t1262+t336,    
     .       3            t1260+1) + xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t1266-1,    
     .       4            t1264-1+xyzf_qmixbz.DSC.L2,t1262+xyzf_qmixbz.DSC.L3,  
     .       5            t1260+xyzf_qmixbz.DSC.L4)                             
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1264 = J2 + 1, jmax + 1 - jmin, 4                          
     .  !CDIR       NODEP                                                       
     .              do t1266 = 1, imax + 1 - imin                               
     .                 xyzf_qmixall(xyzf_qmixall.DSC.L1+t1266-1,t1264-1+        
     .       1            xyzf_qmixall.DSC.L2,t1262+xyzf_qmixall.DSC.L3,t1260+1)
     .       2             = xyzf_qmix(t332+t1266-1,t1264-1+t334,t1262+t336,    
     .       3            t1260+1) + xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t1266-1,    
     .       4            t1264-1+xyzf_qmixbz.DSC.L2,t1262+xyzf_qmixbz.DSC.L3,  
     .       5            t1260+xyzf_qmixbz.DSC.L4)                             
     .                 xyzf_qmixall(xyzf_qmixall.DSC.L1+t1266-1,t1264+          
     .       1            xyzf_qmixall.DSC.L2,t1262+xyzf_qmixall.DSC.L3,t1260+1)
     .       2             = xyzf_qmix(t332+t1266-1,t1264+t334,t1262+t336,t1260+
     .       3            1) + xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t1266-1,t1264+    
     .       4            xyzf_qmixbz.DSC.L2,t1262+xyzf_qmixbz.DSC.L3,t1260+    
     .       5            xyzf_qmixbz.DSC.L4)                                   
     .                 xyzf_qmixall(xyzf_qmixall.DSC.L1+t1266-1,t1264+1+        
     .       1            xyzf_qmixall.DSC.L2,t1262+xyzf_qmixall.DSC.L3,t1260+1)
     .       2             = xyzf_qmix(t332+t1266-1,t1264+1+t334,t1262+t336,    
     .       3            t1260+1) + xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t1266-1,    
     .       4            t1264+1+xyzf_qmixbz.DSC.L2,t1262+xyzf_qmixbz.DSC.L3,  
     .       5            t1260+xyzf_qmixbz.DSC.L4)                             
     .                 xyzf_qmixall(xyzf_qmixall.DSC.L1+t1266-1,t1264+2+        
     .       1            xyzf_qmixall.DSC.L2,t1262+xyzf_qmixall.DSC.L3,t1260+1)
     .       2             = xyzf_qmix(t332+t1266-1,t1264+2+t334,t1262+t336,    
     .       3            t1260+1) + xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t1266-1,    
     .       4            t1264+2+xyzf_qmixbz.DSC.L2,t1262+xyzf_qmixbz.DSC.L3,  
     .       5            t1260+xyzf_qmixbz.DSC.L4)                             
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   329  
   330      ExnerBZSfc    = (PressSfc / PressBasis) ** (GasRDry / CpDry)
   331      xy_PressSfc   = PressBasis * ( ExnerBZSfc + xyz_Exner(:,:,kz) )**(CpDry / GasRDry)
     .        if (jmax + 1 - jmin .gt. 0) then                                  
     .           J3 = and(jmax + 1 - jmin,3)                                    
     .  !CDIR    NODEP                                                          
     .           do t1280 = 1, J3                                               
     .  !CDIR       NODEP                                                       
     .              do t1282 = 1, imax + 1 - imin                               
     .                 xy_presssfc(xy_presssfc.DSC.L1+t1282-1,t1280-1+          
     .       1            xy_presssfc.DSC.L2) = pressbasis*(exnerbzsfc +        
     .       2            xyz_exner(t322+t1282-1,t1280-1+t324,1))**(cpdry/      
     .       3            gasrdry)                                              
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1280 = J3 + 1, jmax + 1 - jmin, 4                          
     .  !CDIR       NODEP                                                       
     .              do t1282 = 1, imax + 1 - imin                               
     .                 xy_presssfc(xy_presssfc.DSC.L1+t1282-1,t1280-1+          
     .       1            xy_presssfc.DSC.L2) = pressbasis*(exnerbzsfc +        
     .       2            xyz_exner(t322+t1282-1,t1280-1+t324,1))**(cpdry/      
     .       3            gasrdry)                                              
     .                 xy_presssfc(xy_presssfc.DSC.L1+t1282-1,t1280+            
     .       1            xy_presssfc.DSC.L2) = pressbasis*(exnerbzsfc +        
     .       2            xyz_exner(t322+t1282-1,t1280+t324,1))**(cpdry/gasrdry)
     .                 xy_presssfc(xy_presssfc.DSC.L1+t1282-1,t1280+1+          
     .       1            xy_presssfc.DSC.L2) = pressbasis*(exnerbzsfc +        
     .       2            xyz_exner(t322+t1282-1,t1280+1+t324,1))**(cpdry/      
     .       3            gasrdry)                                              
     .                 xy_presssfc(xy_presssfc.DSC.L1+t1282-1,t1280+2+          
     .       1            xy_presssfc.DSC.L2) = pressbasis*(exnerbzsfc +        
     .       2            xyz_exner(t322+t1282-1,t1280+2+t324,1))**(cpdry/      
     .       3            gasrdry)                                              
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   332                      ! Perturbation component of Exner function at the surface is assumed
   333                      ! to be same as that at the lowest layer. (YOT, 2011/09/03)
   334  
   335  
   336      ! Velocities at xyz grid points are calculated.
   337      xyz_VelX = xyz_avr_pyz(pyz_VelX)
   338      xyz_VelY = xyz_avr_xqz(xqz_VelY)
   339  
   340      xyz_AbsVel = SQRT( xyz_VelX**2 + xyz_VelY**2 + Vel0**2 )
     .        if (t226 + 1 - t227 .gt. 0) then                                  
     .           J4 = and(t226 + 1 - t227,3)                                    
     .  !CDIR    NODEP                                                          
     .           do t1290 = 1, J4                                               
     .  !CDIR       NODEP                                                       
     .              do t1292 = 1, t224 + 1 - t225                               
     .                 xyz_absvel(xyz_absvel.DSC.L1+t1292-1,t1290-1+            
     .       1            xyz_absvel.DSC.L2,t1288+xyz_absvel.DSC.L3) = dsqrt(   
     .       2            xyz_velx(t225+t1292-1,t1290-1+t227,t1288+t229)**2+    
     .       3            xyz_vely(t235+t1292-1,t1290-1+t237,t1288+t239)**2+vel0
     .       4            **2)                                                  
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1290 = J4 + 1, t226 + 1 - t227, 4                          
     .  !CDIR       NODEP                                                       
     .              do t1292 = 1, t224 + 1 - t225                               
     .                 xyz_absvel(xyz_absvel.DSC.L1+t1292-1,t1290-1+            
     .       1            xyz_absvel.DSC.L2,t1288+xyz_absvel.DSC.L3) = dsqrt(   
     .       2            xyz_velx(t225+t1292-1,t1290-1+t227,t1288+t229)**2+    
     .       3            xyz_vely(t235+t1292-1,t1290-1+t237,t1288+t239)**2+vel0
     .       4            **2)                                                  
     .                 xyz_absvel(xyz_absvel.DSC.L1+t1292-1,t1290+              
     .       1            xyz_absvel.DSC.L2,t1288+xyz_absvel.DSC.L3) = dsqrt(   
     .       2            xyz_velx(t225+t1292-1,t1290+t227,t1288+t229)**2+      
     .       3            xyz_vely(t235+t1292-1,t1290+t237,t1288+t239)**2+vel0**
     .       4            2)                                                    
     .                 xyz_absvel(xyz_absvel.DSC.L1+t1292-1,t1290+1+            
     .       1            xyz_absvel.DSC.L2,t1288+xyz_absvel.DSC.L3) = dsqrt(   
     .       2            xyz_velx(t225+t1292-1,t1290+1+t227,t1288+t229)**2+    
     .       3            xyz_vely(t235+t1292-1,t1290+1+t237,t1288+t239)**2+vel0
     .       4            **2)                                                  
     .                 xyz_absvel(xyz_absvel.DSC.L1+t1292-1,t1290+2+            
     .       1            xyz_absvel.DSC.L2,t1288+xyz_absvel.DSC.L3) = dsqrt(   
     .       2            xyz_velx(t225+t1292-1,t1290+2+t227,t1288+t229)**2+    
     .       3            xyz_vely(t235+t1292-1,t1290+2+t237,t1288+t239)**2+vel0
     .       4            **2)                                                  
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   341      pyz_AbsVel = pyz_avr_xyz(xyz_AbsVel)
   342      xqz_AbsVel = xqz_avr_xyz(xyz_AbsVel)
   343  
   344  
   345      ! Something like heat, mass, and momentum fluxes are calculated.
   346      ! The values below are not heat, mass, and momentum fluxes, but are those divided by
   347      ! by density and specific heat, density, and density, respectively.
   348      !
   349      xy_PTempFlux = - Bulk * xyz_AbsVel(:,:,kz)                                    &
     .        if (xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2 .gt. 0) then        
     .           J5 = and(xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2,3)          
     .  !CDIR    NODEP                                                          
     .           do t1303 = 1, J5                                               
     .  !CDIR       NODEP                                                       
     .              do t1305 = 1, xyz_absvel.DSC.U1 + 1 - xyz_absvel.DSC.L1     
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1305-1,t1303-1+        
     .       1            xy_ptempflux.DSC.L2) = -bulk*xyz_absvel(              
     .       2            xyz_absvel.DSC.L1+t1305-1,t1303-1+xyz_absvel.DSC.L2,1)
     .       3            *(xyz_ptempall(xyz_ptempall.DSC.L1+t1305-1,t1303-1+   
     .       4            xyz_ptempall.DSC.L2,1)-tempsfc/(exnerbzsfc+xyz_exner( 
     .       5            t322+t1305-1,t1303-1+t324,1)))                        
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1303 = J5 + 1, xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2, 4
     .  !CDIR       NODEP                                                       
     .              do t1305 = 1, xyz_absvel.DSC.U1 + 1 - xyz_absvel.DSC.L1     
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1305-1,t1303-1+        
     .       1            xy_ptempflux.DSC.L2) = -bulk*xyz_absvel(              
     .       2            xyz_absvel.DSC.L1+t1305-1,t1303-1+xyz_absvel.DSC.L2,1)
     .       3            *(xyz_ptempall(xyz_ptempall.DSC.L1+t1305-1,t1303-1+   
     .       4            xyz_ptempall.DSC.L2,1)-tempsfc/(exnerbzsfc+xyz_exner( 
     .       5            t322+t1305-1,t1303-1+t324,1)))                        
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1305-1,t1303+          
     .       1            xy_ptempflux.DSC.L2) = -bulk*xyz_absvel(              
     .       2            xyz_absvel.DSC.L1+t1305-1,t1303+xyz_absvel.DSC.L2,1)*(
     .       3            xyz_ptempall(xyz_ptempall.DSC.L1+t1305-1,t1303+       
     .       4            xyz_ptempall.DSC.L2,1)-tempsfc/(exnerbzsfc+xyz_exner( 
     .       5            t322+t1305-1,t1303+t324,1)))                          
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1305-1,t1303+1+        
     .       1            xy_ptempflux.DSC.L2) = -bulk*xyz_absvel(              
     .       2            xyz_absvel.DSC.L1+t1305-1,t1303+1+xyz_absvel.DSC.L2,1)
     .       3            *(xyz_ptempall(xyz_ptempall.DSC.L1+t1305-1,t1303+1+   
     .       4            xyz_ptempall.DSC.L2,1)-tempsfc/(exnerbzsfc+xyz_exner( 
     .       5            t322+t1305-1,t1303+1+t324,1)))                        
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1305-1,t1303+2+        
     .       1            xy_ptempflux.DSC.L2) = -bulk*xyz_absvel(              
     .       2            xyz_absvel.DSC.L1+t1305-1,t1303+2+xyz_absvel.DSC.L2,1)
     .       3            *(xyz_ptempall(xyz_ptempall.DSC.L1+t1305-1,t1303+2+   
     .       4            xyz_ptempall.DSC.L2,1)-tempsfc/(exnerbzsfc+xyz_exner( 
     .       5            t322+t1305-1,t1303+2+t324,1)))                        
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   350        & * ( xyz_PTempAll(:,:,kz) - TempSfc / ( ExnerBZSfc + xyz_Exner(:,:,kz) ) )
   351      !
   352      xyf_QMixFlux = 0.0d0
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t1315 = 1, xyf_qmixflux.DSC.U3*(xyf_qmixflux.DSC.U2 + 1 -      
     .       1   xyf_qmixflux.DSC.L2)*(xyf_qmixflux.DSC.U1 + 1 -                
     .       2   xyf_qmixflux.DSC.L1)                                           
     .           xyf_qmixflux(xyf_qmixflux.DSC.L1+t1315-1,xyf_qmixflux.DSC.L2,1)
     .       1       = 0.0000000000000000e+000                                  
     .        end do                                                            
   353      do s = 1, CondNum
   354        xyf_QMixFlux(:,:,IdxCG(s)) =                                 &
     .        if (xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2 .gt. 0) then        
     .           J6 = and(xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2,3)          
     .  !CDIR    NODEP                                                          
     .           do t1324 = 1, J6                                               
     .  !CDIR       NODEP                                                       
     .              do t1326 = 1, xyz_absvel.DSC.U1 + 1 - xyz_absvel.DSC.L1     
     .                 xyf_qmixflux(xyf_qmixflux.DSC.L1+t1326-1,t1324-1+        
     .       1            xyf_qmixflux.DSC.L2,idxcg(s)) = -bulk*xyz_absvel(     
     .       2            xyz_absvel.DSC.L1+t1326-1,t1324-1+xyz_absvel.DSC.L2,1)
     .       3            *(xyzf_qmixall(xyzf_qmixall.DSC.L1+t1326-1,t1324-1+   
     .       4            xyzf_qmixall.DSC.L2,1,s)-t817/xy_presssfc(            
     .       5            xy_presssfc.DSC.L1+t1326-1,t1324-1+xy_presssfc.DSC.L2)
     .       6            *(molwtwet(idxcg(s))/molwtdry))                       
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1324 = J6 + 1, xyz_absvel.DSC.U2 + 1 - xyz_absvel.DSC.L2, 4
     .              D1 = molwtwet(idxcg(s))                                     
     .  !CDIR       NODEP                                                       
     .              do t1326 = 1, xyz_absvel.DSC.U1 + 1 - xyz_absvel.DSC.L1     
     .                 xyf_qmixflux(xyf_qmixflux.DSC.L1+t1326-1,t1324-1+        
     .       1            xyf_qmixflux.DSC.L2,idxcg(s)) = -bulk*xyz_absvel(     
     .       2            xyz_absvel.DSC.L1+t1326-1,t1324-1+xyz_absvel.DSC.L2,1)
     .       3            *(xyzf_qmixall(xyzf_qmixall.DSC.L1+t1326-1,t1324-1+   
     .       4            xyzf_qmixall.DSC.L2,1,s)-t817/xy_presssfc(            
     .       5            xy_presssfc.DSC.L1+t1326-1,t1324-1+xy_presssfc.DSC.L2)
     .       6            *(D1/molwtdry))                                       
     .                 xyf_qmixflux(xyf_qmixflux.DSC.L1+t1326-1,t1324+          
     .       1            xyf_qmixflux.DSC.L2,idxcg(s)) = -bulk*xyz_absvel(     
     .       2            xyz_absvel.DSC.L1+t1326-1,t1324+xyz_absvel.DSC.L2,1)*(
     .       3            xyzf_qmixall(xyzf_qmixall.DSC.L1+t1326-1,t1324+       
     .       4            xyzf_qmixall.DSC.L2,1,s)-t817/xy_presssfc(            
     .       5            xy_presssfc.DSC.L1+t1326-1,t1324+xy_presssfc.DSC.L2)*(
     .       6            D1/molwtdry))                                         
     .                 xyf_qmixflux(xyf_qmixflux.DSC.L1+t1326-1,t1324+1+        
     .       1            xyf_qmixflux.DSC.L2,idxcg(s)) = -bulk*xyz_absvel(     
     .       2            xyz_absvel.DSC.L1+t1326-1,t1324+1+xyz_absvel.DSC.L2,1)
     .       3            *(xyzf_qmixall(xyzf_qmixall.DSC.L1+t1326-1,t1324+1+   
     .       4            xyzf_qmixall.DSC.L2,1,s)-t817/xy_presssfc(            
     .       5            xy_presssfc.DSC.L1+t1326-1,t1324+1+xy_presssfc.DSC.L2)
     .       6            *(D1/molwtdry))                                       
     .                 xyf_qmixflux(xyf_qmixflux.DSC.L1+t1326-1,t1324+2+        
     .       1            xyf_qmixflux.DSC.L2,idxcg(s)) = -bulk*xyz_absvel(     
     .       2            xyz_absvel.DSC.L1+t1326-1,t1324+2+xyz_absvel.DSC.L2,1)
     .       3            *(xyzf_qmixall(xyzf_qmixall.DSC.L1+t1326-1,t1324+2+   
     .       4            xyzf_qmixall.DSC.L2,1,s)-t817/xy_presssfc(            
     .       5            xy_presssfc.DSC.L1+t1326-1,t1324+2+xy_presssfc.DSC.L2)
     .       6            *(D1/molwtdry))                                       
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   355          &     - Bulk * xyz_AbsVel(:,:,kz)                          &
   356          &       * (                                                &
   357          &            xyzf_QMixAll(:,:,kz,s)                        &
   358          &          - SvapPress( SpcWetID(IdxCC(s)), TempSfc )      &
   359          &             / ( xy_PressSfc )                            &
   360          &             * (MolWtWet(IdxCG(s)) / MolWtDry)            &
   361          &         )
   362      end do
   363      !
   364      py_VelXFlux = - Bulk * pyz_AbsVel(:,:,kz) * pyz_VelX(:,:,kz)
     .        if (t172 + 1 - t173 .gt. 0) then                                  
     .           J7 = and(t172 + 1 - t173,1)                                    
     .  !CDIR    NODEP                                                          
     .           do t1336 = 1, J7                                               
     .  !CDIR       NODEP                                                       
     .              do t1338 = 1, t170 + 1 - t171                               
     .                 py_velxflux(py_velxflux.DSC.L1+t1338-1,t1336-1+          
     .       1            py_velxflux.DSC.L2) = -bulk*pyz_absvel(t171+t1338-1,  
     .       2            t1336-1+t173,1)*pyz_velx(t292+t1338-1,t1336-1+t294,1) 
     .                 xq_velyflux(xq_velyflux.DSC.L1+t1338-1,t1336-1+          
     .       1            xq_velyflux.DSC.L2) = -bulk*xqz_absvel(t181+t1338-1,  
     .       2            t1336-1+t183,1)*xqz_vely(t302+t1338-1,t1336-1+t304,1) 
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336-1+        
     .       1            xy_ptempflux.DSC.L2) = max(0.0000000000000000e+000,   
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336-1+     
     .       3            xy_ptempflux.DSC.L2))                                 
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1336 = J7 + 1, t172 + 1 - t173, 2                          
     .  !CDIR       NODEP                                                       
     .              do t1338 = 1, t170 + 1 - t171                               
     .                 py_velxflux(py_velxflux.DSC.L1+t1338-1,t1336-1+          
     .       1            py_velxflux.DSC.L2) = -bulk*pyz_absvel(t171+t1338-1,  
     .       2            t1336-1+t173,1)*pyz_velx(t292+t1338-1,t1336-1+t294,1) 
     .                 py_velxflux(py_velxflux.DSC.L1+t1338-1,t1336+            
     .       1            py_velxflux.DSC.L2) = -bulk*pyz_absvel(t171+t1338-1,  
     .       2            t1336+t173,1)*pyz_velx(t292+t1338-1,t1336+t294,1)     
     .                 xq_velyflux(xq_velyflux.DSC.L1+t1338-1,t1336-1+          
     .       1            xq_velyflux.DSC.L2) = -bulk*xqz_absvel(t181+t1338-1,  
     .       2            t1336-1+t183,1)*xqz_vely(t302+t1338-1,t1336-1+t304,1) 
     .                 xq_velyflux(xq_velyflux.DSC.L1+t1338-1,t1336+            
     .       1            xq_velyflux.DSC.L2) = -bulk*xqz_absvel(t181+t1338-1,  
     .       2            t1336+t183,1)*xqz_vely(t302+t1338-1,t1336+t304,1)     
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336-1+        
     .       1            xy_ptempflux.DSC.L2) = max(0.0000000000000000e+000,   
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336-1+     
     .       3            xy_ptempflux.DSC.L2))                                 
     .                 xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336+          
     .       1            xy_ptempflux.DSC.L2) = max(0.0000000000000000e+000,   
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1338-1,t1336+       
     .       3            xy_ptempflux.DSC.L2))                                 
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   365      !
   366      xq_VelYFlux = - Bulk * xqz_AbsVel(:,:,kz) * xqz_VelY(:,:,kz)
   367  
   368  
   369      ! Something like heat flux and mass flux are restricted.
   370      ! This would be arbitrary treatment.
   371      xy_PTempFlux = max( 0.0d0, xy_PTempFlux )
   372      xyf_QMixFlux = max( 0.0d0, xyf_QMixFlux )
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t1356 = 1, xyf_qmixflux.DSC.U3*(xyf_qmixflux.DSC.U2 + 1 -      
     .       1   xyf_qmixflux.DSC.L2)*(xyf_qmixflux.DSC.U1 + 1 -                
     .       2   xyf_qmixflux.DSC.L1)                                           
     .           xyf_qmixflux(xyf_qmixflux.DSC.L1+t1356-1,xyf_qmixflux.DSC.L2,1)
     .       1       = max(0.0000000000000000e+000,xyf_qmixflux(                
     .       2      xyf_qmixflux.DSC.L1+t1356-1,xyf_qmixflux.DSC.L2,1))         
     .        end do                                                            
   373  
   374  
   375      ! Tendencies by surface fluxes (convergences of fluxes) are calculated.
   376      !
   377      xy_DPTempDtBulk = - ( 0.0d0 - xy_PTempFlux ) / z_dz(kz)
     .        if (xy_ptempflux.DSC.U2 + 1 - xy_ptempflux.DSC.L2 .gt. 0) then    
     .           J8 = and(xy_ptempflux.DSC.U2 + 1 - xy_ptempflux.DSC.L2,3)      
     .  !CDIR    NODEP                                                          
     .           do t1368 = 1, J8                                               
     .              D3 = 1.D0/z_dz(1)                                           
     .  !CDIR       NODEP                                                       
     .              do t1370 = 1, xy_ptempflux.DSC.U1 + 1 - xy_ptempflux.DSC.L1 
     .                 xy_dptempdtbulk(xy_dptempdtbulk.DSC.L1+t1370-1,t1368-1+  
     .       1            xy_dptempdtbulk.DSC.L2) = -(0.0000000000000000e+000 - 
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1370-1,t1368-1+     
     .       3            xy_ptempflux.DSC.L2))*D3                              
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1368 = J8 + 1, xy_ptempflux.DSC.U2 + 1 -                   
     .       1      xy_ptempflux.DSC.L2, 4                                      
     .              D2 = z_dz(1)                                                
     .  !CDIR       NODEP                                                       
     .              do t1370 = 1, xy_ptempflux.DSC.U1 + 1 - xy_ptempflux.DSC.L1 
     .                 xy_dptempdtbulk(xy_dptempdtbulk.DSC.L1+t1370-1,t1368-1+  
     .       1            xy_dptempdtbulk.DSC.L2) = -(0.0000000000000000e+000 - 
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1370-1,t1368-1+     
     .       3            xy_ptempflux.DSC.L2))/D2                              
     .                 xy_dptempdtbulk(xy_dptempdtbulk.DSC.L1+t1370-1,t1368+    
     .       1            xy_dptempdtbulk.DSC.L2) = -(0.0000000000000000e+000 - 
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1370-1,t1368+       
     .       3            xy_ptempflux.DSC.L2))/D2                              
     .                 xy_dptempdtbulk(xy_dptempdtbulk.DSC.L1+t1370-1,t1368+1+  
     .       1            xy_dptempdtbulk.DSC.L2) = -(0.0000000000000000e+000 - 
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1370-1,t1368+1+     
     .       3            xy_ptempflux.DSC.L2))/D2                              
     .                 xy_dptempdtbulk(xy_dptempdtbulk.DSC.L1+t1370-1,t1368+2+  
     .       1            xy_dptempdtbulk.DSC.L2) = -(0.0000000000000000e+000 - 
     .       2            xy_ptempflux(xy_ptempflux.DSC.L1+t1370-1,t1368+2+     
     .       3            xy_ptempflux.DSC.L2))/D2                              
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   378      !
   379      xyf_DQMixDtBulk = - ( 0.0d0 - xyf_QMixFlux ) / z_dz(kz)
     .        if (xyf_qmixflux.DSC.U2 + 1 - xyf_qmixflux.DSC.L2 .gt. 0) then    
     .           J9 = and(xyf_qmixflux.DSC.U2 + 1 - xyf_qmixflux.DSC.L2,3)      
     .  !CDIR    NODEP                                                          
     .           do t1378 = 1, J9                                               
     .              D5 = 1.D0/z_dz(1)                                           
     .  !CDIR       NODEP                                                       
     .              do t1380 = 1, xyf_qmixflux.DSC.U1 + 1 - xyf_qmixflux.DSC.L1 
     .                 xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1380-1,t1378-1+  
     .       1            xyf_dqmixdtbulk.DSC.L2,t1376+1) = -(                  
     .       2            0.0000000000000000e+000 - xyf_qmixflux(               
     .       3            xyf_qmixflux.DSC.L1+t1380-1,t1378-1+                  
     .       4            xyf_qmixflux.DSC.L2,t1376+1))*D5                      
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1378 = J9 + 1, xyf_qmixflux.DSC.U2 + 1 -                   
     .       1      xyf_qmixflux.DSC.L2, 4                                      
     .              D4 = z_dz(1)                                                
     .  !CDIR       NODEP                                                       
     .              do t1380 = 1, xyf_qmixflux.DSC.U1 + 1 - xyf_qmixflux.DSC.L1 
     .                 xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1380-1,t1378-1+  
     .       1            xyf_dqmixdtbulk.DSC.L2,t1376+1) = -(                  
     .       2            0.0000000000000000e+000 - xyf_qmixflux(               
     .       3            xyf_qmixflux.DSC.L1+t1380-1,t1378-1+                  
     .       4            xyf_qmixflux.DSC.L2,t1376+1))/D4                      
     .                 xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1380-1,t1378+    
     .       1            xyf_dqmixdtbulk.DSC.L2,t1376+1) = -(                  
     .       2            0.0000000000000000e+000 - xyf_qmixflux(               
     .       3            xyf_qmixflux.DSC.L1+t1380-1,t1378+xyf_qmixflux.DSC.L2,
     .       4            t1376+1))/D4                                          
     .                 xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1380-1,t1378+1+  
     .       1            xyf_dqmixdtbulk.DSC.L2,t1376+1) = -(                  
     .       2            0.0000000000000000e+000 - xyf_qmixflux(               
     .       3            xyf_qmixflux.DSC.L1+t1380-1,t1378+1+                  
     .       4            xyf_qmixflux.DSC.L2,t1376+1))/D4                      
     .                 xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1380-1,t1378+2+  
     .       1            xyf_dqmixdtbulk.DSC.L2,t1376+1) = -(                  
     .       2            0.0000000000000000e+000 - xyf_qmixflux(               
     .       3            xyf_qmixflux.DSC.L1+t1380-1,t1378+2+                  
     .       4            xyf_qmixflux.DSC.L2,t1376+1))/D4                      
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   380      !
   381      py_DVelXDtBulk = - ( 0.0d0 - py_VelXFlux ) / z_dz(kz)
     .        if (py_velxflux.DSC.U2 + 1 - py_velxflux.DSC.L2 .gt. 0) then      
     .           J10 = and(py_velxflux.DSC.U2 + 1 - py_velxflux.DSC.L2,1)       
     .  !CDIR    NODEP                                                          
     .           do t1388 = 1, J10                                              
     .              D7 = 1.D0/z_dz(1)                                           
     .              D8 = 1.D0/z_dz(1)                                           
     .  !CDIR       NODEP                                                       
     .              do t1390 = 1, py_velxflux.DSC.U1 + 1 - py_velxflux.DSC.L1   
     .                 py_dvelxdtbulk(py_dvelxdtbulk.DSC.L1+t1390-1,t1388-1+    
     .       1            py_dvelxdtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            py_velxflux(py_velxflux.DSC.L1+t1390-1,t1388-1+       
     .       3            py_velxflux.DSC.L2))*D7                               
     .                 xq_dvelydtbulk(xq_dvelydtbulk.DSC.L1+t1390-1,t1388-1+    
     .       1            xq_dvelydtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            xq_velyflux(xq_velyflux.DSC.L1+t1390-1,t1388-1+       
     .       3            xq_velyflux.DSC.L2))*D8                               
     .                 xyz_dptempdt(t364+t1390-1,t1388-1+t366,1) = xyz_dptempdt(
     .       1            t364+t1390-1,t1388-1+t366,1) + xy_dptempdtbulk(       
     .       2            xy_dptempdtbulk.DSC.L1+t1390-1,t1388-1+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1388=J10+1,py_velxflux.DSC.U2+1-py_velxflux.DSC.L2,2       
     .              D6 = z_dz(1)                                                
     .  !CDIR       NODEP                                                       
     .              do t1390 = 1, py_velxflux.DSC.U1 + 1 - py_velxflux.DSC.L1   
     .                 py_dvelxdtbulk(py_dvelxdtbulk.DSC.L1+t1390-1,t1388-1+    
     .       1            py_dvelxdtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            py_velxflux(py_velxflux.DSC.L1+t1390-1,t1388-1+       
     .       3            py_velxflux.DSC.L2))/D6                               
     .                 py_dvelxdtbulk(py_dvelxdtbulk.DSC.L1+t1390-1,t1388+      
     .       1            py_dvelxdtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            py_velxflux(py_velxflux.DSC.L1+t1390-1,t1388+         
     .       3            py_velxflux.DSC.L2))/D6                               
     .                 xq_dvelydtbulk(xq_dvelydtbulk.DSC.L1+t1390-1,t1388-1+    
     .       1            xq_dvelydtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            xq_velyflux(xq_velyflux.DSC.L1+t1390-1,t1388-1+       
     .       3            xq_velyflux.DSC.L2))/D6                               
     .                 xq_dvelydtbulk(xq_dvelydtbulk.DSC.L1+t1390-1,t1388+      
     .       1            xq_dvelydtbulk.DSC.L2) = -(0.0000000000000000e+000 -  
     .       2            xq_velyflux(xq_velyflux.DSC.L1+t1390-1,t1388+         
     .       3            xq_velyflux.DSC.L2))/D6                               
     .                 xyz_dptempdt(t364+t1390-1,t1388-1+t366,1) = xyz_dptempdt(
     .       1            t364+t1390-1,t1388-1+t366,1) + xy_dptempdtbulk(       
     .       2            xy_dptempdtbulk.DSC.L1+t1390-1,t1388-1+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .                 xyz_dptempdt(t364+t1390-1,t1388+t366,1) = xyz_dptempdt(  
     .       1            t364+t1390-1,t1388+t366,1) + xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1390-1,t1388+                 
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   382      !
   383      xq_DVelYDtBulk = - ( 0.0d0 - xq_VelYFlux ) / z_dz(kz)
   384  
   385  
   386      ! Add tendency by surface flux convergence
   387      !
   388      xyz_DPTempDt(:,:,kz) = xyz_DPTempDt(:,:,kz) + xy_DPTempDtBulk
   389      do s = 1, ncmax
   390        xyzf_DQMixDt(:,:,kz,s) = xyzf_DQMixDt(:,:,kz,s) + xyf_DQMixDtBulk(:,:,s)
     .        if (jmax + 1 - jmin .gt. 0) then                                  
     .           J11 = and(jmax + 1 - jmin,3)                                   
     .  !CDIR    NODEP                                                          
     .           do t1406 = 1, J11                                              
     .  !CDIR       NODEP                                                       
     .              do t1408 = 1, imax + 1 - imin                               
     .                 xyzf_dqmixdt(t374+t1408-1,t1406-1+t376,1,s) =            
     .       1            xyzf_dqmixdt(t374+t1408-1,t1406-1+t376,1,s) +         
     .       2            xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1408-1,t1406-1
     .       3            +xyf_dqmixdtbulk.DSC.L2,s)                            
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1406 = J11 + 1, jmax + 1 - jmin, 4                         
     .  !CDIR       NODEP                                                       
     .              do t1408 = 1, imax + 1 - imin                               
     .                 xyzf_dqmixdt(t374+t1408-1,t1406-1+t376,1,s) =            
     .       1            xyzf_dqmixdt(t374+t1408-1,t1406-1+t376,1,s) +         
     .       2            xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1408-1,t1406-1
     .       3            +xyf_dqmixdtbulk.DSC.L2,s)                            
     .                 xyzf_dqmixdt(t374+t1408-1,t1406+t376,1,s) = xyzf_dqmixdt(
     .       1            t374+t1408-1,t1406+t376,1,s) + xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1408-1,t1406+                 
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .                 xyzf_dqmixdt(t374+t1408-1,t1406+1+t376,1,s) =            
     .       1            xyzf_dqmixdt(t374+t1408-1,t1406+1+t376,1,s) +         
     .       2            xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1408-1,t1406+1
     .       3            +xyf_dqmixdtbulk.DSC.L2,s)                            
     .                 xyzf_dqmixdt(t374+t1408-1,t1406+2+t376,1,s) =            
     .       1            xyzf_dqmixdt(t374+t1408-1,t1406+2+t376,1,s) +         
     .       2            xyf_dqmixdtbulk(xyf_dqmixdtbulk.DSC.L1+t1408-1,t1406+2
     .       3            +xyf_dqmixdtbulk.DSC.L2,s)                            
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   391      end do
   392      pyz_DVelXDt (:,:,kz) = pyz_DVelXDt (:,:,kz) + py_DVelXDtBulk
     .        if (jmax + 1 - jmin .gt. 0) then                                  
     .           J12 = and(jmax + 1 - jmin,1)                                   
     .  !CDIR    NODEP                                                          
     .           do t1416 = 1, J12                                              
     .  !CDIR       NODEP                                                       
     .              do t1418 = 1, imax + 1 - imin                               
     .                 pyz_dvelxdt(t344+t1418-1,t1416-1+t346,1) = pyz_dvelxdt(  
     .       1            t344+t1418-1,t1416-1+t346,1) + py_dvelxdtbulk(        
     .       2            py_dvelxdtbulk.DSC.L1+t1418-1,t1416-1+                
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 xqz_dvelydt(t354+t1418-1,t1416-1+t356,1) = xqz_dvelydt(  
     .       1            t354+t1418-1,t1416-1+t356,1) + xq_dvelydtbulk(        
     .       2            xq_dvelydtbulk.DSC.L1+t1418-1,t1416-1+                
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1416 = J12 + 1, jmax + 1 - jmin, 2                         
     .  !CDIR       NODEP                                                       
     .              do t1418 = 1, imax + 1 - imin                               
     .                 pyz_dvelxdt(t344+t1418-1,t1416-1+t346,1) = pyz_dvelxdt(  
     .       1            t344+t1418-1,t1416-1+t346,1) + py_dvelxdtbulk(        
     .       2            py_dvelxdtbulk.DSC.L1+t1418-1,t1416-1+                
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 pyz_dvelxdt(t344+t1418-1,t1416+t346,1) = pyz_dvelxdt(t344
     .       1            +t1418-1,t1416+t346,1) + py_dvelxdtbulk(              
     .       2            py_dvelxdtbulk.DSC.L1+t1418-1,t1416+                  
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 xqz_dvelydt(t354+t1418-1,t1416-1+t356,1) = xqz_dvelydt(  
     .       1            t354+t1418-1,t1416-1+t356,1) + xq_dvelydtbulk(        
     .       2            xq_dvelydtbulk.DSC.L1+t1418-1,t1416-1+                
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .                 xqz_dvelydt(t354+t1418-1,t1416+t356,1) = xqz_dvelydt(t354
     .       1            +t1418-1,t1416+t356,1) + xq_dvelydtbulk(              
     .       2            xq_dvelydtbulk.DSC.L1+t1418-1,t1416+                  
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   393      xqz_DVelYDt (:,:,kz) = xqz_DVelYDt (:,:,kz) + xq_DVelYDtBulk
   394  
   395  
   396  
   397      ! Output
   398      !
   399      xyz_DPTempDtBulk = 0.0d0
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t1432 = 1, (xyz_dptempdtbulk.DSC.U3 + 1 -                      
     .       1   xyz_dptempdtbulk.DSC.L3)*(xyz_dptempdtbulk.DSC.U2 + 1 -        
     .       2   xyz_dptempdtbulk.DSC.L2)*(xyz_dptempdtbulk.DSC.U1 + 1 -        
     .       3   xyz_dptempdtbulk.DSC.L1)                                       
     .           xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1432-1,              
     .       1      xyz_dptempdtbulk.DSC.L2,xyz_dptempdtbulk.DSC.L3) =          
     .       2      0.0000000000000000e+000                                     
     .        end do                                                            
   400      xyzf_DQMixDtBulk = 0.0d0
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t1441 = 1, xyzf_dqmixdtbulk.DSC.U4*(xyzf_dqmixdtbulk.DSC.U3 + 1
     .       1    - xyzf_dqmixdtbulk.DSC.L3)*(xyzf_dqmixdtbulk.DSC.U2 + 1 -     
     .       2   xyzf_dqmixdtbulk.DSC.L2)*(xyzf_dqmixdtbulk.DSC.U1 + 1 -        
     .       3   xyzf_dqmixdtbulk.DSC.L1)                                       
     .           xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1441-1,              
     .       1      xyzf_dqmixdtbulk.DSC.L2,xyzf_dqmixdtbulk.DSC.L3,1) =        
     .       2      0.0000000000000000e+000                                     
     .        end do                                                            
   401      pyz_DVelXDtBulk  = 0.0d0
     .        if(pyz_dvelxdtbulk.DSC.U2+1-pyz_dvelxdtbulk.DSC.L2.gt.0)then      
     .           J13=and(pyz_dvelxdtbulk.DSC.U2+1-pyz_dvelxdtbulk.DSC.L2,1)     
     .  !CDIR    NODEP                                                          
     .           do t1455 = 1, J13                                              
     .  !CDIR       NODEP                                                       
     .              do t1457 = 1, pyz_dvelxdtbulk.DSC.U1 + 1 -                  
     .       1         pyz_dvelxdtbulk.DSC.L1                                   
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1457-1,t1455-1+  
     .       1            pyz_dvelxdtbulk.DSC.L2,t1453+pyz_dvelxdtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1457-1,t1455-1+  
     .       1            xqz_dvelydtbulk.DSC.L2,t1453+xqz_dvelydtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1455 = J13 + 1, pyz_dvelxdtbulk.DSC.U2 + 1 -               
     .       1      pyz_dvelxdtbulk.DSC.L2, 2                                   
     .  !CDIR       NODEP                                                       
     .              do t1457 = 1, pyz_dvelxdtbulk.DSC.U1 + 1 -                  
     .       1         pyz_dvelxdtbulk.DSC.L1                                   
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1457-1,t1455-1+  
     .       1            pyz_dvelxdtbulk.DSC.L2,t1453+pyz_dvelxdtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1457-1,t1455+    
     .       1            pyz_dvelxdtbulk.DSC.L2,t1453+pyz_dvelxdtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1457-1,t1455-1+  
     .       1            xqz_dvelydtbulk.DSC.L2,t1453+xqz_dvelydtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1457-1,t1455+    
     .       1            xqz_dvelydtbulk.DSC.L2,t1453+xqz_dvelydtbulk.DSC.L3)  
     .       2             = 0.0000000000000000e+000                            
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   402      xqz_DVelYDtBulk  = 0.0d0
   403  
   404      xyz_DPTempDtBulk(:,:,kz) = xy_DPTempDtBulk
     .        if(xyz_dptempdtbulk.DSC.U2+1-xyz_dptempdtbulk.DSC.L2.gt.0)then    
     .           J14=and(xyz_dptempdtbulk.DSC.U2+1-xyz_dptempdtbulk.DSC.L2,3)   
     .  !CDIR    NODEP                                                          
     .           do t1465 = 1, J14                                              
     .  !CDIR       NODEP                                                       
     .              do t1467 = 1, xyz_dptempdtbulk.DSC.U1 + 1 -                 
     .       1         xyz_dptempdtbulk.DSC.L1                                  
     .                 xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1467-1,t1465-1+
     .       1            xyz_dptempdtbulk.DSC.L2,1) = xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1467-1,t1465-1+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1465 = J14 + 1, xyz_dptempdtbulk.DSC.U2 + 1 -              
     .       1      xyz_dptempdtbulk.DSC.L2, 4                                  
     .  !CDIR       NODEP                                                       
     .              do t1467 = 1, xyz_dptempdtbulk.DSC.U1 + 1 -                 
     .       1         xyz_dptempdtbulk.DSC.L1                                  
     .                 xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1467-1,t1465-1+
     .       1            xyz_dptempdtbulk.DSC.L2,1) = xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1467-1,t1465-1+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .                 xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1467-1,t1465+  
     .       1            xyz_dptempdtbulk.DSC.L2,1) = xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1467-1,t1465+                 
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .                 xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1467-1,t1465+1+
     .       1            xyz_dptempdtbulk.DSC.L2,1) = xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1467-1,t1465+1+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .                 xyz_dptempdtbulk(xyz_dptempdtbulk.DSC.L1+t1467-1,t1465+2+
     .       1            xyz_dptempdtbulk.DSC.L2,1) = xy_dptempdtbulk(         
     .       2            xy_dptempdtbulk.DSC.L1+t1467-1,t1465+2+               
     .       3            xy_dptempdtbulk.DSC.L2)                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   405      do s = 1, ncmax
   406        xyzf_DQMixDtBulk(:,:,kz,s) = xyf_DQMixDtBulk(:,:,s)
     .        if(xyzf_dqmixdtbulk.DSC.U2+1-xyzf_dqmixdtbulk.DSC.L2.gt.0)then    
     .           J15=and(xyzf_dqmixdtbulk.DSC.U2+1-xyzf_dqmixdtbulk.DSC.L2,3)   
     .  !CDIR    NODEP                                                          
     .           do t1473 = 1, J15                                              
     .  !CDIR       NODEP                                                       
     .              do t1475 = 1, xyzf_dqmixdtbulk.DSC.U1 + 1 -                 
     .       1         xyzf_dqmixdtbulk.DSC.L1                                  
     .                 xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1475-1,t1473-1+
     .       1            xyzf_dqmixdtbulk.DSC.L2,1,s) = xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1475-1,t1473-1+               
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1473 = J15 + 1, xyzf_dqmixdtbulk.DSC.U2 + 1 -              
     .       1      xyzf_dqmixdtbulk.DSC.L2, 4                                  
     .  !CDIR       NODEP                                                       
     .              do t1475 = 1, xyzf_dqmixdtbulk.DSC.U1 + 1 -                 
     .       1         xyzf_dqmixdtbulk.DSC.L1                                  
     .                 xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1475-1,t1473-1+
     .       1            xyzf_dqmixdtbulk.DSC.L2,1,s) = xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1475-1,t1473-1+               
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .                 xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1475-1,t1473+  
     .       1            xyzf_dqmixdtbulk.DSC.L2,1,s) = xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1475-1,t1473+                 
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .                 xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1475-1,t1473+1+
     .       1            xyzf_dqmixdtbulk.DSC.L2,1,s) = xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1475-1,t1473+1+               
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .                 xyzf_dqmixdtbulk(xyzf_dqmixdtbulk.DSC.L1+t1475-1,t1473+2+
     .       1            xyzf_dqmixdtbulk.DSC.L2,1,s) = xyf_dqmixdtbulk(       
     .       2            xyf_dqmixdtbulk.DSC.L1+t1475-1,t1473+2+               
     .       3            xyf_dqmixdtbulk.DSC.L2,s)                             
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   407      end do
   408      pyz_DVelXDtBulk (:,:,kz) = py_DVelXDtBulk
     .        if(pyz_dvelxdtbulk.DSC.U2+1-pyz_dvelxdtbulk.DSC.L2.gt.0)then      
     .           J16=and(pyz_dvelxdtbulk.DSC.U2+1-pyz_dvelxdtbulk.DSC.L2,1)     
     .  !CDIR    NODEP                                                          
     .           do t1481 = 1, J16                                              
     .  !CDIR       NODEP                                                       
     .              do t1483 = 1, pyz_dvelxdtbulk.DSC.U1 + 1 -                  
     .       1         pyz_dvelxdtbulk.DSC.L1                                   
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1483-1,t1481-1+  
     .       1            pyz_dvelxdtbulk.DSC.L2,1) = py_dvelxdtbulk(           
     .       2            py_dvelxdtbulk.DSC.L1+t1483-1,t1481-1+                
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1483-1,t1481-1+  
     .       1            xqz_dvelydtbulk.DSC.L2,1) = xq_dvelydtbulk(           
     .       2            xq_dvelydtbulk.DSC.L1+t1483-1,t1481-1+                
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1481 = J16 + 1, pyz_dvelxdtbulk.DSC.U2 + 1 -               
     .       1      pyz_dvelxdtbulk.DSC.L2, 2                                   
     .  !CDIR       NODEP                                                       
     .              do t1483 = 1, pyz_dvelxdtbulk.DSC.U1 + 1 -                  
     .       1         pyz_dvelxdtbulk.DSC.L1                                   
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1483-1,t1481-1+  
     .       1            pyz_dvelxdtbulk.DSC.L2,1) = py_dvelxdtbulk(           
     .       2            py_dvelxdtbulk.DSC.L1+t1483-1,t1481-1+                
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 pyz_dvelxdtbulk(pyz_dvelxdtbulk.DSC.L1+t1483-1,t1481+    
     .       1            pyz_dvelxdtbulk.DSC.L2,1) = py_dvelxdtbulk(           
     .       2            py_dvelxdtbulk.DSC.L1+t1483-1,t1481+                  
     .       3            py_dvelxdtbulk.DSC.L2)                                
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1483-1,t1481-1+  
     .       1            xqz_dvelydtbulk.DSC.L2,1) = xq_dvelydtbulk(           
     .       2            xq_dvelydtbulk.DSC.L1+t1483-1,t1481-1+                
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .                 xqz_dvelydtbulk(xqz_dvelydtbulk.DSC.L1+t1483-1,t1481+    
     .       1            xqz_dvelydtbulk.DSC.L2,1) = xq_dvelydtbulk(           
     .       2            xq_dvelydtbulk.DSC.L1+t1483-1,t1481+                  
     .       3            xq_dvelydtbulk.DSC.L2)                                
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   409      xqz_DVelYDtBulk (:,:,kz) = xq_DVelYDtBulk
   410      !
   411      call HistoryAutoPut(TimeN, 'PTempSfc', xyz_DPTempDtBulk(1:nx,1:ny,1:nz))
   412      call HistoryAutoPut(TimeN, 'VelXSfc',  pyz_DVelXDtBulk (1:nx,1:ny,1:nz))
   413      call HistoryAutoPut(TimeN, 'VelYSfc',  xqz_DVelYDtBulk (1:nx,1:ny,1:nz))
   414      do s = 1, ncmax
   415        call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_Sfc', &
   416          & xyzf_DQMixDtBulk(1:nx,1:ny,1:nz,s))
   417      end do
   418  
   419  
   420      call HistoryAutoPut(TimeN, 'PTempSfcFlux', xy_PTempFlux(1:nx,1:ny))
   421      call HistoryAutoPut(TimeN, 'VelXSfcFlux',  py_VelXFlux (1:nx,1:ny))
   422      call HistoryAutoPut(TimeN, 'VelYSfcFlux',  xq_VelYFlux (1:nx,1:ny))
   423      do s = 1, ncmax
   424        call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_SfcFlux', &
   425          & xyf_QMixFlux(1:nx,1:ny,s))
   426      end do
   427  
   428      call HistoryAutoPut(TimeN, 'SfcHeatFlux', &
     .        if (ny .gt. 0) then                                               
     .           J17 = and(ny,3)                                                
     .  !CDIR    NODEP                                                          
     .           do t1493 = 1, J17                                              
     .  !CDIR       NODEP                                                       
     .              do t1495 = 1, nx                                            
     .                 %IG82(t1495,t1493) = cpdry*xyz_densbz(t1495,t1493,1)*    
     .       1            xy_ptempflux(t1495,t1493)*(exnerbzsfc + xyz_exner(    
     .       2            t1495,t1493,1))                                       
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1493 = J17 + 1, ny, 4                                      
     .  !CDIR       NODEP                                                       
     .              do t1495 = 1, nx                                            
     .                 %IG82(t1495,t1493) = cpdry*xyz_densbz(t1495,t1493,1)*    
     .       1            xy_ptempflux(t1495,t1493)*(exnerbzsfc + xyz_exner(    
     .       2            t1495,t1493,1))                                       
     .                 %IG82(t1495,t1493+1) = cpdry*xyz_densbz(t1495,t1493+1,1)*
     .       1            xy_ptempflux(t1495,t1493+1)*(exnerbzsfc + xyz_exner(  
     .       2            t1495,t1493+1,1))                                     
     .                 %IG82(t1495,t1493+2) = cpdry*xyz_densbz(t1495,t1493+2,1)*
     .       1            xy_ptempflux(t1495,t1493+2)*(exnerbzsfc + xyz_exner(  
     .       2            t1495,t1493+2,1))                                     
     .                 %IG82(t1495,t1493+3) = cpdry*xyz_densbz(t1495,t1493+3,1)*
     .       1            xy_ptempflux(t1495,t1493+3)*(exnerbzsfc + xyz_exner(  
     .       2            t1495,t1493+3,1))                                     
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   429        & CpDry * xyz_DensBZ(1:nx,1:ny,1) * xy_PTempFlux(1:nx,1:ny) &
   430        &   * ( ExnerBZSfc + xyz_Exner(1:nx,1:ny,1) ) )
   431      call HistoryAutoPut(TimeN, 'SfcXMomFlux', &
     .        if (ny .gt. 0) then                                               
     .           J18 = and(ny,3)                                                
     .  !CDIR    NODEP                                                          
     .           do t1505 = 1, J18                                              
     .  !CDIR       NODEP                                                       
     .              do t1507 = 1, nx                                            
     .                 %IG87(t1507,t1505) = xyz_densbz(t1507,t1505,1)*          
     .       1            py_velxflux(t1507,t1505)                              
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1505 = J18 + 1, ny, 4                                      
     .  !CDIR       NODEP                                                       
     .              do t1507 = 1, nx                                            
     .                 %IG87(t1507,t1505) = xyz_densbz(t1507,t1505,1)*          
     .       1            py_velxflux(t1507,t1505)                              
     .                 %IG87(t1507,t1505+1) = xyz_densbz(t1507,t1505+1,1)*      
     .       1            py_velxflux(t1507,t1505+1)                            
     .                 %IG87(t1507,t1505+2) = xyz_densbz(t1507,t1505+2,1)*      
     .       1            py_velxflux(t1507,t1505+2)                            
     .                 %IG87(t1507,t1505+3) = xyz_densbz(t1507,t1505+3,1)*      
     .       1            py_velxflux(t1507,t1505+3)                            
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   432        & xyz_DensBZ(1:nx,1:ny,1) * py_VelXFlux (1:nx,1:ny))
   433      call HistoryAutoPut(TimeN, 'SfcYMomFlux', &
     .        if (ny .gt. 0) then                                               
     .           J19 = and(ny,3)                                                
     .  !CDIR    NODEP                                                          
     .           do t1515 = 1, J19                                              
     .  !CDIR       NODEP                                                       
     .              do t1517 = 1, nx                                            
     .                 %IG92(t1517,t1515) = xyz_densbz(t1517,t1515,1)*          
     .       1            xq_velyflux(t1517,t1515)                              
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1515 = J19 + 1, ny, 4                                      
     .  !CDIR       NODEP                                                       
     .              do t1517 = 1, nx                                            
     .                 %IG92(t1517,t1515) = xyz_densbz(t1517,t1515,1)*          
     .       1            xq_velyflux(t1517,t1515)                              
     .                 %IG92(t1517,t1515+1) = xyz_densbz(t1517,t1515+1,1)*      
     .       1            xq_velyflux(t1517,t1515+1)                            
     .                 %IG92(t1517,t1515+2) = xyz_densbz(t1517,t1515+2,1)*      
     .       1            xq_velyflux(t1517,t1515+2)                            
     .                 %IG92(t1517,t1515+3) = xyz_densbz(t1517,t1515+3,1)*      
     .       1            xq_velyflux(t1517,t1515+3)                            
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   434        & xyz_DensBZ(1:nx,1:ny,1) * xq_VelYFlux (1:nx,1:ny))
   435      do s = 1, ncmax
   436        call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_SfcMassFlux', &
     .        if (ny .gt. 0) then                                               
     .           J20 = and(ny,3)                                                
     .  !CDIR    NODEP                                                          
     .           do t1525 = 1, J20                                              
     .  !CDIR       NODEP                                                       
     .              do t1527 = 1, nx                                            
     .                 %IG99(t1527,t1525) = xyz_densbz(t1527,t1525,1)*          
     .       1            xyf_qmixflux(t1527,t1525,s)                           
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t1525 = J20 + 1, ny, 4                                      
     .  !CDIR       NODEP                                                       
     .              do t1527 = 1, nx                                            
     .                 %IG99(t1527,t1525) = xyz_densbz(t1527,t1525,1)*          
     .       1            xyf_qmixflux(t1527,t1525,s)                           
     .                 %IG99(t1527,t1525+1) = xyz_densbz(t1527,t1525+1,1)*      
     .       1            xyf_qmixflux(t1527,t1525+1,s)                         
     .                 %IG99(t1527,t1525+2) = xyz_densbz(t1527,t1525+2,1)*      
     .       1            xyf_qmixflux(t1527,t1525+2,s)                         
     .                 %IG99(t1527,t1525+3) = xyz_densbz(t1527,t1525+3,1)*      
     .       1            xyf_qmixflux(t1527,t1525+3,s)                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   437          & xyz_DensBZ(1:nx,1:ny,1) * xyf_QMixFlux(1:nx,1:ny,s))
   438      end do
   439  
   440      ! Set Margin
   441      !
   442      call SetMargin_xyz( xyz_DPTempDt )
   443      call SetMargin_pyz( pyz_DVelXDt )
   444      call SetMargin_xqz( xqz_DVelYDt )
   445      call SetMargin_xyzf(xyzf_DQMixDt )
   446  
   447    end subroutine Surfaceflux_Bulk_forcing
   448  
   449  end module Surfaceflux_bulk
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:35:02 2011
FILE NAME: surfaceflux_bulk.f90
PROGRAM NAME: surfaceflux_bulk
FORMAT LIST

  LINE    LOOP     FORTRAN STATEMENT

     1:            != Module HeatFlux
     2:            !
     3:            ! Authors::   ODAKA Masatsugu, TAKAHASHI Yoshiyuki
     4:            ! Version::   $Id: surfaceflux_bulk.f90,v 1.13 2011-10-10 15:44:24 yot Exp $
     5:            ! Tag Name::  $Name: arare5-20111010 $
     6:            ! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved.
     7:            ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8:            !
     9:            !== Overview
    10:            !
    11:            !
    12:            ! *** Explanation below are obsolete. (YOT, 2011/09/01) ***
    13:            !
    14:            !
    15:            ! 下部境界からのフラックスによる温度と凝結成分の変化率をバルク方法に
    16:            ! 基づいて計算するモジュール. これは中島 (1994) で用いられた方法である.
    17:            !
    18:            ! 熱フラックスを Fh と凝結物質のフラックス Fq とすると, 温度と凝結物質
    19:            ! の変化率 H, Q は
    20:            !
    21:            !   H = Fh/Δz_1
    22:            !   Q = Fq/Δz_1
    23:            !
    24:            ! と表される. ここで Δz_1 は最下層の格子間隔である.
    25:            !
    26:            ! 熱フラックス Fh と凝結物質のフラックス Fq は以下の式にしたがって
    27:            ! 計算する.
    28:            !
    29:            !   Fh = - Cdρ|V| * (π_1θ_1 - T_sfc)
    30:            !   Fh = - Cdρ|V| * (Q_1 - Q*(T_sfc))
    31:            !
    32:            ! ここで θ_1, Q_1, π_1 は最下層の温度と凝結物質の混合比および無次元
    33:            ! 圧力関数, T_sfc は下部境界の温度, Q*(T_sfc) は T_sfc で決まる飽和混
    34:            ! 合比である. 
    35:            !
    36:            ! バルク係数 Cd は一定とする. 無次元圧力関数 π_1 は基本場の値を用いる.
    37:            ! 風速値 |V| は
    38:            !
    39:            !   V = ( V^2 + V_0^2 )^(1/2)
    40:            !
    41:            ! と計算する. 
    42:            !
    43:            !== Error Handling
    44:            !
    45:            !== Bugs
    46:            !
    47:            !== Note
    48:            !
    49:            !
    50:            !== Future Plans
    51:            !
    52:            !
    53:            
    54:            module Surfaceflux_bulk
    55:              !
    56:              !下部境界でのフラックスの計算モジュール
    57:              !
    58:            
    59:              !モジュール読み込み
    60:              use dc_types, only: DP, STRING
    61:              use dc_iounit,  only: FileOpen
    62:              use dc_message, only: MessageNotify
    63:              use gtool_historyauto, only: HistoryAutoAddVariable, HistoryAutoPut
    64:            
    65:              use mpi_wrapper,only: myrank
    66:              use gridset,  only: imin,         & !x 方向の配列の下限
    67:                &                 imax,         & !x 方向の配列の上限
    68:                &                 jmin,         & !y 方向の配列の下限
    69:                &                 jmax,         & !y 方向の配列の上限
    70:                &                 kmin,         & !z 方向の配列の下限
    71:                &                 kmax,         & !z 方向の配列の上限
    72:                &                 nx, ny, nz, ncmax
    73:              use axesset, only:  z_dz,         & !z 方向の格子点間隔
    74:                &                 xyz_avr_pyz,  &
    75:                &                 xyz_avr_xqz,  &
    76:                &                 pyz_avr_xyz,  &
    77:                &                 xqz_avr_xyz
    78:              use basicset, only: xyz_ExnerBZ,  & !エクスナー関数の基本場
    79:                &                 xyz_PressBZ,  & !
    80:                &                 xyz_PTempBZ,  & !温位の基本場
    81:                &                 xyz_TempBZ,   & !
    82:                &                 xyzf_QMixBZ,  & !温位の基本場
    83:                &                 xyz_DensBZ      !基本場の密度
    84:              use constants,only: MolWtDry, PressBasis, TempSfc, PressSfc, CpDry, GasRDry
    85:              use composition,only : IdxCC, IdxCG, SpcWetID, CondNum, MolWtWet, SpcWetSymbol
    86:              use chemcalc,only : SvapPress
    87:              use namelist_util, only: namelist_filename
    88:              use timeset, only:  TimeN
    89:              use setmargin,only: SetMargin_xyz, SetMargin_xyzf, SetMargin_pyz, SetMargin_xqz
    90:            
    91:            
    92:              !暗黙の型宣言禁止
    93:              implicit none
    94:            
    95:              !属性の指定
    96:              private
    97:            
    98:              !関数を public に設定
    99:              public surfaceflux_bulk_init
   100:              public surfaceflux_bulk_forcing
   101:            
   102:              !変数定義
   103:              real(DP), save  :: Bulk = 1.5d-3    !熱・運動量フラックスのバルク係数
   104:            
   105:            
   106:              real(DP), save  :: Vel0 = 0.0d0    !下層での水平速度嵩上げ値
   107:            
   108:            
   109:              character(*), parameter:: module_name = 'surfaceflux_bulk'
   110:                                          ! モジュールの名称.
   111:                                          ! Module name
   112:            
   113:            contains
   114:            !!!------------------------------------------------------------------------!!!
   115:              subroutine Surfaceflux_Bulk_init
   116:                !
   117:                !NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う. 
   118:                !
   119:            
   120:                !暗黙の型宣言禁止
   121:                implicit none
   122:            
   123:                !内部変数
   124:                integer    :: l, unit
   125:            
   126:                !---------------------------------------------------------------
   127:                ! NAMELIST から情報を取得
   128:                !
   129:                NAMELIST /surfaceflux_bulk_nml/ Bulk, Vel0
   130:            
   131:                call FileOpen(unit, file=namelist_filename, mode='r')
   132:                read(unit, NML=surfaceflux_bulk_nml)
   133:                close(unit)  
   134:            
   135:                if (myrank == 0) then 
   136:                  call MessageNotify( "M", module_name, "Bulk = %f", d=(/Bulk/) )
   137:                  call MessageNotify( "M", module_name, "Vel0 = %f", d=(/Vel0/))
   138:                end if
   139:            
   140:            
   141:                call HistoryAutoAddVariable(      &
   142:                  & varname='PTempSfcFlux',       &
   143:                  & dims=(/'x','y','t'/),         &
   144:                  & longname='surface potential temperature flux (heat flux divided by density and specific heat)', &
   145:                  & units='K.m.s-1',             &
   146:                  & xtype='float')
   147:            
   148:                call HistoryAutoAddVariable(  &
   149:                  & varname='VelXSfcFlux',    &
   150:                  & dims=(/'x','y','t'/),     &
   151:                  & longname='surface flux of x-component of velocity (momentum flux divided by density)', &
   152:                  & units='m2.s-2',           &
   153:                  & xtype='float')
   154:            
   155:                call HistoryAutoAddVariable(  &
   156:                  & varname='VelYSfcFlux',    &
   157:                  & dims=(/'x','y','t'/),     &
   158:                  & longname='surface flux of y-component of velocity (momentum flux divided by density)', &
   159:                  & units='m2.s-2',           &
   160:                  & xtype='float')
   161:            
   162: +------>       do l = 1, ncmax
   163: |                call HistoryAutoAddVariable(  &
   164: |                  & varname=trim(SpcWetSymbol(l))//'_SfcFlux', & 
   165: |                  & dims=(/'x','y','t'/),     &
   166: |                  & longname='surface flux of '          &
   167: |                  &           //trim(SpcWetSymbol(l))//' mixing ratio (mass flux divided by density)',  &
   168: |                  & units='m.s-1',    &
   169: |                  & xtype='float')
   170: +------        end do
   171:            
   172:            
   173:                call HistoryAutoAddVariable(  &
   174:                  & varname='PTempSfc',         &
   175:                  & dims=(/'x','y','z','t'/), &
   176:                  & longname='potential temperature tendency by surface flux', &
   177:                  & units='K.s-1',            &
   178:                  & xtype='float')
   179:            
   180:                call HistoryAutoAddVariable(  &
   181:                  & varname='VelXSfc',         &
   182:                  & dims=(/'x','y','z','t'/), &
   183:                  & longname='x-component velocity tendency by surface flux', &
   184:                  & units='m.s-2',            &
   185:                  & xtype='float')
   186:            
   187:                call HistoryAutoAddVariable(  &
   188:                  & varname='VelYSfc',         &
   189:                  & dims=(/'x','y','z','t'/), &
   190:                  & longname='y-component velocity tendency by surface flux', &
   191:                  & units='m.s-2',            &
   192:                  & xtype='float')
   193:            
   194: +------>       do l = 1, ncmax
   195: |                call HistoryAutoAddVariable(  &
   196: |                  & varname=trim(SpcWetSymbol(l))//'_Sfc', & 
   197: |                  & dims=(/'x','y','z','t'/),     &
   198: |                  & longname=trim(SpcWetSymbol(l))//' mixing ratio tendency by surface flux',  &
   199: |                  & units='s-1',    &
   200: |                  & xtype='float')
   201: +------        end do
   202:            
   203:            
   204:                call HistoryAutoAddVariable(       &
   205:                  & varname='SfcHeatFlux',         &
   206:                  & dims=(/'x','y','t'/),          &
   207:                  & longname='surface heat flux',  &
   208:                  & units='W.m-2',                 &
   209:                  & xtype='float')
   210:            
   211:                call HistoryAutoAddVariable(                      &
   212:                  & varname='SfcXMomFlux',                        &
   213:                  & dims=(/'x','y','t'/),                         &
   214:                  & longname='surface x-component momentum flux', &
   215:                  & units='kg.m-2.s-1',                           &
   216:                  & xtype='float')
   217:            
   218:                call HistoryAutoAddVariable(                      &
   219:                  & varname='SfcYMomFlux',                        &
   220:                  & dims=(/'x','y','t'/),                         &
   221:                  & longname='surface y-component momentum flux', &
   222:                  & units='kg.m-2.s-1',                           &
   223:                  & xtype='float')
   224:            
   225: +------>       do l = 1, ncmax
   226: |                call HistoryAutoAddVariable(                               &
   227: |                  & varname=trim(SpcWetSymbol(l))//'_SfcMassFlux',         &
   228: |                  & dims=(/'x','y','t'/),                              &
   229: |                  & longname=trim(SpcWetSymbol(l))//' surface mass flux',  &
   230: |                  & units='kg.m-2.s-1',                                    &
   231: |                  & xtype='float')
   232: +------        end do
   233:            
   234:              end subroutine Surfaceflux_Bulk_init
   235:            
   236:            
   237:            !!!------------------------------------------------------------------------!!!
   238:              subroutine Surfaceflux_Bulk_forcing( &
   239:                &   pyz_VelX, xqz_VelY, xyz_PTemp, xyz_Exner, xyzf_QMix, &
   240:                &   pyz_DVelXDt, xqz_DVelYDt, xyz_DPTempDt, xyzf_DQMixDt &
   241:                & )
   242:                ! 
   243:                ! 下部境界からのフラックスによる温度の変化率を,
   244:                ! バルク方法に基づいて計算する.
   245:                !
   246:            
   247:                !暗黙の型宣言禁止
   248:                implicit none
   249:            
   250:                !変数定義
   251:                real(DP), intent(in)   :: pyz_VelX(imin:imax,jmin:jmax,kmin:kmax)
   252:                                                       !水平風速
   253:                real(DP), intent(in)   :: xqz_VelY(imin:imax,jmin:jmax,kmin:kmax)
   254:                                                       !水平風速
   255:                real(DP), intent(in)   :: xyz_PTemp(imin:imax,jmin:jmax,kmin:kmax)
   256:                                                       !温位の擾乱成分    
   257:                real(DP), intent(in)   :: xyz_Exner(imin:imax,jmin:jmax,kmin:kmax)
   258:                                                       !温位の擾乱成分    
   259:                real(DP), intent(in)   :: xyzf_QMix(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   260:                                                       !温位の擾乱成分    
   261:                real(DP), intent(inout):: pyz_DVelXDt(imin:imax,jmin:jmax,kmin:kmax)
   262:                real(DP), intent(inout):: xqz_DVelYDt(imin:imax,jmin:jmax,kmin:kmax)
   263:                real(DP), intent(inout):: xyz_DPTempDt(imin:imax,jmin:jmax,kmin:kmax)
   264:                real(DP), intent(inout):: xyzf_DQMixDt(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   265:                real(DP)               :: py_VelXflux (imin:imax,jmin:jmax)
   266:                                                       !運動量フラックス
   267:                                                       !(strictly speaking, this value is not 
   268:                                                       !momentum flux, but is it divided by density)
   269:                real(DP)               :: xq_VelYflux (imin:imax,jmin:jmax)
   270:                                                       !運動量フラックス
   271:                                                       !(strictly speaking, this value is not 
   272:                                                       !momentum flux, but is it divided by density)
   273:                real(DP)               :: xy_PTempFlux(imin:imax,jmin:jmax)
   274:                                                       !地表面熱フラックス
   275:                                                       !(strictly speaking, this value is not 
   276:                                                       !heat flux, but is it divided by density and 
   277:                                                       !specific heat)
   278:                real(DP)               :: xyf_QMixFlux(imin:imax,jmin:jmax,ncmax)
   279:                                                       !物質的フラックス
   280:                real(DP)               :: xyz_VelX(imin:imax,jmin:jmax,kmin:kmax)
   281:                                                       !水平風速 (xyz 格子)
   282:                real(DP)               :: xyz_VelY(imin:imax,jmin:jmax,kmin:kmax)
   283:                                                       !水平風速 (xyz 格子)
   284:                real(DP)               :: xyz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   285:                                                       !水平風速 (xyz 格子)
   286:                real(DP)               :: pyz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   287:                                                       !水平風速 (pyz 格子)
   288:                real(DP)               :: xqz_AbsVel(imin:imax,jmin:jmax,kmin:kmax)
   289:                                                       !水平風速 (xqz 格子)
   290:                real(DP)               :: xyz_PTempAll(imin:imax,jmin:jmax,kmin:kmax)
   291:                                                       !Total value of potential temperature
   292:                real(DP)               :: xyz_TempAll (imin:imax,jmin:jmax,kmin:kmax)
   293:                                                       !Total value of temperature
   294:                real(DP)               :: xyzf_QMixAll(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   295:                                                       !Total value of mixing ratios
   296:                real(DP)               :: xy_DPTempDtBulk(imin:imax,jmin:jmax)
   297:                                                    !potential temperature tendency by surface flux
   298:                real(DP)               :: xyf_DQMixDtBulk(imin:imax,jmin:jmax, ncmax)
   299:                                                    !mixing ratio tendency by surface flux
   300:                real(DP)               :: py_DVelXDtBulk (imin:imax,jmin:jmax)
   301:                                                    !x-component velocity tendency by surface flux
   302:                real(DP)               :: xq_DVelYDtBulk (imin:imax,jmin:jmax)
   303:                                                    !y-component velocity tendency by surface flux
   304:            
   305:                real(DP)               :: xyz_DPTempDtBulk(imin:imax,jmin:jmax,kmin:kmax)
   306:                                                    ! variable for output
   307:                real(DP)               :: xyzf_DQMixDtBulk(imin:imax,jmin:jmax,kmin:kmax, ncmax)
   308:                                                    ! variable for output
   309:                real(DP)               :: pyz_DVelXDtBulk (imin:imax,jmin:jmax,kmin:kmax)
   310:                                                    ! variable for output
   311:                real(DP)               :: xqz_DVelYDtBulk (imin:imax,jmin:jmax,kmin:kmax)
   312:                                                    ! variable for output
   313:            
   314:                real(DP)               :: ExnerBZSfc
   315:                                                    ! Basic state Exner function at the surface
   316:                real(DP)               :: xy_PressSfc(imin:imax,jmin:jmax)
   317:                                                    ! Total pressure at the surface
   318:            
   319:                integer                :: kz            !配列添字
   320:                integer                :: s             !ループ変数
   321:            
   322:                ! 初期化
   323:                !
   324:                kz = 1
   325:            
   326: **V---->       xyz_PTempAll  = xyz_PTemp + xyz_PTempBZ
   327: **V----        xyz_TempAll   = (xyz_Exner + xyz_ExnerBZ) * xyz_PTempAll
   328: +++V===        xyzf_QMixAll  = xyzf_QMix + xyzf_QMixBZ
   329:            
   330:                ExnerBZSfc    = (PressSfc / PressBasis) ** (GasRDry / CpDry)
   331: +V=====        xy_PressSfc   = PressBasis * ( ExnerBZSfc + xyz_Exner(:,:,kz) )**(CpDry / GasRDry)
   332:                                ! Perturbation component of Exner function at the surface is assumed 
   333:                                ! to be same as that at the lowest layer. (YOT, 2011/09/03)
   334:            
   335:            
   336:                ! Velocities at xyz grid points are calculated.
   337:                xyz_VelX = xyz_avr_pyz(pyz_VelX)
   338:                xyz_VelY = xyz_avr_xqz(xqz_VelY)
   339:            
   340: ++V====        xyz_AbsVel = SQRT( xyz_VelX**2 + xyz_VelY**2 + Vel0**2 )
   341:                pyz_AbsVel = pyz_avr_xyz(xyz_AbsVel)
   342:                xqz_AbsVel = xqz_avr_xyz(xyz_AbsVel)
   343:            
   344:            
   345:                ! Something like heat, mass, and momentum fluxes are calculated.
   346:                ! The values below are not heat, mass, and momentum fluxes, but are those divided by
   347:                ! by density and specific heat, density, and density, respectively.
   348:                !
   349: +V=====        xy_PTempFlux = - Bulk * xyz_AbsVel(:,:,kz)                                    &
   350:                  & * ( xyz_PTempAll(:,:,kz) - TempSfc / ( ExnerBZSfc + xyz_Exner(:,:,kz) ) )
   351:                !
   352: W**====        xyf_QMixFlux = 0.0d0
   353: +------>       do s = 1, CondNum
   354: |+V====          xyf_QMixFlux(:,:,IdxCG(s)) =                                 &
   355: |                  &     - Bulk * xyz_AbsVel(:,:,kz)                          &
   356: |                  &       * (                                                &
   357: |                  &            xyzf_QMixAll(:,:,kz,s)                        &
   358: |                  &          - SvapPress( SpcWetID(IdxCC(s)), TempSfc )      &
   359: |                  &             / ( xy_PressSfc )                            &
   360: |                  &             * (MolWtWet(IdxCG(s)) / MolWtDry)            &
   361: |                  &         )
   362: +------        end do
   363:                !
   364: *V----->       py_VelXFlux = - Bulk * pyz_AbsVel(:,:,kz) * pyz_VelX(:,:,kz)
   365: ||             !
   366: ||             xq_VelYFlux = - Bulk * xqz_AbsVel(:,:,kz) * xqz_VelY(:,:,kz)
   367: ||         
   368: ||         
   369: ||             ! Something like heat flux and mass flux are restricted.
   370: ||             ! This would be arbitrary treatment. 
   371: *V-----        xy_PTempFlux = max( 0.0d0, xy_PTempFlux )
   372: W++====        xyf_QMixFlux = max( 0.0d0, xyf_QMixFlux )
   373:            
   374:            
   375:                ! Tendencies by surface fluxes (convergences of fluxes) are calculated.
   376:                !
   377: +V=====        xy_DPTempDtBulk = - ( 0.0d0 - xy_PTempFlux ) / z_dz(kz)
   378:                !
   379: ++V====        xyf_DQMixDtBulk = - ( 0.0d0 - xyf_QMixFlux ) / z_dz(kz)
   380:                !
   381: *V----->       py_DVelXDtBulk = - ( 0.0d0 - py_VelXFlux ) / z_dz(kz)
   382: ||             !
   383: ||             xq_DVelYDtBulk = - ( 0.0d0 - xq_VelYFlux ) / z_dz(kz)
   384: ||         
   385: ||         
   386: ||             ! Add tendency by surface flux convergence
   387: ||             !
   388: *V-----        xyz_DPTempDt(:,:,kz) = xyz_DPTempDt(:,:,kz) + xy_DPTempDtBulk
   389: +------>       do s = 1, ncmax
   390: |+V====          xyzf_DQMixDt(:,:,kz,s) = xyzf_DQMixDt(:,:,kz,s) + xyf_DQMixDtBulk(:,:,s)
   391: +------        end do
   392: *V----->       pyz_DVelXDt (:,:,kz) = pyz_DVelXDt (:,:,kz) + py_DVelXDtBulk
   393: *V-----        xqz_DVelYDt (:,:,kz) = xqz_DVelYDt (:,:,kz) + xq_DVelYDtBulk
   394:            
   395:            
   396:            
   397:                ! Output
   398:                !
   399: WW*====        xyz_DPTempDtBulk = 0.0d0
   400: ****===        xyzf_DQMixDtBulk = 0.0d0
   401: **V---->       pyz_DVelXDtBulk  = 0.0d0
   402: **V----        xqz_DVelYDtBulk  = 0.0d0
   403:            
   404: +V=====        xyz_DPTempDtBulk(:,:,kz) = xy_DPTempDtBulk
   405: +------>       do s = 1, ncmax
   406: |+V====          xyzf_DQMixDtBulk(:,:,kz,s) = xyf_DQMixDtBulk(:,:,s)
   407: +------        end do
   408: *V----->       pyz_DVelXDtBulk (:,:,kz) = py_DVelXDtBulk
   409: *V-----        xqz_DVelYDtBulk (:,:,kz) = xq_DVelYDtBulk
   410:                !
   411:                call HistoryAutoPut(TimeN, 'PTempSfc', xyz_DPTempDtBulk(1:nx,1:ny,1:nz))
   412:                call HistoryAutoPut(TimeN, 'VelXSfc',  pyz_DVelXDtBulk (1:nx,1:ny,1:nz))
   413:                call HistoryAutoPut(TimeN, 'VelYSfc',  xqz_DVelYDtBulk (1:nx,1:ny,1:nz))
   414: +------>       do s = 1, ncmax
   415: |                call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_Sfc', &
   416: |                  & xyzf_DQMixDtBulk(1:nx,1:ny,1:nz,s))
   417: +------        end do
   418:            
   419:            
   420:                call HistoryAutoPut(TimeN, 'PTempSfcFlux', xy_PTempFlux(1:nx,1:ny))
   421:                call HistoryAutoPut(TimeN, 'VelXSfcFlux',  py_VelXFlux (1:nx,1:ny))
   422:                call HistoryAutoPut(TimeN, 'VelYSfcFlux',  xq_VelYFlux (1:nx,1:ny))
   423: +------>       do s = 1, ncmax
   424: |                call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_SfcFlux', &
   425: |                  & xyf_QMixFlux(1:nx,1:ny,s))
   426: +------        end do
   427:            
   428: +V=====        call HistoryAutoPut(TimeN, 'SfcHeatFlux', &
   429:                  & CpDry * xyz_DensBZ(1:nx,1:ny,1) * xy_PTempFlux(1:nx,1:ny) &
   430:                  &   * ( ExnerBZSfc + xyz_Exner(1:nx,1:ny,1) ) )
   431: +V=====        call HistoryAutoPut(TimeN, 'SfcXMomFlux', &
   432:                  & xyz_DensBZ(1:nx,1:ny,1) * py_VelXFlux (1:nx,1:ny))
   433: +V=====        call HistoryAutoPut(TimeN, 'SfcYMomFlux', &
   434:                  & xyz_DensBZ(1:nx,1:ny,1) * xq_VelYFlux (1:nx,1:ny))
   435: +------>       do s = 1, ncmax
   436: |+V====          call HistoryAutoPut(TimeN, trim(SpcWetSymbol(s))//'_SfcMassFlux', &
   437: |                  & xyz_DensBZ(1:nx,1:ny,1) * xyf_QMixFlux(1:nx,1:ny,s))
   438: +------        end do
   439:            
   440:                ! Set Margin
   441:                !
   442:                call SetMargin_xyz( xyz_DPTempDt )
   443:                call SetMargin_pyz( pyz_DVelXDt )
   444:                call SetMargin_xqz( xqz_DVelYDt )
   445:                call SetMargin_xyzf(xyzf_DQMixDt )
   446:            
   447:              end subroutine Surfaceflux_Bulk_forcing
   448:              
   449:            end module Surfaceflux_bulk
