From 2cea446a4fad767c07b3f7e6026429f3b89b73f2 Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 8 Aug 2019 12:20:17 +0000 Subject: [PATCH] Vlab issue #66614 -- Merge branch post_chem1 to the master. Squashed commit of the following: commit 6fac46a432eb7e87f489db90e4ef846dfe137007 Author: Wen Meng Date: Sun Aug 4 17:12:54 2019 +0000 Vlab Issue -- 1) Implemented aerosol optical calculation for all the wavelength as NGAC. 2) Implemented chemical diagnostic variables based on v0.8.7 version FV3GFS-GSDChem, which is the same as the NGAC. Change-Id: Idec2195bffe14e34965a784de6c5d7e1c9d3b0f6 --- parm/post_avblflds.xml | 183 ++- parm/postcntrl_gefs_chem.xml | 241 ++-- parm/postxconfig-NT-gefs-chem.txt | 1218 +++++++++++++------ sorc/ncep_post.fd/ALLOCATE_ALL.f | 11 +- sorc/ncep_post.fd/CALPW.f | 33 +- sorc/ncep_post.fd/CLDRAD.f | 564 +++++++-- sorc/ncep_post.fd/DEALLOCATE.f | 5 + sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f | 244 +++- sorc/ncep_post.fd/RQSTFLD.f | 184 ++- sorc/ncep_post.fd/VRBLS3D_mod.f | 5 +- 10 files changed, 2003 insertions(+), 685 deletions(-) diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index e66c69299..7bcb31b20 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -5026,58 +5026,44 @@ 9.0 - - 615 - DUST_EMISSION_FLUX - tmpl4_48 - AEMFLX - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - 9.0 - - 616 - DUST_SEDIMENTATION_FLUX + BC_COL_MASS_DEN tmpl4_48 - SEDMFLX - entire_atmos - dust_dry + COLMD + entire_atmos + black_carbon_dry smaller_than_first_limit - 6 - 20 + 10 + 236 9.0 617 - DUST25_SFC_MASS_CON + OC_COL_MASS_DEN tmpl4_48 - PMTF - surface - dust_dry + COLMD + entire_atmos + particulate_org_matter_dry smaller_than_first_limit - 7 - 25 + 10 + 424 9.0 618 - SEAS25_SFC_MASS_CON + SULF_COL_MASS_DEN tmpl4_48 - PMTF - surface - sea_salt_dry + COLMD + entire_atmos + sulphate_dry smaller_than_first_limit 7 25 9.0 - 619 PM10_SFC_MASS_CON @@ -5497,48 +5483,63 @@ 648 - BC_COL_MASS_DEN + SINGLE_SCAT_ALBD_at340 tmpl4_48 - COLMD - entire_atmos - black_carbon_dry + SSALBK + total_aerosol smaller_than_first_limit - 10 - 236 - 9.0 + 6 + 20 + between_first_second_limit + 9 + 338 + 9 + 342 + entire_atmos + 9.0 649 - OC_COL_MASS_DEN + AER_ASYM_FACTOR_at340 tmpl4_48 - COLMD - entire_atmos - particulate_org_matter_dry + ASYSFK + total_aerosol smaller_than_first_limit - 10 - 424 - 9.0 + 6 + 20 + between_first_second_limit + 9 + 338 + 9 + 342 + entire_atmos + 9.0 650 - SULF_COL_MASS_DEN + AER_SCAT_OPT_DEP_at550 tmpl4_48 - COLMD - entire_atmos - sulphate_dry + SCTAOTK + total_aerosol smaller_than_first_limit - 7 - 25 - 9.0 + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + entire_atmos + 9.0 651 DUST_AER_SCAT_OPT_DEP_at550 tmpl4_48 - SAOTK + SCTAOTK dust_dry smaller_than_first_limit 6 @@ -5556,7 +5557,7 @@ 652 SEASALT_AER_SCAT_OPT_DEP_at550 tmpl4_48 - SAOTK + SCTAOTK sea_salt_dry smaller_than_first_limit 6 @@ -5574,7 +5575,7 @@ 653 SULFATE_AER_SCAT_OPT_DEP_at550 tmpl4_48 - SAOTK + SCTAOTK sulphate_dry smaller_than_first_limit 8 @@ -5592,7 +5593,7 @@ 654 ORGANIC_CARBON_AER_SCAT_OPT_DEP_at550 tmpl4_48 - SAOTK + SCTAOTK particulate_org_matter_dry smaller_than_first_limit 8 @@ -5610,7 +5611,7 @@ 655 BLACK_CARBON_AER_SCAT_OPT_DEP_at550 tmpl4_48 - SAOTK + SCTAOTK black_carbon_dry smaller_than_first_limit 8 @@ -5642,6 +5643,58 @@ 9.0 + + 659 + DUST_EMISSION_FLUX + tmpl4_48 + AEMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 660 + DUST_SEDIMENTATION_FLUX + tmpl4_48 + SEDMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 661 + DUST DRY DEPOSITION + tmpl4_48 + DDMFLX + dust_dry + smaller_than_first_limit + 6 + 20 + entire_atmos + 9.0 + + + + 662 + DUST WET DEPOSITION + tmpl4_48 + WLSMFLX + dust_dry + smaller_than_first_limit + 6 + 20 + entire_atmos + 9.0 + + 663 SEASALT_EMISSION_FLUX @@ -5918,16 +5971,15 @@ 684 - SS_FN_AER_SFC_MASS_CON - AVE + SEAS25_SFC_MASS_CON tmpl4_48 - MASSDEN + PMTF + surface sea_salt_dry smaller_than_first_limit 7 25 - surface - 9.0 + 9.0 @@ -5946,16 +5998,15 @@ 686 - DU_FN_AER_SFC_MASS_CON - AVE + DUST25_SFC_MASS_CON tmpl4_48 - MASSDEN + PMTF + surface dust_dry smaller_than_first_limit 7 25 - surface - 9.0 + 9.0 diff --git a/parm/postcntrl_gefs_chem.xml b/parm/postcntrl_gefs_chem.xml index cb248b3f0..c4ce522cf 100755 --- a/parm/postcntrl_gefs_chem.xml +++ b/parm/postcntrl_gefs_chem.xml @@ -19,6 +19,112 @@ fltng_pnt lossless + + + DUST1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SO4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + AER_OPT_DEP_at550 9.0 @@ -50,167 +156,132 @@ - DUST25_SFC_MASS_CON - NCEP - 9.0 - - - - SEAS25_SFC_MASS_CON - NCEP - 9.0 + AER_SCAT_OPT_DEP_at550 + 9.0 - PM10_SFC_MASS_CON - NCEP - 9.0 + DUST_AER_SCAT_OPT_DEP_at550 + 9.0 - PM25_SFC_MASS_CON - NCEP - 9.0 + SEASALT_AER_SCAT_OPT_DEP_at550 + 9.0 - PM10_COL_MASS_DEN - 9.0 + SULFATE_AER_SCAT_OPT_DEP_at550 + 9.0 - PM25_COL_MASS_DEN - 9.0 + ORGANIC_CARBON_AER_SCAT_OPT_DEP_at550 + 9.0 - DUST_COL_MASS_DEN - 9.0 + BLACK_CARBON_AER_SCAT_OPT_DEP_at550 + 9.0 - SEAS_COL_MASS_DEN - 9.0 + SINGLE_SCAT_ALBD_at340 + 9.0 - BC_COL_MASS_DEN - 9.0 + AER_ASYM_FACTOR_at340 + 9.0 - OC_COL_MASS_DEN - 9.0 + AER_OPT_DEP_at340 + 9.0 - SULF_COL_MASS_DEN - 9.0 + AER_OPT_DEP_at440 + 9.0 - DUST1_ON_HYBRID_LVL - NCEP - 1. - 11.0 + AER_OPT_DEP_at660 + 9.0 - DUST2_ON_HYBRID_LVL - NCEP - 1. - 11.0 + AER_OPT_DEP_at860 + 9.0 - DUST3_ON_HYBRID_LVL - NCEP - 1. - 11.0 + AER_OPT_DEP_at1630 + 9.0 - DUST4_ON_HYBRID_LVL - NCEP - 1. - 11.0 + AER_OPT_DEP_at11100 + 9.0 - DUST5_ON_HYBRID_LVL + DUST25_SFC_MASS_CON NCEP - 1. - 11.0 + 9.0 - SEASALT1_ON_HYBRID_LVL + SEAS25_SFC_MASS_CON NCEP - 1. - 11.0 + 9.0 - SEASALT2_ON_HYBRID_LVL + PM10_SFC_MASS_CON NCEP - 1. - 11.0 + 9.0 - SEASALT3_ON_HYBRID_LVL + PM25_SFC_MASS_CON NCEP - 1. - 11.0 + 9.0 - SEASALT4_ON_HYBRID_LVL - NCEP - 1. - 11.0 + PM10_COL_MASS_DEN + 9.0 - SEASALT5_ON_HYBRID_LVL - NCEP - 1. - 11.0 + PM25_COL_MASS_DEN + 9.0 - BCPHILIC_ON_HYBRID_LVL - NCEP - 1. - 11.0 + DUST_COL_MASS_DEN + 9.0 - BCPHOBIC_ON_HYBRID_LVL - NCEP - 1. - 11.0 + SEAS_COL_MASS_DEN + 9.0 - OCPHILIC_ON_HYBRID_LVL - NCEP - 1. - 11.0 + BC_COL_MASS_DEN + 9.0 - OCPHOBIC_ON_HYBRID_LVL - NCEP - 1. - 11.0 + OC_COL_MASS_DEN + 9.0 - SO4_ON_HYBRID_LVL - NCEP - 1. - 11.0 + SULF_COL_MASS_DEN + 9.0 diff --git a/parm/postxconfig-NT-gefs-chem.txt b/parm/postxconfig-NT-gefs-chem.txt index 6a94c4066..8268f4eb9 100644 --- a/parm/postxconfig-NT-gefs-chem.txt +++ b/parm/postxconfig-NT-gefs-chem.txt @@ -1,5 +1,5 @@ 1 -32 +46 GFSPRS 0 ncep_nco @@ -16,6 +16,561 @@ complex_packing_spatial_diff 2nd_ord_sptdiff fltng_pnt lossless +629 +DUST1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +630 +DUST2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +20 +7 +36 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +631 +DUST3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +36 +7 +60 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +632 +DUST4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +60 +7 +120 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +633 +DUST5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +120 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +634 +SEASALT1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +8 +6 +8 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +635 +SEASALT2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +10 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +636 +SEASALT3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +10 +7 +30 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +637 +SEASALT4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +30 +7 +100 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +638 +SEASALT5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +100 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +643 +BCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophilic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +642 +BCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophobic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +641 +OCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophilic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +640 +OCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophobic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +639 +SO4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sulphate_dry +equall_to_first_limit +9 +139 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? 609 AER_OPT_DEP_at550 ? @@ -238,52 +793,15 @@ between_first_second_limit ? ? ? -617 -DUST25_SFC_MASS_CON +650 +AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -PMTF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -dust_dry -smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -9.0 -0 -0 -0 -? -? -? -618 -SEAS25_SFC_MASS_CON +SCTAOTK ? -1 -tmpl4_48 -PMTF -NCEP ? -surface +entire_atmos 0 ? 0 @@ -293,17 +811,17 @@ surface ? 0 ? -sea_salt_dry +total_aerosol smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -312,15 +830,15 @@ smaller_than_first_limit ? ? ? -619 -PM10_SFC_MASS_CON +651 +DUST_AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -PMTC -NCEP +SCTAOTK ? -surface +? +entire_atmos 0 ? 0 @@ -330,17 +848,17 @@ surface ? 0 ? -total_aerosol +dust_dry smaller_than_first_limit 6 -10 -0 -0.0 -? -0 -0.0 +20 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -349,35 +867,35 @@ smaller_than_first_limit ? ? ? -620 -PM25_SFC_MASS_CON +652 +SEASALT_AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -PMTF -NCEP -? -surface -0 -? -0 +SCTAOTK ? ? +entire_atmos 0 ? 0 -? -total_aerosol -smaller_than_first_limit -7 -25 +? +? 0 -0.0 ? 0 -0.0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -386,12 +904,12 @@ smaller_than_first_limit ? ? ? -621 -PM10_COL_MASS_DEN +653 +SULFATE_AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -COLMD +SCTAOTK ? ? entire_atmos @@ -404,17 +922,17 @@ entire_atmos ? 0 ? -total_aerosol +sulphate_dry smaller_than_first_limit -6 -10 -0 -0.0 -? -0 -0.0 +8 +70 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -423,12 +941,12 @@ smaller_than_first_limit ? ? ? -622 -PM25_COL_MASS_DEN +654 +ORGANIC_CARBON_AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -COLMD +SCTAOTK ? ? entire_atmos @@ -441,17 +959,17 @@ entire_atmos ? 0 ? -total_aerosol +particulate_org_matter_dry smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 +8 +70 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -460,12 +978,12 @@ smaller_than_first_limit ? ? ? -646 -DUST_COL_MASS_DEN +655 +BLACK_CARBON_AER_SCAT_OPT_DEP_at550 ? 1 tmpl4_48 -COLMD +SCTAOTK ? ? entire_atmos @@ -478,17 +996,17 @@ entire_atmos ? 0 ? -dust_dry +black_carbon_dry smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 +8 +70 0 0.0 +between_first_second_limit +9 +545 +9 +565 1 9.0 0 @@ -497,12 +1015,12 @@ smaller_than_first_limit ? ? ? -647 -SEAS_COL_MASS_DEN +648 +SINGLE_SCAT_ALBD_at340 ? 1 tmpl4_48 -COLMD +SSALBK ? ? entire_atmos @@ -515,17 +1033,17 @@ entire_atmos ? 0 ? -sea_salt_dry +total_aerosol smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 +6 +20 0 0.0 +between_first_second_limit +9 +338 +9 +342 1 9.0 0 @@ -534,12 +1052,12 @@ smaller_than_first_limit ? ? ? -648 -BC_COL_MASS_DEN +649 +AER_ASYM_FACTOR_at340 ? 1 tmpl4_48 -COLMD +ASYSFK ? ? entire_atmos @@ -552,17 +1070,17 @@ entire_atmos ? 0 ? -black_carbon_dry +total_aerosol smaller_than_first_limit -10 -236 -0 -0.0 -? -0 -0.0 +6 +20 0 0.0 +between_first_second_limit +9 +338 +9 +342 1 9.0 0 @@ -571,12 +1089,12 @@ smaller_than_first_limit ? ? ? -649 -OC_COL_MASS_DEN +623 +AER_OPT_DEP_at340 ? 1 tmpl4_48 -COLMD +AOTK ? ? entire_atmos @@ -589,17 +1107,17 @@ entire_atmos ? 0 ? -particulate_org_matter_dry +total_aerosol smaller_than_first_limit -10 -424 -0 -0.0 -? -0 -0.0 +6 +20 0 0.0 +between_first_second_limit +9 +338 +9 +342 1 9.0 0 @@ -608,12 +1126,12 @@ smaller_than_first_limit ? ? ? -650 -SULF_COL_MASS_DEN +624 +AER_OPT_DEP_at440 ? 1 tmpl4_48 -COLMD +AOTK ? ? entire_atmos @@ -626,17 +1144,17 @@ entire_atmos ? 0 ? -sulphate_dry +total_aerosol smaller_than_first_limit -7 -25 -0 -0.0 -? -0 -0.0 +6 +20 0 0.0 +between_first_second_limit +9 +430 +9 +450 1 9.0 0 @@ -645,398 +1163,398 @@ smaller_than_first_limit ? ? ? -629 -DUST1_ON_HYBRID_LVL +625 +AER_OPT_DEP_at660 ? 1 tmpl4_48 -PMTF -NCEP +AOTK +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -dust_dry -between_first_second_limit_noincl2ndlmt -7 -2 -7 +total_aerosol +smaller_than_first_limit +6 20 -? -0 -0.0 0 0.0 +between_first_second_limit +9 +620 +9 +670 1 -11.0 +9.0 0 0 0 ? ? ? -630 -DUST2_ON_HYBRID_LVL +626 +AER_OPT_DEP_at860 ? 1 tmpl4_48 -PMTF -NCEP +AOTK +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -dust_dry -between_first_second_limit_noincl2ndlmt -7 +total_aerosol +smaller_than_first_limit +6 20 -7 -36 -? -0 -0.0 0 0.0 +between_first_second_limit +9 +841 +9 +876 1 -11.0 +9.0 0 0 0 ? ? ? -631 -DUST3_ON_HYBRID_LVL +627 +AER_OPT_DEP_at1630 ? 1 tmpl4_48 -PMTC -NCEP -? -hybrid_lvl -0 +AOTK ? -1 -1. ? +entire_atmos 0 ? 0 ? -dust_dry -between_first_second_limit_noincl2ndlmt -7 -36 -7 -60 ? 0 -0.0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +1628 +9 +1652 1 -11.0 +9.0 0 0 0 ? ? ? -632 -DUST4_ON_HYBRID_LVL +628 +AER_OPT_DEP_at11100 ? 1 tmpl4_48 -PMTC -NCEP -? -hybrid_lvl -0 +AOTK ? -1 -1. ? +entire_atmos 0 ? 0 ? -dust_dry -between_first_second_limit_noincl2ndlmt -7 -60 -7 -120 ? 0 -0.0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +11000 +9 +11200 1 -11.0 +9.0 0 0 0 ? ? ? -633 -DUST5_ON_HYBRID_LVL +686 +DUST25_SFC_MASS_CON ? 1 tmpl4_48 -PMTC +PMTF NCEP ? -hybrid_lvl +surface +0 +? 0 ? -1 -1. ? 0 ? 0 ? dust_dry -between_first_second_limit_noincl2ndlmt -7 -120 +smaller_than_first_limit 7 -200 +25 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -634 -SEASALT1_ON_HYBRID_LVL +684 +SEAS25_SFC_MASS_CON ? 1 tmpl4_48 PMTF NCEP ? -hybrid_lvl +surface +0 +? 0 ? -1 -1. ? 0 ? 0 ? sea_salt_dry -between_first_second_limit_noincl2ndlmt -8 -6 -8 -20 +smaller_than_first_limit +7 +25 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -635 -SEASALT2_ON_HYBRID_LVL +619 +PM10_SFC_MASS_CON ? 1 tmpl4_48 -PMTF +PMTC NCEP ? -hybrid_lvl +surface +0 +? 0 ? -1 -1. ? 0 ? 0 ? -sea_salt_dry -between_first_second_limit_noincl2ndlmt -7 -2 -7 +total_aerosol +smaller_than_first_limit +6 10 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -636 -SEASALT3_ON_HYBRID_LVL +620 +PM25_SFC_MASS_CON ? 1 tmpl4_48 -PMTC +PMTF NCEP ? -hybrid_lvl +surface +0 +? 0 ? -1 -1. ? 0 ? 0 ? -sea_salt_dry -between_first_second_limit_noincl2ndlmt -7 -10 +total_aerosol +smaller_than_first_limit 7 -30 +25 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -637 -SEASALT4_ON_HYBRID_LVL +621 +PM10_COL_MASS_DEN ? 1 tmpl4_48 -PMTC -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -sea_salt_dry -between_first_second_limit_noincl2ndlmt -7 -30 -7 -100 +total_aerosol +smaller_than_first_limit +6 +10 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -638 -SEASALT5_ON_HYBRID_LVL +622 +PM25_COL_MASS_DEN ? 1 tmpl4_48 -PMTC -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -sea_salt_dry -between_first_second_limit_noincl2ndlmt -7 -100 +total_aerosol +smaller_than_first_limit 7 -200 +25 +0 +0.0 ? 0 0.0 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -643 -BCPHILIC_ON_HYBRID_LVL +646 +DUST_COL_MASS_DEN ? 1 tmpl4_48 -PMTF -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -black_carbon_hydrophilic -equall_to_first_limit -10 -236 +dust_dry +smaller_than_first_limit +7 +25 0 0.0 ? @@ -1045,35 +1563,35 @@ equall_to_first_limit 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -642 -BCPHOBIC_ON_HYBRID_LVL +647 +SEAS_COL_MASS_DEN ? 1 tmpl4_48 -PMTF -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -black_carbon_hydrophobic -equall_to_first_limit -10 -236 +sea_salt_dry +smaller_than_first_limit +7 +25 0 0.0 ? @@ -1082,35 +1600,35 @@ equall_to_first_limit 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -641 -OCPHILIC_ON_HYBRID_LVL +616 +BC_COL_MASS_DEN ? 1 tmpl4_48 -PMTF -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -particulate_org_matter_hydrophilic -equall_to_first_limit +black_carbon_dry +smaller_than_first_limit 10 -424 +236 0 0.0 ? @@ -1119,33 +1637,33 @@ equall_to_first_limit 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -640 -OCPHOBIC_ON_HYBRID_LVL +617 +OC_COL_MASS_DEN ? 1 tmpl4_48 -PMTF -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? -particulate_org_matter_hydrophobic -equall_to_first_limit +particulate_org_matter_dry +smaller_than_first_limit 10 424 0 @@ -1156,35 +1674,35 @@ equall_to_first_limit 0 0.0 1 -11.0 +9.0 0 0 0 ? ? ? -639 -SO4_ON_HYBRID_LVL +618 +SULF_COL_MASS_DEN ? 1 tmpl4_48 -PMTF -NCEP +COLMD +? +? +entire_atmos +0 ? -hybrid_lvl 0 ? -1 -1. ? 0 ? 0 ? sulphate_dry -equall_to_first_limit -9 -139 +smaller_than_first_limit +7 +25 0 0.0 ? @@ -1193,7 +1711,7 @@ equall_to_first_limit 0 0.0 1 -11.0 +9.0 0 0 0 diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 046d94925..8d4390c95 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -15,6 +15,10 @@ SUBROUTINE ALLOCATE_ALL() ! 02-06-19 MIKE BALDWIN - WRF VERSION ! 11-12-16 SARAH LU - MODIFIED TO INITIALIZE AEROSOL FIELDS ! 12-01-07 SARAH LU - MODIFIED TO INITIALIZE AIR DENSITY/LAYER THICKNESS +! 15-07-04 SARAH LU - MODIFIED TO INITIALIZE SCA +! 15-07-21 Jun Wang - Add scavenging for DU, SS, OC, BC, remove +! SU diagnostic fields +! 19-07-24 Li(Kate) Zhang - Merge and update NGAC UPP for FV3-Chem ! ! USAGE: CALL MPI_FIRST ! INPUT ARGUMENT LIST: @@ -461,10 +465,12 @@ SUBROUTINE ALLOCATE_ALL() allocate(ext(im,jsta_2l:jend_2u,lm)) allocate(asy(im,jsta_2l:jend_2u,lm)) allocate(ssa(im,jsta_2l:jend_2u,lm)) + allocate(sca(im,jsta_2l:jend_2u,lm)) allocate(duem(im,jsta_2l:jend_2u,nbin_du)) allocate(dusd(im,jsta_2l:jend_2u,nbin_du)) allocate(dudp(im,jsta_2l:jend_2u,nbin_du)) allocate(duwt(im,jsta_2l:jend_2u,nbin_du)) + allocate(dusv(im,jsta_2l:jend_2u,nbin_du)) allocate(suem(im,jsta_2l:jend_2u,nbin_su)) allocate(susd(im,jsta_2l:jend_2u,nbin_su)) allocate(sudp(im,jsta_2l:jend_2u,nbin_su)) @@ -473,15 +479,18 @@ SUBROUTINE ALLOCATE_ALL() allocate(ocsd(im,jsta_2l:jend_2u,nbin_oc)) allocate(ocdp(im,jsta_2l:jend_2u,nbin_oc)) allocate(ocwt(im,jsta_2l:jend_2u,nbin_oc)) + allocate(ocsv(im,jsta_2l:jend_2u,nbin_oc)) allocate(bcem(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcsd(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcdp(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcwt(im,jsta_2l:jend_2u,nbin_bc)) + allocate(bcsv(im,jsta_2l:jend_2u,nbin_bc)) allocate(ssem(im,jsta_2l:jend_2u,nbin_ss)) allocate(sssd(im,jsta_2l:jend_2u,nbin_ss)) allocate(ssdp(im,jsta_2l:jend_2u,nbin_ss)) allocate(sswt(im,jsta_2l:jend_2u,nbin_ss)) -! allocate(dpres(im,jsta_2l:jend_2u,lm)) + allocate(sssv(im,jsta_2l:jend_2u,nbin_ss)) + !allocate(dpres(im,jsta_2l:jend_2u,lm)) allocate(rhomid(im,jsta_2l:jend_2u,lm)) ! vrbls2d allocate(dusmass(im,jsta_2l:jend_2u)) diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index fa48d6838..5c18874ac 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -28,7 +28,12 @@ SUBROUTINE CALPW(PW,IDECID) ! 02-06-19 MIKE BALDWIN - WRF VERSION ! 04-12-30 H CHUANG - UPDATE TO CALCULATE TOTAL COLUMN FOR OTHER ! HYDROMETEORS -! 11-12-14 SARAH LU - UPDATE TO CALCULATE AEROSOL OPTICAL DEPTH +! 14-11-12 SARAH LU - UPDATE TO CALCULATE AEROSOL OPTICAL DEPTH +! 15-07-02 SARAH LU - UPDATE TO CALCULATE SCATTERING AEROSOL +! OPTICAL DEPTH (18) +! 15-07-04 SARAH LU - CORRECT PW INTEGRATION FOR AOD (17) +! 15-07-10 SARAH LU - UPDATE TO CALCULATE ASYMETRY PARAMETER +! 19-07-25 Li(Kate) Zhang - MERGE SARHA LU's update for FV3-Chem ! ! USAGE: CALL CALPW(PW) ! INPUT ARGUMENT LIST: @@ -54,7 +59,7 @@ SUBROUTINE CALPW(PW,IDECID) ! use vrbls3d, only: q, qqw, qqi, qqr, qqs, cwm, qqg, t, rswtt, & train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt, & - taod5503d + taod5503d,sca, asy use vrbls4d, only: smoke use masks, only: htm use params_mod, only: tfrz, gi @@ -260,21 +265,37 @@ SUBROUTINE CALPW(PW,IDECID) Qdum(I,J) = TAOD5503D(I,J,L) ENDDO END DO +!LZhang -July 2019 +! SCATTERING AEROSOL OPTICAL THICKNESS (GOCART V2) + ELSE IF (IDECID == 20) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = SCA(I,J,L) + ENDDO + END DO +! ASYMMETRY PARAMETER (GOCART V2) + ELSE IF (IDECID == 21) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = ASY(I,J,L) + ENDDO + END DO ENDIF ! !$omp parallel do private(i,j,dp) DO J=JSTA,JEND DO I=1,IM - IF (IDECID == 19) THEN - PW(I,J) = PW(I,J) + Qdum(I,J) - ELSE DP = PINT(I,J,L+1) - PINT(I,J,L) PW(I,J) = PW(I,J) + Qdum(I,J)*DP*GI*HTM(I,J,L) - ENDIF IF (IDECID == 17) THEN PW(I,J) = PW(I,J) + Qdum(I,J)*MAX(DP,0.)*GI*HTM(I,J,L) ENDIF + IF (IDECID == 19) THEN + PW(I,J) = PW(I,J) + Qdum(I,J) + ENDIF IF (IDECID == 14) PWS(I,J) = PWS(I,J) + QS(I,J)*DP*GI*HTM(I,J,L) ENDDO ENDDO diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 41ebf87ff..736ad5c6d 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -66,7 +66,7 @@ SUBROUTINE CLDRAD ! 13-12-23 LU/Wang - READ AEROSOL OPTICAL PROPERTIES LUTS to compute dust aod, ! non-dust aod, and use geos5 gocart LUTS ! 15-??-?? S. Moorthi - threading, optimization, local dimension -! +! 19-07-24 Li(Kate) Zhang Merge and update ARAH Lu's work from NGAC into FV3-Chem ! ! USAGE: CALL CLDRAD ! INPUT ARGUMENT LIST: @@ -90,8 +90,10 @@ SUBROUTINE CLDRAD !$$$ ! use vrbls4d, only: DUST,SUSO, SALT, SOOT, WASO - use vrbls3d, only: QQW, QQR, T, ZINT, CFR, CFR_RAW, QQI, QQS, Q, EXT, & - ZMID, PMID, PINT, DUEM, DUSD, DUDP, DUWT + use vrbls3d, only: QQW, QQR, T, ZINT, CFR, QQI, QQS, Q, EXT, ZMID,PMID,& + PINT, DUEM, DUSD, DUDP, DUWT, DUSV, SSEM, SSSD,SSDP,& + SSWT, SSSV, BCEM, BCSD, BCDP, BCWT, BCSV, OCEM,OCSD,& + OCDP, OCWT, OCSV, SCA, ASY,CFR_RAW use vrbls2d, only: CLDEFI, CFRACL, AVGCFRACL, CFRACM, AVGCFRACM, CFRACH,& AVGCFRACH, AVGTCDC, NCFRST, ACFRST, NCFRCV, ACFRCV, & HBOT, HBOTD, HBOTS, HTOP, HTOPD, HTOPS, FIS, PBLH, & @@ -208,14 +210,23 @@ SUBROUTINE CLDRAD ! REAL, allocatable :: RH3D(:,:,:) ! RELATIVE HUMIDITY real, allocatable:: rdrh(:,:,:) integer, allocatable :: ihh(:,:,:) - REAL :: rh3d, DRH0, DRH1, EXT01, EXT02 + REAL :: rh3d, DRH0, DRH1, EXT01, EXT02,SCA01,ASY01 INTEGER :: IH1, IH2 INTEGER :: IOS, INDX, ISSAM, ISSCM, ISUSO, IWASO, ISOOT, NBIN REAL :: CCDRY, CCWET, SSAM, SSCM REAL,dimension(im,jsta:jend) :: AOD_DU, AOD_SS, AOD_SU, AOD_OC, AOD_BC, AOD + REAL,dimension(im,jsta:jend) :: SCA_DU, SCA_SS, SCA_SU, SCA_OC,SCA_BC, SCA2D + REAL,dimension(im,jsta:jend) :: ASY_DU, ASY_SS, ASY_SU, ASY_OC, ASY_BC,ASY2D + REAL,dimension(im,jsta:jend) :: ANGST, AOD_440, AOD_860 ! FORANGSTROM EXPONENT REAL :: ANG1, ANG2 INTEGER :: INDX_EXT(nAero), INDX_SCA(nAero) -! + LOGICAL :: LAEROPT, LEXT, LSCA, LASY + LOGICAL :: LAERSMASS + REAL, allocatable :: fPM25_DU(:),fPM25_SS(:) + REAL, allocatable, dimension(:,:) :: RHOsfc, smass_du_cr,smass_du_fn, & + & smass_ss_cr, smass_ss_fn, smass_oc,smass_bc, & + & smass_su, smass_cr, smass_fn + real :: rPM, dmass real (kind=kind_phys), dimension(KRHLEV) :: rhlev data rhlev (:)/ .0, .05, .10, .15, .20, .25, .30, .35, & & .40, .45, .50, .55, .60, .65, .70, .75, & @@ -223,9 +234,10 @@ SUBROUTINE CLDRAD & .88, .89, .90, .91, .92, .93, .94, .95, & & .96, .97, .98, .99/ ! - data aerosol_file /"AEROSOL_LUTS.dat"/ data AerosolName /'DUST', 'SALT', 'SUSO', 'SOOT', 'WASO'/ - +! INDEX FOR TOTAL AND SPECIATED AEROSOLS (DU, SS, SU, OC, BC) + data INDX_EXT / 610, 611, 612, 613, 614 / + data INDX_SCA / 651, 652, 653, 654, 655 / ! ! !************************************************************************* @@ -4462,12 +4474,27 @@ SUBROUTINE CLDRAD !! CALPW(dust mixing ratio in kg/kg * Qext [aerosol extinction efficiency !! in m2/g] * 1000. [convert m2/g to m2/kg]) => AOD (no unit) !! -!! The sub-micron dust bin contains 4 sub-bins with fixed partition (FD) - IF ( IGET(609).GT.0 .OR. IGET(610).GT.0 .OR. IGET(611).GT.0 & - & .OR. IGET(612).GT.0 .OR. IGET(613).GT.0 .OR. IGET(614).GT.0 & - & .OR. IGET(623).GT.0 .OR. IGET(624).GT.0 .OR. IGET(625).GT.0 & - & .OR. IGET(626).GT.0 .or. IGET(627).GT.0 .OR. IGET(628).GT.0 ) THEN +!! DETERMINE WHETHER TO COMPUTE AEROSOL OPTICAL PROPERTIES + LAEROPT = .FALSE. + DO I = 609, 614 ! TOTAL AND SPECIATED AOD AT 550NM + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO + DO I = 623, 628 ! AOD AT MULTI-CHANNELS + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO + DO I = 648, 656 ! (SSA, ASY AT 340),(SCA AT 550), ANGSTROM + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO + +!! DETERMINE WHETHER TO COMPUTE INSTANT SURFACE MASS CONC + LAERSMASS = .FALSE. + DO I = 690, 698 ! TOTAL AND SPECIATED AEROSOL + IF ( IGET(I).GT.0 ) LAERSMASS = .TRUE. + ENDDO + + IF ( LAEROPT ) THEN + PRINT *, 'COMPUTE AEROSOL OPTICAL PROPERTIES' !!! ALLOCATE AEROSOL OPTICAL PROPERTIES ALLOCATE ( extrhd_DU(KRHLEV,nbin_du,NBDSW)) @@ -4681,28 +4708,67 @@ SUBROUTINE CLDRAD ! AOD AT 11100 NM IF (IB .EQ. 7 ) INDX = 628 +! DETERMINE LEXT AND LSCA (DEFAULT TO F) + LEXT = .FALSE. + LSCA = .FALSE. + LASY = .FALSE. +! -- CHECK WHETHER TOTAL EXT AOD IS REQUESTED + IF (IGET(INDX).GT.0 ) LEXT =.TRUE. +! -- CHECK WHETHER SPECIATED AOD AT 550 NM IS REQUESTED + IF ( IB .EQ. 3 ) THEN + IF (IGET(650).GT.0 ) LSCA =.TRUE. !TOTAL SCA AOD + DO I = 1, nAero + IF (IGET(INDX_EXT(I)).GT.0 ) LEXT = .TRUE. + IF (IGET(INDX_SCA(I)).GT.0 ) LSCA = .TRUE. + ENDDO + ENDIF +! -- CHECK WHETHER ASY AND SSA AT 340NM IS REQUESTED + IF ( IB .EQ. 1 ) THEN + IF (IGET(648).GT.0 ) LSCA =.TRUE. + IF (IGET(649).GT.0 ) LASY =.TRUE. + ENDIF +! -- CHECK WHETHER ANGSTROM EXPONENT IS REQUESTED + IF (IGET(656).GT.0 ) THEN + IF ( IB .EQ. 2 ) LEXT = .TRUE. + IF ( IB .EQ. 5 ) LEXT = .TRUE. + ENDIF + print *,'LEXT=',LEXT,'LSCA=',LSCA,'LASY=',LASY ! SKIP IF POST PRODUCT IS NOT REQUESTED - IF (IGET(INDX).GT.0 .OR. IB.EQ. 3) THEN - + IF ( LEXT .OR. LSCA .OR. LASY ) THEN ! COMPUTE DUST AOD AOD_DU=SPVAL + SCA_DU=SPVAL + ASY_DU=SPVAL EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM DO N=1, NBIN_DU EXT01 = EXTRHD_DU(1,N,IB) + SCA01 = SCARHD_DU(1,N,IB) + ASY01 = ASYRHD_DU(1,N,IB) EXT(I,J,L) = EXT(I,J,L)+1e-9*DUST(I,J,L,N) * EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*DUST(I,J,L,N) * SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*DUST(I,J,L,N) * SCA01*ASY01 ENDDO EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_DU,17) - + CALL CALPW(SCA_DU,20) + CALL CALPW(ASY_DU,21) ! COMPUTE SULFATE AOD AOD_SU=SPVAL + SCA_SU=SPVAL + ASY_SU=SPVAL EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM @@ -4711,18 +4777,32 @@ SUBROUTINE CLDRAD DO N = 1, NBIN_SU EXT01 = EXTRHD_SU(IH1,N,IB) & & + RDRH(I,J,L)*(EXTRHD_SU(IH2,N,IB)-EXTRHD_SU(IH1,N,IB)) + SCA01 = SCARHD_SU(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_SU(IH2,N,IB)-SCARHD_SU(IH1,N,IB)) + ASY01 = ASYRHD_SU(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_SU(IH2,N,IB)-ASYRHD_SU(IH1,N,IB)) EXT(I,J,L) = EXT(I,J,L)+1e-9*SUSO(I,J,L,N) * EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SUSO(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SUSO(I,J,L,N)*SCA01*ASY01 + ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_SU,17) - + CALL CALPW(SCA_SU,20) + CALL CALPW(ASY_SU,21) ! COMPUTE SEA SALT AOD AOD_SS=SPVAL + SCA_SS=SPVAL + ASY_SS=SPVAL EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM @@ -4731,18 +4811,31 @@ SUBROUTINE CLDRAD DO N = 1, NBIN_SS EXT01 = EXTRHD_SS(IH1,N,IB) & & + RDRH(I,J,L)*(EXTRHD_SS(IH2,N,IB)-EXTRHD_SS(IH1,N,IB)) + SCA01 = SCARHD_SS(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_SS(IH2,N,IB)-SCARHD_SS(IH1,N,IB)) + ASY01 = ASYRHD_SS(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_SS(IH2,N,IB)-ASYRHD_SS(IH1,N,IB)) EXT(I,J,L) = EXT(I,J,L)+1e-9*SALT(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SALT(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SALT(I,J,L,N)*SCA01*ASY01 ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_SS,17) - + CALL CALPW(SCA_SS,20) + CALL CALPW(ASY_SS,21) ! COMPUTE BLACK CARBON AOD AOD_BC=SPVAL + SCA_BC=SPVAL + ASY_BC=SPVAL EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM @@ -4751,17 +4844,30 @@ SUBROUTINE CLDRAD DO N = 1, NBIN_BC EXT01 = EXTRHD_BC(IH1,N,IB) & & + RDRH(I,J,L)*(EXTRHD_BC(IH2,N,IB)-EXTRHD_BC(IH1,N,IB)) + SCA01 = SCARHD_BC(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_BC(IH2,N,IB)-SCARHD_BC(IH1,N,IB)) + ASY01 = ASYRHD_BC(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_BC(IH2,N,IB)-ASYRHD_BC(IH1,N,IB)) EXT(I,J,L) = EXT(I,J,L)+1e-9*SOOT(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SOOT(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SOOT(I,J,L,N)*SCA01*ASY01 ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_BC,17) - + CALL CALPW(SCA_BC,20) + CALL CALPW(ASY_BC,21) ! COMPUTE ORGANIC CARBON AOD AOD_OC=SPVAL + SCA_OC=SPVAL + ASY_OC=SPVAL EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM @@ -4770,16 +4876,28 @@ SUBROUTINE CLDRAD DO N = 1, NBIN_OC EXT01 = EXTRHD_OC(IH1,N,IB) & & + RDRH(I,J,L)*(EXTRHD_OC(IH2,N,IB)-EXTRHD_OC(IH1,N,IB)) + SCA01 = SCARHD_OC(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_OC(IH2,N,IB)-SCARHD_OC(IH1,N,IB)) + ASY01 = ASYRHD_OC(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_OC(IH2,N,IB)-ASYRHD_OC(IH1,N,IB)) EXT(I,J,L) = EXT(I,J,L)+1e-9*WASO(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*WASO(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*WASO(I,J,L,N)*SCA01*ASY01 ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_OC,17) + CALL CALPW(SCA_OC,20) + CALL CALPW(ASY_OC,21) ! COMPUTE TOTAL AOD -! AOD=SPVAL + AOD=SPVAL + SCA=SPVAL + ASY=SPVAL DO J=JSTA,JEND DO I=1,IM AOD_DU(I,J) = MAX (AOD_DU(I,J), 0.0) @@ -4787,11 +4905,47 @@ SUBROUTINE CLDRAD AOD_OC(I,J) = MAX (AOD_OC(I,J), 0.0) AOD_SU(I,J) = MAX (AOD_SU(I,J), 0.0) AOD_SS(I,J) = MAX (AOD_SS(I,J), 0.0) - AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & + + SCA_DU(I,J) = MAX (SCA_DU(I,J), 0.0) + SCA_BC(I,J) = MAX (SCA_BC(I,J), 0.0) + SCA_OC(I,J) = MAX (SCA_OC(I,J), 0.0) + SCA_SU(I,J) = MAX (SCA_SU(I,J), 0.0) + SCA_SS(I,J) = MAX (SCA_SS(I,J), 0.0) + + ASY_DU(I,J) = MAX (ASY_DU(I,J), 0.0) + ASY_BC(I,J) = MAX (ASY_BC(I,J), 0.0) + ASY_OC(I,J) = MAX (ASY_OC(I,J), 0.0) + ASY_SU(I,J) = MAX (ASY_SU(I,J), 0.0) + ASY_SS(I,J) = MAX (ASY_SS(I,J), 0.0) + + AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & & AOD_SU(I,J) + AOD_SS(I,J) + SCA2D(I,J) = SCA_DU(I,J) + SCA_BC(I,J) + SCA_OC(I,J) + & + & SCA_SU(I,J) + SCA_SS(I,J) + ASY2D(I,J) = ASY_DU(I,J) + ASY_BC(I,J) + ASY_OC(I,J) + & + & ASY_SU(I,J) + ASY_SS(I,J) ENDDO ! I-loop ENDDO ! J-loop +! FILL UP AOD_440 AND AOD_860, IF ANGSTROM EXP IS REQUESTED + IF ( IGET(656) .GT. 0 ) THEN + IF (IB .EQ. 2 ) THEN !! AOD AT 440 NM +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + AOD_440(I,J) = AOD(I,J) + ENDDO ! I-loop + ENDDO ! J-loop + ENDIF + IF (IB .EQ. 5 ) THEN !! AOD AT 860 NM +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + AOD_860(I,J) = AOD(I,J) + ENDDO ! I-loop + ENDDO ! J-loop + ENDIF + ENDIF ! WRITE OUT TOTAL AOD IF ( IGET(INDX) .GT. 0) THEN @@ -4812,121 +4966,182 @@ SUBROUTINE CLDRAD datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF +! +! WRITE OUT ASY AND SSA AT 340NM + IF ( IB .EQ. 1 ) THEN !!! FOR 340NM ONLY - -! WRITE OUT AOD FOR DU, SU, SS, OC, BC - IF ( IB .EQ. 3 ) THEN !!! FOR 550NM ONLY - - IF ( IGET(610) .GT. 0) THEN ! DUST AOD +! AER ASYM FACTOR AT 340 NM + IF ( IGET(649) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_DU(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( SCA2D(I,J) > 0.0 ) THEN + ASY2D(I,J) = ASY2D(I,J) / SCA2D(I,J) + ELSE + ASY2D(I,J) = 0. + ENDIF + GRID1(I,J)=ASY2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(610),LVLS(1,IGET(610)),GRID1,IM,JM) + CALL GRIBIT(IGET(649),LVLS(1,IGET(649)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(610)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(649)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF ! IGET(649) - IF ( IGET(611) .GT. 0) THEN ! SEA-SALT AOD +! AER SINGLE SCATTER ALB AT 340 NM + IF ( IGET(648) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_SS(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( AOD(I,J) > 0.0 ) THEN + SCA2D(I,J) = SCA2D(I,J) / AOD(I,J) + ELSE + SCA2D(I,J) = 1.0 + ENDIF + GRID1(I,J)=SCA2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(611),LVLS(1,IGET(611)),GRID1,IM,JM) + CALL GRIBIT(IGET(648),LVLS(1,IGET(648)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(611)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(648)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF ! IGET(648) + print *,'aft compute sca340' + + ENDIF ! IB IF-BLOCK (340NM) + + +! WRITE OUT AOD FOR DU, SU, SS, OC, BC for all wavelengths +! WRITE OUT SPECIATED AEROSOL OPTICAL PROPERTIES + IF ( IB .EQ. 3 ) THEN !!! FOR 550NM ONLY - IF ( IGET(612) .GT. 0) THEN ! SULFATE AOD +! WRITE OUT TOTAL SCATTERING AOD + IF ( IGET(650) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_SU(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=SCA2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(612),LVLS(1,IGET(612)),GRID1,IM,JM) + CALL GRIBIT(IGET(650),LVLS(1,IGET(650)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(612)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(650)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF +! LOOP THROUGH EACH SPECIES + DO II = 1, nAero - IF ( IGET(613) .GT. 0) THEN ! ORGANIC CARBON AOD +! WRITE OUT EXT AOD + JJ = INDX_EXT(II) + IF ( IGET(JJ) .GT. 0) THEN ! EXT AOD !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_OC(i,j) - enddo - enddo - ID(1:25)=0 - ID(02)=141 - CALL BOUND(GRID1,D00,H99999) - if(grib=="grib1" )then - CALL GRIBIT(IGET(613),LVLS(1,IGET(613)),GRID1,IM,JM) - else if(grib=="grib2" )then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(613)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF + DO J=JSTA,JEND + DO I=1,IM + IF ( II .EQ. 1 ) GRID1(I,J) = AOD_DU(I,J) + IF ( II .EQ. 2 ) GRID1(I,J) = AOD_SS(I,J) + IF ( II .EQ. 3 ) GRID1(I,J) = AOD_SU(I,J) + IF ( II .EQ. 4 ) GRID1(I,J) = AOD_OC(I,J) + IF ( II .EQ. 5 ) GRID1(I,J) = AOD_BC(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=141 + CALL BOUND(GRID1,D00,H99999) + if(grib=="grib1" )then + CALL GRIBIT(IGET(JJ),LVLS(1,IGET(JJ)),GRID1,IM,JM) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF - IF ( IGET(614) .GT. 0) THEN ! BLACK CARBON AOD +! WRITE OUT SCA AOD + JJ = INDX_SCA(II) + IF ( IGET(JJ) .GT. 0) THEN ! SCA AOD !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_BC(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( II .EQ. 1 ) GRID1(I,J) = SCA_DU(I,J) + IF ( II .EQ. 2 ) GRID1(I,J) = SCA_SS(I,J) + IF ( II .EQ. 3 ) GRID1(I,J) = SCA_SU(I,J) + IF ( II .EQ. 4 ) GRID1(I,J) = SCA_OC(I,J) + IF ( II .EQ. 5 ) GRID1(I,J) = SCA_BC(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=141 + CALL BOUND(GRID1,D00,H99999) + if(grib=="grib1" )then + CALL GRIBIT(IGET(JJ),LVLS(1,IGET(JJ)),GRID1,IM,JM) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF + + ENDDO ! II DO-LOOP + + ENDIF ! IB IF-BLOCK (550NM) + + ENDIF ! LEXT IF-BLOCK + ENDDO ! LOOP THROUGH NBDSW CHANNELS +! COMPUTE AND WRITE OUT ANGSTROM EXPONENT + IF ( IGET(656) .GT. 0 ) THEN + ANGST=SPVAL +! ANG2 = LOG ( 0.860 / 0.440 ) + ANG2 = LOG ( 860. / 440. ) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + IF (AOD_860(I,J) .GT. 0.) THEN + ANG1 = LOG( AOD_440(I,J)/AOD_860(I,J) ) + ANGST(I,J) = ANG1 / ANG2 + ENDIF + GRID1(I,J)=ANGST(I,J) + ENDDO + ENDDO + print *,'output angstrom exp,angst=',maxval(angst(1:im,jsta:jend)), & + minval(angst(1:im,jsta:jend)) ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(614),LVLS(1,IGET(614)),GRID1,IM,JM) + CALL GRIBIT(IGET(656),LVLS(1,IGET(656)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(614)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(656)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF - - ENDIF ! OUTPUT 550 NM AOD FOR EACH SPECIES - - ENDIF ! IGET(INDX) .GT. 0 - ENDDO ! LOOP THROUGH NBDSW CHANNELS - - deallocate(IHH) - deallocate(RDRH) + ENDIF ! ANGSTROM EXPONENT - ENDIF !! .................................... AOD + ENDIF ! END OF LAEROPT IF-BLOCK -!! ADD DUST EMISSION FLUXES (kg/m2/sec) -!! The AER file uses 1.E6 to scale all 2d diagnosis fields +#if 0 !! Multiply by 1.E-6 to revert these fields back - IF (IGET(615).GT.0) THEN + IF (IGET(659).GT.0) THEN GRID1=SPVAL +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = DUEM(I,J,1)*1.E-6 @@ -4938,17 +5153,17 @@ SUBROUTINE CLDRAD ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(615),LVLS(1,IGET(615)),GRID1,IM,JM) + CALL GRIBIT(IGET(659),LVLS(1,IGET(659)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(615)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(659)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD DUST SEDIMENTATION FLUXES (kg/m2/sec) - IF (IGET(616).GT.0) THEN + IF (IGET(660).GT.0) THEN GRID1=SPVAL +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = DUSD(I,J,1)*1.E-6 @@ -4960,56 +5175,58 @@ SUBROUTINE CLDRAD ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(616),LVLS(1,IGET(616)),GRID1,IM,JM) + CALL GRIBIT(IGET(660),LVLS(1,IGET(660)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(616)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(660)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF - +#endif !! ADD DUST DRY DEPOSITION FLUXES (kg/m2/sec) -! IF (IGET(618).GT.0) THEN +! +! IF (IGET(661).GT.0) THEN ! DO J = JSTA,JEND ! DO I = 1,IM -! GRID1(I,J) = DUWT(I,J,1)*1.E-6 +! GRID1(I,J) = DUDP(I,J,1)*1.E-6 ! DO K=2,NBIN_DU -! GRID1(I,J) = GRID1(I,J)+ DUWT(I,J,K)*1.E-6 +! GRID1(I,J) = GRID1(I,J)+ DUDP(I,J,K)*1.E-6 ! END DO ! END DO ! END DO ! ID(1:25) = 0 ! ID(02)=141 ! if(grib=='grib1') then -! CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) +! CALL GRIBIT(IGET(661),LVLS(1,IGET(661)),GRID1,IM,JM) ! elseif(grib=='grib2') then ! cfld=cfld+1 -! fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) +! fld_info(cfld)%ifld=IAVBLFLD(IGET(661)) ! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) ! endif ! ENDIF !! ADD AEROSOL SURFACE PM25 DUST MASS CONCENTRATION (ug/m3) - IF (IGET(617).GT.0 ) THEN + IF (IGET(686).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 - GRID1(I,J) = DUSTPM(I,J) !ug/m3 lzhang + GRID1(I,J) = DUSTPM(I,J) !ug/m3 END DO END DO ID(1:25) = 0 ID(02)=129 if(grib=='grib1') then - CALL GRIBIT(IGET(617),LVLS(1,IGET(617)),GRID1,IM,JM) + CALL GRIBIT(IGET(686),LVLS(1,IGET(686)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(617)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(686)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF !! ADD DUST WET DEPOSITION FLUXES (kg/m2/sec) -! IF (IGET(618).GT.0) THEN +! IF (IGET(662).GT.0) THEN ! DO J = JSTA,JEND ! DO I = 1,IM ! GRID1(I,J) = DUWT(I,J,1)*1.E-6 @@ -5021,38 +5238,40 @@ SUBROUTINE CLDRAD ! ID(1:25) = 0 ! ID(02)=141 ! if(grib=='grib1') then -! CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) +! CALL GRIBIT(IGET(662),LVLS(1,IGET(662)),GRID1,IM,JM) ! elseif(grib=='grib2') then ! cfld=cfld+1 -! fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) +! fld_info(cfld)%ifld=IAVBLFLD(IGET(662)) ! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) ! endif ! ENDIF !! ADD AEROSOL SURFACE PM25 SEA SALT MASS CONCENTRATION (ug/m3) - IF (IGET(618).GT.0 ) THEN + IF (IGET(684).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 - GRID1(I,J) = SSPM(I,J) !ug/m3 lzhang + GRID1(I,J) = SSPM(I,J) !ug/m3 END DO END DO ID(1:25) = 0 ID(02)=129 if(grib=='grib1') then - CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) + CALL GRIBIT(IGET(684),LVLS(1,IGET(684)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(684)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF !! ADD AEROSOL SURFACE PM10 MASS CONCENTRATION (ug/m3) IF (IGET(619).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 - GRID1(I,J) = DUSMASS(I,J) !ug/m3 + GRID1(I,J) = DUSMASS(I,J) !ug/m3 END DO END DO ID(1:25) = 0 @@ -5068,10 +5287,11 @@ SUBROUTINE CLDRAD !! ADD AEROSOL SURFACE PM2.5 MASS CONCENTRATION (ug/m3) IF (IGET(620).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUSMASS25(I,J) * 1.E-6 - GRID1(I,J) = DUSMASS25(I,J) ! ug/m3 + GRID1(I,J) = DUSMASS25(I,J) ! ug/m3 END DO END DO ID(1:25) = 0 @@ -5084,8 +5304,9 @@ SUBROUTINE CLDRAD datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD TOTAL AEROSOL PM10 COLUMN DENSITY (kg/m2) +!! ADD TOTAL AEROSOL PM10 COLUMN DENSITY (kg/m2) ! IF (IGET(621).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUCMASS(I,J) * 1.E-6 @@ -5103,8 +5324,9 @@ SUBROUTINE CLDRAD endif ENDIF -!! ADD TOTAL AEROSOL PM2.5 COLUMN DENSITY (kg/m2) +!! ADD TOTAL AEROSOL PM2.5 COLUMN DENSITY (kg/m2) IF (IGET(622).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUCMASS25(I,J) * 1.E-6 @@ -5122,8 +5344,9 @@ SUBROUTINE CLDRAD endif ENDIF -!! ADD DUST PM2.5 COLUMN DENSITY (kg/m2) +!! ADD DUST PM2.5 COLUMN DENSITY (kg/m2) IF (IGET(646).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = DUSTCB(I,J) * 1.E-9 @@ -5140,8 +5363,9 @@ SUBROUTINE CLDRAD endif ENDIF -!! ADD SEA SALT PM2.5 COLUMN DENSITY (kg/m2) +!! ADD SEA SALT PM2.5 COLUMN DENSITY (kg/m2) IF (IGET(647).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = SSCB(I,J) * 1.E-9 @@ -5157,9 +5381,9 @@ SUBROUTINE CLDRAD datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF - -!! ADD BC COLUMN DENSITY (kg/m2) - IF (IGET(648).GT.0 ) THEN +!! ADD BC COLUMN DENSITY (kg/m2) + IF (IGET(616).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = BCCB(I,J) * 1.E-9 @@ -5168,16 +5392,17 @@ SUBROUTINE CLDRAD ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(648),LVLS(1,IGET(648)),GRID1,IM,JM) + CALL GRIBIT(IGET(616),LVLS(1,IGET(616)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(648)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(616)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD OC COLUMN DENSITY (kg/m2) - IF (IGET(649).GT.0 ) THEN +!! ADD OC COLUMN DENSITY (kg/m2) ! + IF (IGET(617).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = OCCB(I,J) * 1.E-9 @@ -5186,16 +5411,17 @@ SUBROUTINE CLDRAD ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(649),LVLS(1,IGET(649)),GRID1,IM,JM) + CALL GRIBIT(IGET(617),LVLS(1,IGET(617)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(649)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(617)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD SULF COLUMN DENSITY (kg/m2) - IF (IGET(650).GT.0 ) THEN +!! ADD SULF COLUMN DENSITY (kg/m2) ! + IF (IGET(618).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM GRID1(I,J) = SULFCB(I,J) * 1.E-9 @@ -5204,17 +5430,91 @@ SUBROUTINE CLDRAD ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(650),LVLS(1,IGET(650)),GRID1,IM,JM) + CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(650)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF - +!! ADD EMISSION FLUXES,dry depostion, wet/convective depostion (kg/m2/sec) +!! The AER file uses 1.E6 to scale all 2d diagnosis fields +!! Multiply by 1.E-6 to revert these fields back + IF (IGET(659).GT.0) call wrt_aero_diag(659,nbin_du,duem) + print *,'aft wrt disg duem' + IF (IGET(660).GT.0) call wrt_aero_diag(660,nbin_du,dusd) + IF (IGET(661).GT.0) call wrt_aero_diag(661,nbin_du,dudp) + IF (IGET(662).GT.0) call wrt_aero_diag(662,nbin_du,duwt) + IF (IGET(679).GT.0) call wrt_aero_diag(679,nbin_du,dusv) + print *,'aft wrt disg duwt' + +!! wrt SS diag field + IF (IGET(663).GT.0) call wrt_aero_diag(663,nbin_ss,ssem) + IF (IGET(664).GT.0) call wrt_aero_diag(664,nbin_ss,sssd) + IF (IGET(665).GT.0) call wrt_aero_diag(665,nbin_ss,ssdp) + IF (IGET(666).GT.0) call wrt_aero_diag(666,nbin_ss,sswt) + IF (IGET(680).GT.0) call wrt_aero_diag(680,nbin_ss,sssv) + print *,'aft wrt disg sswt' + +!! wrt BC diag field + IF (IGET(667).GT.0) call wrt_aero_diag(667,nbin_bc,bcem) + IF (IGET(668).GT.0) call wrt_aero_diag(668,nbin_bc,bcsd) + IF (IGET(669).GT.0) call wrt_aero_diag(669,nbin_bc,bcdp) + IF (IGET(670).GT.0) call wrt_aero_diag(670,nbin_bc,bcwt) + IF (IGET(681).GT.0) call wrt_aero_diag(681,nbin_bc,bcsv) + print *,'aft wrt disg bcwt' + +!! wrt OC diag field + IF (IGET(671).GT.0) call wrt_aero_diag(671,nbin_oc,ocem) + IF (IGET(672).GT.0) call wrt_aero_diag(672,nbin_oc,ocsd) + IF (IGET(673).GT.0) call wrt_aero_diag(673,nbin_oc,ocdp) + IF (IGET(674).GT.0) call wrt_aero_diag(674,nbin_oc,ocwt) + IF (IGET(682).GT.0) call wrt_aero_diag(682,nbin_oc,ocsv) + print *,'aft wrt disg ocwt' + +!! wrt SU diag field +! IF (IGET(675).GT.0) call wrt_aero_diag(675,nbin_su,suem) +! IF (IGET(676).GT.0) call wrt_aero_diag(676,nbin_su,susd) +! IF (IGET(677).GT.0) call wrt_aero_diag(677,nbin_su,sudp) +! IF (IGET(678).GT.0) call wrt_aero_diag(678,nbin_su,suwt) +! print *,'aft wrt disg suwt' endif ! if gocart_on ! ! END OF ROUTINE. ! RETURN END + + subroutine wrt_aero_diag(igetfld,nbin,data) + use ctlblk_mod, only: jsta, jend, SPVAL, im, jm, grib, & + cfld, datapd, fld_info, jsta_2l, jend_2u + use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD + implicit none +! + integer igetfld,nbin + real, dimension(1:im,jsta_2l:jend_2u,nbin) :: data +! + integer i,j,k + REAL,dimension(im,jm) :: GRID1 +! + GRID1=SPVAL +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = 1,IM + grid1(I,J) = data(I,J,1) + DO K=2,NBIN + GRID1(I,J) = GRID1(I,J)+ data(I,J,K) + END DO + END DO + END DO + ID(1:25) = 0 + ID(02)=141 + if(grib=='grib1') then + CALL GRIBIT(IGET(igetfld),LVLS(1,iget(igetfld)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(iget(igetfld)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + + end subroutine wrt_aero_diag diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 567a0c440..30fcc3a40 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -454,10 +454,12 @@ SUBROUTINE DE_ALLOCATE deallocate(ext) deallocate(asy) deallocate(ssa) + deallocate(sca) deallocate(duem) deallocate(dusd) deallocate(dudp) deallocate(duwt) + deallocate(dusv) deallocate(suem) deallocate(susd) deallocate(sudp) @@ -466,14 +468,17 @@ SUBROUTINE DE_ALLOCATE deallocate(ocsd) deallocate(ocdp) deallocate(ocwt) + deallocate(ocsv) deallocate(bcem) deallocate(bcsd) deallocate(bcdp) deallocate(bcwt) + deallocate(bcsv) deallocate(ssem) deallocate(sssd) deallocate(ssdp) deallocate(sswt) + deallocate(sssv) deallocate(dpres) deallocate(rhomid) ! vrbls2d diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f index 7268f21eb..85b433192 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f @@ -22,6 +22,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! 2016-07-21 S. Moorthi Convert input upper air data from reduced to full grid ! and reduce memory in divergence calculatiom ! 2016-07-21 Jun Wang change averaged field name with suffix +! 2019-07-24 Li(Kate) Zhang - Merge and update NGAC UPP into FV3-Chem ! ! USAGE: CALL INIT ! INPUT ARGUMENT LIST: @@ -53,7 +54,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) o3vdiff, o3prod, o3tndy, mwpv, qqg, vdiffzacce, zgdrag,cnvctummixing, & vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & - ref_10cm + dusv,ssem,sssd,ssdp,sswt,sssv,bcem,bcsd,bcdp,bcwt,bcsv,ocem,ocsd,ocdp, & + ocwt,ocsv, ref_10cm use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & @@ -1516,7 +1518,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output black carbon in nemsio (GOCART) bccb=0.0 - do n=1,nbin_oc + do n=1,nbin_bc do l=1,lm !$omp parallel do private(i,j) do j=jsta_2l,jend_2u @@ -3682,13 +3684,14 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) print*,"fail to read aer file using mpi io read, stopping" stop end if + ! retrieve dust emission fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUEM001' - if ( K == 2) VarName='DUEM002' - if ( K == 3) VarName='DUEM003' - if ( K == 4) VarName='DUEM004' - if ( K == 5) VarName='DUEM005' + if ( K == 1) VarName='duem001' + if ( K == 2) VarName='duem002' + if ( K == 3) VarName='duem003' + if ( K == 4) VarName='duem004' + if ( K == 5) VarName='duem005' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3700,11 +3703,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust sedimentation fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUSD001' - if ( K == 2) VarName='DUSD002' - if ( K == 3) VarName='DUSD003' - if ( K == 4) VarName='DUSD004' - if ( K == 5) VarName='DUSD005' + if ( K == 1) VarName='dust1SD' + if ( K == 2) VarName='dust2SD' + if ( K == 3) VarName='dust3SD' + if ( K == 4) VarName='dust4SD' + if ( K == 5) VarName='dsut5SD' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3716,11 +3719,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust dry deposition fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUDP001' - if ( K == 2) VarName='DUDP002' - if ( K == 3) VarName='DUDP003' - if ( K == 4) VarName='DUDP004' - if ( K == 5) VarName='DUDP005' + if ( K == 1) VarName='dust1dp' + if ( K == 2) VarName='dust2dp' + if ( K == 3) VarName='dust3dp' + if ( K == 4) VarName='dust4dp' + if ( K == 5) VarName='dust5dp' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3734,19 +3737,214 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust wet deposition fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUWT001' - if ( K == 2) VarName='DUWT002' - if ( K == 3) VarName='DUWT003' - if ( K == 4) VarName='DUWT004' - if ( K == 5) VarName='DUWT005' + if ( K == 1) VarName='dust1wtl' + if ( K == 2) VarName='dust2wtl' + if ( K == 3) VarName='dust3wtl' + if ( K == 4) VarName='dust4wtl' + if ( K == 5) VarName='dust5wtl' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName& ,duwt(1,jsta_2l,K)) -! if(debugprint)print*,'sample ',VarName,' = ',duwt(isa,jsa,k) enddo +! retrieve dust scavenging fluxes + do K = 1, nbin_du + if ( K == 1) VarName='dust1wtc' + if ( K == 2) VarName='dust2wtc' + if ( K == 3) VarName='dust3wtc' + if ( K == 4) VarName='dust4wtc' + if ( K == 5) VarName='dust5wtc' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,dusv(1,jsta_2l,K)) + enddo + +! retrieve seasalt emission fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='ssem001' + if ( K == 2) VarName='ssem002' + if ( K == 3) VarName='ssem003' + if ( K == 4) VarName='ssem004' + if ( K == 5) VarName='ssem005' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ssem(1,jsta_2l,K)) + enddo + +! retrieve seasalt dry deposition fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1dp' + if ( K == 2) VarName='seas2dp' + if ( K == 3) VarName='seas3dp' + if ( K == 4) VarName='seas4dp' + if ( K == 5) VarName='seas5dp' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ssdp(1,jsta_2l,K)) + enddo + +! retrieve seasalt wet deposition fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1wtl' + if ( K == 2) VarName='seas2wtl' + if ( K == 3) VarName='seas3wtl' + if ( K == 4) VarName='seas4wtl' + if ( K == 5) VarName='seas5wtl' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sswt(1,jsta_2l,K)) + enddo + +! retrieve seasalt scavenging fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1wtc' + if ( K == 2) VarName='seas1wtc' + if ( K == 3) VarName='seas1wtc' + if ( K == 4) VarName='seas1wtc' + if ( K == 5) VarName='seas1wtc' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sssv(1,jsta_2l,K)) + enddo + +! retrieve bc emission fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bceman' + if ( K == 2) VarName='bcembb' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcem(1,jsta_2l,K)) + enddo + +! retrieve bc sedimentation fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1sd' + if ( K == 2) VarName='bc2sd' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcsd(1,jsta_2l,K)) + enddo + +! retrieve bc dry deposition fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1dp' + if ( K == 2) VarName='bc2dp' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcdp(1,jsta_2l,K)) + enddo + +! retrieve bc large wet deposition fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1wtl' + if ( K == 2) VarName='bc2wtl' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcwt(1,jsta_2l,K)) + enddo + +! retrieve bc convective wet deposition fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1wtc' + if ( K == 2) VarName='bc2wtc' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcsv(1,jsta_2l,K)) + enddo + +! retrieve oc emission fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oceman' + if ( K == 2) VarName='ocembb' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocem(1,jsta_2l,K)) + enddo + +! retrieve oc sedimentation fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oc1sd' + if ( K == 2) VarName='oc2sd' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocsd(1,jsta_2l,K)) + enddo + +! retrieve oc dry deposition fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='c1dp' + if ( K == 2) VarName='c2dp' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocdp(1,jsta_2l,K)) + enddo + +! retrieve oc large wet deposition fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oc1wtl' + if ( K == 2) VarName='oc2wtl' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocwt(1,jsta_2l,K)) + enddo + +! retrieve oc convective wet deposition fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oc1wtc' + if ( K == 2) VarName='oc2wtc' + VcoordName='atmos col' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocsv(1,jsta_2l,K)) + enddo + + !lzhang !! retrieve sfc mass concentration diff --git a/sorc/ncep_post.fd/RQSTFLD.f b/sorc/ncep_post.fd/RQSTFLD.f index cf8ffa204..70ae3dc8a 100644 --- a/sorc/ncep_post.fd/RQSTFLD.f +++ b/sorc/ncep_post.fd/RQSTFLD.f @@ -1859,32 +1859,29 @@ module RQSTFLD_mod DATA IFILV(614),AVBL(614),IQ(614),IS(614),AVBLGRB2(614) & & /1,'BC AER OPT DEP 550 ',137,200, & 'Black carbon aer opt dep at 550 '/ -! ADD DUST PRODUCTION AND REMOVAL FLUXES (GOCART) - DATA IFILV(615),AVBL(615),IQ(615),IS(615),AVBLGRB2(615) & - & /1,'DUST EMISSION FLUX ',151,200, & - 'dust emission fluxes '/ +! ADD BC, OC, SULF AEROSOL COLUMN MASS DENSITY (GOCART) DATA IFILV(616),AVBL(616),IQ(616),IS(616),AVBLGRB2(616) & - & /1,'DUST SEDIMENTATION ',152,200, & - 'dust sedimentation fluxes '/ + & /1,'BC COL MASS DEN ',151,200, & + 'fine bc col mass density '/ DATA IFILV(617),AVBL(617),IQ(617),IS(617),AVBLGRB2(617) & - & /1,'DUST25 SFC MASS CON ',153,001, & - 'dust pm25 sfc mass concentration '/ + & /1,'OC COL MASS DEN ',152,200, & + 'fine oc col mass density '/ DATA IFILV(618),AVBL(618),IQ(618),IS(618),AVBLGRB2(618) & - & /1,'SEAS25 SFC MASS CON ',154,001, & - 'seas pm25 sfc mass concentration '/ + & /1,'SULF COL MASS DEN ',153,200, & + 'fine sulf col mass density '/ ! ADD AEROSOL SURFACE MASS CONCENTRATION (GOCART), use table 129 DATA IFILV(619),AVBL(619),IQ(619),IS(619),AVBLGRB2(619) & - & /1,'PM10 SFC MASS CON ',156,001, & + & /1,'PM10 SFC MASS CON ',154,001, & 'coarse sfc mass concentration '/ DATA IFILV(620),AVBL(620),IQ(620),IS(620),AVBLGRB2(620) & - & /1,'PM25 SFC MASS CON ',157,001, & + & /1,'PM25 SFC MASS CON ',155,001, & 'fine sfc mass concentration '/ -! ADD AEROSOL COLUMN MASS DENSITY (GOCART) +! ADD PM10 and PM25 AEROSOL COLUMN MASS DENSITY (GOCART) DATA IFILV(621),AVBL(621),IQ(621),IS(621),AVBLGRB2(621) & - & /1,'PM10 COL MASS DEN ',155,200, & + & /1,'PM10 COL MASS DEN ',156,200, & 'coarse aerosol col mass density '/ DATA IFILV(622),AVBL(622),IQ(622),IS(622),AVBLGRB2(622) & - & /1,'PM25 COL MASS DEN ',158,200, & + & /1,'PM25 COL MASS DEN ',157,200, & 'fine aerosol col mass density '/ ! ADD AEROSOL OPTICAL DEPTH AT OTHER CHANNELS (GOCART) DATA IFILV(623),AVBL(623),IQ(623),IS(623),AVBLGRB2(623) & @@ -1967,14 +1964,159 @@ module RQSTFLD_mod & /1,'SEAS COL MASS DEN ',160,200, & 'fine seas col mass density '/ DATA IFILV(648),AVBL(648),IQ(648),IS(648),AVBLGRB2(648) & - & /1,'BC COL MASS DEN ',161,200, & - 'fine bc col mass density '/ + & /1,'SINGLE SCAT ALBD 340',131,200, & + 'Aer single scatter alb at 340 nm'/ DATA IFILV(649),AVBL(649),IQ(649),IS(649),AVBLGRB2(649) & - & /1,'OC COL MASS DEN ',162,200, & - 'fine oc col mass density '/ + & /1,'AER ASYM FACTOR 340 ',130,200, & + 'Aerosol asymmetry factor at 340 nm'/ +! ADD AEROSOL SCATTERING AOT DATA IFILV(650),AVBL(650),IQ(650),IS(650),AVBLGRB2(650) & - & /1,'SULF COL MASS DEN ',163,200, & - 'fine sulf col mass density '/ + & /1,'AER SCAT OPT DEP 550',129,200, & + 'Total scat aer opt dep at 550 nm'/ + DATA IFILV(651),AVBL(651),IQ(651),IS(651),AVBLGRB2(651) & + & /1,'DU SCAT OPT DEP 550 ',129,200, & + 'DUST scat aer opt dep at 550 nm'/ + DATA IFILV(652),AVBL(652),IQ(652),IS(652),AVBLGRB2(652) & + & /1,'SS SCAT OPT DEP 550 ',129,200, & + 'SALT scat aer opt dep at 550 nm'/ + DATA IFILV(653),AVBL(653),IQ(653),IS(653),AVBLGRB2(653) & + & /1,'SU SCAT OPT DEP 550 ',129,200, & + 'SUSO scat aer opt dep at 550 nm'/ + DATA IFILV(654),AVBL(654),IQ(654),IS(654),AVBLGRB2(654) & + & /1,'OC SCAT OPT DEP 550 ',129,200, & + 'WASO scat aer opt dep at 550 nm'/ + DATA IFILV(655),AVBL(655),IQ(655),IS(655),AVBLGRB2(655) & + & /1,'BC SCAT OPT DEP 550 ',129,200, & + 'SOOT scat aer opt dep at 550 nm'/ +! ADD AEROSOL ANGTROM EXPONENT + DATA IFILV(656),AVBL(656),IQ(656),IS(656),AVBLGRB2(656) & + & /1,'ANGSTROM EXP 440_860',255,200, & + 'Angstrom exponent 440-860 nm '/ + +! ADD DUST,SS, OC,BC, SU PRODUCTION AND REMOVAL FLUXES (GOCART) + DATA IFILV(659),AVBL(659),IQ(659),IS(659),AVBLGRB2(659) & + & /1,'DUST EMISSION FLUX ',151,200, & + 'dust emission fluxes '/ + DATA IFILV(660),AVBL(660),IQ(660),IS(660),AVBLGRB2(660) & + & /1,'DUST SEDIMENTATION ',152,200, & + 'dust sedimentation fluxes '/ + DATA IFILV(661),AVBL(661),IQ(661),IS(661),AVBLGRB2(661) & + & /1,'DUST DRY DEPOSITION ',153,200, & + 'dust dry deposition fluxes '/ + DATA IFILV(662),AVBL(662),IQ(662),IS(662),AVBLGRB2(662) & + & /1,'DUST WET DEPOSITION ',154,200, & + 'dust wet deposition fluxes '/ + DATA IFILV(663),AVBL(663),IQ(663),IS(663),AVBLGRB2(663) & + & /1,'SS EMISSION FLUX ',151,200, & + 'seasalt emission fluxes '/ + DATA IFILV(664),AVBL(664),IQ(664),IS(664),AVBLGRB2(664) & + & /1,'SS SEDIMENTATION ',152,200, & + 'seasalt sedimentation fluxes '/ + DATA IFILV(665),AVBL(665),IQ(665),IS(665),AVBLGRB2(665) & + & /1,'SS DRY DEPOSITION ',153,200, & + 'seasalt dry deposition fluxes '/ + DATA IFILV(666),AVBL(666),IQ(666),IS(666),AVBLGRB2(666) & + & /1,'SS WET DEPOSITION ',154,200, & + 'seasalt wet deposition fluxes '/ + DATA IFILV(667),AVBL(667),IQ(667),IS(667),AVBLGRB2(667) & + & /1,'BC EMISSION FLUX ',151,200, & + 'black carbon emission fluxes '/ + DATA IFILV(668),AVBL(668),IQ(668),IS(668),AVBLGRB2(668) & + & /1,'BC SEDIMENTATION ',152,200, & + 'black carbon sedimentation fluxes '/ + DATA IFILV(669),AVBL(669),IQ(669),IS(669),AVBLGRB2(669) & + & /1,'BC DRY DEPOSITION ',153,200, & + 'black carbon dry deposition fluxes'/ + DATA IFILV(670),AVBL(670),IQ(670),IS(670),AVBLGRB2(670) & + & /1,'BC WET DEPOSITION ',154,200, & + 'black carbon wet deposition fluxes'/ + DATA IFILV(671),AVBL(671),IQ(671),IS(671),AVBLGRB2(671) & + & /1,'OC EMISSION FLUX ',151,200, & + 'pom emission fluxes '/ + DATA IFILV(672),AVBL(672),IQ(672),IS(672),AVBLGRB2(672) & + & /1,'OC SEDIMENTATION ',152,200, & + 'pom sedimentation fluxes '/ + DATA IFILV(673),AVBL(673),IQ(673),IS(673),AVBLGRB2(673) & + & /1,'OC DRY DEPOSITION ',153,200, & + 'pom dry deposition fluxes '/ + DATA IFILV(674),AVBL(674),IQ(674),IS(674),AVBLGRB2(674) & + & /1,'OC WET DEPOSITION ',154,200, & + 'pom wet deposition fluxes '/ + DATA IFILV(675),AVBL(675),IQ(675),IS(675),AVBLGRB2(675) & + & /1,'SU EMISSION FLUX ',151,200, & + 'suldate emission fluxes '/ + DATA IFILV(676),AVBL(676),IQ(676),IS(676),AVBLGRB2(676) & + & /1,'SU SEDIMENTATION ',152,200, & + 'sulfate sedimentation fluxes '/ + DATA IFILV(677),AVBL(677),IQ(677),IS(677),AVBLGRB2(677) & + & /1,'SU DRY DEPOSITION ',153,200, & + 'sulfate dry deposition fluxes '/ + DATA IFILV(678),AVBL(678),IQ(678),IS(678),AVBLGRB2(678) & + & /1,'SU WET DEPOSITION ',154,200, & + 'sulfate wet deposition fluxes '/ + DATA IFILV(679),AVBL(679),IQ(679),IS(679),AVBLGRB2(679) & + & /1,'DU SCAVENGING FLUX ',155,200, & + 'dust scavenging fluxes '/ + DATA IFILV(680),AVBL(680),IQ(680),IS(680),AVBLGRB2(680) & + & /1,'SS SCAVENGING FLUX ',156,200, & + 'seasalt scavenging fluxes '/ + DATA IFILV(681),AVBL(681),IQ(681),IS(681),AVBLGRB2(681) & + & /1,'BC SCAVENGING FLUX ',157,200, & + 'black carbon scavenging fluxes '/ + DATA IFILV(682),AVBL(682),IQ(682),IS(682),AVBLGRB2(682) & + & /1,'OC SCAVENGING FLUX ',158,200, & + 'organic carbon scavenging fluxes '/ +! DATA IFILV(683),AVBL(683),IQ(683),IS(683),AVBLGRB2(683) & +! & /1,'SS CR SFC MASS CON ',159,200, & +! 'seasalt cr sfc mass concentration '/ + DATA IFILV(684),AVBL(684),IQ(684),IS(684),AVBLGRB2(684) & + & /1,'SEAS25 SFC MASS CON ',159,200, & + 'seas pm25 sfc mass concentration '/ +! DATA IFILV(685),AVBL(685),IQ(685),IS(685),AVBLGRB2(685) & +! & /1,'DU CR SFC MASS CON ',160,001, & +! 'dust cr sfc mass con '/ + DATA IFILV(686),AVBL(686),IQ(686),IS(686),AVBLGRB2(686) & + & /1,'DUST25 SFC MASS CON ',161,001, & + 'dust pm25 sfc mass con '/ +#if 0 + DATA IFILV(687),AVBL(687),IQ(687),IS(687),AVBLGRB2(687) & + & /1,'BC SFC MASS CON ',162,001, & + 'black carbon sfc mass con '/ + DATA IFILV(688),AVBL(688),IQ(688),IS(688),AVBLGRB2(688) & + & /1,'OC SFC MASS CON ',163,001, & + 'organic carbon sfc mass con '/ + DATA IFILV(689),AVBL(689),IQ(689),IS(689),AVBLGRB2(689) & + & /1,'SU SFC MASS CON ',164,001, & + 'sulfate sfc mass con '/ + DATA IFILV(690),AVBL(690),IQ(690),IS(690),AVBLGRB2(690) & + & /1,'INST SU SFC MASS CON',164,001, & + 'instn sulfate sfc mass con '/ + DATA IFILV(691),AVBL(691),IQ(691),IS(691),AVBLGRB2(691) & + & /1,'INST OC SFC MASS CON',164,001, & + 'instn organic carbon sfc mass con '/ + DATA IFILV(692),AVBL(692),IQ(692),IS(692),AVBLGRB2(692) & + & /1,'INST BC SFC MASS CON',164,001, & + 'instn black carbon sfc mass con '/ + DATA IFILV(693),AVBL(693),IQ(693),IS(693),AVBLGRB2(693) & + & /1,'INST DU CR SMASS ',164,001, & + 'instn du coarse mode sfc mass con '/ + DATA IFILV(694),AVBL(694),IQ(694),IS(694),AVBLGRB2(694) & + & /1,'INST DU FN SMASS ',164,001, & + 'instn du fine mode sfc mass con '/ + DATA IFILV(695),AVBL(695),IQ(695),IS(695),AVBLGRB2(695) & + & /1,'INST SS CR SMASS ',164,001, & + 'instn ss coarse mode sfc mass con '/ + DATA IFILV(696),AVBL(696),IQ(696),IS(696),AVBLGRB2(696) & + & /1,'INST SS FN SMASS ',164,001, & + 'instn ss fine mode sfc mass con '/ + DATA IFILV(697),AVBL(697),IQ(697),IS(697),AVBLGRB2(697) & + & /1,'INST AER CR SMASS ',164,001, & + 'instn aer coarse mode sfc mass con'/ + DATA IFILV(698),AVBL(698),IQ(698),IS(698),AVBLGRB2(698) & + & /1,'INST AER FN SMASS ',164,001, & + 'instn aer fine mode sfc mass con '/ +#endif + ! Reserving Index 601-700 for GOCART ! diff --git a/sorc/ncep_post.fd/VRBLS3D_mod.f b/sorc/ncep_post.fd/VRBLS3D_mod.f index d0b305b8b..bdd875198 100644 --- a/sorc/ncep_post.fd/VRBLS3D_mod.f +++ b/sorc/ncep_post.fd/VRBLS3D_mod.f @@ -3,6 +3,7 @@ ! 11-10-18 SARAH LU - MODIFIED TO INCLUDE AEROSOL OPTICAL PROPERTIES ! 11-12-15 SARAH LU - MODIFIED TO INCLUDE AEROSOL DIAG FIELDS ! 12-01-06 SARAH LU - MODIFIED TO INCLUDE AIR DENSITY AND LAYER THICKNESS +! 15-07-02 SARAH LU - MODIFIED TO INCLUDE SCATTERING AEROSOL OPTICAL THICKNESS module vrbls3d !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -56,16 +57,18 @@ module vrbls3d ! ! Add aerosol optical properties for GOCART (NGAC) ,ext(:,:,:), asy(:,:,:) & - ,ssa(:,:,:) & + ,ssa(:,:,:), sca(:,:,:) & ! Add aerosol diagnosis fields for GOCART (NGAC) ,duem(:,:,:), dusd(:,:,:) & ,dudp(:,:,:), duwt(:,:,:) & + ,dusv(:,:,:), sssv(:,:,:) & ,suem(:,:,:), susd(:,:,:) & ,sudp(:,:,:), suwt(:,:,:) & ,ssem(:,:,:), sssd(:,:,:) & ,ssdp(:,:,:), sswt(:,:,:) & ,ocem(:,:,:), ocsd(:,:,:) & ,ocdp(:,:,:), ocwt(:,:,:) & + ,ocsv(:,:,:), bcsv(:,:,:) & ,bcem(:,:,:), bcsd(:,:,:) & ,bcdp(:,:,:), bcwt(:,:,:) & ! Add air density and thickness for GOCART (NGAC)