wrf svn trunk commit r4103
[wrffire.git] / wrfv2_fire / chem / optical_driver.F
blob0bcb2d887fb80f46276443fc95b46aa79bd4dd43
1 !**********************************************************************************  
2 ! This computer software was prepared by Battelle Memorial Institute, hereinafter
3 ! the Contractor, under Contract No. DE-AC05-76RL0 1830 with the Department of 
4 ! Energy (DOE). NEITHER THE GOVERNMENT NOR THE CONTRACTOR MAKES ANY WARRANTY,
5 ! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE.
7 ! MOSAIC module: see module_mosaic_driver.F for references and terms of use
8 !**********************************************************************************  
10 ! WRF-chem V3.0 : Original version of optical_driver written by Jerome Fast (PNNL)
11 !                 and James Barnard (PNNL)
13 !WRF:MODEL_LAYER:CHEMISTRY
15       SUBROUTINE optical_driver(id,curr_secs,dtstep,config_flags,haveaer,&
16                chem,dz8w,alt,relhum,                                     &
17                h2oai,h2oaj,                                              &
18                tauaer1,tauaer2,tauaer3,tauaer4,                          &
19                gaer1,gaer2,gaer3,gaer4,                                  &
20                waer1,waer2,waer3,waer4,                                  &
21                bscoef1,bscoef2,bscoef3,bscoef4,                          &
22                l2aer,l3aer,l4aer,l5aer,l6aer,l7aer,                      &
23                ids,ide, jds,jde, kds,kde,                                &
24                ims,ime, jms,jme, kms,kme,                                &
25                its,ite, jts,jte, kts,kte                                 )
27 !------------------------------------------------------------------------
28    USE module_configure
29    USE module_state_description
30    USE module_model_constants
31    USE module_optical_averaging
32    USE module_data_mosaic_therm, only: nbin_a
33    INTEGER,      INTENT(IN   ) :: id,                                  &
34                                   ids,ide, jds,jde, kds,kde,           &
35                                   ims,ime, jms,jme, kms,kme,           &
36                                   its,ite, jts,jte, kts,kte
37    REAL(KIND=8), INTENT(IN   ) :: curr_secs
38    REAL,         INTENT(IN   ) :: dtstep
40 ! array that holds all advected chemical species
42    REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_chem ),             &
43          INTENT(IN ) ::  chem
45    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ),                       &  
46          INTENT(IN ) ::  relhum, dz8w, alt, h2oai, h2oaj
48 ! arrays that hold the aerosol optical properties
50    REAL, DIMENSION( ims:ime, kms:kme, jms:jme ),                       &  
51          INTENT(INOUT ) ::                                             &
52            tauaer1, tauaer2, tauaer3, tauaer4,                         &
53            gaer1, gaer2, gaer3, gaer4,                                 &
54            waer1, waer2, waer3, waer4,                                 &
55            bscoef1, bscoef2, bscoef3, bscoef4                              
56    REAL, DIMENSION( ims:ime, kms:kme, jms:jme, 1:4 ),                  &  
57          INTENT(INOUT ) ::                                             &
58            l2aer, l3aer, l4aer, l5aer, l6aer, l7aer
60    TYPE(grid_config_rec_type),  INTENT(IN   )    :: config_flags
62    LOGICAL, INTENT(IN) :: haveaer
63 !         
64 ! local variables
66       logical processingAerosols
67       integer nbin_o
68       integer option_method, option_mie
70 !-----------------------------------------------------------------
71 ! compute only if simulating aerosols and aer_ra_feedback=1
73    IF (config_flags%aer_ra_feedback .eq. 0) THEN
74          call wrf_debug(15,'no feedback, return from optical driver')
75      return
76    ENDIF
77    select case (config_flags%chem_opt)
78    case ( RADM2SORG,           RADM2SORG_KPP,      RADM2SORG_AQ, &
79           GOCART_SIMPLE,       RACMSORG_KPP,       RACMSORG_AQ,  &
80           CBMZ_MOSAIC_4BIN,    CBMZ_MOSAIC_8BIN,   &
81           CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ )
82       processingAerosols = .true.
83       call wrf_debug(15,'optical driver: process aerosols true')
84    case default
85       processingAerosols = .false.
86       call wrf_debug(15,'optical driver: process aerosols false')
87    end select
89   if( processingAerosols ) then
91 ! select aerosol optical property option
92 ! VOLUME: volume averaging of refractive indicies
93 ! * for MADE/SORGAM, assume same 8 size bins as MOSAIC by default
94 ! SHELL: shell-core approach, placeholder
96    select case (config_flags%chem_opt)
97    case ( RADM2SORG,           RADM2SORG_KPP,      RADM2SORG_AQ, &
98           GOCART_SIMPLE,       RACMSORG_KPP,       RACMSORG_AQ   )
99      nbin_o = 8
100    case (CBMZ_MOSAIC_4BIN,    CBMZ_MOSAIC_8BIN,   &
101          CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ )
102      nbin_o = nbin_a
103    end select
105      call wrf_debug(15,'optical averaging')
106      aer_op_opt_select: SELECT CASE(config_flags%aer_op_opt)
107      CASE (VOLUME_APPROX)
108        option_method=1
109        option_mie=1
110      CASE (MAXWELL_APPROX)
111        option_method=2
112        option_mie=1
113      CASE (VOLUME_EXACT)
114        option_method=1
115        option_mie=2
116      CASE (MAXWELL_EXACT)
117        option_method=2
118        option_mie=2
119      CASE (SHELL_EXACT)
120        option_method=3
121        option_mie=2
122      CASE DEFAULT
123         if( config_flags%aer_op_opt > 0 ) then
124            call wrf_message('WARNING: Invalid aer_op_opt. Defaulting to VOLUME_APPROX.')
125            option_method=1
126            option_mie=1
127         end if
128      END SELECT aer_op_opt_select
130      if( config_flags%aer_op_opt > 0 ) then
131         call wrf_debug(15,'optical driver: call optical averaging')
132         call optical_averaging(id,curr_secs,dtstep,config_flags,     &
133              nbin_o,haveaer,option_method,option_mie,chem,dz8w,alt,  &
134              relhum,h2oai,h2oaj,                                     &
135              tauaer1,tauaer2,tauaer3,tauaer4,                        &
136              gaer1,gaer2,gaer3,gaer4,                                &
137              waer1,waer2,waer3,waer4,                                &
138              bscoef1,bscoef2,bscoef3,bscoef4,                        &
139              l2aer,l3aer,l4aer,l5aer,l6aer,l7aer,                    &
140              ids,ide, jds,jde, kds,kde,                              &
141              ims,ime, jms,jme, kms,kme,                              &
142              its,ite, jts,jte, kts,kte                               )
143      else
144         !If aer_op_opt==0 then the optical arrays are already set to
145         !zero in chemics_init so there will not be a problem if the
146         !user has selected aer_ra_feedback=1.
147      end if
149    endif
150    return
152 END SUBROUTINE optical_driver