Ignore:
Timestamp:
Aug 5, 2020 10:51:52 AM (4 years ago)
Author:
pavelkrc
Message:

Fix average transparency for MRT factors, fix rtm_svf_, rtm_dif_ outputs

File:
1 edited

Legend:

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

    r4624 r4632  
    2727! -----------------
    2828! $Id$
     29! - Bugfix: rtm_svf_, rtm_dif_ outputs
     30! - Bugfix: correct average transparency for MRT factors
     31!
     32! 4624 2020-07-24 09:53:17Z raasch
    2933! File re-formatted to follow the PALM coding standard
    3034!
     
    13961400
    13971401    IF ( directional )  THEN
    1398        SELECT CASE ( var )
    1399           CASE ( 'rtm_rad_net', 'rtm_rad_insw', 'rtm_rad_inlw', 'rtm_rad_inswdir',                 &
    1400                  'rtm_rad_inswdif', 'rtm_rad_inswref', 'rtm_rad_inlwdif', 'rtm_rad_inlwref',       &
    1401                  'rtm_rad_outsw', 'rtm_rad_outlw', 'rtm_rad_ressw', 'rtm_rad_reslw' )
    1402              IF ( .NOT.  radiation )  THEN
    1403                 message_string = 'output of "' // var // '" requires radiation = .TRUE.'
    1404                 CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
    1405              ENDIF
    1406              unit = 'W/m2'
    1407 
    1408           CASE ( 'rtm_svf', 'rtm_dif', 'rtm_skyvf', 'rtm_skyvft', 'rtm_surfalb', 'rtm_surfemis' )
    1409              IF ( .NOT.  radiation )  THEN
    1410                 message_string = 'output of "' // var // '" requires radiation = .TRUE.'
    1411                 CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
    1412              ENDIF
    1413              unit = '1'
    1414 
    1415           CASE DEFAULT
    1416              unit = 'illegal'
    1417        END SELECT
    1418 
     1402       IF ( var(1:8) == 'rtm_svf_'  .OR.  var(1:8) == 'rtm_dif_' )  THEN
     1403          IF ( .NOT.  radiation ) THEN
     1404             message_string = 'output of "' // var // '" requires radiation = .TRUE.'
     1405             CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1406          ENDIF
     1407          unit = '1'
     1408       ELSE
     1409          SELECT CASE ( var )
     1410             CASE ( 'rtm_rad_net', 'rtm_rad_insw', 'rtm_rad_inlw', 'rtm_rad_inswdir',              &
     1411                    'rtm_rad_inswdif', 'rtm_rad_inswref', 'rtm_rad_inlwdif', 'rtm_rad_inlwref',    &
     1412                    'rtm_rad_outsw', 'rtm_rad_outlw', 'rtm_rad_ressw', 'rtm_rad_reslw' )
     1413                IF ( .NOT.  radiation ) THEN
     1414                   message_string = 'output of "' // var // '" requires radiation = .TRUE.'
     1415                   CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1416                ENDIF
     1417                unit = 'W/m2'
     1418
     1419             CASE ( 'rtm_skyvf', 'rtm_skyvft', 'rtm_surfalb', 'rtm_surfemis' )
     1420                IF ( .NOT.  radiation ) THEN
     1421                   message_string = 'output of "' // var // '" requires radiation = .TRUE.'
     1422                   CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1423                ENDIF
     1424                unit = '1'
     1425
     1426             CASE DEFAULT
     1427                unit = 'illegal'
     1428          END SELECT
     1429       ENDIF
    14191430    ELSE
    14201431       SELECT CASE ( var )
     
    79217932          CALL quicksort_itarget( itarget, vffrac, ztransp, 1, nzn * naz )
    79227933!
     7934!--       For aggregation, we need fractions multiplied by transmissivities
     7935          ztransp(:) = vffrac(:) * ztransp(:)
     7936!
    79237937!--       Find the first valid position
    79247938          itarg0 = 1
     
    79347948                IF ( itarget(i+1) == itarget(i) )  THEN
    79357949                   vffrac(i+1) = vffrac(i+1) + vffrac(i)
     7950                   ztransp(i+1) = ztransp(i+1) + ztransp(i)
    79367951                   CYCLE
    79377952                ENDIF
     
    79687983             amrtf(nmrtf)%isurfs = itarget(i)
    79697984             amrtf(nmrtf)%rsvf = vffrac(i)
    7970              amrtf(nmrtf)%rtransp = ztransp(i)
     7985             amrtf(nmrtf)%rtransp = ztransp(i) / vffrac(i)
    79717986          ENDDO ! itarg
    79727987
     
    1168011695            isurfs = svfsurf(2, isvf)
    1168111696
    11682             IF ( surf(ix,isurfs) == is  .AND.  surf(iy,isurfs) == js  .AND. surf(iz,isurfs) == ks &
    11683                .AND.  (surf(id,isurfs) == idsint_u .OR. surfl(id,isurfs) == idsint_l ) ) THEN
     11697            IF ( surf(ix,isurfs) == is  .AND.  surf(iy,isurfs) == js  .AND.  surf(iz,isurfs) == ks &
     11698                 .AND.  ( surfl(id,isurflt) == idsint_u .OR. surfl(id,isurflt) == idsint_l ) ) THEN
    1168411699!
    1168511700!--            Correct source surface
Note: See TracChangeset for help on using the changeset viewer.