Ignore:
Timestamp:
Jun 29, 2017 10:14:38 AM (7 years ago)
Author:
maronga
Message:

improvements for spinup mechanism

File:
1 edited

Legend:

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

    r2298 r2299  
    2525! -----------------
    2626! $Id$
     27! Improved syntax layout
     28!
     29! 2298 2017-06-29 09:28:18Z raasch
    2730! type of write_binary changed from CHARACTER to LOGICAL
    2831!
     
    505508!
    506509!-- Public variables and constants / NEEDS SORTING
    507     PUBLIC dots_rad, dt_radiation, force_radiation_call,                       &
    508            rad_net, rad_net_av, radiation, radiation_scheme, rad_lw_in,        &
     510    PUBLIC decl_1, decl_2, decl_3, dots_rad, dt_radiation, force_radiation_call,&
     511           lat, lon, rad_net, rad_net_av, radiation, radiation_scheme, rad_lw_in,        &
    509512           rad_lw_in_av, rad_lw_out, rad_lw_out_av, rad_lw_out_change_0,       &
    510513           rad_lw_cs_hr, rad_lw_cs_hr_av, rad_lw_hr, rad_lw_hr_av, rad_sw_in,  &
     
    632635!> Check data output of profiles for radiation model
    633636!------------------------------------------------------------------------------! 
    634     SUBROUTINE radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
     637    SUBROUTINE radiation_check_data_output_pr( variable, var_count, unit,      &
     638               dopr_unit )
    635639 
    636640       USE arrays_3d,                                                          &
     
    12371241          DO j = nysg, nyng
    12381242!
    1239 !--          Obtain vertical index of topography top. So far it is identical to nzb.
     1243!--          Obtain vertical index of topography top. So far it is identical to
     1244!--          nzb.
    12401245             k = MAXLOC(                                                       &
    12411246                        MERGE( 1, 0,                                           &
     
    13141319
    13151320 1 FORMAT ('    Geograph. longitude            :   lambda = ',F4.1,' degr')
    1316  2 FORMAT ('    Day of the year at model start :   day_init = ',I3   &
     1321 2 FORMAT ('    Day of the year at model start :   day_init = ',I3             &
    13171322            /'    UTC time at model start        :   time_utc_init = ',F7.1' s')
    13181323 3 FORMAT (//' Radiation model information:'/                                  &
    13191324              ' ----------------------------'/)
    1320  4 FORMAT ('    --> Using constant net radiation: net_radiation = ', F6.2,        &
     1325 4 FORMAT ('    --> Using constant net radiation: net_radiation = ', F6.2,     &
    13211326           // 'W/m**2')
    1322  5 FORMAT ('    --> Simple radiation scheme for clear sky is used (no clouds,',   &
     1327 5 FORMAT ('    --> Simple radiation scheme for clear sky is used (no clouds,',&
    13231328                   ' default)')
    13241329 6 FORMAT ('    --> RRTMG scheme is used')
     
    14931498!--                   Calculate cloud droplet effective radius
    14941499                      IF ( cloud_physics )  THEN
    1495                          rrtm_reliq(0,k) = 1.0E6_wp * ( 3.0_wp * ql(k,j,i)        &
    1496                                            * rho_surface                          &
    1497                                            / ( 4.0_wp * pi * nc_const * rho_l )   &
    1498                                            )**0.33333333333333_wp                 &
     1500                         rrtm_reliq(0,k) = 1.0E6_wp * ( 3.0_wp * ql(k,j,i)     &
     1501                                           * rho_surface                       &
     1502                                           / ( 4.0_wp * pi * nc_const * rho_l )&
     1503                                           )**0.33333333333333_wp              &
    14991504                                           * EXP( LOG( sigma_gc )**2 )
    15001505
     
    16361641!--    Calculate current day and time based on the initial values and simulation
    16371642!--    time
    1638        day = day_init + INT(FLOOR( (time_utc_init + time_since_reference_point)    &
     1643       day = day_init + INT(FLOOR( (time_utc_init + time_since_reference_point)&
    16391644                               / 86400.0_wp ), KIND=iwp)
    16401645       time_utc = MOD((time_utc_init + time_since_reference_point), 86400.0_wp)
     
    16481653!
    16491654!--    Calculate cosine of solar zenith angle
    1650        zenith(0) = SIN(lat) * SIN(declination) + COS(lat) * COS(declination)      &
     1655       zenith(0) = SIN(lat) * SIN(declination) + COS(lat) * COS(declination)   &
    16511656                                            * COS(hour_angle)
    16521657       zenith(0) = MAX(0.0_wp,zenith(0))
     
    16551660!--    Calculate solar directional vector
    16561661       IF ( sun_direction )  THEN
     1662
     1663!
    16571664!--       Direction in longitudes equals to sin(solar_azimuth) * sin(zenith)
    16581665          sun_dir_lon(0) = -SIN(hour_angle) * COS(declination)
     1666
     1667!
    16591668!--       Direction in latitues equals to cos(solar_azimuth) * sin(zenith)
    16601669          sun_dir_lat(0) = SIN(declination) * COS(lat) - COS(hour_angle) &
     
    19421951          rrtm_h2ovmr(0,k) = q_snd(k)
    19431952       ENDDO
    1944        rrtm_tlay(0,nzt_rad+1) = 2.0_wp * rrtm_tlay(0,nzt_rad)                 &
     1953       rrtm_tlay(0,nzt_rad+1) = 2.0_wp * rrtm_tlay(0,nzt_rad)                  &
    19451954                                - rrtm_tlay(0,nzt_rad-1)
    19461955       DO k = nzt+9, nzt_rad+1
     
    20582067
    20592068
    2060        REAL(wp), DIMENSION(:), ALLOCATABLE   ::  p_mls,         & !< pressure levels for the absorbers
    2061                                                  rrtm_play_tmp, & !< temporary array for pressure zu-levels
    2062                                                  rrtm_plev_tmp, & !< temporary array for pressure zw-levels
    2063                                                  trace_path_tmp   !< temporary array for storing trace gas path data
     2069       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  p_mls,          & !< pressure levels for the absorbers
     2070                                                 rrtm_play_tmp,  & !< temporary array for pressure zu-levels
     2071                                                 rrtm_plev_tmp,  & !< temporary array for pressure zw-levels
     2072                                                 trace_path_tmp    !< temporary array for storing trace gas path data
    20642073
    20652074       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  trace_mls,      & !< array for storing the absorber amounts
     
    24972506                DO  j = nysg, nyng
    24982507                   DO  k = nzb, nzt+1
    2499                       rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) + rad_lw_out(k,j,i)
     2508                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i)              &
     2509                                             + rad_lw_out(k,j,i)
    25002510                   ENDDO
    25012511                ENDDO
     
    25062516                DO  j = nysg, nyng
    25072517                   DO  k = nzb, nzt+1
    2508                       rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) + rad_lw_cs_hr(k,j,i)
     2518                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i)          &
     2519                                               + rad_lw_cs_hr(k,j,i)
    25092520                   ENDDO
    25102521                ENDDO
     
    25152526                DO  j = nysg, nyng
    25162527                   DO  k = nzb, nzt+1
    2517                       rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) + rad_lw_hr(k,j,i)
     2528                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i)                &
     2529                                            + rad_lw_hr(k,j,i)
    25182530                   ENDDO
    25192531                ENDDO
     
    25242536                DO  j = nysg, nyng
    25252537                   DO  k = nzb, nzt+1
    2526                       rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) + rad_sw_in(k,j,i)
     2538                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i)                &
     2539                                            + rad_sw_in(k,j,i)
    25272540                   ENDDO
    25282541                ENDDO
     
    25332546                DO  j = nysg, nyng
    25342547                   DO  k = nzb, nzt+1
    2535                       rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) + rad_sw_out(k,j,i)
     2548                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i)              &
     2549                                             + rad_sw_out(k,j,i)
    25362550                   ENDDO
    25372551                ENDDO
     
    25422556                DO  j = nysg, nyng
    25432557                   DO  k = nzb, nzt+1
    2544                       rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) + rad_sw_cs_hr(k,j,i)
     2558                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i)          &
     2559                                               + rad_sw_cs_hr(k,j,i)
    25452560                   ENDDO
    25462561                ENDDO
     
    25512566                DO  j = nysg, nyng
    25522567                   DO  k = nzb, nzt+1
    2553                       rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) + rad_sw_hr(k,j,i)
     2568                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i)                &
     2569                                            + rad_sw_hr(k,j,i)
    25542570                   ENDDO
    25552571                ENDDO
     
    25682584             DO  i = nxlg, nxrg
    25692585                DO  j = nysg, nyng
    2570                    rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
     2586                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, &
     2587                                     KIND=wp )
    25712588                ENDDO
    25722589             ENDDO
     
    25762593                DO  j = nysg, nyng
    25772594                   DO  k = nzb, nzt+1
    2578                       rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2595                      rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i)                &
     2596                                            / REAL( average_count_3d, KIND=wp )
    25792597                   ENDDO
    25802598                ENDDO
     
    25852603                DO  j = nysg, nyng
    25862604                   DO  k = nzb, nzt+1
    2587                       rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2605                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i)              &
     2606                                             / REAL( average_count_3d, KIND=wp )
    25882607                   ENDDO
    25892608                ENDDO
     
    25942613                DO  j = nysg, nyng
    25952614                   DO  k = nzb, nzt+1
    2596                       rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2615                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i)          &
     2616                                             / REAL( average_count_3d, KIND=wp )
    25972617                   ENDDO
    25982618                ENDDO
     
    26032623                DO  j = nysg, nyng
    26042624                   DO  k = nzb, nzt+1
    2605                       rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2625                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i)                &
     2626                                            / REAL( average_count_3d, KIND=wp )
    26062627                   ENDDO
    26072628                ENDDO
     
    26122633                DO  j = nysg, nyng
    26132634                   DO  k = nzb, nzt+1
    2614                       rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2635                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i)                &
     2636                                            / REAL( average_count_3d, KIND=wp )
    26152637                   ENDDO
    26162638                ENDDO
     
    26212643                DO  j = nysg, nyng
    26222644                   DO  k = nzb, nzt+1
    2623                       rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2645                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i)              &
     2646                                             / REAL( average_count_3d, KIND=wp )
    26242647                   ENDDO
    26252648                ENDDO
     
    26302653                DO  j = nysg, nyng
    26312654                   DO  k = nzb, nzt+1
    2632                       rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2655                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i)          &
     2656                                             / REAL( average_count_3d, KIND=wp )
    26332657                   ENDDO
    26342658                ENDDO
     
    26392663                DO  j = nysg, nyng
    26402664                   DO  k = nzb, nzt+1
    2641                       rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2665                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i)                &
     2666                                            / REAL( average_count_3d, KIND=wp )
    26422667                   ENDDO
    26432668                ENDDO
     
    34123437
    34133438
    3414 SUBROUTINE radiation_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file,   &
    3415                                      nynfa, nyn_on_file, nysfa, nys_on_file,   &
    3416                                      offset_xa, offset_ya, overlap_count,      &
    3417                                      tmp_2d, tmp_3d )
     3439SUBROUTINE radiation_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,          &
     3440                                        nxr_on_file, nynfa, nyn_on_file, nysfa,&
     3441                                        nys_on_file, offset_xa, offset_ya,     &
     3442                                        overlap_count, tmp_2d, tmp_3d )
    34183443 
    34193444
     
    34913516                   ENDIF 
    34923517                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    3493                    rad_net(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    3494                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3518                   rad_net(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =         &
     3519                                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    34953520
    34963521                CASE ( 'rad_net_av' )
     
    34993524                   ENDIF 
    35003525                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    3501                    rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    3502                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3526                   rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =      &
     3527                                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    35033528                CASE ( 'rad_lw_in' )
    35043529                   IF ( .NOT. ALLOCATED( rad_lw_in ) )  THEN
     
    35153540                         READ ( 13 )  tmp_3d2
    35163541                         rad_lw_in(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =&
    3517                              tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3542                            tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    35183543                      ELSE
    35193544                         READ ( 13 )  tmp_3d
     
    36023627                   ENDIF
    36033628                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3604                    rad_lw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3629                   rad_lw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =   &
    36053630                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    36063631
     
    36183643                   ENDIF
    36193644                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3620                    rad_lw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3645                   rad_lw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    36213646                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    36223647
     
    36263651                   ENDIF
    36273652                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3628                    rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3653                   rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =   &
    36293654                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    36303655
     
    37223747                   ENDIF
    37233748                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3724                    rad_sw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3749                   rad_sw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =   &
    37253750                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    37263751
     
    37383763                   ENDIF
    37393764                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3740                    rad_sw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3765                   rad_sw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    37413766                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    37423767
     
    37463771                   ENDIF
    37473772                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    3748                    rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3773                   rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =   &
    37493774                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    37503775
     
    37533778                                        TRIM( field_char ), '" found in',      &
    37543779                                        '&data from prior run on PE ', myid
    3755                   CALL message( 'radiation_read_restart_data', 'PA0302', 1, 2, 0, 6, &
    3756                                 0 )
     3780                  CALL message( 'radiation_read_restart_data', 'PA0302', 1, 2, &
     3781                                0, 6, 0 )
    37573782
    37583783            END SELECT
Note: See TracChangeset for help on using the changeset viewer.