Changeset 743


Ignore:
Timestamp:
Aug 18, 2011 4:10:16 PM (10 years ago)
Author:
suehring
Message:

Calculation of turbulent fluxes with WS-scheme only for the whole model domain, not for user-defined subregions

Location:
palm/trunk/SOURCE
Files:
3 edited

Legend:

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

    r737 r743  
    44! Current revisions:
    55! ------------------
     6! Evaluation of turbulent fluxes with WS-scheme only for the whole model
     7! domain. Therefor dimension of arrays needed for statistical evaluation
     8! decreased.
    69!
    710! Former revisions:
     
    130133       IF ( ws_scheme_mom )  THEN
    131134
    132           ALLOCATE( sums_wsus_ws_l(nzb:nzt+1,0:statistic_regions),  &
    133                     sums_wsvs_ws_l(nzb:nzt+1,0:statistic_regions),  &
    134                     sums_us2_ws_l(nzb:nzt+1,0:statistic_regions),   &
    135                     sums_vs2_ws_l(nzb:nzt+1,0:statistic_regions),   &
    136                     sums_ws2_ws_l(nzb:nzt+1,0:statistic_regions))
     135          ALLOCATE( sums_wsus_ws_l(nzb:nzt+1), sums_wsvs_ws_l(nzb:nzt+1),  &
     136                    sums_us2_ws_l(nzb:nzt+1),  sums_vs2_ws_l(nzb:nzt+1),   &
     137                    sums_ws2_ws_l(nzb:nzt+1) )
    137138
    138139          sums_wsus_ws_l = 0.0
     
    146147       IF ( ws_scheme_sca )  THEN
    147148
    148           ALLOCATE( sums_wspts_ws_l(nzb:nzt+1,0:statistic_regions) )
     149          ALLOCATE( sums_wspts_ws_l(nzb:nzt+1) )
    149150          sums_wspts_ws_l = 0.0
    150151
    151152          IF ( humidity .OR. passive_scalar )  THEN
    152              ALLOCATE( sums_wsqs_ws_l(nzb:nzt+1,0:statistic_regions) )
     153             ALLOCATE( sums_wsqs_ws_l(nzb:nzt+1) )
    153154             sums_wsqs_ws_l = 0.0
    154155          ENDIF
    155156
    156157          IF ( ocean )  THEN
    157              ALLOCATE( sums_wssas_ws_l(nzb:nzt+1,0:statistic_regions) )
     158             ALLOCATE( sums_wssas_ws_l(nzb:nzt+1) )
    158159             sums_wssas_ws_l = 0.0
    159160          ENDIF
     
    640641
    641642             DO  k = nzb_s_inner(j,i), nzt
    642                 sums_wspts_ws_l(k,:) = sums_wspts_ws_l(k,:) +                  &
     643                sums_wspts_ws_l(k) = sums_wspts_ws_l(k) +                      &
    643644                                       ( flux_t(k) + diss_t(k) )               &
    644                                  * weight_substep(intermediate_timestep_count) &
    645                                        * rmask(j,i,:)
     645                                 * weight_substep(intermediate_timestep_count)
    646646             ENDDO
    647647             
     
    649649
    650650             DO  k = nzb_s_inner(j,i), nzt
    651                 sums_wssas_ws_l(k,:) = sums_wssas_ws_l(k,:) +                  &
     651                sums_wssas_ws_l(k) = sums_wssas_ws_l(k) +                      &
    652652                                       ( flux_t(k) + diss_t(k) )               &
    653                                  * weight_substep(intermediate_timestep_count) &
    654                                        * rmask(j,i,:)
     653                                 * weight_substep(intermediate_timestep_count)
    655654             ENDDO
    656655             
     
    658657
    659658             DO  k = nzb_s_inner(j,i), nzt
    660                 sums_wsqs_ws_l(k,:)  = sums_wsqs_ws_l(k,:) +                   &
     659                sums_wsqs_ws_l(k)  = sums_wsqs_ws_l(k) +                       &
    661660                                      ( flux_t(k) + diss_t(k) )                &
    662                                  * weight_substep(intermediate_timestep_count) &
    663                                       * rmask(j,i,:)
     661                                 * weight_substep(intermediate_timestep_count)
    664662             ENDDO
    665663
     
    905903!--        Statistical Evaluation of u'u'. The factor has to be applied for
    906904!--        right evaluation when gallilei_trans = .T. .
    907            sums_us2_ws_l(k,:) = sums_us2_ws_l(k,:)                            &
     905           sums_us2_ws_l(k) = sums_us2_ws_l(k)                                &
    908906             + ( flux_r(k) *                                                  &
    909                ( u_comp(k) - 2.0 * hom(k,1,1,:) )                             &
     907               ( u_comp(k) - 2.0 * hom(k,1,1,0) )                             &
    910908             / ( u_comp(k) - gu + 1.0E-20      )                              &
    911909             +   diss_r(k) *                                                  &
    912                  ABS( u_comp(k) - 2.0 * hom(k,1,1,:) )                        &
     910                 ABS( u_comp(k) - 2.0 * hom(k,1,1,0) )                        &
    913911             / ( ABS( u_comp(k) - gu ) + 1.0E-20 ) )                          &
    914              *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     912             *   weight_substep(intermediate_timestep_count)
    915913       ENDDO
    916        sums_us2_ws_l(nzb_u_inner(j,i),:) = sums_us2_ws_l(nzb_u_inner(j,i)+1,:)
     914       sums_us2_ws_l(nzb_u_inner(j,i)) = sums_us2_ws_l(nzb_u_inner(j,i)+1)
    917915                                           
    918916
     
    1000998!--    sum up the vertical momentum fluxes
    1001999       DO  k = nzb_u_inner(j,i), nzt
    1002           sums_wsus_ws_l(k,:) = sums_wsus_ws_l(k,:)                           &
     1000          sums_wsus_ws_l(k) = sums_wsus_ws_l(k)                               &
    10031001              + ( flux_t(k) + diss_t(k) )                                     &
    1004               *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     1002              *   weight_substep(intermediate_timestep_count)
    10051003       ENDDO
    10061004
     
    12431241!--        right evaluation when gallilei_trans = .T. .
    12441242
    1245            sums_vs2_ws_l(k,:) = sums_vs2_ws_l(k,:)                            &
     1243           sums_vs2_ws_l(k) = sums_vs2_ws_l(k)                                &
    12461244             + ( flux_n(k)                                                    &
    1247              * ( v_comp(k) - 2.0 * hom(k,1,2,:) )                             &
     1245             * ( v_comp(k) - 2.0 * hom(k,1,2,0) )                             &
    12481246             / ( v_comp(k) - gv + 1.0E-20 )                                   &
    12491247             +   diss_n(k)                                                    &
    1250              *   ABS( v_comp(k) - 2.0 * hom(k,1,2,:) )                        &
     1248             *   ABS( v_comp(k) - 2.0 * hom(k,1,2,0) )                        &
    12511249             / ( ABS( v_comp(k) - gv ) +1.0E-20 ) )                           &
    1252              *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     1250             *   weight_substep(intermediate_timestep_count)
    12531251
    12541252       ENDDO
    1255        sums_vs2_ws_l(nzb_v_inner(j,i),:) = sums_vs2_ws_l(nzb_v_inner(j,i)+1,:
     1253       sums_vs2_ws_l(nzb_v_inner(j,i)) = sums_vs2_ws_l(nzb_v_inner(j,i)+1
    12561254                                           
    12571255!
     
    13351333             
    13361334       DO  k = nzb_v_inner(j,i), nzt
    1337           sums_wsvs_ws_l(k,:) = sums_wsvs_ws_l(k,:)                           &
     1335          sums_wsvs_ws_l(k) = sums_wsvs_ws_l(k)                               &
    13381336                 + ( flux_t(k) + diss_t(k) )                                  &
    1339                  *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     1337                 *   weight_substep(intermediate_timestep_count)
    13401338       ENDDO
    13411339
     
    16671665       
    16681666       DO  k = nzb_w_inner(j,i), nzt
    1669            sums_ws2_ws_l(k,:)  = sums_ws2_ws_l(k,:)                           &
     1667           sums_ws2_ws_l(k)  = sums_ws2_ws_l(k)                               &
    16701668                 + ( flux_t(k) + diss_t(k) )                                  &
    1671                  *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     1669                 *   weight_substep(intermediate_timestep_count)
    16721670       ENDDO
    16731671
     
    20392037               CASE ( 'pt' )
    20402038                 DO  k = nzb_s_inner(j,i), nzt
    2041                    sums_wspts_ws_l(k,:) = sums_wspts_ws_l(k,:)                &
     2039                   sums_wspts_ws_l(k) = sums_wspts_ws_l(k)                    &
    20422040                      + ( flux_t(k) + diss_t(k) )                             &
    2043                       *   weight_substep(intermediate_timestep_count)         &
    2044                       *   rmask(j,i,:)
     2041                      *   weight_substep(intermediate_timestep_count)
    20452042                 ENDDO
    20462043               CASE ( 'sa' )
    20472044                 DO  k = nzb_s_inner(j,i), nzt
    2048                    sums_wssas_ws_l(k,:) = sums_wssas_ws_l(k,:)                &
     2045                   sums_wssas_ws_l(k) = sums_wssas_ws_l(k)                    &
    20492046                      + ( flux_t(k) + diss_t(k) )                             &
    2050                       *   weight_substep(intermediate_timestep_count)         &
    2051                       *   rmask(j,i,:)
     2047                      *   weight_substep(intermediate_timestep_count)
    20522048                 ENDDO
    20532049               CASE ( 'q' )
    20542050                 DO  k = nzb_s_inner(j,i), nzt
    2055                    sums_wsqs_ws_l(k,:) = sums_wsqs_ws_l(k,:)                  &
     2051                   sums_wsqs_ws_l(k) = sums_wsqs_ws_l(k)                      &
    20562052                      + ( flux_t(k) + diss_t(k) )                             &
    2057                       *   weight_substep(intermediate_timestep_count)         &
    2058                       *   rmask(j,i,:)
     2053                      *   weight_substep(intermediate_timestep_count)
    20592054                 ENDDO
    20602055
     
    23352330               swap_diss_y_local_u(k)   = diss_n(k)
    23362331                     
    2337                sums_us2_ws_l(k,:)  = sums_us2_ws_l(k,:)                        &
     2332               sums_us2_ws_l(k)  = sums_us2_ws_l(k)                            &
    23382333                 + ( flux_r(k)                                                 &
    2339                  * ( u_comp(k) - 2.0 * hom(k,1,1,:) )                          &
     2334                 * ( u_comp(k) - 2.0 * hom(k,1,1,0) )                          &
    23402335                 / ( u_comp(k) - gu + 1.0E-20 )                                &
    23412336                 +   diss_r(k)                                                 &
    2342                  *   ABS( u_comp(k) - 2.0 * hom(k,1,1,:) )                     &
     2337                 *   ABS( u_comp(k) - 2.0 * hom(k,1,1,0) )                     &
    23432338                 / ( ABS( u_comp(k) - gu) + 1.0E-20) )                         &
    2344                  *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     2339                 *   weight_substep(intermediate_timestep_count)
    23452340            ENDDO
    2346             sums_us2_ws_l(nzb_u_inner(j,i),:) =                                &
    2347                                            sums_us2_ws_l(nzb_u_inner(j,i)+1,:)
     2341            sums_us2_ws_l(nzb_u_inner(j,i)) = sums_us2_ws_l(nzb_u_inner(j,i)+1)
    23482342         ENDDO
    23492343       ENDDO
     
    24382432!-- at last vertical momentum flux is accumulated
    24392433            DO  k = nzb_u_inner(j,i), nzt
    2440                sums_wsus_ws_l(k,:) = sums_wsus_ws_l(k,:)                       &
     2434               sums_wsus_ws_l(k) = sums_wsus_ws_l(k)                           &
    24412435                              + ( flux_t(k) + diss_t(k) )                      &
    2442                               *   weight_substep(intermediate_timestep_count)  &
    2443                               *   rmask(j,i,:)
     2436                              *   weight_substep(intermediate_timestep_count)
    24442437            ENDDO
    24452438          ENDDO
     
    27162709               swap_diss_y_local_v(k)   = diss_n(k)   
    27172710
    2718                sums_vs2_ws_l(k,:) = sums_vs2_ws_l(k,:)                         &
    2719                   + ( flux_n(k) * ( v_comp(k) - 2.0 * hom(k,1,2,:) )           &
     2711               sums_vs2_ws_l(k) = sums_vs2_ws_l(k)                             &
     2712                  + ( flux_n(k) * ( v_comp(k) - 2.0 * hom(k,1,2,0) )           &
    27202713                  / ( v_comp(k) - gv + 1.0E-20 )                               &
    2721                   +   diss_n(k) * ABS( v_comp(k) - 2.0 * hom(k,1,2,:) )        &
     2714                  +   diss_n(k) * ABS( v_comp(k) - 2.0 * hom(k,1,2,0) )        &
    27222715                  / ( ABS( v_comp(k) - gv ) + 1.0E-20 ) )                      &
    2723                   *   weight_substep(intermediate_timestep_count) * rmask(j,i,:)
     2716                  *   weight_substep(intermediate_timestep_count)
    27242717            ENDDO
    2725             sums_vs2_ws_l(nzb_v_inner(j,i),:) =                                & 
    2726                                            sums_vs2_ws_l(nzb_v_inner(j,i)+1,:)
     2718            sums_vs2_ws_l(nzb_v_inner(j,i)) = sums_vs2_ws_l(nzb_v_inner(j,i)+1)
    27272719         ENDDO
    27282720       ENDDO
     
    28142806!-          At last vertical momentum flux is accumulated.
    28152807            DO  k = nzb_v_inner(j,i), nzt
    2816                sums_wsvs_ws_l(k,:) = sums_wsvs_ws_l(k,:)                       &
     2808               sums_wsvs_ws_l(k) = sums_wsvs_ws_l(k)                           &
    28172809                               + ( flux_t(k) + diss_t(k) )                     &
    2818                                *   weight_substep(intermediate_timestep_count) &
    2819                                *   rmask(j,i,:)
     2810                               *   weight_substep(intermediate_timestep_count)
    28202811            ENDDO
    2821             sums_vs2_ws_l(nzb_v_inner(j,i),:) =                                &
    2822                                              sums_vs2_ws_l(nzb_v_inner(j,i)+1,:)
     2812            sums_vs2_ws_l(nzb_v_inner(j,i)) = sums_vs2_ws_l(nzb_v_inner(j,i)+1)
    28232813          ENDDO
    28242814       ENDDO
     
    31923182!--         at last vertical momentum flux is accumulated
    31933183            DO  k = nzb_w_inner(j,i), nzt
    3194                sums_ws2_ws_l(k,:)  = sums_ws2_ws_l(k,:)                        &
     3184               sums_ws2_ws_l(k)  = sums_ws2_ws_l(k)                            &
    31953185                               + ( flux_t(k) + diss_t(k) )                     &
    3196                                *   weight_substep(intermediate_timestep_count) &
    3197                                *   rmask(j,i,:)
     3186                               *   weight_substep(intermediate_timestep_count)
    31983187            ENDDO
    31993188
  • palm/trunk/SOURCE/flow_statistics.f90

    r710 r743  
    44! Current revisions:
    55! -----------------
    6 !
     6! Calculation of turbulent fluxes with WS-scheme only for the whole model
     7! domain, not for user-defined subregions.
    78!
    89! Former revisions:
     
    168169!--    Copy the turbulent quantities, evaluated in the advection routines to
    169170!--    the local array sums_l() for further computations
    170        IF ( ws_scheme_mom )  THEN
     171       IF ( ws_scheme_mom .AND. sr == 0 )  THEN
    171172
    172173!       
     
    174175!--       the corresponding fluxes has to satisfiy the same bc.
    175176          IF ( ocean )  THEN
    176              sums_us2_ws_l(nzt+1,sr) = sums_us2_ws_l(nzt,sr)
    177              sums_vs2_ws_l(nzt+1,sr) = sums_vs2_ws_l(nzt,sr)   
     177             sums_us2_ws_l(nzt+1) = sums_us2_ws_l(nzt)
     178             sums_vs2_ws_l(nzt+1) = sums_vs2_ws_l(nzt)   
    178179          ENDIF
    179180
     
    181182!         
    182183!--          Swap the turbulent quantities evaluated in advec_ws.
    183              sums_l(:,13,i) = sums_wsus_ws_l(:,sr)       ! w*u*
    184              sums_l(:,15,i) = sums_wsvs_ws_l(:,sr)       ! w*v*
    185              sums_l(:,30,i) = sums_us2_ws_l(:,sr)        ! u*2
    186              sums_l(:,31,i) = sums_vs2_ws_l(:,sr)        ! v*2
    187              sums_l(:,32,i) = sums_ws2_ws_l(:,sr)        ! w*2
     184             sums_l(:,13,i) = sums_wsus_ws_l(:)       ! w*u*
     185             sums_l(:,15,i) = sums_wsvs_ws_l(:)       ! w*v*
     186             sums_l(:,30,i) = sums_us2_ws_l(:)        ! u*2
     187             sums_l(:,31,i) = sums_vs2_ws_l(:)        ! v*2
     188             sums_l(:,32,i) = sums_ws2_ws_l(:)        ! w*2
    188189             sums_l(:,34,i) = sums_l(:,34,i) + 0.5 *                        &
    189                               ( sums_us2_ws_l(:,sr) + sums_vs2_ws_l(:,sr) + &
    190                                 sums_ws2_ws_l(:,sr) )    ! e*
     190                              ( sums_us2_ws_l(:) + sums_vs2_ws_l(:) +      &
     191                                sums_ws2_ws_l(:) )    ! e*
    191192             DO  k = nzb, nzt
    192193                sums_l(nzb+5,pr_palm,i) = sums_l(nzb+5,pr_palm,i) + 0.5 * (  &
    193                                                       sums_us2_ws_l(k,sr) +  &
    194                                                       sums_vs2_ws_l(k,sr) +  &
    195                                                       sums_ws2_ws_l(k,sr) )
     194                                                      sums_us2_ws_l(k) +     &
     195                                                      sums_vs2_ws_l(k) +     &
     196                                                      sums_ws2_ws_l(k) )
    196197             ENDDO
    197198          ENDDO
     
    199200       ENDIF
    200201
    201        IF ( ws_scheme_sca )  THEN
     202       IF ( ws_scheme_sca .AND. sr == 0 )  THEN
    202203
    203204          DO  i = 0, threads_per_task-1
    204              sums_l(:,17,i) = sums_wspts_ws_l(:,sr)      ! w*pt* from advec_s_ws
    205              IF ( ocean ) sums_l(:,66,i) = sums_wssas_ws_l(:,sr) ! w*sa*
     205             sums_l(:,17,i) = sums_wspts_ws_l(:)      ! w*pt* from advec_s_ws
     206             IF ( ocean ) sums_l(:,66,i) = sums_wssas_ws_l(:) ! w*sa*
    206207             IF ( humidity .OR. passive_scalar ) sums_l(:,49,i) =              &
    207                                                    sums_wsqs_ws_l(:,sr) !w*q*
     208                                                   sums_wsqs_ws_l(:) !w*q*
    208209          ENDDO
    209210
     
    483484!--    Computation of statistics when ws-scheme is not used. Else these
    484485!--    quantities are evaluated in the advection routines.
    485        IF ( .NOT. ws_scheme_mom )  THEN
     486       IF ( .NOT. ws_scheme_mom .OR. sr /= 0 )  THEN
    486487          !$OMP DO
    487488          DO  i = nxl, nxr
     
    692693!--             but so far there is no other suitable place to calculate)
    693694                IF ( ocean )  THEN
    694                    IF( .NOT. ws_scheme_sca )  THEN
     695                   IF( .NOT. ws_scheme_sca .OR. sr /= 0 )  THEN
    695696                      pts = 0.5 * ( sa(k,j,i)   - hom(k,1,23,sr) + &
    696697                                 sa(k+1,j,i) - hom(k+1,1,23,sr) )
     
    726727!
    727728!--             Passive scalar flux
    728                 IF ( passive_scalar .AND. ( .NOT. ws_scheme_sca ))  THEN
     729                IF ( passive_scalar .AND. ( .NOT. ws_scheme_sca   &
     730                     .OR. sr /= 0 ) )  THEN
    729731                   pts = 0.5 * ( q(k,j,i)   - hom(k,1,41,sr) + &
    730732                                 q(k+1,j,i) - hom(k+1,1,41,sr) )
     
    746748!--    inside the WS advection routines are treated seperatly
    747749!--    Momentum fluxes first:
    748        IF ( .NOT. ws_scheme_mom )  THEN
     750       IF ( .NOT. ws_scheme_mom .OR. sr /= 0  )  THEN
    749751         !$OMP DO
    750752         DO  i = nxl, nxr
     
    770772
    771773       ENDIF
    772        IF ( .NOT. ws_scheme_sca )  THEN
     774       IF ( .NOT. ws_scheme_sca .OR. sr /= 0 )  THEN
    773775         !$OMP DO
    774776         DO  i = nxl, nxr
  • palm/trunk/SOURCE/modules.f90

    r737 r743  
    55! Current revisions:
    66! -----------------
     7! Dimension of sums_wsus_ws_l, sums_wsvs_ws_l, sums_us2_ws_l, sums_vs2_ws_l,
     8! sums_ws2_ws_l, sums_wspts_ws_l, sums_wssas_ws_l,sums_wsqs_ws_l needed for
     9! statistical evaluation of turbulent fluxes in WS-scheme decreased.
    710!
    811! Former revisions:
     
    14061409    LOGICAL ::  flow_statistics_called = .FALSE.
    14071410    REAL ::     u_max, v_max, w_max
    1408     REAL, DIMENSION(:), ALLOCATABLE       ::  sums_divnew_l, sums_divold_l, &
     1411    REAL, DIMENSION(:), ALLOCATABLE       ::  sums_divnew_l, sums_divold_l,   &
     1412                                              sums_wsus_ws_l, sums_wsvs_ws_l, &
     1413                                              sums_us2_ws_l, sums_vs2_ws_l,   &
     1414                                              sums_ws2_ws_l,                  &
     1415                                              sums_wspts_ws_l,                &
     1416                                              sums_wssas_ws_l,sums_wsqs_ws_l, &                 
    14091417                                              weight_substep, weight_pres
    1410     REAL, DIMENSION(:,:), ALLOCATABLE     ::  sums, sums_wsts_bc_l,        &
    1411                                               sums_wsus_ws_l, sums_wsvs_ws_l,&
    1412                                               sums_us2_ws_l, sums_vs2_ws_l, &
    1413                                               sums_ws2_ws_l,                 &
    1414                                               sums_wspts_ws_l, sums_wssas_ws_l, &
    1415                                               sums_wsqs_ws_l, ts_value
     1418    REAL, DIMENSION(:,:), ALLOCATABLE     ::  sums, sums_wsts_bc_l, ts_value
    14161419    REAL, DIMENSION(:,:,:), ALLOCATABLE   ::  hom_sum, rmask, spectrum_x, &
    14171420                                              spectrum_y, sums_l, sums_l_l, &
Note: See TracChangeset for help on using the changeset viewer.