Ignore:
Timestamp:
Mar 20, 2014 8:40:49 AM (10 years ago)
Author:
raasch
Message:

ONLY-attribute added to USE-statements,
kind-parameters added to all INTEGER and REAL declaration statements,
kinds are defined in new module kinds,
old module precision_kind is removed,
revision history before 2012 removed,
comment fields (!:) to be used for variable explanations added to all variable declaration statements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/advec_s_bc.f90

    r1319 r1320  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! ONLY-attribute added to USE-statements,
     23! kind-parameters added to all INTEGER and REAL declaration statements,
     24! kinds are defined in new module kinds,
     25! revision history before 2012 removed,
     26! comment fields (!:) to be used for variable explanations added to
     27! all variable declaration statements
    2328!
    2429! Former revisions:
     
    3742! 1010 2012-09-20 07:59:54Z raasch
    3843! cpp switch __nopointer added for pointer free version
    39 !
    40 ! 622 2010-12-10 08:08:13Z raasch
    41 ! optional barriers included in order to speed up collective operations
    42 !
    43 ! 247 2009-02-27 14:01:30Z heinze
    44 ! Output of messages replaced by message handling routine
    45 !
    46 ! 216 2008-11-25 07:12:43Z raasch
    47 ! Neumann boundary condition at k=nzb is explicitly set for better reading,
    48 ! although this has been already done in boundary_conds
    49 !
    50 ! 97 2007-06-21 08:23:15Z raasch
    51 ! Advection of salinity included
    52 ! Bugfix: Error in boundary condition for TKE removed
    53 !
    54 ! 63 2007-03-13 03:52:49Z raasch
    55 ! Calculation extended for gridpoint nzt
    56 !
    57 ! RCS Log replace by Id keyword, revision history cleaned up
    58 !
    59 ! Revision 1.22  2006/02/23 09:42:08  raasch
    60 ! anz renamed ngp
    6144!
    6245! Revision 1.1  1997/08/29 08:53:46  raasch
     
    7760!------------------------------------------------------------------------------!
    7861
    79     USE advection
    80     USE arrays_3d
    81     USE control_parameters
    82     USE cpulog
    83     USE grid_variables
    84     USE indices
     62    USE advection,                                                             &
     63        ONLY:  aex, bex, dex, eex
     64
     65    USE arrays_3d,                                                             &
     66        ONLY:  d, ddzw, dzu, dzw, tend, u, v, w
     67
     68    USE control_parameters,                                                    &
     69        ONLY:  dt_3d, bc_pt_t_val, bc_q_t_val, ibc_pt_b, ibc_pt_t, ibc_q_t,    &
     70               message_string, pt_slope_offset, sloping_surface, u_gtrans,     &
     71               v_gtrans
     72
     73    USE cpulog,                                                                &
     74        ONLY:  cpu_log, log_point_s
     75
     76    USE grid_variables,                                                        &
     77        ONLY:  ddx, ddy
     78
     79    USE indices,                                                               &
     80        ONLY:  nx, nxl, nxr, nyn, nys, nzb, nzt
     81
     82    USE kinds
     83
    8584    USE pegrid
    86     USE statistics
     85
     86    USE statistics,                                                            &
     87        ONLY:  rmask, statistic_regions, sums_wsts_bc_l
     88
    8789
    8890    IMPLICIT NONE
    8991
    90     CHARACTER (LEN=*) ::  sk_char
    91 
    92     INTEGER ::  i, ix, j, k, ngp, sr, type_xz_2
    93 
    94     REAL ::  cim, cimf, cip, cipf, d_new, fminus, fplus, f2, f4, f8,        &
    95              f12, f24, f48, f1920, im, ip, m2, m3, nenner, snenn, sterm,    &
    96              tendenz, t1, t2, zaehler
    97     REAL ::  fmax(2), fmax_l(2)
     92    CHARACTER (LEN=*) ::  sk_char !:
     93
     94    INTEGER(iwp) ::  i         !:
     95    INTEGER(iwp) ::  ix        !:
     96    INTEGER(iwp) ::  j         !:
     97    INTEGER(iwp) ::  k         !:
     98    INTEGER(iwp) ::  ngp       !:
     99    INTEGER(iwp) ::  sr        !:
     100    INTEGER(iwp) ::  type_xz_2 !:
     101
     102    REAL(wp) ::  cim    !:
     103    REAL(wp) ::  cimf   !:
     104    REAL(wp) ::  cip    !:
     105    REAL(wp) ::  cipf   !:
     106    REAL(wp) ::  d_new  !:
     107    REAL(wp) ::  denomi !: denominator
     108    REAL(wp) ::  fminus !:
     109    REAL(wp) ::  fplus  !:
     110    REAL(wp) ::  f2     !:
     111    REAL(wp) ::  f4     !:
     112    REAL(wp) ::  f8     !:
     113    REAL(wp) ::  f12    !:
     114    REAL(wp) ::  f24    !:
     115    REAL(wp) ::  f48    !:
     116    REAL(wp) ::  f1920  !:
     117    REAL(wp) ::  im     !:
     118    REAL(wp) ::  ip     !:
     119    REAL(wp) ::  m2     !:
     120    REAL(wp) ::  m3     !:
     121    REAL(wp) ::  numera !: numerator
     122    REAL(wp) ::  snenn  !:
     123    REAL(wp) ::  sterm  !:
     124    REAL(wp) ::  tendcy !:
     125    REAL(wp) ::  t1     !:
     126    REAL(wp) ::  t2     !:
     127
     128    REAL(wp) ::  fmax(2)   !:
     129    REAL(wp) ::  fmax_l(2) !:
     130   
    98131#if defined( __nopointer )
    99     REAL, DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  sk
     132    REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  sk !:
    100133#else
    101     REAL, DIMENSION(:,:,:), POINTER ::  sk
     134    REAL(wp), DIMENSION(:,:,:), POINTER ::  sk
    102135#endif
    103136
    104     REAL, DIMENSION(:,:), ALLOCATABLE ::  a0, a1, a12, a2, a22, immb, imme,  &
    105                                           impb, impe, ipmb, ipme, ippb, ippe
    106     REAL, DIMENSION(:,:,:), ALLOCATABLE ::  sk_p
     137    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  a0   !:
     138    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  a1   !:
     139    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  a12  !:
     140    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  a2   !:
     141    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  a22  !:
     142    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  immb !:
     143    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  imme !:
     144    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  impb !:
     145    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  impe !:
     146    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ipmb !:
     147    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ipme !:
     148    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ippb !:
     149    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ippe !:
     150   
     151    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  sk_p !:
    107152
    108153#if defined( __nec )
    109     REAL (kind=4) ::  m1n, m1z  !Wichtig: Division
    110     REAL (kind=4), DIMENSION(:,:), ALLOCATABLE :: m1, sw
     154    REAL(sp) ::  m1n, m1z  !Wichtig: Division !:
     155    REAL(sp), DIMENSION(:,:), ALLOCATABLE :: m1, sw !:
    111156#else
    112     REAL ::  m1n, m1z
    113     REAL, DIMENSION(:,:), ALLOCATABLE :: m1, sw
     157    REAL(wp) ::  m1n, m1z
     158    REAL(wp), DIMENSION(:,:), ALLOCATABLE :: m1, sw
    114159#endif
    115160
     
    148193!
    149194!-- Send left boundary, receive right boundary
    150     CALL MPI_SENDRECV( sk_p(nzb-2,nys-3,nxl+1), ngp, MPI_REAL, pleft,  0, &
    151                        sk_p(nzb-2,nys-3,nxr+2), ngp, MPI_REAL, pright, 0, &
     195    CALL MPI_SENDRECV( sk_p(nzb-2,nys-3,nxl+1), ngp, MPI_REAL, pleft,  0,      &
     196                       sk_p(nzb-2,nys-3,nxr+2), ngp, MPI_REAL, pright, 0,      &
    152197                       comm2d, status, ierr )
    153198!
    154199!-- Send right boundary, receive left boundary
    155     CALL MPI_SENDRECV( sk_p(nzb-2,nys-3,nxr-2), ngp, MPI_REAL, pright, 1, &
    156                        sk_p(nzb-2,nys-3,nxl-3), ngp, MPI_REAL, pleft,  1, &
     200    CALL MPI_SENDRECV( sk_p(nzb-2,nys-3,nxr-2), ngp, MPI_REAL, pright, 1,      &
     201                       sk_p(nzb-2,nys-3,nxl-3), ngp, MPI_REAL, pleft,  1,      &
    157202                       comm2d, status, ierr )
    158203    CALL cpu_log( log_point_s(11), 'advec_s_bc:sendrecv', 'pause' )
     
    192237       DO  j = nys, nyn
    193238          DO  k = nzb+1, nzt
    194              zaehler = ABS( sk_p(k,j,i+1) - 2.0 * sk_p(k,j,i) + sk_p(k,j,i-1) )
    195              nenner  = ABS( sk_p(k,j,i+1) - sk_p(k,j,i-1) )
    196              fmax_l(1) = MAX( fmax_l(1) , zaehler )
    197              fmax_l(2) = MAX( fmax_l(2) , nenner  )
     239             numera = ABS( sk_p(k,j,i+1) - 2.0 * sk_p(k,j,i) + sk_p(k,j,i-1) )
     240             denomi  = ABS( sk_p(k,j,i+1) - sk_p(k,j,i-1) )
     241             fmax_l(1) = MAX( fmax_l(1) , numera )
     242             fmax_l(2) = MAX( fmax_l(2) , denomi  )
    198243          ENDDO
    199244       ENDDO
     
    210255!
    211256!-- Allocate temporary arrays
    212     ALLOCATE( a0(nzb+1:nzt,nxl-1:nxr+1),   a1(nzb+1:nzt,nxl-1:nxr+1),   &
    213               a2(nzb+1:nzt,nxl-1:nxr+1),   a12(nzb+1:nzt,nxl-1:nxr+1),  &
    214               a22(nzb+1:nzt,nxl-1:nxr+1),  immb(nzb+1:nzt,nxl-1:nxr+1), &
    215               imme(nzb+1:nzt,nxl-1:nxr+1), impb(nzb+1:nzt,nxl-1:nxr+1), &
    216               impe(nzb+1:nzt,nxl-1:nxr+1), ipmb(nzb+1:nzt,nxl-1:nxr+1), &
    217               ipme(nzb+1:nzt,nxl-1:nxr+1), ippb(nzb+1:nzt,nxl-1:nxr+1), &
    218               ippe(nzb+1:nzt,nxl-1:nxr+1), m1(nzb+1:nzt,nxl-2:nxr+2),   &
    219               sw(nzb+1:nzt,nxl-1:nxr+1)                                 &
     257    ALLOCATE( a0(nzb+1:nzt,nxl-1:nxr+1),   a1(nzb+1:nzt,nxl-1:nxr+1),          &
     258              a2(nzb+1:nzt,nxl-1:nxr+1),   a12(nzb+1:nzt,nxl-1:nxr+1),         &
     259              a22(nzb+1:nzt,nxl-1:nxr+1),  immb(nzb+1:nzt,nxl-1:nxr+1),        &
     260              imme(nzb+1:nzt,nxl-1:nxr+1), impb(nzb+1:nzt,nxl-1:nxr+1),        &
     261              impe(nzb+1:nzt,nxl-1:nxr+1), ipmb(nzb+1:nzt,nxl-1:nxr+1),        &
     262              ipme(nzb+1:nzt,nxl-1:nxr+1), ippb(nzb+1:nzt,nxl-1:nxr+1),        &
     263              ippe(nzb+1:nzt,nxl-1:nxr+1), m1(nzb+1:nzt,nxl-2:nxr+2),          &
     264              sw(nzb+1:nzt,nxl-1:nxr+1)                                        &
    220265            )
    221266    imme = 0.0; impe = 0.0; ipme = 0.0; ippe = 0.0
     
    236281          DO  k = nzb+1, nzt
    237282             a12(k,i) = 0.5 * ( sk_p(k,j,i+1) - sk_p(k,j,i-1) )
    238              a22(k,i) = 0.5 * ( sk_p(k,j,i+1) - 2.0 * sk_p(k,j,i) &
     283             a22(k,i) = 0.5 * ( sk_p(k,j,i+1) - 2.0 * sk_p(k,j,i)              &
    239284                                              + sk_p(k,j,i-1) )
    240              a0(k,i) = ( 9.0 * sk_p(k,j,i+2) - 116.0 * sk_p(k,j,i+1)    &
    241                          + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k,j,i-1) &
     285             a0(k,i) = ( 9.0 * sk_p(k,j,i+2) - 116.0 * sk_p(k,j,i+1)           &
     286                         + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k,j,i-1)        &
    242287                         + 9.0 * sk_p(k,j,i-2) ) * f1920
    243              a1(k,i) = ( -5.0 * sk_p(k,j,i+2) + 34.0 * sk_p(k,j,i+1)  &
    244                          - 34.0 * sk_p(k,j,i-1) + 5.0 * sk_p(k,j,i-2) &
     288             a1(k,i) = ( -5.0 * sk_p(k,j,i+2) + 34.0 * sk_p(k,j,i+1)           &
     289                         - 34.0 * sk_p(k,j,i-1) + 5.0 * sk_p(k,j,i-2)          &
    245290                       ) * f48
    246              a2(k,i) = ( -3.0 * sk_p(k,j,i+2) + 36.0 * sk_p(k,j,i+1) &
    247                          - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k,j,i-1) &
     291             a2(k,i) = ( -3.0 * sk_p(k,j,i+2) + 36.0 * sk_p(k,j,i+1)           &
     292                         - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k,j,i-1)           &
    248293                         - 3.0 * sk_p(k,j,i-2) ) * f48
    249294          ENDDO
     
    259304             cipf = 1.0 - 2.0 * cip
    260305             cimf = 1.0 - 2.0 * cim
    261              ip   =   a0(k,i)   * f2  * ( 1.0 - cipf )             &
    262                     + a1(k,i)   * f8  * ( 1.0 - cipf*cipf )        &
     306             ip   =   a0(k,i)   * f2  * ( 1.0 - cipf )                         &
     307                    + a1(k,i)   * f8  * ( 1.0 - cipf*cipf )                    &
    263308                    + a2(k,i)   * f24 * ( 1.0 - cipf*cipf*cipf )
    264              im   =   a0(k,i+1) * f2  * ( 1.0 - cimf )             &
    265                     - a1(k,i+1) * f8  * ( 1.0 - cimf*cimf )        &
     309             im   =   a0(k,i+1) * f2  * ( 1.0 - cimf )                         &
     310                    - a1(k,i+1) * f8  * ( 1.0 - cimf*cimf )                    &
    266311                    + a2(k,i+1) * f24 * ( 1.0 - cimf*cimf*cimf )
    267312             ip   = MAX( ip, 0.0 )
     
    274319             cipf = 1.0 - 2.0 * cip
    275320             cimf = 1.0 - 2.0 * cim
    276              ip   =   a0(k,i-1) * f2  * ( 1.0 - cipf )             &
    277                     + a1(k,i-1) * f8  * ( 1.0 - cipf*cipf )        &
     321             ip   =   a0(k,i-1) * f2  * ( 1.0 - cipf )                         &
     322                    + a1(k,i-1) * f8  * ( 1.0 - cipf*cipf )                    &
    278323                    + a2(k,i-1) * f24 * ( 1.0 - cipf*cipf*cipf )
    279              im   =   a0(k,i)   * f2  * ( 1.0 - cimf )             &
    280                     - a1(k,i)   * f8  * ( 1.0 - cimf*cimf )        &
     324             im   =   a0(k,i)   * f2  * ( 1.0 - cimf )                         &
     325                    - a1(k,i)   * f8  * ( 1.0 - cimf*cimf )                    &
    281326                    + a2(k,i)   * f24 * ( 1.0 - cimf*cimf*cimf )
    282327             ip   = MAX( ip, 0.0 )
     
    309354       DO  i = nxl-1, nxr+1
    310355          DO  k = nzb+1, nzt
    311              m2 = 2.0 * ABS( a1(k,i) - a12(k,i) ) / &
     356             m2 = 2.0 * ABS( a1(k,i) - a12(k,i) ) /                            &
    312357                  MAX( ABS( a1(k,i) + a12(k,i) ), 1E-35 )
    313358             IF ( ABS( a1(k,i) + a12(k,i) ) < fmax(2) )  m2 = 0.0
    314359
    315              m3 = 2.0 * ABS( a2(k,i) - a22(k,i) ) / &
     360             m3 = 2.0 * ABS( a2(k,i) - a22(k,i) ) /                            &
    316361                  MAX( ABS( a2(k,i) + a22(k,i) ), 1E-35 )
    317362             IF ( ABS( a2(k,i) + a22(k,i) ) < fmax(1) )  m3 = 0.0
     
    322367
    323368!--          *VOCL STMT,IF(10)
    324              IF ( m1(k,i-1) == 1.0 .OR. m1(k,i) == 1.0 .OR. m1(k,i+1) == 1.0 &
    325                   .OR.  m2 > t2  .OR.  m3 > T2  .OR.                         &
    326                   ( m1(k,i) > t1  .AND.  m1(k,i-1) /= -1.0  .AND.            &
    327                     m1(k,i) /= -1.0  .AND.  m1(k,i+1) /= -1.0 )              &
     369             IF ( m1(k,i-1) == 1.0 .OR. m1(k,i) == 1.0 .OR. m1(k,i+1) == 1.0   &
     370                  .OR.  m2 > t2  .OR.  m3 > t2  .OR.                           &
     371                  ( m1(k,i) > t1  .AND.  m1(k,i-1) /= -1.0  .AND.              &
     372                    m1(k,i) /= -1.0  .AND.  m1(k,i+1) /= -1.0 )                &
    328373                )  sw(k,i) = 1.0
    329374          ENDDO
     
    425470       DO  i = nxl, nxr
    426471          DO  k = nzb+1, nzt
    427              fplus  = ( 1.0 - sw(k,i)   ) * ippb(k,i) + sw(k,i)   * ippe(k,i) &
     472             fplus  = ( 1.0 - sw(k,i)   ) * ippb(k,i) + sw(k,i)   * ippe(k,i)  &
    428473                    - ( 1.0 - sw(k,i+1) ) * impb(k,i) - sw(k,i+1) * impe(k,i)
    429              fminus = ( 1.0 - sw(k,i-1) ) * ipmb(k,i) + sw(k,i-1) * ipme(k,i) &
     474             fminus = ( 1.0 - sw(k,i-1) ) * ipmb(k,i) + sw(k,i-1) * ipme(k,i)  &
    430475                    - ( 1.0 - sw(k,i)   ) * immb(k,i) - sw(k,i)   * imme(k,i)
    431              tendenz = fplus - fminus
     476             tendcy = fplus - fminus
    432477!
    433478!--           Removed in order to optimize speed
    434479!             ffmax   = MAX( ABS( fplus ), ABS( fminus ), 1E-35 )
    435 !             IF ( ( ABS( tendenz ) / ffmax ) < 1E-7 )  tendenz = 0.0
     480!             IF ( ( ABS( tendcy ) / ffmax ) < 1E-7 )  tendcy = 0.0
    436481!
    437482!--          Density correction because of possible remaining divergences
    438483             d_new = d(k,j,i) - ( u(k,j,i+1) - u(k,j,i) ) * dt_3d * ddx
    439              sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendenz ) / &
     484             sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendcy ) /    &
    440485                           ( 1.0 + d_new )
    441486             d(k,j,i)  = d_new
     
    447492!
    448493!-- Deallocate temporary arrays
    449     DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme, &
     494    DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme,      &
    450495                ippb, ippe, m1, sw )
    451496
     
    455500#if defined( __parallel )
    456501    ngp = ( nzt - nzb + 6 ) * ( nyn - nys + 7 )
    457     CALL MPI_TYPE_VECTOR( nxr-nxl+7, 3*(nzt-nzb+6), ngp, MPI_REAL, &
     502    CALL MPI_TYPE_VECTOR( nxr-nxl+7, 3*(nzt-nzb+6), ngp, MPI_REAL,             &
    458503                          type_xz_2, ierr )
    459504    CALL MPI_TYPE_COMMIT( type_xz_2, ierr )
     
    461506!-- Send front boundary, receive rear boundary
    462507    CALL cpu_log( log_point_s(11), 'advec_s_bc:sendrecv', 'continue' )
    463     CALL MPI_SENDRECV( sk_p(nzb-2,nys,nxl-3),   1, type_xz_2, psouth, 0, &
    464                        sk_p(nzb-2,nyn+1,nxl-3), 1, type_xz_2, pnorth, 0, &
     508    CALL MPI_SENDRECV( sk_p(nzb-2,nys,nxl-3),   1, type_xz_2, psouth, 0,       &
     509                       sk_p(nzb-2,nyn+1,nxl-3), 1, type_xz_2, pnorth, 0,       &
    465510                       comm2d, status, ierr )
    466511!
    467512!-- Send rear boundary, receive front boundary
    468     CALL MPI_SENDRECV( sk_p(nzb-2,nyn-2,nxl-3), 1, type_xz_2, pnorth, 1, &
    469                        sk_p(nzb-2,nys-3,nxl-3), 1, type_xz_2, psouth, 1, &
     513    CALL MPI_SENDRECV( sk_p(nzb-2,nyn-2,nxl-3), 1, type_xz_2, pnorth, 1,       &
     514                       sk_p(nzb-2,nys-3,nxl-3), 1, type_xz_2, psouth, 1,       &
    470515                       comm2d, status, ierr )
    471516    CALL MPI_TYPE_FREE( type_xz_2, ierr )
     
    490535       DO  j = nys, nyn
    491536          DO  k = nzb+1, nzt
    492              zaehler = ABS( sk_p(k,j+1,i) - 2.0 * sk_p(k,j,i) + sk_p(k,j-1,i) )
    493              nenner  = ABS( sk_p(k,j+1,i) - sk_p(k,j-1,i) )
    494              fmax_l(1) = MAX( fmax_l(1) , zaehler )
    495              fmax_l(2) = MAX( fmax_l(2) , nenner  )
     537             numera = ABS( sk_p(k,j+1,i) - 2.0 * sk_p(k,j,i) + sk_p(k,j-1,i) )
     538             denomi  = ABS( sk_p(k,j+1,i) - sk_p(k,j-1,i) )
     539             fmax_l(1) = MAX( fmax_l(1) , numera )
     540             fmax_l(2) = MAX( fmax_l(2) , denomi  )
    496541          ENDDO
    497542       ENDDO
     
    508553!
    509554!-- Allocate temporary arrays
    510     ALLOCATE( a0(nzb+1:nzt,nys-1:nyn+1),   a1(nzb+1:nzt,nys-1:nyn+1),   &
    511               a2(nzb+1:nzt,nys-1:nyn+1),   a12(nzb+1:nzt,nys-1:nyn+1),  &
    512               a22(nzb+1:nzt,nys-1:nyn+1),  immb(nzb+1:nzt,nys-1:nyn+1), &
    513               imme(nzb+1:nzt,nys-1:nyn+1), impb(nzb+1:nzt,nys-1:nyn+1), &
    514               impe(nzb+1:nzt,nys-1:nyn+1), ipmb(nzb+1:nzt,nys-1:nyn+1), &
    515               ipme(nzb+1:nzt,nys-1:nyn+1), ippb(nzb+1:nzt,nys-1:nyn+1), &
    516               ippe(nzb+1:nzt,nys-1:nyn+1), m1(nzb+1:nzt,nys-2:nyn+2),   &
    517               sw(nzb+1:nzt,nys-1:nyn+1)                                 &
     555    ALLOCATE( a0(nzb+1:nzt,nys-1:nyn+1),   a1(nzb+1:nzt,nys-1:nyn+1),          &
     556              a2(nzb+1:nzt,nys-1:nyn+1),   a12(nzb+1:nzt,nys-1:nyn+1),         &
     557              a22(nzb+1:nzt,nys-1:nyn+1),  immb(nzb+1:nzt,nys-1:nyn+1),        &
     558              imme(nzb+1:nzt,nys-1:nyn+1), impb(nzb+1:nzt,nys-1:nyn+1),        &
     559              impe(nzb+1:nzt,nys-1:nyn+1), ipmb(nzb+1:nzt,nys-1:nyn+1),        &
     560              ipme(nzb+1:nzt,nys-1:nyn+1), ippb(nzb+1:nzt,nys-1:nyn+1),        &
     561              ippe(nzb+1:nzt,nys-1:nyn+1), m1(nzb+1:nzt,nys-2:nyn+2),          &
     562              sw(nzb+1:nzt,nys-1:nyn+1)                                        &
    518563            )
    519564    imme = 0.0; impe = 0.0; ipme = 0.0; ippe = 0.0
     
    528573          DO  k = nzb+1, nzt
    529574             a12(k,j) = 0.5 * ( sk_p(k,j+1,i) - sk_p(k,j-1,i) )
    530              a22(k,j) = 0.5 * ( sk_p(k,j+1,i) - 2.0 * sk_p(k,j,i) &
     575             a22(k,j) = 0.5 * ( sk_p(k,j+1,i) - 2.0 * sk_p(k,j,i)              &
    531576                                              + sk_p(k,j-1,i) )
    532              a0(k,j) = ( 9.0 * sk_p(k,j+2,i) - 116.0 * sk_p(k,j+1,i)    &
    533                          + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k,j-1,i) &
     577             a0(k,j) = ( 9.0 * sk_p(k,j+2,i) - 116.0 * sk_p(k,j+1,i)           &
     578                         + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k,j-1,i)        &
    534579                         + 9.0 * sk_p(k,j-2,i) ) * f1920
    535              a1(k,j) = ( -5.0 * sk_p(k,j+2,i) + 34.0 * sk_p(k,j+1,i)  &
    536                          - 34.0 * sk_p(k,j-1,i) + 5.0 * sk_p(k,j-2,i) &
     580             a1(k,j) = ( -5.0 * sk_p(k,j+2,i) + 34.0 * sk_p(k,j+1,i)           &
     581                         - 34.0 * sk_p(k,j-1,i) + 5.0 * sk_p(k,j-2,i)          &
    537582                       ) * f48
    538              a2(k,j) = ( -3.0 * sk_p(k,j+2,i) + 36.0 * sk_p(k,j+1,i) &
    539                          - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k,j-1,i) &
     583             a2(k,j) = ( -3.0 * sk_p(k,j+2,i) + 36.0 * sk_p(k,j+1,i)           &
     584                         - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k,j-1,i)           &
    540585                         - 3.0 * sk_p(k,j-2,i) ) * f48
    541586          ENDDO
     
    551596             cipf = 1.0 - 2.0 * cip
    552597             cimf = 1.0 - 2.0 * cim
    553              ip   =   a0(k,j)   * f2  * ( 1.0 - cipf )             &
    554                     + a1(k,j)   * f8  * ( 1.0 - cipf*cipf )        &
     598             ip   =   a0(k,j)   * f2  * ( 1.0 - cipf )                         &
     599                    + a1(k,j)   * f8  * ( 1.0 - cipf*cipf )                    &
    555600                    + a2(k,j)   * f24 * ( 1.0 - cipf*cipf*cipf )
    556              im   =   a0(k,j+1) * f2  * ( 1.0 - cimf )             &
    557                     - a1(k,j+1) * f8  * ( 1.0 - cimf*cimf )        &
     601             im   =   a0(k,j+1) * f2  * ( 1.0 - cimf )                         &
     602                    - a1(k,j+1) * f8  * ( 1.0 - cimf*cimf )                    &
    558603                    + a2(k,j+1) * f24 * ( 1.0 - cimf*cimf*cimf )
    559604             ip   = MAX( ip, 0.0 )
     
    566611             cipf = 1.0 - 2.0 * cip
    567612             cimf = 1.0 - 2.0 * cim
    568              ip   =   a0(k,j-1) * f2  * ( 1.0 - cipf )             &
    569                     + a1(k,j-1) * f8  * ( 1.0 - cipf*cipf )        &
     613             ip   =   a0(k,j-1) * f2  * ( 1.0 - cipf )                         &
     614                    + a1(k,j-1) * f8  * ( 1.0 - cipf*cipf )                    &
    570615                    + a2(k,j-1) * f24 * ( 1.0 - cipf*cipf*cipf )
    571              im   =   a0(k,j)   * f2  * ( 1.0 - cimf )             &
    572                     - a1(k,j)   * f8  * ( 1.0 - cimf*cimf )        &
     616             im   =   a0(k,j)   * f2  * ( 1.0 - cimf )                         &
     617                    - a1(k,j)   * f8  * ( 1.0 - cimf*cimf )                    &
    573618                    + a2(k,j)   * f24 * ( 1.0 - cimf*cimf*cimf )
    574619             ip   = MAX( ip, 0.0 )
     
    601646       DO  j = nys-1, nyn+1
    602647          DO  k = nzb+1, nzt
    603              m2 = 2.0 * ABS( a1(k,j) - a12(k,j) ) / &
     648             m2 = 2.0 * ABS( a1(k,j) - a12(k,j) ) /                            &
    604649                  MAX( ABS( a1(k,j) + a12(k,j) ), 1E-35 )
    605650             IF ( ABS( a1(k,j) + a12(k,j) ) < fmax(2) )  m2 = 0.0
    606651
    607              m3 = 2.0 * ABS( a2(k,j) - a22(k,j) ) / &
     652             m3 = 2.0 * ABS( a2(k,j) - a22(k,j) ) /                            &
    608653                  MAX( ABS( a2(k,j) + a22(k,j) ), 1E-35 )
    609654             IF ( ABS( a2(k,j) + a22(k,j) ) < fmax(1) )  m3 = 0.0
     
    614659
    615660!--          *VOCL STMT,IF(10)
    616              IF ( m1(k,j-1) == 1.0 .OR. m1(k,j) == 1.0 .OR. m1(k,j+1) == 1.0 &
    617                   .OR.  m2 > t2  .OR.  m3 > T2  .OR.                         &
    618                   ( m1(k,j) > t1  .AND.  m1(k,j-1) /= -1.0  .AND.            &
    619                     m1(k,j) /= -1.0  .AND.  m1(k,j+1) /= -1.0 )              &
     661             IF ( m1(k,j-1) == 1.0 .OR. m1(k,j) == 1.0 .OR. m1(k,j+1) == 1.0   &
     662                  .OR.  m2 > t2  .OR.  m3 > t2  .OR.                           &
     663                  ( m1(k,j) > t1  .AND.  m1(k,j-1) /= -1.0  .AND.              &
     664                    m1(k,j) /= -1.0  .AND.  m1(k,j+1) /= -1.0 )                &
    620665                )  sw(k,j) = 1.0
    621666          ENDDO
     
    717762       DO  j = nys, nyn
    718763          DO  k = nzb+1, nzt
    719              fplus  = ( 1.0 - sw(k,j)   ) * ippb(k,j) + sw(k,j)   * ippe(k,j) &
     764             fplus  = ( 1.0 - sw(k,j)   ) * ippb(k,j) + sw(k,j)   * ippe(k,j)  &
    720765                    - ( 1.0 - sw(k,j+1) ) * impb(k,j) - sw(k,j+1) * impe(k,j)
    721              fminus = ( 1.0 - sw(k,j-1) ) * ipmb(k,j) + sw(k,j-1) * ipme(k,j) &
     766             fminus = ( 1.0 - sw(k,j-1) ) * ipmb(k,j) + sw(k,j-1) * ipme(k,j)  &
    722767                    - ( 1.0 - sw(k,j)   ) * immb(k,j) - sw(k,j)   * imme(k,j)
    723              tendenz = fplus - fminus
     768             tendcy = fplus - fminus
    724769!
    725770!--           Removed in order to optimise speed
    726771!             ffmax   = MAX( ABS( fplus ), ABS( fminus ), 1E-35 )
    727 !             IF ( ( ABS( tendenz ) / ffmax ) < 1E-7 )  tendenz = 0.0
     772!             IF ( ( ABS( tendcy ) / ffmax ) < 1E-7 )  tendcy = 0.0
    728773!
    729774!--          Density correction because of possible remaining divergences
    730775             d_new = d(k,j,i) - ( v(k,j+1,i) - v(k,j,i) ) * dt_3d * ddy
    731              sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendenz ) / &
     776             sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendcy ) /    &
    732777                           ( 1.0 + d_new )
    733778             d(k,j,i)  = d_new
     
    741786!
    742787!-- Deallocate temporary arrays
    743     DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme, &
     788    DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme,      &
    744789                ippb, ippe, m1, sw )
    745790
     
    879924    ELSE
    880925
    881        WRITE( message_string, * ) 'no vertical boundary condi', &
     926       WRITE( message_string, * ) 'no vertical boundary condi',                &
    882927                                'tion for variable "', sk_char, '"'
    883928       CALL message( 'advec_s_bc', 'PA0158', 1, 2, 0, 6, 0 )
     
    891936       DO  j = nys, nyn
    892937          DO  k = nzb, nzt+1
    893              zaehler = ABS( sk_p(k+1,j,i) - 2.0 * sk_p(k,j,i) + sk_p(k-1,j,i) )
    894              nenner  = ABS( sk_p(k+1,j,i+1) - sk_p(k-1,j,i) )
    895              fmax_l(1) = MAX( fmax_l(1) , zaehler )
    896              fmax_l(2) = MAX( fmax_l(2) , nenner  )
     938             numera = ABS( sk_p(k+1,j,i) - 2.0 * sk_p(k,j,i) + sk_p(k-1,j,i) )
     939             denomi  = ABS( sk_p(k+1,j,i+1) - sk_p(k-1,j,i) )
     940             fmax_l(1) = MAX( fmax_l(1) , numera )
     941             fmax_l(2) = MAX( fmax_l(2) , denomi  )
    897942          ENDDO
    898943       ENDDO
     
    909954!
    910955!-- Allocate temporary arrays
    911     ALLOCATE( a0(nzb:nzt+1,nys:nyn),   a1(nzb:nzt+1,nys:nyn),   &
    912               a2(nzb:nzt+1,nys:nyn),   a12(nzb:nzt+1,nys:nyn),  &
    913               a22(nzb:nzt+1,nys:nyn),  immb(nzb+1:nzt,nys:nyn), &
    914               imme(nzb+1:nzt,nys:nyn), impb(nzb+1:nzt,nys:nyn), &
    915               impe(nzb+1:nzt,nys:nyn), ipmb(nzb+1:nzt,nys:nyn), &
    916               ipme(nzb+1:nzt,nys:nyn), ippb(nzb+1:nzt,nys:nyn), &
    917               ippe(nzb+1:nzt,nys:nyn), m1(nzb-1:nzt+2,nys:nyn), &
    918               sw(nzb:nzt+1,nys:nyn)                             &
     956    ALLOCATE( a0(nzb:nzt+1,nys:nyn),   a1(nzb:nzt+1,nys:nyn),                  &
     957              a2(nzb:nzt+1,nys:nyn),   a12(nzb:nzt+1,nys:nyn),                 &
     958              a22(nzb:nzt+1,nys:nyn),  immb(nzb+1:nzt,nys:nyn),                &
     959              imme(nzb+1:nzt,nys:nyn), impb(nzb+1:nzt,nys:nyn),                &
     960              impe(nzb+1:nzt,nys:nyn), ipmb(nzb+1:nzt,nys:nyn),                &
     961              ipme(nzb+1:nzt,nys:nyn), ippb(nzb+1:nzt,nys:nyn),                &
     962              ippe(nzb+1:nzt,nys:nyn), m1(nzb-1:nzt+2,nys:nyn),                &
     963              sw(nzb:nzt+1,nys:nyn)                                            &
    919964            )
    920965    imme = 0.0; impe = 0.0; ipme = 0.0; ippe = 0.0
     
    929974          DO  k = nzb, nzt+1
    930975             a12(k,j) = 0.5 * ( sk_p(k+1,j,i) - sk_p(k-1,j,i) )
    931              a22(k,j) = 0.5 * ( sk_p(k+1,j,i) - 2.0 * sk_p(k,j,i) &
     976             a22(k,j) = 0.5 * ( sk_p(k+1,j,i) - 2.0 * sk_p(k,j,i)              &
    932977                                              + sk_p(k-1,j,i) )
    933              a0(k,j) = ( 9.0 * sk_p(k+2,j,i) - 116.0 * sk_p(k+1,j,i)    &
    934                          + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k-1,j,i) &
     978             a0(k,j) = ( 9.0 * sk_p(k+2,j,i) - 116.0 * sk_p(k+1,j,i)           &
     979                         + 2134.0 * sk_p(k,j,i) - 116.0 * sk_p(k-1,j,i)        &
    935980                         + 9.0 * sk_p(k-2,j,i) ) * f1920
    936              a1(k,j) = ( -5.0 * sk_p(k+2,j,i) + 34.0 * sk_p(k+1,j,i)  &
    937                          - 34.0 * sk_p(k-1,j,i) + 5.0 * sk_p(k-2,j,i) &
     981             a1(k,j) = ( -5.0 * sk_p(k+2,j,i) + 34.0 * sk_p(k+1,j,i)           &
     982                         - 34.0 * sk_p(k-1,j,i) + 5.0 * sk_p(k-2,j,i)          &
    938983                       ) * f48
    939              a2(k,j) = ( -3.0 * sk_p(k+2,j,i) + 36.0 * sk_p(k+1,j,i) &
    940                          - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k-1,j,i) &
     984             a2(k,j) = ( -3.0 * sk_p(k+2,j,i) + 36.0 * sk_p(k+1,j,i)           &
     985                         - 66.0 * sk_p(k,j,i) + 36.0 * sk_p(k-1,j,i)           &
    941986                         - 3.0 * sk_p(k-2,j,i) ) * f48
    942987          ENDDO
     
    952997             cipf = 1.0 - 2.0 * cip
    953998             cimf = 1.0 - 2.0 * cim
    954              ip   =   a0(k,j)   * f2  * ( 1.0 - cipf )             &
    955                     + a1(k,j)   * f8  * ( 1.0 - cipf*cipf )        &
     999             ip   =   a0(k,j)   * f2  * ( 1.0 - cipf )                         &
     1000                    + a1(k,j)   * f8  * ( 1.0 - cipf*cipf )                    &
    9561001                    + a2(k,j)   * f24 * ( 1.0 - cipf*cipf*cipf )
    957              im   =   a0(k+1,j) * f2  * ( 1.0 - cimf )             &
    958                     - a1(k+1,j) * f8  * ( 1.0 - cimf*cimf )        &
     1002             im   =   a0(k+1,j) * f2  * ( 1.0 - cimf )                         &
     1003                    - a1(k+1,j) * f8  * ( 1.0 - cimf*cimf )                    &
    9591004                    + a2(k+1,j) * f24 * ( 1.0 - cimf*cimf*cimf )
    9601005             ip   = MAX( ip, 0.0 )
     
    9671012             cipf = 1.0 - 2.0 * cip
    9681013             cimf = 1.0 - 2.0 * cim
    969              ip   =   a0(k-1,j) * f2  * ( 1.0 - cipf )             &
    970                     + a1(k-1,j) * f8  * ( 1.0 - cipf*cipf )        &
     1014             ip   =   a0(k-1,j) * f2  * ( 1.0 - cipf )                         &
     1015                    + a1(k-1,j) * f8  * ( 1.0 - cipf*cipf )                    &
    9711016                    + a2(k-1,j) * f24 * ( 1.0 - cipf*cipf*cipf )
    972              im   =   a0(k,j)   * f2  * ( 1.0 - cimf )             &
    973                     - a1(k,j)   * f8  * ( 1.0 - cimf*cimf )        &
     1017             im   =   a0(k,j)   * f2  * ( 1.0 - cimf )                         &
     1018                    - a1(k,j)   * f8  * ( 1.0 - cimf*cimf )                    &
    9741019                    + a2(k,j)   * f24 * ( 1.0 - cimf*cimf*cimf )
    9751020             ip   = MAX( ip, 0.0 )
     
    10021047       DO  j = nys, nyn
    10031048          DO  k = nzb, nzt+1
    1004              m2 = 2.0 * ABS( a1(k,j) - a12(k,j) ) / &
     1049             m2 = 2.0 * ABS( a1(k,j) - a12(k,j) ) /                            &
    10051050                  MAX( ABS( a1(k,j) + a12(k,j) ), 1E-35 )
    10061051             IF ( ABS( a1(k,j) + a12(k,j) ) < fmax(2) )  m2 = 0.0
    10071052
    1008              m3 = 2.0 * ABS( a2(k,j) - a22(k,j) ) / &
     1053             m3 = 2.0 * ABS( a2(k,j) - a22(k,j) ) /                            &
    10091054                  MAX( ABS( a2(k,j) + a22(k,j) ), 1E-35 )
    10101055             IF ( ABS( a2(k,j) + a22(k,j) ) < fmax(1) )  m3 = 0.0
     
    10151060
    10161061!--          *VOCL STMT,IF(10)
    1017              IF ( m1(k-1,j) == 1.0 .OR. m1(k,j) == 1.0 .OR. m1(k+1,j) == 1.0 &
    1018                   .OR.  m2 > t2  .OR.  m3 > T2  .OR.                         &
    1019                   ( m1(k,j) > t1  .AND.  m1(k-1,j) /= -1.0  .AND.            &
    1020                     m1(k,j) /= -1.0  .AND.  m1(k+1,j) /= -1.0 )              &
     1062             IF ( m1(k-1,j) == 1.0 .OR. m1(k,j) == 1.0 .OR. m1(k+1,j) == 1.0   &
     1063                  .OR.  m2 > t2  .OR.  m3 > t2  .OR.                           &
     1064                  ( m1(k,j) > t1  .AND.  m1(k-1,j) /= -1.0  .AND.              &
     1065                    m1(k,j) /= -1.0  .AND.  m1(k+1,j) /= -1.0 )                &
    10211066                )  sw(k,j) = 1.0
    10221067          ENDDO
     
    11181163       DO  j = nys, nyn
    11191164          DO  k = nzb+1, nzt
    1120              fplus  = ( 1.0 - sw(k,j)   ) * ippb(k,j) + sw(k,j)   * ippe(k,j) &
     1165             fplus  = ( 1.0 - sw(k,j)   ) * ippb(k,j) + sw(k,j)   * ippe(k,j)  &
    11211166                    - ( 1.0 - sw(k+1,j) ) * impb(k,j) - sw(k+1,j) * impe(k,j)
    1122              fminus = ( 1.0 - sw(k-1,j) ) * ipmb(k,j) + sw(k-1,j) * ipme(k,j) &
     1167             fminus = ( 1.0 - sw(k-1,j) ) * ipmb(k,j) + sw(k-1,j) * ipme(k,j)  &
    11231168                    - ( 1.0 - sw(k,j)   ) * immb(k,j) - sw(k,j)   * imme(k,j)
    1124              tendenz = fplus - fminus
     1169             tendcy = fplus - fminus
    11251170!
    11261171!--           Removed in order to optimise speed
    11271172!             ffmax   = MAX( ABS( fplus ), ABS( fminus ), 1E-35 )
    1128 !             IF ( ( ABS( tendenz ) / ffmax ) < 1E-7 )  tendenz = 0.0
     1173!             IF ( ( ABS( tendcy ) / ffmax ) < 1E-7 )  tendcy = 0.0
    11291174!
    11301175!--          Density correction because of possible remaining divergences
    11311176             d_new = d(k,j,i) - ( w(k,j,i) - w(k-1,j,i) ) * dt_3d * ddzw(k)
    1132              sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendenz ) / &
     1177             sk_p(k,j,i) = ( ( 1.0 + d(k,j,i) ) * sk_p(k,j,i) - tendcy ) /    &
    11331178                           ( 1.0 + d_new )
    11341179!
     
    11451190             DO  j = nys, nyn
    11461191                DO  k = nzb+1, nzt
    1147                    sums_wsts_bc_l(k,sr) = sums_wsts_bc_l(k,sr) + &
     1192                   sums_wsts_bc_l(k,sr) = sums_wsts_bc_l(k,sr) +               &
    11481193                                          m1(k,j) * rmask(j,i,sr)
    11491194                ENDDO
     
    11581203!
    11591204!-- Deallocate temporary arrays
    1160     DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme, &
     1205    DEALLOCATE( a0, a1, a2, a12, a22, immb, imme, impb, impe, ipmb, ipme,      &
    11611206                ippb, ippe, m1, sw )
    11621207
Note: See TracChangeset for help on using the changeset viewer.