Ignore:
Timestamp:
Apr 27, 2018 12:33:25 PM (3 years ago)
Author:
Giersch
Message:

precipitation_rate removed, further allocation checks for data output of averaged quantities implemented, double CALL of flow_statistics at the beginning of time_integration removed, further minor bugfixes, comments added

File:
1 edited

Legend:

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

    r2963 r3004  
    2525! -----------------
    2626! $Id$
     27! precipitation_rate removed, case prr*_xy removed, to_be_resorted have to point
     28! to ql_vp_av and not to ql_vp, allocation checks implemented (averaged data
     29! will be assigned to fill values if no allocation happened so far)   
     30!
     31! 2963 2018-04-12 14:47:44Z suehring
    2732! Introduce index for vegetation/wall, pavement/green-wall and water/window
    2833! surfaces, for clearer access of surface fraction, albedo, emissivity, etc. .
     
    211216    USE arrays_3d,                                                             &
    212217        ONLY:  dzw, e, heatflux_output_conversion, nc, nr, p, pt,              &
    213                precipitation_amount, precipitation_rate,                       &
    214                prr, q, qc, ql, ql_c, ql_v, ql_vp, qr, rho_ocean, s, sa,        &
    215                tend, u, v, vpt, w, zu, zw, waterflux_output_conversion
     218               precipitation_amount, prr, q, qc, ql, ql_c, ql_v, ql_vp, qr,    &
     219               rho_ocean, s, sa, tend, u, v, vpt, w, zu, zw,                   &
     220               waterflux_output_conversion
    216221       
    217222    USE averaging
     
    241246       
    242247    USE indices,                                                               &
    243         ONLY:  nbgp, nx, nxl, nxr, ny, nyn, nys, nz, nzb, nzt, wall_flags_0
     248        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nz,   &
     249               nzb, nzt, wall_flags_0
    244250               
    245251    USE kinds
     
    516522                   to_be_resorted => e
    517523                ELSE
     524                   IF ( .NOT. ALLOCATED( e_av ) ) THEN
     525                      ALLOCATE( e_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     526                      e_av = REAL( fill_value, KIND = wp )
     527                   ENDIF
    518528                   to_be_resorted => e_av
    519529                ENDIF
     
    524534                   to_be_resorted => pt
    525535                ELSE
     536                   IF ( .NOT. ALLOCATED( lpt_av ) ) THEN
     537                      ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     538                      lpt_av = REAL( fill_value, KIND = wp )
     539                   ENDIF
    526540                   to_be_resorted => lpt_av
    527541                ENDIF
     
    537551                   ENDDO
    538552                ELSE
     553                   IF ( .NOT. ALLOCATED( lwp_av ) ) THEN
     554                      ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
     555                      lwp_av = REAL( fill_value, KIND = wp )
     556                   ENDIF
    539557                   DO  i = nxl, nxr
    540558                      DO  j = nys, nyn
     
    551569                   to_be_resorted => nc
    552570                ELSE
     571                   IF ( .NOT. ALLOCATED( nc_av ) ) THEN
     572                      ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     573                      nc_av = REAL( fill_value, KIND = wp )
     574                   ENDIF
    553575                   to_be_resorted => nc_av
    554576                ENDIF
     
    559581                   to_be_resorted => nr
    560582                ELSE
     583                   IF ( .NOT. ALLOCATED( nr_av ) ) THEN
     584                      ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     585                      nr_av = REAL( fill_value, KIND = wp )
     586                   ENDIF
    561587                   to_be_resorted => nr_av
    562588                ENDIF
     
    581607                   ENDDO
    582608                ELSE
     609                   IF ( .NOT. ALLOCATED( ghf_av ) ) THEN
     610                      ALLOCATE( ghf_av(nysg:nyng,nxlg:nxrg) )
     611                      ghf_av = REAL( fill_value, KIND = wp )
     612                   ENDIF
    583613                   DO  i = nxl, nxr
    584614                      DO  j = nys, nyn
     
    610640                   ENDDO
    611641                ELSE
     642                   IF ( .NOT. ALLOCATED( ol_av ) ) THEN
     643                      ALLOCATE( ol_av(nysg:nyng,nxlg:nxrg) )
     644                      ol_av = REAL( fill_value, KIND = wp )
     645                   ENDIF
    612646                   DO  i = nxl, nxr
    613647                      DO  j = nys, nyn
     
    625659                   to_be_resorted => p
    626660                ELSE
     661                   IF ( .NOT. ALLOCATED( p_av ) ) THEN
     662                      ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     663                      p_av = REAL( fill_value, KIND = wp )
     664                   ENDIF
    627665                   IF ( psolver /= 'sor' )  CALL exchange_horiz( p_av, nbgp )
    628666                   to_be_resorted => p_av
     
    647685                   resorted = .TRUE.
    648686                ELSE
     687                   IF ( .NOT. ALLOCATED( pc_av ) ) THEN
     688                      ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     689                      pc_av = REAL( fill_value, KIND = wp )
     690                   ENDIF
    649691!                   CALL exchange_horiz( pc_av, nbgp )
    650692                   to_be_resorted => pc_av
     
    692734                   resorted = .TRUE.
    693735                ELSE
     736                   IF ( .NOT. ALLOCATED( pr_av ) ) THEN
     737                      ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     738                      pr_av = REAL( fill_value, KIND = wp )
     739                   ENDIF
    694740!                   CALL exchange_horiz( pr_av, nbgp )
    695741                   to_be_resorted => pr_av
     
    704750                ENDDO
    705751                precipitation_amount = 0.0_wp   ! reset for next integ. interval
    706                 resorted = .TRUE.
    707                 two_d = .TRUE.
    708                 level_z(nzb+1) = zu(nzb+1)
    709 
    710              CASE ( 'prr*_xy' )        ! 2d-array
    711                 IF ( av == 0 )  THEN
    712 !                   CALL exchange_horiz_2d( prr(nzb+1,:,:) )
    713                    DO  i = nxl, nxr
    714                       DO  j = nys, nyn
    715                          local_pf(i,j,nzb+1) = prr(nzb+1,j,i) * hyrho(nzb+1)
    716                       ENDDO
    717                    ENDDO
    718                 ELSE
    719 !                   CALL exchange_horiz_2d( prr_av(nzb+1,:,:) )
    720                    DO  i = nxl, nxr
    721                       DO  j = nys, nyn
    722                          local_pf(i,j,nzb+1) = prr_av(nzb+1,j,i) * hyrho(nzb+1)
    723                       ENDDO
    724                    ENDDO
    725                 ENDIF
    726752                resorted = .TRUE.
    727753                two_d = .TRUE.
     
    739765                   ENDDO
    740766                ELSE
     767                   IF ( .NOT. ALLOCATED( prr_av ) ) THEN
     768                      ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     769                      prr_av = REAL( fill_value, KIND = wp )
     770                   ENDIF
    741771!                   CALL exchange_horiz( prr_av, nbgp )
    742772                   DO  i = nxl, nxr
     
    768798                   ENDIF
    769799                ELSE
     800                   IF ( .NOT. ALLOCATED( pt_av ) ) THEN
     801                      ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     802                      pt_av = REAL( fill_value, KIND = wp )
     803                   ENDIF
    770804                   to_be_resorted => pt_av
    771805                ENDIF
     
    776810                   to_be_resorted => q
    777811                ELSE
     812                   IF ( .NOT. ALLOCATED( q_av ) ) THEN
     813                      ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     814                      q_av = REAL( fill_value, KIND = wp )
     815                   ENDIF
    778816                   to_be_resorted => q_av
    779817                ENDIF
     
    784822                   to_be_resorted => qc
    785823                ELSE
     824                   IF ( .NOT. ALLOCATED( qc_av ) ) THEN
     825                      ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     826                      qc_av = REAL( fill_value, KIND = wp )
     827                   ENDIF
    786828                   to_be_resorted => qc_av
    787829                ENDIF
     
    792834                   to_be_resorted => ql
    793835                ELSE
     836                   IF ( .NOT. ALLOCATED( ql_av ) ) THEN
     837                      ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     838                      ql_av = REAL( fill_value, KIND = wp )
     839                   ENDIF
    794840                   to_be_resorted => ql_av
    795841                ENDIF
     
    800846                   to_be_resorted => ql_c
    801847                ELSE
     848                   IF ( .NOT. ALLOCATED( ql_c_av ) ) THEN
     849                      ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     850                      ql_c_av = REAL( fill_value, KIND = wp )
     851                   ENDIF
    802852                   to_be_resorted => ql_c_av
    803853                ENDIF
     
    808858                   to_be_resorted => ql_v
    809859                ELSE
     860                   IF ( .NOT. ALLOCATED( ql_v_av ) ) THEN
     861                      ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     862                      ql_v_av = REAL( fill_value, KIND = wp )
     863                   ENDIF
    810864                   to_be_resorted => ql_v_av
    811865                ENDIF
     
    844898                   resorted = .TRUE.
    845899                ELSE
     900                   IF ( .NOT. ALLOCATED( ql_vp_av ) ) THEN
     901                      ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     902                      ql_vp_av = REAL( fill_value, KIND = wp )
     903                   ENDIF
    846904!                   CALL exchange_horiz( ql_vp_av, nbgp )
    847                    to_be_resorted => ql_vp
     905                   to_be_resorted => ql_vp_av
    848906                ENDIF
    849907                IF ( mode == 'xy' )  level_z = zu
     
    853911                   to_be_resorted => qr
    854912                ELSE
     913                   IF ( .NOT. ALLOCATED( qr_av ) ) THEN
     914                      ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     915                      qr_av = REAL( fill_value, KIND = wp )
     916                   ENDIF
    855917                   to_be_resorted => qr_av
    856918                ENDIF
     
    883945                   ENDDO
    884946                ELSE
     947                   IF ( .NOT. ALLOCATED( qsws_av ) ) THEN
     948                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
     949                      qsws_av = REAL( fill_value, KIND = wp )
     950                   ENDIF
    885951                   DO  i = nxl, nxr
    886952                      DO  j = nys, nyn
     
    904970                   resorted = .TRUE.
    905971                ELSE
     972                   IF ( .NOT. ALLOCATED( qv_av ) ) THEN
     973                      ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     974                      qv_av = REAL( fill_value, KIND = wp )
     975                   ENDIF
    906976                   to_be_resorted => qv_av
    907977                ENDIF
     
    928998                   ENDDO
    929999                ELSE
     1000                   IF ( .NOT. ALLOCATED( r_a_av ) ) THEN
     1001                      ALLOCATE( r_a_av(nysg:nyng,nxlg:nxrg) )
     1002                      r_a_av = REAL( fill_value, KIND = wp )
     1003                   ENDIF
    9301004                   DO  i = nxl, nxr
    9311005                      DO  j = nys, nyn
     
    9421016                   to_be_resorted => rho_ocean
    9431017                ELSE
     1018                   IF ( .NOT. ALLOCATED( rho_ocean_av ) ) THEN
     1019                      ALLOCATE( rho_ocean_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1020                      rho_ocean_av = REAL( fill_value, KIND = wp )
     1021                   ENDIF
    9441022                   to_be_resorted => rho_ocean_av
    9451023                ENDIF
     
    9491027                   to_be_resorted => s
    9501028                ELSE
     1029                   IF ( .NOT. ALLOCATED( s_av ) ) THEN
     1030                      ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1031                      s_av = REAL( fill_value, KIND = wp )
     1032                   ENDIF
    9511033                   to_be_resorted => s_av
    9521034                ENDIF
     
    9561038                   to_be_resorted => sa
    9571039                ELSE
     1040                   IF ( .NOT. ALLOCATED( sa_av ) ) THEN
     1041                      ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1042                      sa_av = REAL( fill_value, KIND = wp )
     1043                   ENDIF
    9581044                   to_be_resorted => sa_av
    9591045                ENDIF
     
    9851071                   ENDDO
    9861072                ELSE
     1073                   IF ( .NOT. ALLOCATED( shf_av ) ) THEN
     1074                      ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
     1075                      shf_av = REAL( fill_value, KIND = wp )
     1076                   ENDIF
    9871077                   DO  i = nxl, nxr
    9881078                      DO  j = nys, nyn
     
    10131103                   ENDDO
    10141104                ELSE
     1105                   IF ( .NOT. ALLOCATED( ssws_av ) ) THEN
     1106                      ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
     1107                      ssws_av = REAL( fill_value, KIND = wp )
     1108                   ENDIF
    10151109                   DO  i = nxl, nxr
    10161110                      DO  j = nys, nyn
     
    10411135                   ENDDO
    10421136                ELSE
     1137                   IF ( .NOT. ALLOCATED( ts_av ) ) THEN
     1138                      ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
     1139                      ts_av = REAL( fill_value, KIND = wp )
     1140                   ENDIF
    10431141                   DO  i = nxl, nxr
    10441142                      DO  j = nys, nyn
     
    10721170
    10731171                ELSE
     1172                   IF ( .NOT. ALLOCATED( tsurf_av ) ) THEN
     1173                      ALLOCATE( tsurf_av(nysg:nyng,nxlg:nxrg) )
     1174                      tsurf_av = REAL( fill_value, KIND = wp )
     1175                   ENDIF
    10741176                   DO  i = nxl, nxr
    10751177                      DO  j = nys, nyn
     
    10871189                   to_be_resorted => u
    10881190                ELSE
     1191                   IF ( .NOT. ALLOCATED( u_av ) ) THEN
     1192                      ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1193                      u_av = REAL( fill_value, KIND = wp )
     1194                   ENDIF
    10891195                   to_be_resorted => u_av
    10901196                ENDIF
     
    11151221                   ENDDO
    11161222                ELSE
     1223                   IF ( .NOT. ALLOCATED( us_av ) ) THEN
     1224                      ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
     1225                      us_av = REAL( fill_value, KIND = wp )
     1226                   ENDIF
    11171227                   DO  i = nxl, nxr
    11181228                      DO  j = nys, nyn
     
    11301240                   to_be_resorted => v
    11311241                ELSE
     1242                   IF ( .NOT. ALLOCATED( v_av ) ) THEN
     1243                      ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1244                      v_av = REAL( fill_value, KIND = wp )
     1245                   ENDIF
    11321246                   to_be_resorted => v_av
    11331247                ENDIF
     
    11441258                   to_be_resorted => vpt
    11451259                ELSE
     1260                   IF ( .NOT. ALLOCATED( vpt_av ) ) THEN
     1261                      ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1262                      vpt_av = REAL( fill_value, KIND = wp )
     1263                   ENDIF
    11461264                   to_be_resorted => vpt_av
    11471265                ENDIF
     
    11531271                   to_be_resorted => w
    11541272                ELSE
     1273                   IF ( .NOT. ALLOCATED( w_av ) ) THEN
     1274                      ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1275                      w_av = REAL( fill_value, KIND = wp )
     1276                   ENDIF
    11551277                   to_be_resorted => w_av
    11561278                ENDIF
     
    11751297                   ENDDO
    11761298                ELSE
     1299                   IF ( .NOT. ALLOCATED( z0_av ) ) THEN
     1300                      ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
     1301                      z0_av = REAL( fill_value, KIND = wp )
     1302                   ENDIF
    11771303                   DO  i = nxl, nxr
    11781304                      DO  j = nys, nyn
     
    12031329                   ENDDO
    12041330                ELSE
     1331                   IF ( .NOT. ALLOCATED( z0h_av ) ) THEN
     1332                      ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
     1333                      z0h_av = REAL( fill_value, KIND = wp )
     1334                   ENDIF
    12051335                   DO  i = nxl, nxr
    12061336                      DO  j = nys, nyn
     
    12311361                   ENDDO
    12321362                ELSE
     1363                   IF ( .NOT. ALLOCATED( z0q_av ) ) THEN
     1364                      ALLOCATE( z0q_av(nysg:nyng,nxlg:nxrg) )
     1365                      z0q_av = REAL( fill_value, KIND = wp )
     1366                   ENDIF
    12331367                   DO  i = nxl, nxr
    12341368                      DO  j = nys, nyn
Note: See TracChangeset for help on using the changeset viewer.