Ignore:
Timestamp:
Jun 1, 2017 2:12:31 PM (7 years ago)
Author:
maronga
Message:

revised number of soil layers. added support for RRTMG runs with dry atmosphere/soil

File:
1 edited

Legend:

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

    r2233 r2242  
    2525! -----------------
    2626! $Id$
    27 !
     27! Allow for RRTMG runs without humidity/cloud physics
     28!
     29! 2233 2017-05-30 18:08:54Z suehring
     30!
    2831! 2232 2017-05-30 17:47:52Z suehring
    2932! Adjustments to new topography concept
     
    14151418                                                  / 1000.0_wp )**0.286_wp
    14161419
    1417              DO k = nzb+1, nzt+1
    1418                 rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp         &
    1419                                  )**0.286_wp + l_d_cp * ql(k,j,i)
    1420                 rrtm_h2ovmr(0,k) = mol_mass_air_d_wv * (q(k,j,i) - ql(k,j,i))
    1421 
    1422              ENDDO
     1420
     1421             IF ( cloud_physics )  THEN
     1422                DO k = nzb+1, nzt+1
     1423                   rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp      &
     1424                                    )**0.286_wp + l_d_cp * ql(k,j,i)
     1425                   rrtm_h2ovmr(0,k) = mol_mass_air_d_wv * (q(k,j,i) - ql(k,j,i))
     1426                ENDDO
     1427             ELSE
     1428                DO k = nzb+1, nzt+1
     1429                   rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp      &
     1430                                    )**0.286_wp
     1431                   rrtm_h2ovmr(0,k) = 0.0_wp
     1432                ENDDO
     1433             ENDIF
    14231434
    14241435!
     
    14551466             rrtm_icld   = 0
    14561467
    1457              DO k = nzb+1, nzt+1
    1458                 rrtm_cliqwp(0,k) =  ql(k,j,i) * 1000.0_wp *                    &
    1459                                     (rrtm_plev(0,k) - rrtm_plev(0,k+1))        &
    1460                                     * 100.0_wp / g
    1461 
    1462                 IF ( rrtm_cliqwp(0,k) > 0.0_wp )  THEN
    1463                    rrtm_cldfr(0,k) = 1.0_wp
    1464                    IF ( rrtm_icld == 0 )  rrtm_icld = 1
    1465 
    1466 !
    1467 !--                Calculate cloud droplet effective radius
    1468                    IF ( cloud_physics )  THEN
    1469                       rrtm_reliq(0,k) = 1.0E6_wp * ( 3.0_wp * ql(k,j,i)        &
    1470                                         * rho_surface                          &
    1471                                         / ( 4.0_wp * pi * nc_const * rho_l )   &
    1472                                         )**0.33333333333333_wp                 &
    1473                                         * EXP( LOG( sigma_gc )**2 )
    1474 
    1475                    ELSEIF ( cloud_droplets )  THEN
    1476                       number_of_particles = prt_count(k,j,i)
    1477 
    1478                       IF (number_of_particles <= 0)  CYCLE
    1479                       particles => grid_particles(k,j,i)%particles(1:number_of_particles)
    1480                       s_r2 = 0.0_wp
    1481                       s_r3 = 0.0_wp
    1482 
    1483                       DO  n = 1, number_of_particles
    1484                          IF ( particles(n)%particle_mask )  THEN
    1485                             s_r2 = s_r2 + particles(n)%radius**2 * &
    1486                                    particles(n)%weight_factor
    1487                             s_r3 = s_r3 + particles(n)%radius**3 * &
    1488                                    particles(n)%weight_factor
    1489                          ENDIF
    1490                       ENDDO
    1491 
    1492                       IF ( s_r2 > 0.0_wp )  rrtm_reliq(0,k) = s_r3 / s_r2
    1493 
     1468             IF ( cloud_physics )  THEN
     1469                DO k = nzb+1, nzt+1
     1470                   rrtm_cliqwp(0,k) =  ql(k,j,i) * 1000.0_wp *                 &
     1471                                       (rrtm_plev(0,k) - rrtm_plev(0,k+1))     &
     1472                                       * 100.0_wp / g
     1473
     1474                   IF ( rrtm_cliqwp(0,k) > 0.0_wp )  THEN
     1475                      rrtm_cldfr(0,k) = 1.0_wp
     1476                      IF ( rrtm_icld == 0 )  rrtm_icld = 1
     1477
     1478!
     1479!--                   Calculate cloud droplet effective radius
     1480                      IF ( cloud_physics )  THEN
     1481                         rrtm_reliq(0,k) = 1.0E6_wp * ( 3.0_wp * ql(k,j,i)        &
     1482                                           * rho_surface                          &
     1483                                           / ( 4.0_wp * pi * nc_const * rho_l )   &
     1484                                           )**0.33333333333333_wp                 &
     1485                                           * EXP( LOG( sigma_gc )**2 )
     1486
     1487                      ELSEIF ( cloud_droplets )  THEN
     1488                         number_of_particles = prt_count(k,j,i)
     1489
     1490                         IF (number_of_particles <= 0)  CYCLE
     1491                         particles => grid_particles(k,j,i)%particles(1:number_of_particles)
     1492                         s_r2 = 0.0_wp
     1493                         s_r3 = 0.0_wp
     1494
     1495                         DO  n = 1, number_of_particles
     1496                            IF ( particles(n)%particle_mask )  THEN
     1497                               s_r2 = s_r2 + particles(n)%radius**2 * &
     1498                                      particles(n)%weight_factor
     1499                               s_r3 = s_r3 + particles(n)%radius**3 * &
     1500                                      particles(n)%weight_factor
     1501                            ENDIF
     1502                         ENDDO
     1503
     1504                         IF ( s_r2 > 0.0_wp )  rrtm_reliq(0,k) = s_r3 / s_r2
     1505
     1506                      ENDIF
     1507
     1508!
     1509!--                   Limit effective radius
     1510                      IF ( rrtm_reliq(0,k) > 0.0_wp )  THEN
     1511                         rrtm_reliq(0,k) = MAX(rrtm_reliq(0,k),2.5_wp)
     1512                         rrtm_reliq(0,k) = MIN(rrtm_reliq(0,k),60.0_wp)
     1513                     ENDIF
    14941514                   ENDIF
    1495 
    1496 !
    1497 !--                Limit effective radius
    1498                    IF ( rrtm_reliq(0,k) > 0.0_wp )  THEN
    1499                       rrtm_reliq(0,k) = MAX(rrtm_reliq(0,k),2.5_wp)
    1500                       rrtm_reliq(0,k) = MIN(rrtm_reliq(0,k),60.0_wp)
    1501                   ENDIF
    1502                 ENDIF
    1503              ENDDO
     1515                ENDDO
     1516             ENDIF
    15041517
    15051518!
Note: See TracChangeset for help on using the changeset viewer.