Skip to content

Commit

Permalink
WRFDA for racm_soa_vbs_da (chem_opt=108) in the WRF-Chem model (#1575)
Browse files Browse the repository at this point in the history
TYPE: new features

KEYWORDS: aerosol data assimilation, RACM, MADE-VBS aerosols, WRF-Chem

SOURCE: Soyoung Ha (MMM/NCAR)

DESCRIPTION OF CHANGES:
WRFDA is newly expanded for chem_cv_options=108 for surface chemical data assimilation (PM2.5, PM10, CO, SO2, NO2, O3) using the RACM/MADE-VBS chemistry option in WRF-Chem.

LIST OF MODIFIED FILES:
M Registry/registry.var_chem
M var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
M var/da/da_chem_sfc/da_calculate_grady_chem_sfc.inc
M var/da/da_chem_sfc/da_chem_sfc.f90
M var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc
M var/da/da_chem_sfc/da_residual_chem_sfc.inc
M var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc
M var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
M var/da/da_define_structures/da_allocate_observations_chem_sfc.inc
M var/da/da_define_structures/da_deallocate_background_errors.inc
M var/da/da_define_structures/da_define_structures.f90
M var/da/da_main/da_update_firstguess.inc
M var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
M var/da/da_obs_io/da_read_obs_chem_sfc.inc
M var/da/da_obs_io/da_read_omb_tmp.inc
M var/da/da_obs_io/da_scan_obs_chem_sfc.inc
M var/da/da_obs_io/da_write_obs_chem_sfc.inc
M var/da/da_setup_structures/da_get_vertical_truncation.inc
M var/da/da_setup_structures/da_setup_background_errors.inc
M var/da/da_setup_structures/da_setup_be_regional.inc
M var/da/da_setup_structures/da_setup_firstguess_wrf.inc
M var/da/da_setup_structures/da_setup_obs_structures.inc
M var/da/da_setup_structures/da_setup_obs_structures_chem_sfc.inc
M var/da/da_statistics/da_analysis_stats.inc
M var/da/da_statistics/da_print_qcstat.inc
M var/da/da_transfer_model/da_transfer_model.f90
M var/da/da_transfer_model/da_transfer_xatoanalysis.inc
M var/da/da_vtox_transforms/da_transform_vchemtox_adj.inc

TESTS CONDUCTED:
1. All tests were passed with no issues.
2. Jenkins testing is OK
3. WRFDA regression tests passed.

RELEASE NOTE: WRFDA is newly expanded for chem_cv_options=108 for surface chemical data assimilation (PM2.5, PM10, CO, SO2, NO2, O3) using the RACM/MADE-VBS chemistry option in WRF-Chem.
Ha, Soyoung, 2021: Implementation of aerosol data assimilation in WRFDA (V4.0.3) for WRF-Chem (V3.9.1) using the MADE/VBS scheme. Geoscientific Model Development. gmd-2021-74.
  • Loading branch information
syha authored Nov 19, 2021
1 parent bcaa3ab commit ed113bb
Show file tree
Hide file tree
Showing 28 changed files with 1,716 additions and 666 deletions.
131 changes: 126 additions & 5 deletions Registry/registry.var_chem

Large diffs are not rendered by default.

6 changes: 1 addition & 5 deletions var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,6 @@ subroutine da_ao_stats_chem_sfc (stats_unit, iv, re, ob)

do ichem=PARAM_FIRST_SCALAR, num_chemic_surf
nchem=0
! stats%maximum%chem(ichem) = maxmin_type (missing_r, 0, 0)
! stats%minimum%chem(ichem) = maxmin_type (missing_r, 0, 0)
! stats%average = residual_chem_sfc_type(0.0, 0.0, 0.0, 0.0, 0.0)
! stats%rms_err = stats%average

do n=1, iv%info(chemic_surf)%nlocal
if (iv%info(chemic_surf)%proc_domain(1,n)) then
Expand Down Expand Up @@ -67,7 +63,7 @@ subroutine da_ao_stats_chem_sfc (stats_unit, iv, re, ob)
write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of AO for chem'
if (chemicda_opt == 1 .or. chemicda_opt == 2) then
call da_print_stats_chem_sfc(stats_unit, nchem, stats)
else if (chemicda_opt == 3 .or. chemicda_opt == 4 .or. chemicda_opt == 5) then
else if (chemicda_opt >= 3) then
call da_print_stats_chem_sfc(stats_unit, nchem, stats, ichem)
end if
end if
Expand Down
5 changes: 2 additions & 3 deletions var/da/da_chem_sfc/da_calculate_grady_chem_sfc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ subroutine da_calculate_grady_chem_sfc(iv, re, jo_grad_y)
do n=1, iv%info(chemic_surf)%nlocal
if (iv%chemic_surf(n)%chem(ichem)%qc < obs_qc_pointer) re%chemic_surf(n)%chem(ichem) = 0.0

if (iv%chemic_surf(n)%chem(ichem)%qc < obs_qc_pointer) re%chemic_surf(n)%chem(ichem) = 0.0

jo_grad_y%chemic_surf(n)%chem(ichem) = -re%chemic_surf(n)%chem(ichem) / (iv%chemic_surf(n)%chem(ichem)%error * iv%chemic_surf(n)%chem(ichem)%error)
jo_grad_y%chemic_surf(n)%chem(ichem) = -re%chemic_surf(n)%chem(ichem) / &
(iv%chemic_surf(n)%chem(ichem)%error * iv%chemic_surf(n)%chem(ichem)%error)
end do
end do

Expand Down
11 changes: 10 additions & 1 deletion var/da/da_chem_sfc/da_chem_sfc.f90
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,16 @@ module da_chem_sfc
p_chem_ic_so4_a01, p_chem_ic_so4_a02, p_chem_ic_so4_a03, p_chem_ic_so4_a04, p_chem_ic_no3_a01, p_chem_ic_no3_a02, p_chem_ic_no3_a03, p_chem_ic_no3_a04,&
p_chem_ic_nh4_a01, p_chem_ic_nh4_a02, p_chem_ic_nh4_a03, p_chem_ic_nh4_a04, p_chem_ic_cl_a01, p_chem_ic_cl_a02, p_chem_ic_cl_a03, p_chem_ic_cl_a04, &
p_chem_ic_na_a01, p_chem_ic_na_a02, p_chem_ic_na_a03, p_chem_ic_na_a04, p_chem_ic_oin_a01, p_chem_ic_oin_a02, p_chem_ic_oin_a03, p_chem_ic_oin_a04, &
p_chem_ic_so2, p_chem_ic_no2, p_chem_ic_o3, p_chem_ic_co
p_chem_ic_so2, p_chem_ic_no2, p_chem_ic_o3, p_chem_ic_co, &
p_chem_ic_so4aj, p_chem_ic_so4ai, p_chem_ic_nh4aj, p_chem_ic_nh4ai, & ! aerosols in racm_soa_vbs_da
p_chem_ic_no3aj, p_chem_ic_no3ai, p_chem_ic_naaj, p_chem_ic_naai, &
p_chem_ic_asoa1j, p_chem_ic_asoa1i, p_chem_ic_asoa2j, p_chem_ic_asoa2i, &
p_chem_ic_asoa3j, p_chem_ic_asoa3i, p_chem_ic_asoa4j, p_chem_ic_asoa4i, &
p_chem_ic_bsoa1j, p_chem_ic_bsoa1i, p_chem_ic_bsoa2j, p_chem_ic_bsoa2i, &
p_chem_ic_bsoa3j, p_chem_ic_bsoa3i, p_chem_ic_bsoa4j, p_chem_ic_bsoa4i, &
p_chem_ic_orgpaj, p_chem_ic_orgpai, p_chem_ic_ecj, p_chem_ic_eci, &
p_chem_ic_p25j, p_chem_ic_p25i, p_chem_ic_antha, p_chem_ic_seas, &
p_chem_ic_claj, p_chem_ic_clai, p_chem_ic_soila
#endif

use da_define_structures, only : iv_type, y_type, jo_type, maxmin_type, &
Expand Down
223 changes: 128 additions & 95 deletions var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion var/da/da_chem_sfc/da_residual_chem_sfc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ subroutine da_residual_chem_sfc(iv, y, re, np_missing, np_bad_data, np_obs_used,
allocate ( re%chemic_surf(n)%chem(num_chemic_surf))
do ichem = PARAM_FIRST_SCALAR, num_chemic_surf
np_available = np_available + 1
re%chemic_surf(n)%chem(ichem) = da_residual(n, 0, y%chemic_surf(n)%chem(ichem), iv%chemic_surf(n)%chem(ichem), n_obs_bad % chemic_surf)
re%chemic_surf(n)%chem(ichem) = da_residual(n, 0, y%chemic_surf(n)%chem(ichem), &
iv%chemic_surf(n)%chem(ichem), n_obs_bad % chemic_surf)
end do
end do

Expand Down
209 changes: 120 additions & 89 deletions var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc

Large diffs are not rendered by default.

113 changes: 71 additions & 42 deletions var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
Original file line number Diff line number Diff line change
Expand Up @@ -21,45 +21,45 @@ subroutine da_transform_xtoy_chem_sfc_adj(grid, iv, jo_grad_y, jo_grad_x)

if (trace_use_dull) call da_trace_entry("da_transform_xtoy_chem_sfc_adj")

if (sfc_assi_options == sfc_assi_options_1) then

allocate (model_chemic(iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chem))
allocate (model_chemic_surf(iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chemic_surf))
allocate (model_rho(iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chem))

jo_grad_x%chem_ic = 0.0
model_chemic = 0.0
model_chemic_surf = 0.0
model_rho = 0.0

do ichem = PARAM_FIRST_SCALAR, num_chemic_surf
! [1.2] Interpolate horizontally:
do n=iv%info(chemic_surf)%n1,iv%info(chemic_surf)%n2
allocate (model_rho (iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chem))
allocate (model_chemic (iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chem))
allocate (model_chemic_surf(iv%info(chemic_surf)%n1:iv%info(chemic_surf)%n2,num_chemic_surf))

model_rho = 0.0
model_chemic = 0.0
model_chemic_surf = 0.0
jo_grad_x%chem_ic = 0.0

do ichem = PARAM_FIRST_SCALAR, num_chemic_surf
do n=iv%info(chemic_surf)%n1,iv%info(chemic_surf)%n2
if(iv%chemic_surf(n)%chem(ichem)%qc >= obs_qc_pointer) then
model_chemic_surf(n,ichem) = jo_grad_y%chemic_surf(n)%chem(ichem)
end do
end if
end do

do ichem = PARAM_FIRST_SCALAR ,num_chem
call da_interp_lin_2d (grid%xb%rho(:,:,1), iv%info(chemic_surf), 1, model_rho(:,ichem))
end do

if (chem_cv_options == 10) then
model_chemic(:,p_chem_ic_p25)=model_rho(:,p_chem_ic_p25)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_sulf)=model_rho(:,p_chem_ic_sulf)*1.375*(model_chemic_surf(:,p_chemsi_pm25))*(96.06/28.964*1000)
model_chemic(:,p_chem_ic_bc1)=model_rho(:,p_chem_ic_bc1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_bc2)=model_rho(:,p_chem_ic_bc2)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_oc1)=model_rho(:,p_chem_ic_oc1)*1.8*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_oc2)=model_rho(:,p_chem_ic_oc2)*1.8*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_dust_1)=model_rho(:,p_chem_ic_dust_1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_dust_2)=model_rho(:,p_chem_ic_dust_2)*0.286*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_seas_1)=model_rho(:,p_chem_ic_seas_1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_seas_2)=model_rho(:,p_chem_ic_seas_2)*0.942*(model_chemic_surf(:,p_chemsi_pm25))

do ichem = PARAM_FIRST_SCALAR, num_chem
end do

do ichem = PARAM_FIRST_SCALAR ,num_chem
call da_interp_lin_2d (grid%xb%rho(:,:,1), iv%info(chemic_surf), 1, model_rho(:,ichem))
end do

if (chem_cv_options == 10) then
model_chemic(:,p_chem_ic_p25)=model_rho(:,p_chem_ic_p25)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_sulf)=model_rho(:,p_chem_ic_sulf)*1.375*(model_chemic_surf(:,p_chemsi_pm25))*(96.06/28.964*1000)
model_chemic(:,p_chem_ic_bc1)=model_rho(:,p_chem_ic_bc1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_bc2)=model_rho(:,p_chem_ic_bc2)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_oc1)=model_rho(:,p_chem_ic_oc1)*1.8*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_oc2)=model_rho(:,p_chem_ic_oc2)*1.8*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_dust_1)=model_rho(:,p_chem_ic_dust_1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_dust_2)=model_rho(:,p_chem_ic_dust_2)*0.286*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_seas_1)=model_rho(:,p_chem_ic_seas_1)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_seas_2)=model_rho(:,p_chem_ic_seas_2)*0.942*(model_chemic_surf(:,p_chemsi_pm25))

do ichem = PARAM_FIRST_SCALAR, num_chem
call da_interp_lin_2d_adj (jo_grad_x%chem_ic(:,:,1,ichem), iv%info(chemic_surf), 1, model_chemic(:,ichem))
end do
end do

else if (chem_cv_options == 20) then

else if (chem_cv_options == 20) then
if (chemicda_opt == 1 ) then
model_chemic(:,p_chem_ic_bc_a01)=model_rho(:,p_chem_ic_bc_a01)*(model_chemic_surf(:,p_chemsi_pm25))
model_chemic(:,p_chem_ic_bc_a02)=model_rho(:,p_chem_ic_bc_a02)*(model_chemic_surf(:,p_chemsi_pm25))
Expand Down Expand Up @@ -263,17 +263,46 @@ subroutine da_transform_xtoy_chem_sfc_adj(grid, iv, jo_grad_y, jo_grad_x)
call da_interp_lin_2d_adj (jo_grad_x%chem_ic(:,:,1,ichem), iv%info(chemic_surf), 1, model_chemic(:,ichem))
end do

end if ! if (chemicda_opt == 1 ) then

else if (chem_cv_options == 108) then ! racm_soa_vbs_da

if ( chemicda_opt == 1 .or. chemicda_opt == 3 .or. chemicda_opt == 5 ) then ! pm2.5
do ichem = p_chem_ic_so4aj, p_chem_ic_p25i
model_chemic(:,ichem) = model_chemic(:,ichem) + model_rho(:,ichem) * model_chemic_surf(:,p_chemsi_pm25)
end do
end if !(chemicda_opt == 1 .or. chemicda_opt == 3 .or. chemicda_opt == 5)

if ( chemicda_opt == 2 ) then ! pm10 only
do ichem = p_chem_ic_so4aj, p_chem_ic_soila
model_chemic(:,ichem) = model_chemic(:,ichem) + model_rho(:,ichem) * model_chemic_surf(:,p_chemsi_pm10)
end do
end if !( chemicda_opt == 2 )

if ( chemicda_opt == 3 .or. chemicda_opt == 5 ) then ! pm10 after pm2.5
! pm10 - pm2.5 residual
do ichem = p_chem_ic_antha, p_chem_ic_soila
model_chemic(:,ichem) = model_chemic(:,ichem) + model_rho(:,ichem) * model_chemic_surf(:,p_chemsi_pm10)
end do
end if !( chemicda_opt == 3 .or. chemicda_opt == 5 )

if ( chemicda_opt >= 4 ) then
model_chemic(:,p_chem_ic_so2)=model_chemic_surf(:,p_chemsi_so2)
model_chemic(:,p_chem_ic_no2)=model_chemic_surf(:,p_chemsi_no2)
model_chemic(:,p_chem_ic_o3 )=model_chemic_surf(:,p_chemsi_o3 )
model_chemic(:,p_chem_ic_co )=model_chemic_surf(:,p_chemsi_co )
end if

end if
do ichem = PARAM_FIRST_SCALAR, num_chem
call da_interp_lin_2d_adj (jo_grad_x%chem_ic(:,:,1,ichem), iv%info(chemic_surf), 1, model_chemic(:,ichem))
end do

deallocate(model_chemic)
deallocate(model_chemic_surf)
deallocate(model_rho)
end if
end if ! if (chem_cv_options == 10) then

deallocate(model_rho)
deallocate(model_chemic)
deallocate(model_chemic_surf)

if (trace_use_dull) call da_trace_exit("da_transform_xtoy_chem_sfc_adj")

end subroutine da_transform_xtoy_chem_sfc_adj


40 changes: 3 additions & 37 deletions var/da/da_define_structures/da_allocate_observations_chem_sfc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,9 @@ subroutine da_allocate_observations_chem_sfc (iv)

if (trace_use) call da_trace_entry("da_allocate_observations_chem_sfc")

if (iv%info(chemic_surf)%nlocal > 0) allocate(iv%chemic_surf (1:iv%info(chemic_surf)%nlocal))

i = chemic_surf
if (iv%info(i)%nlocal > 0) then
allocate (iv%info(i)%name(iv%info(i)%nlocal))
allocate (iv%info(i)%platform(iv%info(i)%nlocal))
allocate (iv%info(i)%id(iv%info(i)%nlocal))
allocate (iv%info(i)%date_char(iv%info(i)%nlocal))
allocate (iv%info(i)%levels(iv%info(i)%nlocal))
allocate (iv%info(i)%lat(iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%lon(iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%elv(iv%info(i)%nlocal))
allocate (iv%info(i)%pstar(iv%info(i)%nlocal))

allocate (iv%info(i)%slp(iv%info(i)%nlocal))
allocate (iv%info(i)%pw(iv%info(i)%nlocal))

allocate (iv%info(i)%x (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%y (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%i (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%j (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%dx (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%dxm(kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%dy (kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%dym(kms:kme,iv%info(i)%nlocal))
allocate (iv%info(i)%k (iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%dz (iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%dzm(iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%zk (iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%proc_domain(iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%thinned(iv%info(i)%max_lev,iv%info(i)%nlocal))
allocate (iv%info(i)%obs_global_index(iv%info(i)%nlocal))

iv%info(i)%proc_domain(:,:) = .false.
iv%info(i)%thinned(:,:) = .false.
iv%info(i)%zk(:,:) = missing_r
end if
if (iv%info(chemic_surf)%nlocal > 0) allocate(iv%chemic_surf(1:iv%info(chemic_surf)%nlocal))

call da_allocate_obs_info(iv,chemic_surf)

if (trace_use) call da_trace_exit("da_allocate_observations_chem_sfc")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ subroutine da_deallocate_background_errors (be)
end if
end do
deallocate ( be % v12 )
deallocate ( be % cv_mz_chemic )
if ( num_chem >= PARAM_FIRST_SCALAR ) deallocate ( be % cv % sizechemic )
end if
#endif
! Deallocate gridpoint errors:
Expand Down
2 changes: 1 addition & 1 deletion var/da/da_define_structures/da_define_structures.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1111,7 +1111,7 @@ module da_define_structures
type be_subtype
integer :: mz ! Vertical truncation of errors.
integer :: max_wave ! Global only - horizontal spectral truncation.
character*5 :: name ! Variable name.
character*10 :: name ! Variable name.
real*8, pointer :: rf_alpha(:) ! RF scale length.
real*8, pointer :: val(:,:) ! Local Standard dev./sqrt(eigenvalue).
real*8, pointer :: evec(:,:,:) ! Local Vertical eigenvectors.
Expand Down
2 changes: 0 additions & 2 deletions var/da/da_main/da_update_firstguess.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1198,9 +1198,7 @@ if ( use_chemic_surfobs ) then
end_index1(2) = p%ed2
end_index1(3) = p%ed3

!! do ic = 1, num_chem-1
do ic = PARAM_FIRST_SCALAR, num_chem
!!! do ic = 2,2
#ifdef DM_PARALLEL
if (rootproc) then
allocate( globbuf((ide-1-ids+3)*(jde-1-jds+3)*(kde-1-kds+3)))
Expand Down
8 changes: 6 additions & 2 deletions var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ subroutine da_final_write_obs_gas_sfc(it,iv)
character(len=filename_len), allocatable :: filename(:)
character(len=filename_len) :: file

!local
character(len=4) :: typestr
typestr = 'chem'
if (chem_cv_options >= 108) typestr = 'gas'

if (trace_use) call da_trace_entry("da_final_write_obs_gas_sfc")

Expand Down Expand Up @@ -44,10 +48,10 @@ subroutine da_final_write_obs_gas_sfc(it,iv)
end if
call da_proc_sum_int(num_obs)
if (num_obs > 0 .and. rootproc) then
write(omb_unit,'(a20,i8)')'chem', num_obs
write(omb_unit,'(a20,i8)') typestr, num_obs
num_obs = 0
do k = 0,num_procs-1
call da_read_omb_tmp(filename(k),iunit,num_obs,'chem',4,if_wind_sd)
call da_read_omb_tmp(filename(k),iunit,num_obs,typestr,3,if_wind_sd)
end do
end if

Expand Down
Loading

0 comments on commit ed113bb

Please sign in to comment.