diff --git a/cam_diagnostics/tropopause_diagnostics.F90 b/cam_diagnostics/tropopause_diagnostics.F90
index 5c750e6c..39a428b7 100644
--- a/cam_diagnostics/tropopause_diagnostics.F90
+++ b/cam_diagnostics/tropopause_diagnostics.F90
@@ -28,38 +28,43 @@ subroutine tropopause_diagnostics_init(errmsg, errflg)
errflg = 0
! Define the output fields.
+
+ ! Primary (Lapse rate) + backup (climatology) method
call history_add_field('TROP_P', 'tropopause_air_pressure', horiz_only, 'avg', 'Pa')
call history_add_field('TROP_T', 'tropopause_air_temperature', horiz_only, 'avg', 'K' )
- call history_add_field('TROP_Z', 'tropopause_altitude', horiz_only, 'avg', 'm' )
- call history_add_field('TROP_DZ', 'tropopause_altitude_relative', 'lev', 'avg', 'm')
- call history_add_field('TROP_PD', 'probability_distribution_of_model_level_number_at_tropopause', 'lev', 'avg', 'probability')
+ call history_add_field('TROP_Z', 'tropopause_geopotential_height_wrt_surface', horiz_only, 'avg', 'm' )
+ call history_add_field('TROP_DZ', 'geopotential_height_difference_between_atmosphere_layer_and_tropopause', 'lev', 'avg', 'm')
+ call history_add_field('TROP_PD', 'probability_distribution_of_tropopause_vertical_layer_index', 'lev', 'avg', 'probability')
call history_add_field('TROP_FD', 'tropopause_found', horiz_only, 'avg', 'probability')
- call history_add_field('TROPP_P', 'tropopause_air_pressure_assuming_lapse_rate', horiz_only, 'avg', 'Pa')
- call history_add_field('TROPP_T', 'tropopause_air_temperature_assuming_lapse_rate', horiz_only, 'avg', 'K' )
- call history_add_field('TROPP_Z', 'tropopause_altitude_assuming_lapse_rate', horiz_only, 'avg', 'm' )
- call history_add_field('TROPP_DZ', 'tropopause_altitude_relative_assuming_lapse_rate', 'lev', 'avg', 'm')
- call history_add_field('TROPP_PD', 'probability_distribution_of_model_level_number_at_tropopause_assuming_lapse_rate', 'lev', 'avg', 'probability')
- call history_add_field('TROPP_FD', 'tropopause_found_assuming_lapse_rate', horiz_only, 'avg', 'probability')
-
- call history_add_field('TROPF_P', 'tropopause_air_pressure_assuming_cold_point', horiz_only, 'avg', 'Pa')
- call history_add_field('TROPF_T', 'tropopause_air_temperature_assuming_cold_point', horiz_only, 'avg', 'K' )
- call history_add_field('TROPF_Z', 'tropopause_altitude_assuming_cold_point', horiz_only, 'avg', 'm' )
- call history_add_field('TROPF_DZ', 'tropopause_altitude_relative_assuming_cold_point', 'lev', 'avg', 'm')
- call history_add_field('TROPF_PD', 'probability_distribution_of_model_level_number_at_tropopause_assuming_cold_point', 'lev', 'avg', 'probability')
- call history_add_field('TROPF_FD', 'tropopause_found_assuming_cold_point', horiz_only, 'avg', 'probability')
-
- call history_add_field('TROPC_P', 'tropopause_air_pressure_assuming_climatology', horiz_only, 'avg', 'Pa')
- call history_add_field('TROPC_T', 'tropopause_air_temperature_assuming_climatology', horiz_only, 'avg', 'K' )
- call history_add_field('TROPC_Z', 'tropopause_altitude_assuming_climatology', horiz_only, 'avg', 'm' )
- call history_add_field('TROPC_DZ', 'tropopause_altitude_relative_assuming_climatology', 'lev', 'avg', 'm')
- call history_add_field('TROPC_PD', 'probability_distribution_of_model_level_number_at_tropopause_assuming_climatology', 'lev', 'avg', 'probability')
- call history_add_field('TROPC_FD', 'tropopause_found_assuming_cold_point', horiz_only, 'avg', 'probability')
+ ! Primary (Lapse rate) only
+ call history_add_field('TROPP_P', 'tropopause_air_pressure_from_lapse_rate_method', horiz_only, 'avg', 'Pa')
+ call history_add_field('TROPP_T', 'tropopause_air_temperature_from_lapse_rate_method', horiz_only, 'avg', 'K' )
+ call history_add_field('TROPP_Z', 'tropopause_geopotential_height_wrt_surface_from_lapse_rate_method', horiz_only, 'avg', 'm' )
+ call history_add_field('TROPP_DZ', 'geopotential_height_difference_between_atmosphere_layer_and_tropopause_from_lapse_rate_method', 'lev', 'avg', 'm')
+ call history_add_field('TROPP_PD', 'probability_distribution_of_tropopause_vertical_layer_index_from_lapse_rate_method', 'lev', 'avg', 'probability')
+ call history_add_field('TROPP_FD', 'tropopause_found_from_lapse_rate_method', horiz_only, 'avg', 'probability')
+
+ ! Cold point (CPP) only
+ call history_add_field('TROPF_P', 'tropopause_air_pressure_from_cold_point_method', horiz_only, 'avg', 'Pa')
+ call history_add_field('TROPF_T', 'tropopause_air_temperature_from_cold_point_method', horiz_only, 'avg', 'K' )
+ call history_add_field('TROPF_Z', 'tropopause_geopotential_height_wrt_surface_from_cold_point_method', horiz_only, 'avg', 'm' )
+ call history_add_field('TROPF_DZ', 'geopotential_height_difference_between_atmosphere_layer_and_tropopause_from_cold_point_method', 'lev', 'avg', 'm')
+ call history_add_field('TROPF_PD', 'probability_distribution_of_tropopause_vertical_layer_index_from_cold_point_method', 'lev', 'avg', 'probability')
+ call history_add_field('TROPF_FD', 'tropopause_found_from_cold_point_method', horiz_only, 'avg', 'probability')
+
+ ! Climatology only - will never fail
+ call history_add_field('TROPC_P', 'tropopause_air_pressure_from_climatological_method', horiz_only, 'avg', 'Pa')
+ call history_add_field('TROPC_T', 'tropopause_air_temperature_from_climatological_method', horiz_only, 'avg', 'K' )
+ call history_add_field('TROPC_Z', 'tropopause_geopotential_height_wrt_surface_from_climatological_method', horiz_only, 'avg', 'm' )
+ call history_add_field('TROPC_DZ', 'geopotential_height_difference_between_atmosphere_layer_and_tropopause_from_climatological_method', 'lev', 'avg', 'm')
+ call history_add_field('TROPC_PD', 'probability_distribution_of_tropopause_vertical_layer_index_from_climatological_method', 'lev', 'avg', 'probability')
+ call history_add_field('TROPC_FD', 'tropopause_found_from_climatological_method', horiz_only, 'avg', 'probability')
! Hybridstobie output fields
- call history_add_field('hstobie_trop', 'lower_bound_of_model_level_number_for_stratospheric_chemistry', 'lev', 'inst', 'fraction of model time')
- call history_add_field('hstobie_linoz', 'lower_bound_of_model_level_number_for_linoz_chemistry', 'lev', 'inst', 'fraction of model time')
- call history_add_field('hstobie_tropop', 'model_level_number_at_tropopause_for_chemistry', 'lev', 'inst', 'fraction of model time')
+ call history_add_field('hstobie_trop', 'vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_stratospheric_chemistry', 'lev', 'inst', 'fraction of model time')
+ call history_add_field('hstobie_linoz', 'vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_linearized_ozone_chemistry', 'lev', 'inst', 'fraction of model time')
+ call history_add_field('hstobie_tropop', 'tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method_for_chemistry', 'lev', 'inst', 'fraction of model time')
end subroutine tropopause_diagnostics_init
diff --git a/cam_diagnostics/tropopause_diagnostics.meta b/cam_diagnostics/tropopause_diagnostics.meta
index a400f51c..1472bcca 100644
--- a/cam_diagnostics/tropopause_diagnostics.meta
+++ b/cam_diagnostics/tropopause_diagnostics.meta
@@ -40,8 +40,8 @@
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = in
[ tropLev ]
- standard_name = model_level_number_at_tropopause
- units = 1
+ standard_name = tropopause_vertical_layer_index
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = in
@@ -58,122 +58,122 @@
dimensions = (horizontal_loop_extent)
intent = in
[ tropZ ]
- standard_name = tropopause_altitude
+ standard_name = tropopause_geopotential_height_wrt_surface
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropLev_twmo ]
- standard_name = model_level_number_at_tropopause_assuming_lapse_rate
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_lapse_rate_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = in
[ tropP_twmo ]
- standard_name = tropopause_air_pressure_assuming_lapse_rate
+ standard_name = tropopause_air_pressure_from_lapse_rate_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropT_twmo ]
- standard_name = tropopause_air_temperature_assuming_lapse_rate
+ standard_name = tropopause_air_temperature_from_lapse_rate_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropZ_twmo ]
- standard_name = tropopause_altitude_assuming_lapse_rate
+ standard_name = tropopause_geopotential_height_wrt_surface_from_lapse_rate_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropLev_clim ]
- standard_name = model_level_number_at_tropopause_assuming_climatology
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_climatological_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = in
[ tropP_clim ]
- standard_name = tropopause_air_pressure_assuming_climatology
+ standard_name = tropopause_air_pressure_from_climatological_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropT_clim ]
- standard_name = tropopause_air_temperature_assuming_climatology
+ standard_name = tropopause_air_temperature_from_climatological_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropZ_clim ]
- standard_name = tropopause_altitude_assuming_climatology
+ standard_name = tropopause_geopotential_height_wrt_surface_from_climatological_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropLev_hybstob ]
- standard_name = model_level_number_at_tropopause_assuming_hybridstobie_and_climatology
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = in
[ tropP_hybstob ]
- standard_name = tropopause_air_pressure_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_air_pressure_from_hybrid_stobie_linoz_with_climatological_backup_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropT_hybstob ]
- standard_name = tropopause_air_temperature_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_air_temperature_from_hybrid_stobie_linoz_with_climatological_backup_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropZ_hybstob ]
- standard_name = tropopause_altitude_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_geopotential_height_wrt_surface_from_hybrid_stobie_linoz_with_climatological_backup_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropLev_cpp ]
- standard_name = model_level_number_at_tropopause_assuming_cold_point
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_cold_point_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = in
[ tropP_cpp ]
- standard_name = tropopause_air_pressure_assuming_cold_point
+ standard_name = tropopause_air_pressure_from_cold_point_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropT_cpp ]
- standard_name = tropopause_air_temperature_assuming_cold_point
+ standard_name = tropopause_air_temperature_from_cold_point_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ tropZ_cpp ]
- standard_name = tropopause_altitude_assuming_cold_point
+ standard_name = tropopause_geopotential_height_wrt_surface_from_cold_point_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = in
[ hstobie_trop ]
- standard_name = lower_bound_of_model_level_number_for_stratospheric_chemistry
- units = 1
+ standard_name = vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_stratospheric_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = in
[ hstobie_linoz ]
- standard_name = lower_bound_of_model_level_number_for_linoz_chemistry
- units = 1
+ standard_name = vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_linearized_ozone_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = in
[ hstobie_tropop ]
- standard_name = model_level_number_at_tropopause_for_chemistry
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method_for_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = in
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 5ad154a9..b5219f3f 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -4,7 +4,7 @@ Tag name:
Originator(s): jimmielin
Date: August 22, 2024
One-line Summary: tropopause_find CCPP-ization
-Github PR URL:
+Github PR URL: https://github.com/ESCOMP/atmospheric_physics/pull/112
This PR fixes the following NCAR/atmospheric_physics Github issues:
- Creates the CCPP interface for the tropopause_find routine
@@ -37,8 +37,7 @@ M doc/NamesNotInDictionary.txt
List and Describe any test failures: N/A
-Summarize any changes to answers:
-Difference in
+Summarize any changes to answers: none
===============================================================
diff --git a/suite_cam7.xml b/suite_cam7.xml
index 1cb64eb3..5fea991f 100644
--- a/suite_cam7.xml
+++ b/suite_cam7.xml
@@ -9,4 +9,11 @@
qneg
geopotential_temp
+
+
+
+
+ tropopause_find
+ tropopause_diagnostics
+
diff --git a/tropopause_find/tropopause_find.F90 b/tropopause_find/tropopause_find.F90
index 3a7189f7..aa0a32da 100644
--- a/tropopause_find/tropopause_find.F90
+++ b/tropopause_find/tropopause_find.F90
@@ -5,12 +5,6 @@
! when the original algorithm fails. The tropopause temperature and
! pressure are determined and can be output to the history file.
!
-! These routines are based upon code in the WACCM chemistry module
-! including mo_tropoause.F90 and llnl_set_chem_trop.F90. The code
-! for the Reichler et al. [2003] algorithm is from:
-!
-! http://www.gfdl.noaa.gov/~tjr/TROPO/tropocode.htm
-!
! Author: Charles Bardeen
! Created: April, 2009
!
@@ -42,10 +36,10 @@ module tropopause_find
save
- ! These parameters define and enumeration to be used to define the primary
+ ! These parameters define an enumeration to be used to define the primary
! and backup algorithms to be used with the tropopause_find() method. The
! backup algorithm is meant to provide a solution when the primary algorithm
- ! fail. The algorithms that can't fail are: TROP_ALG_ANALYTIC, TROP_ALG_CLIMATE
+ ! fails. The algorithms that can't fail are: TROP_ALG_ANALYTIC, TROP_ALG_CLIMATE
! and TROP_ALG_STOBIE.
integer, parameter :: TROP_ALG_NONE = 1 ! Don't evaluate
integer, parameter :: TROP_ALG_ANALYTIC = 2 ! Analytic Expression
@@ -91,10 +85,6 @@ module tropopause_find
contains
!================================================================================================
- ! This routine is called during intialization and must be called before the
- ! other methods in this module can be used. Its main tasks are to read in the
- ! climatology from a file and to define the output fields. Much of this code
- ! is taken from mo_tropopause.
!> \section arg_table_tropopause_find_init Argument Table
!! \htmlinclude tropopause_find_init.html
subroutine tropopause_find_init(cappa, rair, gravit, pi, errmsg, errflg)
@@ -131,7 +121,7 @@ subroutine tropopause_find_run(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
tropLev, tropP, tropT, tropZ, & ! Default primary+backup (twmo+climate)
tropLev_twmo, tropP_twmo, tropT_twmo, tropZ_twmo, & ! Primary only (twmo)
tropLev_clim, tropP_clim, tropT_clim, tropZ_clim, & ! Climate-only
- tropLev_hybstob, tropP_hybstob, tropT_hybstob, tropZ_hybstob, & ! Hybridstobie + climate backup
+ tropLev_hybstob, tropP_hybstob, tropT_hybstob, tropZ_hybstob, & ! Hybridstobie + climate backup
tropLev_cpp, tropP_cpp, tropT_cpp, tropZ_cpp, & ! Cold point only
tropLev_chem, tropP_chem, tropT_chem, tropZ_chem, & ! Chemical tropopause only
hstobie_trop, hstobie_linoz, hstobie_tropop, & ! Hybridstobie only for chemistry diagnostics
@@ -140,14 +130,14 @@ subroutine tropopause_find_run(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
- real(kind_phys), intent(in) :: calday ! Day of year including fraction from get_curr_calday
+ real(kind_phys), intent(in) :: calday ! Day of year including fraction of day
! Climatological tropopause pressures (Pa), (pcols,ntimes=12).
! Remark: Not chunkized, subsetted to chunk for backwards compatibility with CAM
@@ -362,14 +352,14 @@ subroutine tropopause_findWithBackup(ncol, pver, lat, pint, pmid, t, zi, zm, phi
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
- real(kind_phys), intent(in) :: calday ! Day of year including fraction from get_curr_calday
+ real(kind_phys), intent(in) :: calday ! Day of year including fraction of day
! Climatological tropopause pressures (Pa), (pcols,ntimes=12).
! Remark: Not chunkized, subsetted to chunk for backwards compatibility with CAM
@@ -420,7 +410,6 @@ subroutine tropopause_findWithBackup(ncol, pver, lat, pint, pmid, t, zi, zm, phi
errmsg=errmsg, errflg=errflg)
end if
- return
end subroutine tropopause_findWithBackup
! Call the appropriate tropopause detection routine based upon the algorithm
@@ -437,14 +426,14 @@ subroutine tropopause_findUsing(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
- real(kind_phys), intent(in) :: calday ! Day of year including fraction from get_curr_calday
+ real(kind_phys), intent(in) :: calday ! Day of year including fraction of day
! Climatological tropopause pressures (Pa), (pcols,ntimes=12).
! Remark: Not chunkized, subsetted to chunk for backwards compatibility with CAM
@@ -512,7 +501,6 @@ subroutine tropopause_findUsing(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
write(errmsg,*) 'tropopause: Invalid detection algorithm (', algorithm, ') specified.'
end select
- return
end subroutine tropopause_findUsing
! This analytic expression closely matches the mean tropopause determined
@@ -523,11 +511,11 @@ subroutine tropopause_analytic(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(inout) :: tropLev(:) ! tropopause level index
real(kind_phys), optional, intent(inout) :: tropP(:) ! tropopause pressure (Pa)
@@ -568,13 +556,11 @@ subroutine tropopause_analytic(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end if
end if
end do
+
end subroutine tropopause_analytic
! Read the tropopause pressure in from a file containging a climatology. The
! data is interpolated to the current dat of year and latitude.
- !
- ! NOTE: The data is read in during tropopause_init and stored in the module
- ! variable trop
subroutine tropopause_climate(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
calday, tropp_p_loc, tropp_days, tropLev, tropP, tropT, tropZ)
@@ -584,11 +570,11 @@ subroutine tropopause_climate(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
- real(kind_phys), intent(in) :: calday ! Day of year including fraction from get_curr_calday
+ real(kind_phys), intent(in) :: calday ! Day of year including fraction of day
! Climatological tropopause pressures (Pa), (pcols,ntimes=12).
! Remark: Not chunkized, subsetted to chunk for backwards compatibility with CAM
@@ -674,7 +660,6 @@ subroutine tropopause_climate(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end do
end if
- return
end subroutine tropopause_climate
!-----------------------------------------------------------------------
@@ -682,7 +667,6 @@ end subroutine tropopause_climate
subroutine tropopause_hybridstobie(ncol, pver, pmid, t, zm, &
tropLev, tropP, tropT, tropZ, &
hstobie_trop, hstobie_linoz, hstobie_tropop)
- !use cam_history, only : outfld
!-----------------------------------------------------------------------
! Originally written by Philip Cameron-Smith, LLNL
@@ -700,7 +684,7 @@ subroutine tropopause_hybridstobie(ncol, pver, pmid, t, zm, &
integer, intent(in) :: pver ! Number of vertical levelserp
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
integer, intent(inout) :: tropLev(:) ! tropopause level index
real(kind_phys), optional, intent(inout) :: tropP(:) ! tropopause pressure (Pa)
@@ -787,10 +771,6 @@ subroutine tropopause_hybridstobie(ncol, pver, pmid, t, zm, &
hstobie_tropop(:,:) = trop_trop_output(:,:)
endif
- !call outfld( 'hstobie_trop', trop_output(:ncol,:), ncol, pstate%lchnk )
- !call outfld( 'hstobie_linoz', trop_linoz_output(:ncol,:), ncol, pstate%lchnk )
- !call outfld( 'hstobie_tropop', trop_trop_output(:ncol,:), ncol, pstate%lchnk )
-
end subroutine tropopause_hybridstobie
! This routine originates with Stobie at NASA Goddard, but does not have a
@@ -802,11 +782,11 @@ subroutine tropopause_stobie(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(inout) :: tropLev(:) ! tropopause level index
@@ -867,8 +847,7 @@ subroutine tropopause_stobie(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end if
end if
end do
-
- return
+
end subroutine tropopause_stobie
@@ -892,7 +871,9 @@ end subroutine tropopause_stobie
!
! determination of tropopause height from gridded temperature data
!
- ! reference: Reichler, T., M. Dameris, and R. Sausen (2003)
+ ! Reichler, T., M. Dameris, and R. Sausen (2003),
+ ! Determining the tropopause height from gridded data,
+ ! Geophys. Res. Lett., 30, 2042, doi:10.1029/2003GL018240, 20.
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine twmo(t, p, plimu, pliml, gam, trp)
@@ -999,11 +980,11 @@ subroutine tropopause_twmo(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(inout) :: tropLev(:) ! tropopause level index
real(kind_phys), optional, intent(inout) :: tropP(:) ! tropopause pressure (Pa)
@@ -1053,28 +1034,27 @@ subroutine tropopause_twmo(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end if
end do
- return
end subroutine tropopause_twmo
! This routine implements the WMO definition of the tropopause (WMO, 1957; Seidel and Randel, 2006).
+ ! Seidel, D. J., and W. J. Randel (2006),
+ ! Variability and trends in the global tropopause estimated from radiosonde data,
+ ! J. Geophys. Res., 111, D21101, doi:10.1029/2006JD007363.
+ !
! This requires that the lapse rate be less than 2 K/km for an altitude range
! of 2 km. The search starts at the surface and stops the first time this
! criteria is met.
- !
- ! NOTE: This code was modeled after the code in mo_tropopause; however, the
- ! requirement that dt be greater than 0 was removed and the check to make
- ! sure that the lapse rate is maintained for 2 km was added.
subroutine tropopause_wmo(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
tropLev, tropP, tropT, tropZ)
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(inout) :: tropLev(:) ! tropopause level index
@@ -1152,7 +1132,6 @@ subroutine tropopause_wmo(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end if
end do
- return
end subroutine tropopause_wmo
@@ -1165,11 +1144,11 @@ subroutine tropopause_cpp(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(inout) :: tropLev(:) ! tropopause level index
real(kind_phys), optional, intent(inout) :: tropP(:) ! tropopause pressure (Pa)
@@ -1275,7 +1254,6 @@ subroutine tropopause_cpp(ncol, pver, lat, pint, pmid, t, zi, zm, phis, &
end if
end do
- return
end subroutine tropopause_cpp
! Searches all the columns in the chunk and attempts to identify the "chemical"
@@ -1297,17 +1275,16 @@ subroutine tropopause_findChemTrop(ncol, pver, lat, pint, pmid, t, zi, zm, phis,
integer, intent(in) :: ncol ! Number of atmospheric columns
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: lat(:) ! Latitudes (radians)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
real(kind_phys), intent(in) :: t(:,:) ! Temperature (K)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
- real(kind_phys), intent(in) :: calday ! Day of year including fraction from get_curr_calday
+ real(kind_phys), intent(in) :: calday ! Day of year including fraction of day
! Climatological tropopause pressures (Pa), (pcols,ntimes=12).
- ! Remark: Not chunkized, subsetted to chunk for backwards compatibility with CAM
real(kind_phys), intent(in) :: tropp_p_loc(:,:)
real(kind_phys), intent(in) :: tropp_days(:) ! Day-of-year for climo data, 12
@@ -1355,7 +1332,6 @@ subroutine tropopause_findChemTrop(ncol, pver, lat, pint, pmid, t, zi, zm, phis,
errmsg=errmsg, errflg=errflg)
end if
- return
end subroutine tropopause_findChemTrop
! This routine interpolates the pressures in the physics state to
@@ -1366,7 +1342,7 @@ function tropopause_interpolateP(pver, pmid, zm, icol, tropLev, tropZ)
integer, intent(in) :: pver ! Number of vertical levels
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
integer, intent(in) :: icol ! column being processed
integer, intent(in) :: tropLev ! tropopause level index
real(kind_phys), optional, intent(in) :: tropZ ! tropopause pressure (m)
@@ -1454,10 +1430,10 @@ end function tropopause_interpolateT
! find the geopotential height at the specified tropopause pressure.
function tropopause_interpolateZ(pint, pmid, zi, zm, phis, icol, tropLev, tropP)
- real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa), pverp
+ real(kind_phys), intent(in) :: pint(:,:) ! Interface pressures (Pa)
real(kind_phys), intent(in) :: pmid(:,:) ! Midpoint pressures (Pa)
- real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m), pverp
- real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m), pver
+ real(kind_phys), intent(in) :: zi(:,:) ! Geopotential height above surface at interfaces (m)
+ real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height above surface at midpoints (m)
real(kind_phys), intent(in) :: phis(:) ! Surface geopotential (m2 s-2)
integer, intent(in) :: icol ! column being processed
integer, intent(in) :: tropLev ! tropopause level index
diff --git a/tropopause_find/tropopause_find.meta b/tropopause_find/tropopause_find.meta
index 09342c86..91fb2dea 100644
--- a/tropopause_find/tropopause_find.meta
+++ b/tropopause_find/tropopause_find.meta
@@ -118,8 +118,8 @@
dimensions = (number_of_months_in_year)
intent = in
[ tropLev ]
- standard_name = model_level_number_at_tropopause
- units = 1
+ standard_name = tropopause_vertical_layer_index
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
@@ -136,146 +136,146 @@
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ ]
- standard_name = tropopause_altitude
+ standard_name = tropopause_geopotential_height_wrt_surface
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropLev_twmo ]
- standard_name = model_level_number_at_tropopause_assuming_lapse_rate
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_lapse_rate_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
[ tropP_twmo ]
- standard_name = tropopause_air_pressure_assuming_lapse_rate
+ standard_name = tropopause_air_pressure_from_lapse_rate_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropT_twmo ]
- standard_name = tropopause_air_temperature_assuming_lapse_rate
+ standard_name = tropopause_air_temperature_from_lapse_rate_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ_twmo ]
- standard_name = tropopause_altitude_assuming_lapse_rate
+ standard_name = tropopause_geopotential_height_wrt_surface_from_lapse_rate_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropLev_clim ]
- standard_name = model_level_number_at_tropopause_assuming_climatology
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_climatological_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
[ tropP_clim ]
- standard_name = tropopause_air_pressure_assuming_climatology
+ standard_name = tropopause_air_pressure_from_climatological_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropT_clim ]
- standard_name = tropopause_air_temperature_assuming_climatology
+ standard_name = tropopause_air_temperature_from_climatological_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ_clim ]
- standard_name = tropopause_altitude_assuming_climatology
+ standard_name = tropopause_geopotential_height_wrt_surface_from_climatological_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropLev_hybstob ]
- standard_name = model_level_number_at_tropopause_assuming_hybridstobie_and_climatology
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
[ tropP_hybstob ]
- standard_name = tropopause_air_pressure_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_air_pressure_from_hybrid_stobie_linoz_with_climatological_backup_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropT_hybstob ]
- standard_name = tropopause_air_temperature_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_air_temperature_from_hybrid_stobie_linoz_with_climatological_backup_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ_hybstob ]
- standard_name = tropopause_altitude_assuming_hybridstobie_and_climatology
+ standard_name = tropopause_geopotential_height_wrt_surface_from_hybrid_stobie_linoz_with_climatological_backup_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropLev_cpp ]
- standard_name = model_level_number_at_tropopause_assuming_cold_point
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_cold_point_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
[ tropP_cpp ]
- standard_name = tropopause_air_pressure_assuming_cold_point
+ standard_name = tropopause_air_pressure_from_cold_point_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropT_cpp ]
- standard_name = tropopause_air_temperature_assuming_cold_point
+ standard_name = tropopause_air_temperature_from_cold_point_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ_cpp ]
- standard_name = tropopause_altitude_assuming_cold_point
+ standard_name = tropopause_geopotential_height_wrt_surface_from_cold_point_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropLev_chem ]
- standard_name = model_level_number_at_tropopause_assuming_chemical
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_chemical_method
+ units = index
type = integer
dimensions = (horizontal_loop_extent)
intent = out
[ tropP_chem ]
- standard_name = tropopause_air_pressure_assuming_chemical
+ standard_name = tropopause_air_pressure_from_chemical_method
units = Pa
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropT_chem ]
- standard_name = tropopause_air_temperature_assuming_chemical
+ standard_name = tropopause_air_temperature_from_chemical_method
units = K
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ tropZ_chem ]
- standard_name = tropopause_altitude_assuming_chemical
+ standard_name = tropopause_geopotential_height_wrt_surface_from_chemical_method
units = m
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent)
intent = out
[ hstobie_trop ]
- standard_name = lower_bound_of_model_level_number_for_stratospheric_chemistry
- units = 1
+ standard_name = vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_stratospheric_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = out
[ hstobie_linoz ]
- standard_name = lower_bound_of_model_level_number_for_linoz_chemistry
- units = 1
+ standard_name = vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_linearized_ozone_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = out
[ hstobie_tropop ]
- standard_name = model_level_number_at_tropopause_for_chemistry
- units = 1
+ standard_name = tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method_for_chemistry
+ units = index
type = real | kind = kind_phys
dimensions = (horizontal_loop_extent, vertical_layer_dimension)
intent = out