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, &
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 !------------------------------------------------------------------------
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 ), &
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 ), &
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 ), &
58 l2aer, l3aer, l4aer, l5aer, l6aer, l7aer
60 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
62 LOGICAL, INTENT(IN) :: haveaer
66 logical processingAerosols
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')
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')
85 processingAerosols = .false.
86 call wrf_debug(15,'optical driver: process aerosols false')
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 )
100 case (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, &
101 CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ )
105 call wrf_debug(15,'optical averaging')
106 aer_op_opt_select: SELECT CASE(config_flags%aer_op_opt)
110 CASE (MAXWELL_APPROX)
123 if( config_flags%aer_op_opt > 0 ) then
124 call wrf_message('WARNING: Invalid aer_op_opt. Defaulting to VOLUME_APPROX.')
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 )
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.
152 END SUBROUTINE optical_driver