diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 0b4a602ef..e139a1142 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -93,14 +93,6 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -1111,44 +1103,6 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: -# http://clang.llvm.org/) for more accurate parsing at the cost of reduced -# performance. This can be particularly helpful with template rich C++ code for -# which doxygen's built-in parser lacks the necessary type information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse_libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to -# YES then doxygen will add the directory of each input to the include path. -# The default value is: YES. - -CLANG_ADD_INC_PATHS = YES - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -# If clang assisted parsing is enabled you can provide the clang parser with the -# path to the directory containing a file called compile_commands.json. This -# file is the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the -# options used when the source files were built. This is equivalent to -# specifying the -p option to a clang tool, such as clang-check. These options -# will then be passed to the parser. Any options specified with CLANG_OPTIONS -# will be added as well. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse_libclang=ON option for CMake. - -CLANG_DATABASE_PATH = - #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -1590,17 +1544,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1809,7 +1752,7 @@ COMPACT_LATEX = NO # The default value is: a4. # This tag requires that the tag GENERATE_LATEX is set to YES. -PAPER_TYPE = a4wide +PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # that should be included in the LaTeX output. The package can be specified just @@ -1904,16 +1847,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1994,16 +1927,6 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -2100,15 +2023,6 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -2287,15 +2201,6 @@ EXTERNAL_PAGES = NO # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2328,23 +2233,6 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - # By default doxygen will tell dot to use the default font as specified with # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # the path where dot can find it using this tag. @@ -2581,18 +2469,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support diff --git a/sorc/ncep_post.fd/CALHEL2.f b/sorc/ncep_post.fd/CALHEL2.f index cbf843797..a8b5ba18b 100644 --- a/sorc/ncep_post.fd/CALHEL2.f +++ b/sorc/ncep_post.fd/CALHEL2.f @@ -18,12 +18,14 @@ !> @param[in] DEPTH Depth in meters over whcih helicity should be computed; allows one to distinguish 0-3 km and 0-1 km values. !> @param[out] UST Estimated U Component (m/s) Of Storm motion. !> @param[out] VST Estimated V Component (m/s) Of Storm motion. -!> @param[out] HELI Storm-relative heliciry (m**2/s**2). +!> @param[out] HELI Storm-relative helicity (m**2/s**2). !> @param[out] CANGLE Critical angle. -!> @var USHR1 U Component (m/s) Of 0-1 km shear. -!> @var VSHR1 V Component (m/s) Of 0-1 km shear. -!> @var USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. -!> @var VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> +!> @note The following variables are used within the function but are not input/output. +!> @li USHR1 U Component (m/s) Of 0-1 km shear. +!> @li VSHR1 V Component (m/s) Of 0-1 km shear. +!> @li USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> @li VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. !> !> ### Program history log: !> Date | Programmer | Comments @@ -42,17 +44,6 @@ !> 2021-09-02 | Bo Cui | Decompose UPP in X direction !> !> @author Michael Baldwin W/NP2 @date 1994-08-22 -!----------------------------------------------------------------------- -!> @brief Subroutine that computes storm relative helicity. -!> -!> @param[in] LLOW Lower bound CAPE>=100 and CINS>=-250. -!> @param[in] LUPP Upper bound CAPE< 100 or CINS< -250; allows one to distinguish 0-3 km and 0-1 km values. -!> @param[in] DEPTH Depth in meters over whcih helicity should be computed; allows one to distinguish 0-3 km and 0-1 km values. -!> @param[out] UST Estimated U Component (m/s) Of Storm motion. -!> @param[out] VST Estimated V Component (m/s) Of Storm motion. -!> @param[out] HELI Storm-relative heliciry (m**2/s**2). -!> @param[out] CANGLE Critical angle. -!> !----------------------------------------------------------------------- SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) diff --git a/sorc/ncep_post.fd/CALHEL3.f b/sorc/ncep_post.fd/CALHEL3.f index 923ad0cbc..2e28e6062 100644 --- a/sorc/ncep_post.fd/CALHEL3.f +++ b/sorc/ncep_post.fd/CALHEL3.f @@ -18,11 +18,13 @@ !> @param[out] UST Estimated U Component (m/s) Of Storm motion. !> @param[out] VST Estimated V Component (m/s) Of Storm motion. !> @param[out] HELI Storm-relative heliciry (m**2/s**2). -!> @var CANGLE Critical angle. -!> @var USHR1 U Component (m/s) Of 0-1 km shear. -!> @var VSHR1 V Component (m/s) Of 0-1 km shear. -!> @var USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. -!> @var VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> +!> @note +!> @li CANGLE Critical angle. +!> @li USHR1 U Component (m/s) Of 0-1 km shear. +!> @li VSHR1 V Component (m/s) Of 0-1 km shear. +!> @li USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> @li VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. !> !> ### Program history log: !> Date | Programmer | Comments @@ -44,15 +46,6 @@ !> !> @author Michael Baldwin W/NP2 @date 1994-08-22 !----------------------------------------------------------------------- -!> @brief Subroutine that computes storm relative helicity. -! -!> @param[in] LLOW Lower bound CAPE>=100 and CINS>=-250. -!> @param[in] LUPP Upper bound CAPE< 100 or CINS< -250; allows one to distinguish 0-3 km and 0-1 km values. -!> @param[out] UST Estimated U Component (m/s) Of Storm motion. -!> @param[out] VST Estimated V Component (m/s) Of Storm motion. -!> @param[out] HELI Storm-relative heliciry (m**2/s**2). -!----------------------------------------------------------------------- - SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! diff --git a/sorc/ncep_post.fd/CALMICT.f b/sorc/ncep_post.fd/CALMICT.f index 9bd053a8d..7302f9538 100644 --- a/sorc/ncep_post.fd/CALMICT.f +++ b/sorc/ncep_post.fd/CALMICT.f @@ -1,7 +1,7 @@ !> @file !> @brief Subroutine that computes hydrometeors. !> -!> This routin computes the mixing ratios of cloud water, +!> This routine computes the mixing ratios of cloud water, !> cloud ice, rain, and snow. The code is based on subroutines !> GSMDRIVE and GSMCOLUMN in the NMM model. !> @@ -21,6 +21,8 @@ !> @param[out] DBZR Equivalent radar reflectivity factor from rain in dBZ. !> @param[out] DBZI Equivalent radar reflectivity factor from ice (all forms) in dBZ. !> @param[out] DBZC Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> @param[inout] NLICE1 Time-averaged number concentration of large ice. +!> @param[inout] NRAIN1 Number concentration of rain drops (m). !> !> ### Program history log: !> Date | Programmer | Comments @@ -33,8 +35,35 @@ !> 2021-09-02 | Bo Cui | Decompose UPP in X direction !> !> @author Yi Jin W/NP2 @date 2001-08-14 - SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & - QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) +!----------------------------------------------------------------------- +!> @brief Subroutine that computes hydrometeors. +!> +!> This routine computes the mixing ratios of cloud water, +!> cloud ice, rain, and snow. The code is based on subroutines +!> GSMDRIVE and GSMCOLUMN in the NMM model. +!> +!> @param[in] P1D Pressure (Pa). +!> @param[in] T1D Temperature (K). +!> @param[in] Q1D Specific humidity (kg/kg). +!> @param[in] C1D Total condensate (CWM, kg/kg). +!> @param[in] FI1D F_ice (fraction of condensate in form of ice). +!> @param[in] FR1D F_rain (fraction of liquid water in form of rain). +!> @param[in] FS1D F_RimeF ("Rime Factor", ratio of total ice growth to deposition growth). +!> @param[in] CUREFL Radar reflectivity contribution from convection (mm**6/m**3). +!> @param[inout] QW1 Cloud water mixing ratio (kg/kg). +!> @param[inout] QI1 Cloud ice mixing ratio (kg/kg). +!> @param[inout] QR1 Rain mixing ratio (kg/kg). +!> @param[inout] QS1 "Snow" (precipitation ice) mixing ratio (kg/kg). +!> @param[inout] DBZ1 Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z). +!> @param[inout] DBZR1 Equivalent radar reflectivity factor from rain in dBZ. +!> @param[inout] DBZI1 Equivalent radar reflectivity factor from ice (all forms) in dBZ. +!> @param[inout] DBZC1 Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> @param[inout] NLICE1 Time-averaged number concentration of large ice. +!> @param[inout] NRAIN1 Number concentration of rain drops (m). +!> +!----------------------------------------------------------------------- + SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & + QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) ! use params_mod, only: dbzmin, epsq, tfrz, eps, rd, d608 @@ -299,11 +328,12 @@ SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ! !-- For the old version of the microphysics: ! - SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & - QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) + SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & + QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) +!----------------------------------------------------------------------- !> CALMICT_old computes hydrometeors from the older version of the microphysics. !> -!> This routin computes the mixing ratios of cloud water, cloud ice, +!> This routine computes the mixing ratios of cloud water, cloud ice, !> rain, and snow. The code is based on option MP_PHYSICS==95 in the !> WRF namelist and option MICRO='fer' in NMMB configure files. !> @@ -315,14 +345,16 @@ SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & !> @param[in] FR1D F_rain (fraction of liquid water in form of rain). !> @param[in] FS1D F_RimeF ("Rime Factor", ratio of total ice growth to deposition growth). !> @param[in] CUREFL Radar reflectivity contribution from convection (mm**6/m**3). -!> @param[out] QW1 Cloud water mixing ratio (kg/kg). -!> @param[out] QI1 Cloud ice mixing ratio (kg/kg). -!> @param[out] QR1 Rain mixing ratio (kg/kg). -!> @param[out] QS1 "Snow" (precipitation ice) mixing ratio (kg/kg). -!> @param[out] DBZ1 Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z). -!> @param[out] DBZR Equivalent radar reflectivity factor from rain in dBZ. -!> @param[out] DBZI Equivalent radar reflectivity factor from ice (all forms) in dBZ. -!> @param[out] DBZC Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> @param[inout] QW1 Cloud water mixing ratio (kg/kg). +!> @param[inout] QI1 Cloud ice mixing ratio (kg/kg). +!> @param[inout] QR1 Rain mixing ratio (kg/kg). +!> @param[inout] QS1 "Snow" (precipitation ice) mixing ratio (kg/kg). +!> @param[inout] DBZ1 Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z). +!> @param[inout] DBZR1 Equivalent radar reflectivity factor from rain in dBZ. +!> @param[inout] DBZI1 Equivalent radar reflectivity factor from ice (all forms) in dBZ. +!> @param[inout] DBZC1 Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> @param[inout] NLICE1 Time-averaged number concentration of large ice. +!> @param[inout] NRAIN1 Number concentration of rain drops (m). !> !> ### Program history log: !> Date | Programmer | Comments diff --git a/sorc/ncep_post.fd/CALPBL.f b/sorc/ncep_post.fd/CALPBL.f index 015f4cd10..600663856 100644 --- a/sorc/ncep_post.fd/CALPBL.f +++ b/sorc/ncep_post.fd/CALPBL.f @@ -1,10 +1,10 @@ !> @file -!> @brief Subroutine that computes PBL height based on bulk RCH number. +!> @brief Subroutine that computes PBL height based on bulk Richardson number. !> !> This routine computes the bulk Richardson number !> and PBL height above surface. !> -!> @param[out] PBLRI PBL height above ground. +!> @param[inout] PBLRI real PBL height above ground. !> !> ### Program history log: !> Date | Programmer | Comments @@ -13,6 +13,11 @@ !> 2021-09-02 | Bo Cui | Decompose UPP in X direction !> !> @author M Tsidulko @date 2006-05-04 +!----------------------------------------------------------------------- +!> @brief Subroutine that computes PBL height based on bulk Richardson number. +!> +!> @param[inout] PBLRI real PBL height above ground. +!----------------------------------------------------------------------- SUBROUTINE CALPBL(PBLRI) ! @@ -183,7 +188,7 @@ SUBROUTINE CALPBL(PBLRI) ! IF BULK RICHARDSON NUMBER (RIB) EXCEEDS THE CRITICAL RICHARDSON ! NUMBER (RICR), DETERMINE ABL HEIGHT USING LINEAR INTERPOLATION ! BETWEEN HEIGHTS, AND PREVIOUS (RIBP) AND CURRENT (RIB) BULK -! RICHARDSON NUMBERS. L IS BOUNDARY-LAYER TOP LEVEL NUMBER. +! RICHARDSON NUMBERS. L IS BOUNDARY-LAYER TOP LEVEL NUMBER. ! -------------------------------------------------------------------- IF (RIB>=RICR.AND.ICALPBL(I,J)==0) THEN PBLRI(I,J) = ZMID(I,J,L)+(ZMID(I,J,L-1)-ZMID(I,J,L))* & diff --git a/sorc/ncep_post.fd/CALPBLREGIME.f b/sorc/ncep_post.fd/CALPBLREGIME.f index 72c59616f..703eb9ab9 100644 --- a/sorc/ncep_post.fd/CALPBLREGIME.f +++ b/sorc/ncep_post.fd/CALPBLREGIME.f @@ -1,8 +1,8 @@ !> @file -!> @brief Subroutine that computes PBL height based on bulk RCH number. +!> @brief Subroutine that determines the PBL regime. !> !> This routine computes the bulk Richardson number based on algorithms -!> from WRF surface layer and then derive PBL regime as follows: +!> from WRF surface layer and then derives PBL regime as follows: !> 1. BR >= 0.2; !> Represents nighttime stable conditions (Regime=1), !> @@ -15,8 +15,8 @@ !> !> 4. BR < 0.0 !> Represnets free convection conditions (Regime=4). -!> -!> @param[out] PBLRI PBL Height above ground. +!> +!> @param[out] PBLREGIME PBL regime. !> !> ### Program history log: !> Date | Programmer | Comments @@ -25,6 +25,11 @@ !> 2021-09-02 | Bo Cui | Decompose UPP in X direction !> !> @author H Chuang @date 2007-04-27 +!----------------------------------------------------------------------- +!> @brief Subroutine that determines the PBL regime. +!> +!> @param[inout] PBLREGIME PBL regime. +!----------------------------------------------------------------------- SUBROUTINE CALPBLREGIME(PBLREGIME) ! diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index 86ab8c802..b5fa827f7 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -40,6 +40,14 @@ !> 2023-02-23 | Eric James | Adding vertically integrated coarse PM from RRFS !> !> @author Russ Treadon W/NP2 @date 1992-12-24 +!----------------------------------------------------------------------- +!> CALPW() Subroutine that computes precipitable water. +!> +!> @param[in] PW Array of precipitable water. +!> @param[in] IDECID integer ID number specifying input/method in CALPW +!> (e.g. IDECID=1 computes total column precipitable water, +!> IDECID=2 computes Total column cloud water, IDECID=3 total column). +!----------------------------------------------------------------------- SUBROUTINE CALPW(PW,IDECID) ! diff --git a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f index e0d346f6f..92afac9af 100644 --- a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f +++ b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f @@ -20,7 +20,10 @@ !> 2022-09-12 | Wen Meng | Added cloud fraction changes for crtm/2.4.0 !> 2023-03-22 | WM Lewis | Added support for using effective radius arrays from RRFS !> -!> @author Chuang @date 2007-01-17 +!> @author Chuang @date 2007-01-17 +!--------------------------------------------------------------------------- +!> @brief CALRAD_WCLOUD Subroutine that computes model derived brightness temperature. +!--------------------------------------------------------------------------- SUBROUTINE CALRAD_WCLOUD use vrbls3d, only: o3, pint, pmid, t, q, qqw, qqi, qqr, f_rimef, nlice, nrain, qqs, qqg, & @@ -2199,6 +2202,28 @@ SUBROUTINE CALRAD_WCLOUD return end SUBROUTINE CALRAD_WCLOUD +!------------------------------------------------------------------------------- +!> @brief EFFR Computes effective particle radii channel selection using LVLS from WRF_CNTRL.PARM. +!> +!> @param pmid real Mid-layer pressure. +!> @param t real Temperature. +!> @param q real Specific humidity. +!> @param qqw real Cloud water mixing ratio. +!> @param qqi real Ice mixing ratio. +!> @param qqr real Rain mixing ratio. +!> @param f_rimef real "Rime Factor", ratio of total ice growth to deposition growth. +!> @param nlice real Time-averaged number concentration of large ice. +!> @param nrain real Number concentration of rain drops. +!> @param qqs real Snow mixing ratio. +!> @param qqg real Graupel mixing ratio. +!> @param qqnr real Rain number concentration. +!> @param qqni real Ice number concentration. +!> @param qqnw real cloud water number concentration. +!> @param mp_opt integer Microphysics option. +!> @param species character Particle type (e.g., cloud, rain, graupel, snow, ice). +!> @return EFFR Effective particle radii channel selection. +!------------------------------------------------------------------------------- + REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & qqs,qqg,qqnr,qqni,qqnw,mp_opt,species) @@ -2815,6 +2840,13 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & end function EFFR +!------------------------------------------------------------------------------- +!> @brief GAMMLN +!> +!> @param[in] XX +!> @return GAMMLN Returns the value of LN(GAMMA(XX)) FOR XX > 0. +!------------------------------------------------------------------------------- + REAL FUNCTION GAMMLN(XX) ! --- RETURNS THE VALUE LN(GAMMA(XX)) FOR XX > 0. IMPLICIT NONE @@ -2839,6 +2871,13 @@ REAL FUNCTION GAMMLN(XX) GAMMLN=TMP+LOG(STP*SER/X) END FUNCTION GAMMLN +!------------------------------------------------------------------------------- +!> @brief WGAMMA +!> +!> @param[in] y +!> @return WGAMMA +!------------------------------------------------------------------------------- + REAL FUNCTION WGAMMA(y) IMPLICIT NONE diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 7cbaa9bfa..48e686b72 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -1,5 +1,5 @@ !> @file -!> @brief Subroutine that post SNDING/CLOUD/RADTN fields. +!> @brief Subroutine that posts SNDING/CLOUD/RADTN fields. !> !> This routine computes/posts sounding cloud !> related, and radiation fields. Under the heading of @@ -76,6 +76,10 @@ !> 2023-04-17 | Eric James | Getting rid of special treatment for RRFS AOD (use RAP/HRRR approach) !> !> @author Russ Treadon W/NP2 @date 1993-08-30 +!--------------------------------------------------------------------------------- +!> @brief CLDRAD Subroutine that computes/posts SOUNDING/CLOUD/RADIATION fields. +!--------------------------------------------------------------------------------- + SUBROUTINE CLDRAD ! @@ -5829,7 +5833,13 @@ subroutine cb_cover(cbcov) end do end do end subroutine cb_cover - +!------------------------------------------------------------------------------------ +!> @brief wrt_aero_diag outputs aerosol field in grib2. +!> +!> @param igetfld integer UPP field ID number. +!> @param nbin integer. +!> @param data real. +!------------------------------------------------------------------------------------ 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,ista_2l,iend_2u,ista,iend diff --git a/sorc/ncep_post.fd/COLLECT.f b/sorc/ncep_post.fd/COLLECT.f index fc1a56f8f..fa1fa75bf 100644 --- a/sorc/ncep_post.fd/COLLECT.f +++ b/sorc/ncep_post.fd/COLLECT.f @@ -2,7 +2,7 @@ !> @brief Subroutine that collect gathers from all MPI tasks. !> !> @param[in] A Array being gathered. -!> @param[out] A gathered array - only valid on task 0. +!> @param[out] B gathered array - only valid on task 0. !> !> Gather "A" from all MPI tasks onto task 0. !> @@ -12,6 +12,12 @@ !> 2000-01-06 | Jim Tuccillo | Initial !> !> @author Jim Tuccillo IBM @date 2000-01-06 +!----------------------------------------------------------------------- +!> COLLECT() Subroutine that collect gathers from all MPI tasks. +!> +!> @param[in] A Array being gathered. +!> @param[out] B gathered array - only valid on task 0. +!----------------------------------------------------------------------- SUBROUTINE COLLECT (A, B) diff --git a/sorc/ncep_post.fd/COLLECT_LOC.f b/sorc/ncep_post.fd/COLLECT_LOC.f index f7056fc9f..66cf7b18e 100644 --- a/sorc/ncep_post.fd/COLLECT_LOC.f +++ b/sorc/ncep_post.fd/COLLECT_LOC.f @@ -13,6 +13,12 @@ !> 2021-06-01 | George Vandenberghe | 2D Decomposition !> !> @author Jim Tuccillo IBM @date 2000-01-06 +!-------------------------------------------------------------------------------- +!> @brief COLLECT_LOC +!> +!> @param[in] A real array Array being gathered. +!> @param[out] B real array Gathered array - only valid on task 0. +!-------------------------------------------------------------------------------- SUBROUTINE COLLECT_LOC ( A, B ) @@ -78,6 +84,11 @@ SUBROUTINE COLLECT_LOC ( A, B ) end ! !----------------------------------------------------------------------- +!> @brief COLLECT_ALL() +!> +!> @param[in] A real array Array being gathered. +!> @param[out] B real array Gathered array - only valid on task 0. +!----------------------------------------------------------------------- ! SUBROUTINE COLLECT_ALL ( A, B ) diff --git a/sorc/ncep_post.fd/CTLBLK.f b/sorc/ncep_post.fd/CTLBLK.f index c04b8cc0e..22984faea 100644 --- a/sorc/ncep_post.fd/CTLBLK.f +++ b/sorc/ncep_post.fd/CTLBLK.f @@ -1,106 +1,222 @@ - module CTLBLK_mod +!> @file +!> @brief module: CTLBLK sets default parameters that are used throughout the UPP code +!> +!> ABSTRACT: +!> This module is replacing the CTLBLK.comm, all the comm block is removed. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2011-02 | Jun Wang | ADD variables for grib2 +!> 2011-12-14 | SARAH LU | ADD AER FILENAME +!> 2011-12-23 | SARAH LU | ADD NBIN FOR DU, SS, OC, BC, SU +!> 2021-09-30 | JESSE MENG | 2D DECOMPOSITION +!> 2022-09-22 | Li(Kate) Zhang | Add option for NASA GOCART as "nasa_on", add NBIN for NO3 and NH4 +!> 2022-11-08 | Kai Wang | Replace aqfcmaq_on with aqf_on +!> 2023-01-24 | Sam Trahan | IFI flight levels, runtime of IFI, and record of the bucket time +!> 2023-03-21 | Jesse Meng | Add slrutah_on option to use U Utah SLR +!> 2023-04-04 | Li(Kate Zhang) | Add namelist optoin for CCPP-Chem (UFS-Chem) and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model. +!> 2023-04-17 | Eric James | Adding 160 and 320 m above ground to HTFD for RRFS output. !----------------------------------------------------------------------- -! module: CTLBLK -! -! ABSTRACT: -! this module is replacing the CTLBLK.comm, all the comm block is -! removed. -! Revision Log: -! 2011-02 Jun Wang - ADD variables for grib2 -! 2011-12-14 SARAH LU - ADD AER FILENAME -! 2011-12-23 SARAH LU - ADD NBIN FOR DU, SS, OC, BC, SU -! 2021-09-30 JESSE MENG - 2D DECOMPOSITION -! 2022-09-22 Li(Kate) Zhang - Add option for NASA GOCART as "nasa_on", add NBIN for NO3 and NH4 -! 2022-11-08 Kai Wang - Replace aqfcmaq_on with aqf_on -! 2023-01-24 Sam Trahan - IFI flight levels, runtime of IFI, and record of the bucket time -! 2023-03-21 Jesse Meng - Add slrutah_on option to use U Utah SLR -! 2023-04-04 Li(Kate Zhang) Add namelist optoin for CCPP-Chem (UFS-Chem) -! and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model. -! 2023-04-17 Eric James - Adding 160 and 320 m above ground to HTFD for RRFS output. +!> @defgroup CTLBLK_mod Sets default parameters that are used throughout the UPP code !----------------------------------------------------------------------- + module CTLBLK_mod ! implicit none ! type field_info -!> ifld @memberof CTLBLK_mod - integer ifld -!> lvl @memberof CTLBLK_mod - integer lvl -!> lvl1 @memberof CTLBLK_mod -!> lvl2 @memberof CTLBLK_mod - integer lvl1,lvl2 -!> ntrange @memberof CTLBLK_mod - integer ntrange -!> tinvstat @memberof CTLBLK_mod - integer tinvstat + integer ifld !< Field number in post control file + integer lvl !< _____. + integer lvl1 !< _____. + integer lvl2 !< _____. + integer ntrange !< _____. + integer tinvstat !< _____. end type - integer, parameter :: komax=70 - integer, parameter :: LSMDEF=46 ! default number of p levels - integer,PARAMETER :: NFD=20,NBND=6 - REAL, PARAMETER :: QMIN = 1.E-15 -! - integer :: novegtype ! max number of veg type -! - character(len=256) :: fileName,fileNameFlux,fileNameD3D,fileNameAER, & - fileNameFlat - character(len=19) :: DateStr - character(len=4) :: MODELNAME, SUBMODELNAME - character(len=8) :: FULLMODELNAME - character(len=20) :: IOFORM - character(len=4) :: VTIMEUNITS -! - character(5) :: grib - type(field_info),allocatable :: fld_info(:) - integer :: cfld,ntlfld,npset - real*8 :: gdsdegr - real,allocatable :: datapd(:,:,:) -! - logical :: gocart_on, gccpp_on, nasa_on, d3d_on, hyb_sigp, rdaod, d2d_chem, aqf_on, slrutah_on - logical :: SIGMA,RUN,FIRST,RESTRT - logical :: global - logical :: SMFLAG - integer :: IDAT(5),IHRST, NFCST,NBC,LIST,IOUT,IFHR,NTSTM, & - NDDAMP,NPREC,IDTAD,NBOCO,NSHDE,NCP,IMDLTY,NPHS, & - NRADS,NRADL,IMIN,ifmin,DataHandle,imp_physics, & - icu_physics,iSF_SURFACE_PHYSICS,ISEC,icount_calmict, & - ivegsrc - real :: DT,SDAT(3),AVRAIN,AVCNVC,DTQ2,PT,PDTOP, & - SPL(komax),ALSL(komax),PREC_ACC_DT,PT_TBL,PREC_ACC_DT1,spval +! + integer, parameter :: komax=70 !< _____. + integer, parameter :: LSMDEF=46 !< Default number of pressure levels. + integer,PARAMETER :: NFD=20 !< Default number of flight level heights in geopotential meters. + integer,PARAMETER :: NBND=6 !< Default number of ETA boundary layers. + REAL, PARAMETER :: QMIN = 1.E-15 !< A minimum specific humidity value. +! + integer :: novegtype !< Number of vegetation types based on vegetation classification. +! + character(len=256) :: fileName !< Name of input dynamics file; name of full 3-D model output file. + character(len=256) :: fileNameFlux !< Name of input physics file; name of 2-D model output file with physics and surface fields. + character(len=256) :: fileNameD3D !< _____. + character(len=256) :: fileNameAER !< _____. + character(len=256) :: fileNameFlat !< Input configuration text file defining the requested fields. + character(len=19) :: DateStr !< Time stamp being processed (e.g., 2022-08-02_19:00:00). + character(len=4) :: MODELNAME !< Model name used by UPP internally (e.g., FV3R for LAM, GFS for GFS, NCAR for WRF). + character(len=4) :: SUBMODELNAME !< Name of submodel for output differing from parent domain; used to treat a subset of model output in a special way; typically used only for outputting RTMA-specific fields now; previously used with HWRF and NMM to identify and process moving nests. + character(len=8) :: FULLMODELNAME !< No longer used/supported. + character(len=20) :: IOFORM !< Input file format. + character(len=4) :: VTIMEUNITS !< Valid time units. +! + character(5) :: grib !< Grib type (Note that UPP only supports Grib2 currently). + type(field_info),allocatable :: fld_info(:) !< _____. + integer :: cfld !< _____. + integer :: ntlfld !< _____. + integer :: npset !< _____. + real*8 :: gdsdegr !< _____. + real,allocatable :: datapd(:,:,:) !< _____. +! +!> Logicals to turn on/off different post-processing packages/output depending on model output. + logical :: gocart_on !< Turn on option to process the aerosol/chemical tracers related output from GEFS-Aerosols model (GOCART). + logical :: gccpp_on !< Turn on option to process the aerosol/chemical tracers related output from UFS-Chem (CCPP-Chem) model. + logical :: nasa_on !< Turn on option to process the aerosol/chemical tracers related output from UFS-Aerosols model (NASA GOCART). + logical :: d3d_on !< _____. + logical :: hyb_sigp !< _____. + logical :: rdaod !< Turn on option to process the AOD from GFS scheme. + logical :: d2d_chem !< Turn on option to process the 2D aerosol/chemical tracers. + logical :: aqf_on !< Turn on Air Quality Forecasting (CMAQ-based). + logical :: slrutah_on !< Calculate snow to liquid ratio (SLR) using method from University of Utah. +! + logical :: SIGMA !< No longer used/supported. + logical :: RUN !< No longer used/supported. + logical :: FIRST !< No longer used/supported. + logical :: RESTRT !< Indicates whether it is a restart run. + logical :: global !< _____. + logical :: SMFLAG !< Smoothing flag for isobaric output. +! + integer :: IDAT(5) !< Array storing input month, day, year, hour, min of file being processed (parsed from DateStr) + integer :: IHRST !< Hour of file being processed (parsed from DateStr). + integer :: IFHR !< Forecast hour (lead time). + integer :: IMIN !< Minute of file being processed (parsed from DateStr). + integer :: ifmin !< Forecast minute. + integer :: imp_physics !< Microphysics option used in the model run. + integer :: icu_physics !< Cumulus physics option in the model run. + integer :: iSF_SURFACE_PHYSICS !< Surface physics scheme option in model run. + integer :: DataHandle !< _____. + integer :: NPREC !< _____. + integer :: NPHS !< _____. + integer :: ISEC !< Seconds of file being processed (not parsed from DateStr, hard-coded set to 0). + integer :: icount_calmict !< _____. + integer :: ivegsrc !< Flag for vegetation classification source (0=USGS, 1=IGBP, 2=UMD) + +! +!> @ingroup CTLBLK_mod +!> @{ +!> No longer used/supported. + integer :: NFCST,NBC,LIST,IOUT,NTSTM, & + NRADS,NRADL,NDDAMP,IDTAD,NBOCO,NSHDE,NCP,IMDLTY +!> @} +! + real :: DT !< Model time step in seconds. + real :: SDAT(3) !< Array of month, day, year of restart run. + real :: AVRAIN !< Counter for summing latent heating from grid microphysics. + real :: AVCNVC !< Counter for summing latent heating from convection. + real :: DTQ2 !< Model physics time step in seconds. + real :: PT !< Model top requested by CMAQ. + real :: PDTOP !< Pressure thickness requested by CMAQ. + real :: SPL(komax) !< _____. + real :: ALSL(komax) !< _____. + real :: PREC_ACC_DT !< _____. + real :: PT_TBL !< _____. + real :: PREC_ACC_DT1 !< _____. + real :: spval !< _____. ! real :: SPVAL=9.9e10 ! Moorthi ! - integer :: NUM_PROCS,ME,JSTA,JEND,ISTA,IEND, & - JSTA_M,JEND_M, JSTA_M2,JEND_M2, & - ISTA_M,IEND_M,ISTA_M2,IEND_M2, & - IUP,IDN,ICNT(0:1023),IDSP(0:1023), ICNT2(0:1023),IDSP2(0:1023), & - JSTA_2L, JEND_2U,JVEND_2U, & - ISTA_2L, IEND_2U,IVEND_2U, & - NUM_SERVERS, MPI_COMM_INTER, & - MPI_COMM_COMP, IM,JM,LM,NSOIL,LP1,LM1,IM_JM, & - ileft,iright, & - ileftb,irightb , & - ibsize,ibsum, & - lsm,lsmp1 !comm mpi - integer, allocatable :: icoords(:,:),ibcoords(:,:) - real , allocatable :: rcoords(:,:),rbcoords(:,:) - real, allocatable :: bufs(:),buff(:) - integer , allocatable :: isxa(:),iexa(:),jsxa(:),jexa(:) - integer numx - integer, allocatable :: ibufs(:) - real, allocatable :: rbufs(:) -! - real :: ARDSW, ARDLW, ASRFC, TSRFC,TRDLW,TRDSW,TCLOD,THEAT, & - TPREC,TMAXMIN,TD3D !comm rad -! - real PTHRESH ! moved from params because it is defined differently for NAM -! + integer :: NUM_PROCS !< The number of MPI ranks available to the post processor. + integer :: ME !< MPI rank. + integer :: JSTA !< Start latitude on a task subdomain. + integer :: JEND !< End latitude on a task subdomain. + integer :: ISTA !< Start longitude latitude on a task subdomain. + integer :: IEND !< End longitude on a task subdomain. + integer :: JSTA_M !< Beginning latitude loop index in subdomain for halo depth 1. + integer :: JEND_M !< Ending latitude loop index in subdomain for halo depth 1. + integer :: JSTA_M2 !< Second latitude below begin latitude of subdomain for halo depth 2 (in NGMFLD.f). + integer :: JEND_M2 !< Second latitude above end latitude of subdomain for halo depth 2 (in NGMFLD.f). + integer :: ISTA_M !< Beginning longitude loop index in subdomain for halo depth 1. + integer :: IEND_M !< Ending longitude loop index in subdomain for halo depth 1. + integer :: ISTA_M2 !< Second longitude before begin longitude for halo depth 2 (not used as of 6/22). + integer :: IEND_M2 !< Second longitude after end longitude for halo depth 2 (not used as of 6/22). + integer :: IUP !< MPI rank containing the first latitude after jend. + integer :: IDN !< MPI rank containing the last latitude before jsta. + +!> Used for gathers and scatters + integer :: ICNT(0:1023) !< The number of data items to scatter to each MPI rank; it is a NUM_PROCS array. + integer :: IDSP(0:1023) !< Displacement in the array to be scattered where the portion of the array to be scattered to each MPI rank begins. + integer :: ICNT2(0:1023) !< The number of data items to gather from each MPI rank; it is a NUM_PROCS array. + integer :: IDSP2(0:1023) !< Displacement in the array to be gathered where the portion of the array to be gathered from each MPI rank begins. + integer :: JSTA_2L !< Start latitude -2 of the subdomain. + integer :: JEND_2U !< End latitude +2 of the subdomain. + integer :: JVEND_2U !< Defines the upper boundary for the subdomain used on each MPI rank. Includes information from neighboring ranks (halos). + integer :: ISTA_2L !< Start longitude -2 of the subdomain. + integer :: IEND_2U !< End longitude +2 of the subdomain. + integer :: IVEND_2U !< Defines the right most boundary for the subdomain used on each MPI rank. Includes information from neighboring ranks (halos). + integer :: NUM_SERVERS !< An optional variable to support asynchronous writes of post-processed fields; one if there is more than one total MPI task - otherwise zero; note that the asynchronous write code is not in active development or used. + integer :: MPI_COMM_INTER !< An MPI communicator defining a subgroup of the MPI ranks used for asynchronous I/O; asynchronous writes are not in active development. + integer :: MPI_COMM_COMP !< an MPI communicator defining the subgroup of MPI ranks used to compute post-processed product fields; all current post implementations use all of the ranks so this again supports an unexploited development path in the code. + integer :: IM !< Full longitude domain. + integer :: JM !< Full latitude domain. + integer :: LM !< Number of vertical levels. + integer :: NSOIL !< Number of model soil levels (dependent on the land surface model used). + integer :: LP1 !< LM+1. + integer :: LM1 !< LM-1. + integer :: IM_JM !< The product of IM and JM, which defines the number of points in the full post domain. + integer :: ileft !< MPI rank containing the last longitude before ista. + integer :: iright !< MPI rank containing the first longitude after iend. + integer :: ileftb !< MPI rank containing the last longitude before ista but for cyclic boundary conditions where "last" at the beginning is the other end of the domain (apparently unused and replaced with local calculation). + integer :: irightb !< MPI rank containing the first longitude after iend but for cyclic boundary conditions where "first" at the beginning is the other end of the domain (apparently unused and replaced with local calculation). + integer :: ibsize !< Defines the size of the buffer used in mpi_scatter and mpi_gather. It is necessary because the post-processed variables are not contiguous in the 2D ista_2l:iend_2u,jsta_2l:jsta_2u arrays, so they have to be stored in a contigous buffer and that buffer is what is scattered or gathered. + integer :: ibsum !< No longer supported. + !comm mpi + integer :: lsm !< _____. + integer :: lsmp1 !< LSM+1. +! +!> @ingroup CTLBLK_mod +!> @{ +!> Arrays that store the coordinates of their elements; used to validate communications; +!> when scattered or otherwise dispersed, the receiving ranks check that the values of +!> the arrays match the I and J indices of the receiver. + integer, allocatable :: icoords(:,:) + integer, allocatable :: ibcoords(:,:) + real, allocatable :: rcoords(:,:) + real, allocatable :: rbcoords(:,:) +!> @} + + real, allocatable :: bufs(:) !< Unused/no longer supported; replaced by rbufs. + real, allocatable :: buff(:) !< Used in the many variables' gather; note that scattering has been replaced with subdomain reads when the fields to be post-processed are read in. + integer, allocatable :: isxa(:) !< Array of i start bounds for the subdomain loop on each MPI rank. + integer, allocatable :: iexa(:) !< Array of i end bounds for the subdomain loop on each MPI rank. + integer, allocatable :: jsxa(:) !< Array of j start bounds for the subdomain loop on each MPI rank. + integer, allocatable :: jexa(:) !< Array of j end bounds for the subdomain loop on each MPI rank. + integer numx !< The number of i regions in a 2D decomposition; Each i row is distibuted to numx ranks; numx=1 is the special case of a 1D decomposition in Y only. + integer, allocatable :: ibufs(:) !< The buffer used for scatters of the integer coordinate array to each MPI rank. + real, allocatable :: rbufs(:) !< The buffer used for scatters of the real coordinate array to each MPI rank; analagous to buff in the state variable scatter. +! +!comm rad + real :: ARDSW !< Shortwave flux accumulation array. + real :: ARDLW !< Longwave flux accumulation array. + real :: ASRFC !< Surface flux array. + real :: TSRFC !< Number of hours in surface flux buckets. + real :: TRDLW !< Number of hours in long wave buckets. + real :: TRDSW !< Number of hours in shortwave buckets. + real :: TCLOD !< Number of hours in cloud fraction average. + real :: THEAT !< Number of hours in latent heating bucket. + real :: TPREC !< Number of hours in precipitation bucket. + real :: TMAXMIN !< _____. + real :: TD3D !< _____. +! + real PTHRESH !< Threshold for precipitation (used to check if there is precipitation, mainly in ptype routines). +! +!> @ingroup CTLBLK_mod +!> @{ Time to execute named routine; note that ETAFLD2 and ETA2P refer to MDLFLD and MDL2P routines respectively. real(kind=8) :: ETAFLD2_tim=0.,ETA2P_tim=0.,SURFCE2_tim=0., & CLDRAD_tim=0.,MISCLN_tim=0.,FIXED_tim=0., & MDL2SIGMA_tim=0.,READxml_tim=0.,MDL2AGL_tim=0., & MDL2STD_tim=0.,MDL2THANDPV_tim=0., & CALRAD_WCLOUD_tim=0.,RUN_IFI_TIM=0. !comm tim_info +!> @} ! +!> @ingroup CTLBLK_mod +!> @{ +!> Initialized as 0, but never used. real(kind=8) :: time_output=0., time_e2out=0. !comm jjt +!> @} ! +!> SPLDEF !< The fixed pressure levels available for output (Pa). real :: SPLDEF(LSMDEF) = & (/200.,500.,700.,1000.,2000.,3000. & ,5000.,7000.,7500.,10000.,12500.,15000.,17500.,20000.,22500. & @@ -109,17 +225,19 @@ module CTLBLK_mod ,67500.,70000.,72500.,75000.,77500.,80000.,82500.,85000. & ,87500.,90000.,92500.,95000.,97500.,100000./) ! - REAL HTFD(NFD),PETABND(NBND),SIGBND(NBND) + REAL HTFD(NFD) !< The fixed flight level heights available for output (gpm). + REAL PETABND(NBND) !< The fixed ETA levels available for output. + REAL SIGBND(NBND) !< The fixed sigma levels available for output. ! Add GOCART aerosol specification - integer, parameter :: nbin_du = 5 ! dust - integer, parameter :: nbin_ss = 5 ! sea salt - integer, parameter :: nbin_oc = 2 ! organic carbon - integer, parameter :: nbin_bc = 2 ! black carbon - integer, parameter :: nbin_su = 1 ! sulfate - integer, parameter :: nbin_no3 = 3 ! nitrate - integer, parameter :: nbin_nh4 = 1 ! NH4 - integer, parameter :: nbin_sm = 1 ! smoke + integer, parameter :: nbin_du = 5 !< dust + integer, parameter :: nbin_ss = 5 !< sea salt + integer, parameter :: nbin_oc = 2 !< organic carbon + integer, parameter :: nbin_bc = 2 !< black carbon + integer, parameter :: nbin_su = 1 !< sulfate + integer, parameter :: nbin_no3 = 3 !< nitrate + integer, parameter :: nbin_nh4 = 1 !< NH4 + integer, parameter :: nbin_sm = 1 !< smoke ! ! SET FD LEVEL HEIGHTS IN GEOPOTENTAL METERS. DATA HTFD / 20.E0,30.E0,40.E0,50.E0,80.E0,100.E0,160.E0,305.E0,320.E0,457.E0,610.E0, & @@ -130,12 +248,10 @@ module CTLBLK_mod DATA SIGBND / 0.985,0.955,0.925,0.895,0.865,0.835 / DATA PETABND / 15.,45.,75.,105.,135.,165./ ! -! Precipitation bucket time - real :: ITPREC=-1 -! -! Flight levels in feet, provided by libIFI - integer :: ifi_nflight = 0 - real, allocatable :: ifi_flight_levels(:) ! units are FEET + real :: ITPREC=-1 !< Precipitation bucket time +! + integer :: ifi_nflight = 0 !< Number of flight levels + real, allocatable :: ifi_flight_levels(:) !< Flight levels in feet, provided by libIFI ! !----------------------------------------------------------------------- end module CTLBLK_mod diff --git a/sorc/ncep_post.fd/EXCH.f b/sorc/ncep_post.fd/EXCH.f index 5ade4380b..c659775ca 100644 --- a/sorc/ncep_post.fd/EXCH.f +++ b/sorc/ncep_post.fd/EXCH.f @@ -17,6 +17,12 @@ !> makefile (Tuccillo, personal communication; Ferrier, Feb '02). !> !> @author Jim Tuccillo IBM @date 2000-01-06 +!---------------------------------------------------------------------- +!> @brief exch() Subroutine that exchanges one halo row. +!> +!> @param[inout] A Array to have halos exchanged. +!> @note As output, A is the array with halos exchanged. +!---------------------------------------------------------------------- SUBROUTINE EXCH(A) use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, mpi_comm_comp, im,& @@ -414,6 +420,12 @@ SUBROUTINE EXCH(A) !> makefile (Tuccillo, personal communication; Ferrier, Feb '02). !> !> @author Jim Tuccillo IBM @date 2000-01-06 +!---------------------------------------------------------------------- +!> @brief exch_f() Subroutine that exchanges one halo row. +!> +!> @param[inout] A Array to have halos exchanged. +!> @note As output, A is the array with halos exchanged. +!---------------------------------------------------------------------- subroutine exch_f(a) use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, & diff --git a/sorc/ncep_post.fd/FDLVL.f b/sorc/ncep_post.fd/FDLVL.f index 21cfd0027..138403bf3 100644 --- a/sorc/ncep_post.fd/FDLVL.f +++ b/sorc/ncep_post.fd/FDLVL.f @@ -1,5 +1,5 @@ !> @file -!> @brief Subroutine that computes T, Q, U, V on the flight levels (FD). +!> @brief Subroutine that computes T, Q, U, V, P, and ICING on the flight levels (FD). !> !> This routine computes temperature, spec. hum, u wind component, !> and v wind component on the NFD=6 FD levels. The @@ -27,6 +27,8 @@ !> @param[out] QFD Spec hum on FD levels. !> @param[out] UFD U wind (m/s) on FD levels. !> @param[out] VFD V wind (m/s) on FD levels. +!> @param[out] PFD Pressure (Pa) on FD levels. +!> @param[out] ICINGFD Icing on FD levels (see https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-207.shtml). !> !> ### Program History Log !> Date | Programmer | Comments @@ -42,6 +44,18 @@ !> 2022-09-22 | Li(Kate) Zhang | Remove Dust=> AERFD !> !> @author Russ Treadon W/NP2 @date 1992-12-22 +!-------------------------------------------------------------------------- +!> fdlvl() Subroutine that computes T, Q, U, V, P, ICING on the flight levels (FD). +!> +!> @param[in] ITYPE Flag that determines whether MSL (1) or AGL (2) Levels are used. +!> @param[out] TFD Temperature (K) on FD levels. +!> @param[out] QFD Spec hum on FD levels. +!> @param[out] UFD U wind (m/s) on FD levels. +!> @param[out] VFD V wind (m/s) on FD levels. +!> @param[out] PFD Pressure (Pa) on FD levels. +!> @param[out] ICINGFD Icing on FD levels. +!-------------------------------------------------------------------------- + SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD) ! diff --git a/sorc/ncep_post.fd/GFIP3.f b/sorc/ncep_post.fd/GFIP3.f index b23a6bc3d..4d30f5c57 100644 --- a/sorc/ncep_post.fd/GFIP3.f +++ b/sorc/ncep_post.fd/GFIP3.f @@ -2,6 +2,9 @@ !> !> @brief This file contains a collection of UPP modules used to calculate icing probability from the model. !> +! +!------------------------------------------------------------------------ +!> @class DerivedFields !======================================================================== ! = = = = = = = = = = = = module DerivedFields = = = = = = = = = = = = !======================================================================== @@ -175,10 +178,12 @@ elemental real function get_tLCL(t, td) end function get_tLCL !-----------------------------------------------------------------------+ -! mixing ratio in g/kg = water vapr/dry air -! td in K -! pres in Pa -!> mixing_ratio() @memberof DerivedFields +!> @brief mixing_ratio() Calculate the mixing ratio in g/kg = water vapor/dry air. +!> +!> @param[in] td real dew point temperture (K). +!> @param[in] pres real Pressure (Pa). +!> @return mixing_ratio +!-----------------------------------------------------------------------+ elemental real function mixing_ratio(td, pres) IMPLICIT NONE real, intent(in) :: td, pres @@ -603,6 +608,8 @@ end function getPrecipType end module DerivedFields +!------------------------------------------------------------------------ +!> @class CloudLayers !======================================================================== ! = = = = = = = = = = = = = module CloudLayers = = = = = = = = = = = = = !======================================================================== @@ -949,7 +956,8 @@ end function dq_delta_TE_map end module cloudlayers - +!------------------------------------------------------------------------ +!> @class IcingPotential !======================================================================== ! = = = = = = = = = = = = module IcingPotential = = = = = = = = = = = = = !======================================================================== @@ -1132,7 +1140,8 @@ end function slw_map end module IcingPotential - +!------------------------------------------------------------------------ +!> @class SeverityMaps !======================================================================== ! = = = = = = = = = = = = module SeverityMaps = = = = = = = = = = = = = !======================================================================== @@ -1581,6 +1590,8 @@ end function convect_totals_map end module SeverityMaps +!------------------------------------------------------------------------ +!> @class IcingSeverity !======================================================================== ! = = = = = = = = = = = = module IcingSeverity = = = = = = = = = = = = = !======================================================================== @@ -1611,7 +1622,29 @@ module IcingSeverity contains !-----------------------------------------------------------------------+ - !> icing_sev @memberof IcingSeverity +!> @brief icing_sev() calculates icing severity. +!> +!> @param[in] imp_physics integer Microphysics scheme. +!> @param[in] hgt real Geopotential height (m). +!> @param[in] rh real Relative humidity. +!> @param[in] t real Temperature. +!> @param[in] pres real Pressure. +!> @param[in] vv real Vertical velocity. +!> @param[in] liqCond real +!> @param[in] iceCond real +!> @param[in] twp real Total water path. +!> @param[in] ice_pot real Icing potential. +!> @param[in] nz integer Number of vertical levels. +!> @param[in] hcprcp real Hourly accumulated convective precipitation. +!> @param[in] cape real Convective Available Potential Energy (CAPE) +!> @param[in] lx real Lifted index. +!> @param[in] kx real k index. +!> @param[in] tott real Total totals. +!> @param[in] pc real Precipitation condensate. +!> @param[in] prcpType integer Surface precipitation type. +!> @param[in] clouds +!> @param[out] iseverity real Category of icing severity. +!-----------------------------------------------------------------------+ subroutine icing_sev(imp_physics,hgt, rh, t, pres, vv, liqCond, iceCond, twp, & ice_pot, nz, hcprcp, cape, lx, kx, tott, pc, prcpType, clouds, & iseverity) diff --git a/sorc/ncep_post.fd/GPVS.f b/sorc/ncep_post.fd/GPVS.f index 3e91b7d3d..6e0dabc4e 100644 --- a/sorc/ncep_post.fd/GPVS.f +++ b/sorc/ncep_post.fd/GPVS.f @@ -19,6 +19,11 @@ !> !> @note Lookup tables for the saturation vapor pressure w/r/t water & ice. !> @author N Phillips W/NP2 @date 1982-12-30 +!----------------------------------------------------------------------- +!> +!> gpvs computes saturation vapor pressure table as a function of +!> temperature for the table lookup function FPVS. +!> SUBROUTINE GPVS ! ****************************************************************** @@ -51,9 +56,9 @@ SUBROUTINE GPVS !----------------------------------------------------------------------- !*********************************************************************** !----------------------------------------------------------------------- - FUNCTION FPVS(T) -!----------------------------------------------------------------------- -!> fpvs() computes saturation vapor pressure. +!> @brief fpvs() computes saturation vapor pressure. +!> @note This function is mostly replaced by FPVSNEW in UPP_PHYSICS.f. +!> The only routine that uses FPVS is CALMICT.f. !> !> Compute saturation vapor pressure from the temperature. !> A linear interpolation is done between values in a lookup table @@ -64,8 +69,8 @@ FUNCTION FPVS(T) !> This function should be expanded inline in the calling routine. !> !> @param[in] T real temperature in Kelvin. -!> @param[out] FPVS real saturation vapor pressure in kilopascals (CB). -!> +!> @return FPVS real Saturation vapor pressure in kilopascals (CB). +!> !> ### Program History Log !> Date | Programmer | Comments !> -----|------------|--------- @@ -75,6 +80,8 @@ FUNCTION FPVS(T) !> 1996-02-19 | Hong | Ice effect !> !> @author N Phillips W/NP2 @date 1982-12-30 +!----------------------------------------------------------------------- + FUNCTION FPVS(T) !----------------------------------------------------------------------- use svptbl_mod, only : NX,C1XPVS,C2XPVS,TBPVS ! @@ -96,6 +103,17 @@ FUNCTION FPVS(T) END !----------------------------------------------------------------------- !----------------------------------------------------------------------- +!> @brief FPVS0() computes saturation vapor pressure. +!> @note This function is no longer used. +!> +!> @param T real Temperature (K). +!> @param NX integer Number of grid cells in the X direction. +!> @param C1XPVS0 real +!> @param C2XPVS0 real +!> @param TBPVS0 array +!> @return FPVS0 real Saturation vapor pressure in kilopascals (CB). +!> + FUNCTION FPVS0(T,NX,C1XPVS0,C2XPVS0,TBPVS0) !----------------------------------------------------------------------- ! use svptbl_mod, only : NX,C1XPVS0,C2XPVS0,TBPVS0 @@ -118,15 +136,13 @@ FUNCTION FPVS0(T,NX,C1XPVS0,C2XPVS0,TBPVS0) !----------------------------------------------------------------------- !*********************************************************************** !----------------------------------------------------------------------- - FUNCTION FPVSX(T) -!----------------------------------------------------------------------- -!> fpvsx() computes saturation vapor pressure. +!> @brief fpvsx() computes saturation vapor pressure. !> !> Exactly compute saturation vapor pressure from temperature. !> The water model assumes a perfect gas, constant specific heats !> for gas and liquid, and neglects the volume of the liquid. !> The model does account for the variation of the latent heat -!> of condensation with temperature. The ice option is not included. +!> of condensation with temperature. The ice option is not included. !> The Clausius-Clapeyron equation is integrated from the triple point !> To get the formula !> @code @@ -135,8 +151,8 @@ FUNCTION FPVSX(T) !> where TR is TTP/T and other values are physical constants !> This function should be expanded inline in the calling routine. !> -!> @param[in] T real temperature in Kelvin. -!> @param[out] FPVSX real saturation vapor pressure in kilopascals (CB). +!> @param[in] T real Temperature (K). +!> @return FPVSX real Saturation vapor pressure in kilopascals (CB). !> !> ### Program History Log !> Date | Programmer | Comments @@ -147,6 +163,8 @@ FUNCTION FPVSX(T) !> 1996-02-19 | Hong | Ice effect !> !> @author N Phillips W/NP2 @date 1982-12-30 +!----------------------------------------------------------------------- + FUNCTION FPVSX(T) !----------------------------------------------------------------------- implicit none ! @@ -171,6 +189,11 @@ FUNCTION FPVSX(T) END !----------------------------------------------------------------------- !----------------------------------------------------------------------- +!> @brief fpvsx0() computes saturation vapor pressure. +!> +!> @param T real Temperature (K). +!> @return FPVSX0 real Saturation vapor pressure in kilopascals (CB). +! FUNCTION FPVSX0(T) !----------------------------------------------------------------------- implicit none diff --git a/sorc/ncep_post.fd/GRIDSPEC.f b/sorc/ncep_post.fd/GRIDSPEC.f index 2a8754d5b..3f5936d9f 100644 --- a/sorc/ncep_post.fd/GRIDSPEC.f +++ b/sorc/ncep_post.fd/GRIDSPEC.f @@ -1,4 +1,7 @@ - module GRIDSPEC_mod +!> @file +!> @brief GRIDSPEC_mod assigns values to variables that define the model grid. +!---------------------------------------------------------------------------- + module GRIDSPEC_mod ! ! COMMON /GRIDSPEC/ ! & DXVAL,DYVAL,CENLAT,CENLON,TRUELAT1,TRUELAT2,LATSTART,LONSTART @@ -6,13 +9,33 @@ module GRIDSPEC_mod ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! - integer DXVAL,DYVAL,CENLAT,CENLON,TRUELAT1,TRUELAT2 - integer LATSTART,LONSTART,LATLAST,LONLAST - integer LATSTART_R,LONSTART_R,LATLAST_R,LONLAST_R - integer latnw,lonnw,latse,lonse - integer MAPTYPE,STANDLON - integer latstartv,cenlatv,lonstartv,cenlonv,latlastv,lonlastv - real PSMAPF - character(len=1) gridtype + integer DXVAL !< grid cell size in x direction (can be degrees/meters) + integer DYVAL !< grid cell size in y direction (can be degrees/meters) + integer CENLAT !< cenlat: center latitude of grid + integer CENLON !< cenlon: center longitude of grid + integer TRUELAT1 !< first latitude from the pole at which the secant cone cuts the sphere + integer TRUELAT2 !< second latitude from the pole at which the secant cone cuts the sphere + integer LATSTART !< latitude of first grid point (lower left corner latitude) + integer LONSTART !< longitude of first grid point (lower left corner longitude) + integer LATLAST !< latitude of last grid point (upper right corner latitude) + integer LONLAST !< longitude of last grid point (upper right corner longitude) + integer LATSTART_R !< latitude of first grid point (lower left corner latitude) + integer LONSTART_R !< longitude of first grid point (lower left corner longitude) + integer LATLAST_R !< latitude of last grid point (upper right corner latitude) + integer LONLAST_R !< longitude of last grid point (upper right corner longitude) + integer latnw !< upper left corner latitude + integer lonnw !< upper left corner longitude + integer latse !< lower right corner latitude + integer lonse !< lower right corner longitude + integer MAPTYPE !< grid projection + integer STANDLON !< longitude of meridian parallel to y-axis (hardcoded as cenlon) + integer latstartv !< latitude of first grid point (lower left corner latitude) + integer cenlatv !< center latitude of grid + integer lonstartv !< longitude of first grid point (lower left corner longitude) + integer cenlonv !< center longitude of grid + integer latlastv !< latitude of last grid point (upper right corner latitude) + integer lonlastv !< longitude of last grid point (upper right corner longitude) + real PSMAPF !< map scale factor + character(len=1) gridtype !< type of grid staggering as in Arakawa grids (Arakawa-A through Arakawa-E) ! end module GRIDSPEC_mod diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f index 07a56be31..7c0b9398e 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f @@ -2,7 +2,7 @@ !> @brief initpost_gfs_nems_mpiio() initializes post for run. !> !> @author Hui-Ya Chuang @date 2007-03-04 - +!> !> This routine initializes constants and !> variables at the start of GFS model or post !> processor run. @@ -25,10 +25,16 @@ !> 2019-07-24 | Li(Kate) Zhang | Merge and update NGAC UPP into FV3-Chem !> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) !> 2022-09-22 | Li(Kate) Zhang | Remove duplicated initializations which have been done in ALLCOCATE_ALL.f -!> 2023-04-04 |Li(Kate Zhang) |Add namelist optoin for CCPP-Chem (UFS-Chem) +!> 2023-04-04 | Li(Kate Zhang) | Add namelist optoin for CCPP-Chem (UFS-Chem) ! and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model. !> !> @author Hui-Ya Chuang @date 2007-03-04 +!---------------------------------------------------------------------- +!> @brief initializes constants and variables at the start of GFS model +!> or post processor run. +!> +!> @param[in] iostatusAER integer Status of GFS aer file. +!---------------------------------------------------------------------- SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) @@ -4033,6 +4039,15 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) RETURN END + +!---------------------------------------------------------------------- +!> @brief rg2gg() No longer used/supported. +!> +!> @param[in] im integer No longer used/supported. +!> @param[in] jm integer No longer used/supported. +!> @param[in] numi integer No longer used/supported. +!> @param[inout] a real No longer used/supported. +!---------------------------------------------------------------------- subroutine rg2gg(im,jm,numi,a) ! implicit none @@ -4052,6 +4067,15 @@ subroutine rg2gg(im,jm,numi,a) enddo enddo end subroutine rg2gg + +!---------------------------------------------------------------------- +!> @brief gg2rg() No longer used/supported. +!> +!> @param[in] im integer No longer used/supported. +!> @param[in] jm integer No longer used/supported. +!> @param[in] numi integer No longer used/supported. +!> @param[inout] a real No longer used/supported. +!---------------------------------------------------------------------- subroutine gg2rg(im,jm,numi,a) ! implicit none @@ -4072,6 +4096,17 @@ subroutine gg2rg(im,jm,numi,a) enddo end subroutine gg2rg +!---------------------------------------------------------------------- +!> @brief uninterpred () No longer used/supported. +!> +!> @param[in] iord integer No longer used/supported. +!> @param[in] kmsk integer No longer used/supported. +!> @param[in] lonsperlat integer No longer used/supported. +!> @param[in] lonr integer No longer used/supported. +!> @param[in] latr integer No longer used/supported. +!> @param[in] fi real No longer used/supported. +!> @param[out] f real No longer used/supported. +!---------------------------------------------------------------------- subroutine uninterpred(iord,kmsk,lonsperlat,lonr,latr,fi,f) !! implicit none @@ -4092,6 +4127,18 @@ subroutine uninterpred(iord,kmsk,lonsperlat,lonr,latr,fi,f) endif enddo end subroutine + +!---------------------------------------------------------------------- +!> @brief intlon() No longer used/supported. +!> +!> @param[in] iord integer No longer used/supported. +!> @param[in] imsk integer No longer used/supported. +!> @param[in] m1 integer No longer used/supported. +!> @param[in] m2 integer No longer used/supported. +!> @param[in] k1 integer No longer used/supported. +!> @param[in] f1 real No longer used/supported. +!> @param[out] f2 real No longer used/supported. +!---------------------------------------------------------------------- subroutine intlon(iord,imsk,m1,m2,k1,f1,f2) implicit none integer,intent(in) :: iord,imsk,m1,m2 diff --git a/sorc/ncep_post.fd/INITPOST_NEMS.f b/sorc/ncep_post.fd/INITPOST_NEMS.f index 5f3978251..ecd42f8cf 100644 --- a/sorc/ncep_post.fd/INITPOST_NEMS.f +++ b/sorc/ncep_post.fd/INITPOST_NEMS.f @@ -2,13 +2,13 @@ !> @brief initpost_nems() initializes post for run. !> !> @author Hui-Ya Chuang @date 2007-03-26 - +!> !> This routine initializes constants and !> variables at the start of an NEMS model or post !> processor run. !> !> @param[in] NREC. -!> @param[in] NFILE. +!> @param[inout] NFILE. !> !> ### Program History Log !> Date | Programmer | Comments @@ -17,6 +17,13 @@ !> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) !> !> @author Hui-Ya Chuang @date 2007-03-26 +!---------------------------------------------------------------------- +!> @brief INITPOST_NEMS This routine initializes constants and +!> variables at the start of an NEMS model or post processor run. +!> +!> @param[in] NREC integer Number of records in file. +!> @param[inout] nfile nemsio_gfile Name of the NEMS-formatted model output file. +!---------------------------------------------------------------------- SUBROUTINE INITPOST_NEMS(NREC,nfile) use vrbls3d, only: t, q, uh, vh, q2, cwm, f_ice, f_rain, f_rimef, cfr, pint,& diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 9d0e1010a..a7fce6f48 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -2,7 +2,7 @@ !> @brief initpost_netcdf() initializes post for run. !> !> @author Hui-Ya Chuang @date 2016-03-04 - +!> !> This routine initializes constants and !> variables at the start of GFS model or post !> processor run. @@ -40,6 +40,13 @@ !> 2023-07-06 | Eric James ! Read in SOILL on 9 levels for RRFS !> !> @author Hui-Ya Chuang @date 2016-03-04 +!---------------------------------------------------------------------- +!> @brief INITPOST_NETCDF() This routine initializes constants and +!> variables at the start of GFS model or post processor run. +!> +!> @param[in] ncid2d integer netCDF ID of physics model output file. +!> @param[in] ncid3d integer netCDF ID of dynamics model output file. +!---------------------------------------------------------------------- SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) @@ -3823,7 +3830,25 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) RETURN END - +!---------------------------------------------------------------------- +!> @brief read_netcdf_3d_para() reads dynamics variables from UFS model output. +!> +!> @param[in] ncid integer netCDF ID. +!> @param[in] im integer Full longitude domain. +!> @param[in] jm integer Full latitude domain. +!> @param[in] ista integer Start longitude latitude on a task subdomain. +!> @param[in] ista_2l integer Start longitude -2 of the subdomain. +!> @param[in] iend integer End longitude on a task subdomain. +!> @param[in] iend_2u integer End longitude +2 of the subdomain. +!> @param[in] jsta integer Start latitude on a task subdomain. +!> @param[in] jsta_2l integer Start latitude -2 of the subdomain. +!> @param[in] jend integer End latitude on a task subdomain. +!> @param[in] jend_2u integer End latitude +2 of the subdomain. +!> @param[in] spval real Missing value defined in UPP. +!> @param[in] varname character Variable name in netCDF file. +!> @param[out] buf real Variable values. +!> @param[in] lm integer Model levels. +!---------------------------------------------------------------------- subroutine read_netcdf_3d_para(ncid,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & spval,varname,buf,lm) @@ -3876,6 +3901,23 @@ subroutine read_netcdf_3d_para(ncid,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l end subroutine read_netcdf_3d_para +!---------------------------------------------------------------------- +!> @brief read_netcdf_2d_para() reads physics variables from UFS model output. +!> +!> @param[in] ncid integer netCDF ID. +!> @param[in] ista integer Start longitude latitude on a task subdomain. +!> @param[in] ista_2l integer Start longitude -2 of the subdomain. +!> @param[in] iend integer End longitude on a task subdomain. +!> @param[in] iend_2u integer End longitude +2 of the subdomain. +!> @param[in] jsta integer Start latitude on a task subdomain. +!> @param[in] jsta_2l integer Start latitude -2 of the subdomain. +!> @param[in] jend integer End latitude on a task subdomain. +!> @param[in] jend_2u integer End latitude +2 of the subdomain. +!> @param[in] spval real Missing value defined in UPP. +!> @param[in] varname character Variable name in netCDF file. +!> @param[out] buf real Variable values. +!---------------------------------------------------------------------- + subroutine read_netcdf_2d_para(ncid,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & spval,VarName,buf) diff --git a/sorc/ncep_post.fd/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index abc7f9498..8232add55 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -1,9 +1,9 @@ !> @file -!> @brief mdl2p() computes vert intrp of model lvls to pressure. +!> @brief mdl2p() computes vertical interpolation of model levels to pressure. !> !> For most applications this routine is the workhorse of the post processor. !> In a nutshell it interpolates data from model to pressure surfaces. -!> It origiaated from the vertical interpolation code in the old ETA +!> It originated from the vertical interpolation code in the old ETA !> post processor subroutine outmap() and is a revision of subroutine eta2p(). !> !> ### Program History Log @@ -38,6 +38,11 @@ !> 2023-02-23 | E James | Adding coarse PM from RRFS !> !> @author T Black W/NP2 @date 1999-09-23 +!-------------------------------------------------------------------------------------- +!> MDL2P() computes vertical interpolation of model levels to pressure. +!> +!> @param[in] iostatusD3D integer No longer used/supported. +!> SUBROUTINE MDL2P(iostatusD3D) ! diff --git a/sorc/ncep_post.fd/MPI_FIRST.f b/sorc/ncep_post.fd/MPI_FIRST.f index b2c9e669a..3a3d0ec64 100644 --- a/sorc/ncep_post.fd/MPI_FIRST.f +++ b/sorc/ncep_post.fd/MPI_FIRST.f @@ -1,21 +1,23 @@ !> @file -! -!> SUBPROGRAM: MPI_FIRST SET UP MESSGAE PASSING INFO +!> +!> SUBPROGRAM: MPI_FIRST SET UP MESSAGE PASSING INFO !! PRGRMMR: TUCCILLO ORG: IBM !! !! ABSTRACT: !! SETS UP MESSAGE PASSING INFO !! -!! PROGRAM HISTORY LOG: -!! 14-12-01 WM LEWIS: ADDED ADDNL VARIABLES FOR SAT OUTPUT -!! 00-01-06 TUCCILLO - ORIGINAL -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 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 -!! 21-07-07 JESSE MENG - 2D DECOMPOSITION -!! 22-09-22 Li(Kate) Zhang - Add new aerosols fields for UFS-Aerosols -!! 23-03-22 WM LEWIS: ADDED EFFRI, EFFRS, EFFRL +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2014-12-01 | WM LEWIS | ADDED ADDNL VARIABLES FOR SAT OUTPUT +!> 2000-01-06 | TUCCILLO | ORIGINAL +!> 2001-10-25 | H CHUANG | MODIFIED TO PROCESS HYBRID MODEL OUTPUT +!> 2002-06-19 | MIKE BALDWIN | WRF VERSION +!> 2011-12-16 | SARAH LU | MODIFIED TO INITIALIZE AEROSOL FIELDS +!> 2012-01-07 | SARAH LU | MODIFIED TO INITIALIZE AIR DENSITY/LAYER THICKNESS +!> 2021-07-07 | JESSE MENG | 2D DECOMPOSITION +!> 2022-09-22 | Li(Kate) Zhang | Add new aerosols fields for UFS-Aerosols +!> 2023-03-22 | WM LEWIS | ADDED EFFRI, EFFRS, EFFRL !! !! USAGE: CALL MPI_FIRST !! INPUT ARGUMENT LIST: @@ -37,6 +39,9 @@ !! MACHINE : IBM RS/6000 SP !! !@PROCESS NOEXTCHK +!----------------------------------------------------------------------- +!> @brief MPI_FIRST() Sets up message passing info (MPI). +!----------------------------------------------------------------------- SUBROUTINE MPI_FIRST() ! @@ -374,6 +379,12 @@ SUBROUTINE MPI_FIRST() ! end +!---------------------------------------------------------------------- +!> @brief fullpole() +!> +!> @param[inout] a real +!> @param[inout] rpoles real +!---------------------------------------------------------------------- subroutine fullpole(a,rpoles) diff --git a/sorc/ncep_post.fd/PMICRPH.f b/sorc/ncep_post.fd/PMICRPH.f index 47feb1a8c..10d7813ae 100644 --- a/sorc/ncep_post.fd/PMICRPH.f +++ b/sorc/ncep_post.fd/PMICRPH.f @@ -1,4 +1,8 @@ - module PMICRPH_mod +!> @file +!> @brief PMICRPH_mod assigns constants related to microphysics +!> (computed in paramr.f) +!----------------------------------------------------------------- + module PMICRPH_mod ! ----- Constants related to microphysics ! -- computed in paramr.f @@ -8,27 +12,128 @@ module PMICRPH_mod implicit none - REAL PI,RON,SON,GON,BR,BS,BG,DRAIN,DSNOW, & - DGRAUPEL,RON2,DIACE_min, & - drain2,dsnow2, & - TOPR,TOPS,TOPG,ARAIN,ASNOW,AGRAUPEL, & - TNO,ATO,XSMAX,BERC1,BP,AP,CNP,FRD1,FRA1,EFIS, & - EFIR,EFSR,EFCS,EFGI,EFGC,EFGR,EFGS,EFCR,ACRIS, & - BACRIS,CIR,CIRF,cpiacr0,cpiacr1,cpiacr2,cpiacr3, & - FRAIN,FSNOW,FGRAUPEL,CSR,CRS, & - ACRCS,BACRCS,RMC,ACRLS,BACLS,ACRCG,BACRCG,ACRIG, & - BACRIG,CRG,CSG,DEPG1,DEPG2,DEPG3,DEPG4,DEPS1, & - DEPS2,DEPS3,DEPS4,ACRCR,BACRCR,DEPR1,DEPR2,DEPR3, & - DEPR4,PSM1,PSM2,PSM3,PSM4,PGM1,PGM2,PGM3,PGM4, & - CW,HGFR,XM01,CNP1,DICE,C1,ALPHA1,BETA1,GAMMA3 & + REAL PI !< Mathematical contant pi (3.14159...) + REAL RON !< slope intercept for rain (original M-P value) + REAL SON !< slope intercept for snow + REAL GON !< slope intercept for graupel (original M-P value) + REAL BR !< exponent for rain in fall speed (V(D)=A*D^B) + REAL BS !< exponent for snow in fall speed (V(D)=A*D^B) + REAL BG !< exponent for graupel in fall speed (V(D)=A*D^B) + REAL DRAIN !< density of rain + REAL DSNOW !< density of snow + REAL DGRAUPEL !< density of graupel + REAL RON2 !< slope intercept for rain (modified) + REAL DIACE_min !< minimum mass of ice + REAL drain2 !< square of rain density + REAL dsnow2 !< square of snow density + REAL TOPR !< top of slope (numerator Marshall-Palmer slope parameter) for rain + REAL TOPS !< top of slope (numerator Marshall-Palmer slope parameter) for snow + REAL TOPG !< top of slope (numerator Marshall-Palmer slope parameter) for graupel + REAL ARAIN !< A in fall speed for rain + REAL ASNOW !< A in fall speed for snow + REAL AGRAUPEL !< A in fall speed for graupel + REAL TNO !< constant in Cooper and Fletcher curves + REAL ATO !< constant in Cooper Fletcher curves (not used) + REAL XSMAX !< autoconversion to snow + REAL BERC1 !< constant for Bergeron process (not used) + REAL BP !< B Prime (B') constant for computing freezing rate of cloud droplets + REAL AP !< A Prime (A') constant for computing freezing rate of cloud droplets + REAL CNP !< constant for computing cloud drop shape parameter + REAL FRD1 !< Related to freezing of rain droplets (Lin, et al., 45) + REAL FRA1 !< Related to freezing of rain droplets (Lin, et al., 45) + REAL EFIS !< collection efficiency of cloud ice by snow + REAL EFIR !< collection efficiency of cloud ice by rain + REAL EFSR !< collection efficiency of snow by rain + REAL EFCS !< collection efficiency of cloud water by snow + REAL EFGI !< collection efficiency of cloud ice by graupel + REAL EFGC !< collection efficiency of cloud water by graupel + REAL EFGR !< collection efficiency of graupel by rain + REAL EFGS !< collection efficiency of graupel by snow + REAL EFCR !< collection efficiency of cloud water by rain + REAL ACRIS !< Related to collection of cloud ice by snow + REAL BACRIS !< Related to collection of cloud ice by snow + REAL CIR !< collection of cloud ice by rain + REAL CIRF !< rate at which rain is frozen by collision with cloud ice + REAL cpiacr0 !< constant for PIACR (not used) + REAL cpiacr1 !< constant for PIACR (not used) + REAL cpiacr2 !< constant for PIACR (not used) + REAL cpiacr3 !< constant for PIACR (not used) + REAL FRAIN !< mean fall speed of rain + REAL FSNOW !< mean fall speed of snow + REAL FGRAUPEL !< mean fall speed of graupel + REAL CSR !< collection of snow by rain + REAL CRS !< collection of rain by snow + REAL ACRCS !< Related to collection of cloud water by snow using old particle size distribution + REAL BACRCS !< Related to collection of cloud water by snow using old particle size distribution + REAL RMC !< constant - no longer used/supported + REAL ACRLS !< Related to loss of snow due to collision with cloud water + REAL BACLS !< Related to loss of snow due to collision with cloud water + REAL ACRCG !< Related to collection of cloud water by graupel using old particle size distribution + REAL BACRCG !< Related to collection of cloud water by graupel using old particle size distribution + REAL ACRIG !< Related to collection of cloud ice by graupel + REAL BACRIG !< Related to collection of cloud ice by graupel + REAL CRG !< collection of rain by graupel + REAL CSG !< collection of snow by graupel + REAL DEPG1 !< Depositional growth of graupel + REAL DEPG2 !< Depositional growth of graupel + REAL DEPG3 !< Depositional growth of graupel + REAL DEPG4 !< Depositional growth of graupel + REAL DEPS1 !< Depositional growth of snow + REAL DEPS2 !< Depositional growth of snow + REAL DEPS3 !< Depositional growth of snow + REAL DEPS4 !< Depositional growth of snow + REAL ACRCR !< Related to collection of cloud water by rain + REAL BACRCR !< Related to collection of cloud water by rain + REAL DEPR1 !< Depositional growth of rain + REAL DEPR2 !< Depositional growth of rain + REAL DEPR3 !< Depositional growth of rain + REAL DEPR4 !< Depositional growth of rain + REAL PSM1 !< Related to melting of snow + REAL PSM2 !< Related to melting of snow + REAL PSM3 !< Related to melting of snow + REAL PSM4 !< Related to melting of snow + REAL PGM1 !< Related to melting of graupel + REAL PGM2 !< Related to melting of graupel + REAL PGM3 !< Related to melting of graupel + REAL PGM4 !< Related to melting of graupel + REAL CW !< constant for enhanced melting of graupel by rain and cloud water + REAL HGFR !< constant for homogeneous freezing of cloud droplets + REAL XM01 !< constant used to calculate the minimum mass of ice + REAL CNP1 !< Not used/no longer supported + REAL DICE !< density of ice + REAL C1 !< aggregation of cloud ice + REAL ALPHA1 !< constant used to calculate collection of snow by rain + REAL BETA1 !< constant used to calculate collection of snow by rain + REAL GAMMA3 !< constant used to calculate collection of snow by rain !jmb--removed INT0 frm the real declaration since declared integer blo - ,CONST1A,CONST1B,XM0S,XR0S,XM0G & - ,ACRCS_new,BACRCS_new,ACRCG_new,BACRCG_new & - ,const_ns1,const_ns2,const_ng1,const_ng2,xr0g & - ,r1,slor_r1,slos_r1,slog_r1,rho_not & - ,qck1,qcth,ron_min,qr0,delqr0,const1r,const2r & - ,xnu + REAL CONST1A !< constant for variable ‘son’ (slope intercept for snow) + REAL CONST1B !< constant for variable ‘son’ (slope intercept for snow) + REAL XM0S !< minimum mass of snow + REAL XR0S !< smallest size of snow + REAL XM0G !< minimum mass of graupel + REAL ACRCS_new !< Related to collection of cloud water by snow using new particle size distribution for snow (Roy R, Jul 99) + REAL BACRCS_new !< Related to collection of cloud water by snow using new particle size distribution for snow (Roy R, Jul 99) + REAL ACRCG_new !< Related to collection of cloud water by graupel using new particle size distribution for graupel (Roy R, Jul 99) + REAL BACRCG_new !< Related to collection of cloud water by graupel using new particle size distribution for graupel (Roy R, Jul 99) + REAL const_ns1 !< constant for variable ‘son’ (slope intercept for snow) + REAL const_ns2 !< constant for variable ‘son’ (slope intercept for snow) + REAL const_ng1 !< constant for variable ‘gon’ (slope intercept for graupel) + REAL const_ng2 !< constant for variable ‘gon’ (slope intercept for graupel) + REAL xr0g !< smallest size of graupel + REAL r1 !< minimum value for hydrometeor mixing ratios + REAL slor_r1 !< inverse slope value when rain mixing ratio is small + REAL slos_r1 !< inverse slope value when snow mixing ratio is small + REAL slog_r1 !< inverse slope value when graupel mixing ratio is small + REAL rho_not !< Standard density (p/RT, values from ICAO standard atmosphere) used in computing density correction to fall speeds + REAL qck1 !< Constant - no longer used/supported + REAL qcth !< Constant - no longer used/supported + REAL ron_min !< minimum allowed value for ron + REAL qr0 !< center value of rain mixing ratio for transition from M-P slope-intercept for drizzle formed by a collision-coalescence process to M-P slope-intercept for traditional rain + REAL delqr0 !< governs the sharpness of qr0 transition: small delt_qr0 makes the transition sharper + REAL const1r !< constant for variable ‘ron’ (slope intercept for rain) + REAL const2r !< constant for variable ‘ron’ (slope intercept for rain) + REAL xnu !< cloud drop shape parameter - INTEGER INT0 + INTEGER INT0 !< constant for Bergeron process - end module PMICRPH_mod + end module PMICRPH_mod \ No newline at end of file diff --git a/sorc/ncep_post.fd/PROCESS.f b/sorc/ncep_post.fd/PROCESS.f index 1aa722be7..0ce8bc0a9 100644 --- a/sorc/ncep_post.fd/PROCESS.f +++ b/sorc/ncep_post.fd/PROCESS.f @@ -26,6 +26,15 @@ !> 2023-01-24 | Sam Trahan | run IFI and compute its runtime !> !> @author Russ Treadon W/NP2 @date 1992-12-21 +!---------------------------------------------------------------------------- +!> process() is a driver for major post routines. +!> +!> @param[in] kth integer Number of isentropic levels. +!> @param[in] kpv integer Number of potential vorticity levels. +!> @param[in] th real Isentropic levels (K). +!> @param[in] pv real Potential vorticity (PV units). +!> @param[in] iostatusD3D integer No longer used/supported. +!> SUBROUTINE PROCESS(kth,kpv,th,pv,iostatusD3D) ! !---------------------------------------------------------------------------- diff --git a/sorc/ncep_post.fd/SELECT_CHANNELS.f b/sorc/ncep_post.fd/SELECT_CHANNELS.f index 11853fd75..5d5db0366 100644 --- a/sorc/ncep_post.fd/SELECT_CHANNELS.f +++ b/sorc/ncep_post.fd/SELECT_CHANNELS.f @@ -10,17 +10,18 @@ !> the "channels" array are stored in the structure defining !> the channel object. !> -!> @param[inout] channelinfo structure defining channel object. -!> @param[in] nchannels number of channels for sensor. +!> @param[inout] channelinfo Structure defining channel object. +!> @param[in] nchannels Number of channels for sensor. !> @param[in] channels. !> !> @author HWRF @date 2012-09-27 !---------------------------------------------------------------------- -!> @brief select_channels() verifies channel information. +!> @brief select_channels() verifies channel information; no longer +!> used. Replaced by select_channels_L(). !> !> @param[inout] channelinfo Structure defining channel object. !> @param[in] nchannels integer Number of channels for sensor. -!> @param[in] channels integer array Holds infomation on available channels. +!> @param[in] channels integer array Holds information on available channels. !> subroutine SELECT_CHANNELS(channelinfo,nchannels,channels) @@ -52,6 +53,19 @@ subroutine SELECT_CHANNELS(channelinfo,nchannels,channels) end subroutine SELECT_CHANNELS +!----------------------------------------------------------------------- +!> @brief select_channels_L() verifies channel information. +!> +!> @param[inout] channelinfo Structure defining channel object. +!> @param[in] nchannels integer Number of channels for sensor. +!> @param[in] channels integer array Holds information on available channels. +!> @param L integer array with the same size as the number of channels; +!> if a channel c is requested for output, L[c]==1; +!> if the channel is not requested for output, then L[c]==0. +!> @param igot integer If > 0, then at least 1 channel was requested for that variable, +!> if 0 then no channels were selected for that variable. +!----------------------------------------------------------------------- + subroutine SELECT_CHANNELS_L(channelinfo,nchannels,channels,L,igot) ! 2014-12-09: WM LEWIS ADDED THIS SUBROUTINE TO SELECT CHANNELS diff --git a/sorc/ncep_post.fd/SMOOTH.f b/sorc/ncep_post.fd/SMOOTH.f index 3e1e3d670..0bf1f0595 100644 --- a/sorc/ncep_post.fd/SMOOTH.f +++ b/sorc/ncep_post.fd/SMOOTH.f @@ -19,7 +19,7 @@ !> @param[in] HOLD Real array HOLD(IX,2) Holding the value for field. !> @param[in] IX Integer X Coordinates of field. !> @param[in] IY Integer Y Coordinates of field. -!> @param[in] SMTH Real. +!> @param[in] SMTH Real Smoothing operator. !> !> ### Program history log: !> Date | Programmer | Comments @@ -37,7 +37,7 @@ !> @param[in] HOLD Real array HOLD(IX,2) Holding the value for field. !> @param[in] IX Integer X Coordinates of field. !> @param[in] IY Integer Y Coordinates of field. -!> @param[in] SMTH Real. +!> @param[in] SMTH Real Smoothing operator. !> SUBROUTINE SMOOTH (FIELD,HOLD,IX,IY,SMTH) @@ -118,7 +118,7 @@ SUBROUTINE SMOOTH (FIELD,HOLD,IX,IY,SMTH) !> @param[in] HOLD Real array HOLD(IX,2) Holding the value for field. !> @param[in] IX Integer X Coordinates of field. !> @param[in] IY Integer Y Coordinates of field. -!> @param[in] SMTH Real. +!> @param[in] SMTH Real Smoothing operator. !> !> ### Program history log: !> Date | Programmer | Comments diff --git a/sorc/ncep_post.fd/WRFPOST.f b/sorc/ncep_post.fd/WRFPOST.f index 43df770a9..8c7155449 100644 --- a/sorc/ncep_post.fd/WRFPOST.f +++ b/sorc/ncep_post.fd/WRFPOST.f @@ -1,5 +1,6 @@ !> @file !> @brief wrfpost() drives the external wrf post processor. +!> @return wrfpost !> !> ### Program history log: !> Date | Programmer | Comments @@ -36,6 +37,9 @@ ! and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model. !> 2023-05-20 | Rahul Mahajan | Bug fix for fileNameFlat as namelist configurable !> @author Mike Bladwin NSSL/SPC @date 2002-06-18 +!--------------------------------------------------------------------- +!> @return wrfpost +!--------------------------------------------------------------------- PROGRAM WRFPOST ! @@ -201,7 +205,7 @@ PROGRAM WRFPOST open(5,file='itag') read(5,nml=model_inputs,iostat=itag_ierr,err=888) 888 if (itag_ierr /= 0) then - print*,'Incorrect namelist variable(s) found in the itag file,stopping!' + print*,'Incorrect namelist variable(s) found in the itag file,stopping.' stop endif if (me == 0) write(6, model_inputs) diff --git a/sorc/ncep_post.fd/xml_perl_data.f b/sorc/ncep_post.fd/xml_perl_data.f index a797cadcd..afe410c7e 100644 --- a/sorc/ncep_post.fd/xml_perl_data.f +++ b/sorc/ncep_post.fd/xml_perl_data.f @@ -9,7 +9,22 @@ module xml_perl_data ! July, 2016 J. Carley Clean up prints ! !------------------------------------------------------------------------ +!> @defgroup xml_perl_data_mod Sets parameters that are used to read in +!> Perl XML processed flat file and handle parameter marshalling for +!> existing POST program. +! implicit none +! +!> @ingroup xml_perl_data_mod +!> @{ Parameters that are used to read in Perl XML processed flat file +!> and handle parameter marshalling for existing POST program. + integer :: NFCST,NBC,LIST,IOUT,NTSTM, & + NRADS,NRADL,NDDAMP,IDTAD,NBOCO,NSHDE,NCP,IMDLTY +!> @} + +!> @ingroup xml_perl_data_mod +!> @{ Parameters that are used to read in Perl XML processed flat file +!> and handle parameter marshalling for existing POST program. type param_t integer :: post_avblfldidx=-9999 character(len=80) :: shortname='' @@ -20,12 +35,12 @@ module xml_perl_data character(len=10) :: table_info='' character(len=80) :: stats_proc='' character(len=80) :: fixed_sfc1_type='' - integer, dimension(:), pointer :: scale_fact_fixed_sfc1 => null() - real, dimension(:), pointer :: level => null() - character(len=80) :: fixed_sfc2_type='' - integer, dimension(:), pointer :: scale_fact_fixed_sfc2 => null() - real, dimension(:), pointer :: level2 => null() - character(len=80) :: aerosol_type='' + integer, dimension(:), pointer :: scale_fact_fixed_sfc1 => null() + real, dimension(:), pointer :: level => null() + character(len=80) :: fixed_sfc2_type='' + integer, dimension(:), pointer :: scale_fact_fixed_sfc2 => null() + real, dimension(:), pointer :: level2 => null() + character(len=80) :: aerosol_type='' character(len=80) :: typ_intvl_size='' integer :: scale_fact_1st_size=0 real :: scale_val_1st_size=0.0 @@ -36,7 +51,7 @@ module xml_perl_data real :: scale_val_1st_wvlen=0.0 integer :: scale_fact_2nd_wvlen=0 real :: scale_val_2nd_wvlen=0.0 - real, dimension(:), pointer :: scale => null() + real, dimension(:), pointer :: scale => null() integer :: stat_miss_val=0 integer :: leng_time_range_prev=0 integer :: time_inc_betwn_succ_fld=0 @@ -62,18 +77,25 @@ module xml_perl_data character(len=30) :: order_of_sptdiff='1st_ord_sptdiff' character(len=20) :: field_datatype='' character(len=30) :: comprs_type='' +!> @} +!> @ingroup xml_perl_data_mod +!> @{ Parameters that are used to read in Perl XML processed flat file +!> and handle parameter marshalling for existing POST program. character(len=50) :: type_ens_fcst='' character(len=50) :: type_derived_fcst='' type(param_t), dimension(:), pointer :: param => null() end type paramset_t - +!> @} +!> @ingroup xml_perl_data_mod +!> @{ Parameters that are used to read in Perl XML processed flat file +!> and handle parameter marshalling for existing POST program. type post_avblfld_t type(param_t), dimension(:), pointer :: param => null() end type post_avblfld_t type (paramset_t), dimension(:), pointer :: paramset type (post_avblfld_t),save :: post_avblflds - +!> @} contains subroutine read_postxconfig() @@ -308,4 +330,3 @@ subroutine filter_char_inp (inpchar) end subroutine filter_char_inp end module -