subroutine radar_simulator_init(freq,k2,use_gas_abs,do_ray,undef, & nhclass, & hclass_type,hclass_phase, & hclass_dmin,hclass_dmax, & hclass_apm,hclass_bpm,hclass_rho, & hclass_p1,hclass_p2,hclass_p3, & load_scale_LUTs_flag,update_scale_LUTs_flag,LUT_file_name, & hp & ! output ) use radar_simulator_types implicit none ! Purpose: ! ! Initialize variables used by the radar simulator. ! Part of QuickBeam v3.0 by John Haynes and Roj Marchand ! ! ! Inputs: ! [] from data in hydrometeor class input ! ! [freq] radar frequency (GHz) ! ! [k2] |K|^2, the dielectric constant, set to -1 to use the ! frequency dependent default ! ! [use_gas_abs] 1=do gaseous abs calcs, 0=no gasesous absorbtion calculated, ! 2=calculate (and use) absorption for first profile on all profiles ! ! [undef] mising data value ! [nhclass] number of hydrometeor types ! ! For each hydrometero type: ! hclass_type Type of distribution (see quickbeam documentation) ! hclass_phase 1==ice, 0=liquid ! ! hclass_dmin minimum diameter allowed is drop size distribution N(DDmax)=0 ! ! hclass_apm,hclass_bpm Density of partical apm*D^bpm or constant = rho ! hclass_rho, ! ! hclass_p1,hclass_p2, Default values of DSD parameters (see quickbeam documentation) ! hclass_p3, ! ! load_scale_LUTs_flag Flag, load scale factors Look Up Table from file at start of run ! update_scale_LUTs_flag Flag, save new scale factors calculated during this run to LUT ! LUT_file_name Name of file containing LUT ! ! Outputs: ! [hp] structure that define hydrometeor types ! ! Modified: ! 08/23/2006 placed into subroutine form (Roger Marchand) ! June 2010 New interface to support "radar_simulator_params" structure ! ----- INPUT ----- real, intent(in) :: freq,k2 integer, intent(in) :: nhclass ! number of hydrometeor classes in use integer, intent(in) :: use_gas_abs,do_ray real :: undef real,dimension(nhclass),intent(in) :: hclass_dmin,hclass_dmax, & hclass_apm,hclass_bpm,hclass_rho, & hclass_p1,hclass_p2,hclass_p3 integer,dimension(nhclass),intent(in) :: hclass_type,hclass_phase logical, intent(in) :: load_scale_LUTs_flag,update_scale_LUTs_flag character*240, intent(in) :: LUT_file_name ! ----- OUTPUTS ----- type(class_param), intent(out) :: hp ! ----- INTERNAL ----- integer :: i,j real*8 :: delt, deltp ! ! set radar simulation properites ! hp%freq=freq hp%k2=k2 hp%use_gas_abs=use_gas_abs hp%do_ray=do_ray hp%nhclass=nhclass hp%load_scale_LUTs=load_scale_LUTs_flag hp%update_scale_LUTs=update_scale_LUTs_flag hp%scale_LUT_file_name=LUT_file_name ! ! Store settings for hydrometeor types in hp (class_parameter) structure. ! do i = 1,nhclass hp%dtype(i) = hclass_type(i) hp%phase(i) = hclass_phase(i) hp%dmin(i) = hclass_dmin(i) hp%dmax(i) = hclass_dmax(i) hp%apm(i) = hclass_apm(i) hp%bpm(i) = hclass_bpm(i) hp%rho(i) = hclass_rho(i) hp%p1(i) = hclass_p1(i) hp%p2(i) = hclass_p2(i) hp%p3(i) = hclass_p3(i) enddo ! ! initialize scaling array ! hp%N_scale_flag = .false. hp%fc = undef hp%rho_eff = undef hp%Z_scale_flag = .false. hp%Ze_scaled = 0.0 hp%Zr_scaled = 0.0 hp%kr_scaled = 0.0 ! ! set up Re bin "structure" for z_scaling ! hp%base_list(1)=0; do j=1,Re_MAX_BIN hp%step_list(j)=0.1+0.1*((j-1)**1.5); if(hp%step_list(j)>Re_BIN_LENGTH) then hp%step_list(j)=Re_BIN_LENGTH; endif if(j>1) then hp%base_list(j)=hp%base_list(j-1)+floor(Re_BIN_LENGTH/hp%step_list(j-1)); endif enddo ! ! set up Temperature bin structure used for z scaling ! do i=1,cnt_ice hp%mt_tti(i)=(i-1)*5-90 + 273.15 enddo do i=1,cnt_liq hp%mt_ttl(i)=(i-1)*5-60 + 273.15 enddo ! ! define array discrete diameters used in mie calculations ! delt = (log(dmax)-log(dmin))/(nd-1) deltp = exp(delt) hp%D(1) = dmin do i=2,nd hp%D(i) = hp%D(i-1)*deltp enddo end subroutine radar_simulator_init