From 100a64649b77296bc16388dfb4573830165f6a29 Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Wed, 24 Jun 2020 15:05:59 +0000 Subject: [PATCH 001/119] Cleanup trailing whitespace for some new added/modified source code related to hwrf_physics. --- physics/HWRF_mcica_random_numbers.F90 | 216 +-- physics/HWRF_mersenne_twister.F90 | 600 ++++---- physics/docs/pdftxt/HWRF_FAMP.txt | 30 +- physics/gfdl_sfc_layer.F90 | 366 ++--- physics/gfdl_sfc_layer.meta | 2 +- physics/module_sf_exchcoef.f90 | 46 +- physics/module_sf_noahlsm.F90 | 56 +- physics/module_sf_noahlsm_glacial_only.F90 | 28 +- physics/radiation_clouds.f | 818 +++++----- physics/radlw_main.F90 | 1568 ++++++++++---------- physics/radsw_main.F90 | 1116 +++++++------- physics/sfc_noah_wrfv4.F90 | 60 +- physics/sfc_noah_wrfv4.meta | 10 +- physics/sfc_noah_wrfv4_interstitial.F90 | 156 +- physics/sfc_noah_wrfv4_interstitial.meta | 2 +- 15 files changed, 2537 insertions(+), 2537 deletions(-) diff --git a/physics/HWRF_mcica_random_numbers.F90 b/physics/HWRF_mcica_random_numbers.F90 index b2f2d20dd..c1d5ae821 100644 --- a/physics/HWRF_mcica_random_numbers.F90 +++ b/physics/HWRF_mcica_random_numbers.F90 @@ -1,109 +1,109 @@ - module mcica_random_numbers - - ! Generic module to wrap random number generators. - ! The module defines a type that identifies the particular stream of random - ! numbers, and has procedures for initializing it and getting real numbers - ! in the range 0 to 1. - ! This version uses the Mersenne Twister to generate random numbers on [0, 1]. - ! - use MersenneTwister, only: randomNumberSequence, & ! The random number engine. - new_RandomNumberSequence, getRandomReal -!! mji -!! use time_manager_mod, only: time_type, get_date - -!mz use parkind, only : im => kind_im, rb => kind_rb + module mcica_random_numbers + + ! Generic module to wrap random number generators. + ! The module defines a type that identifies the particular stream of random + ! numbers, and has procedures for initializing it and getting real numbers + ! in the range 0 to 1. + ! This version uses the Mersenne Twister to generate random numbers on [0, 1]. + ! + use MersenneTwister, only: randomNumberSequence, & ! The random number engine. + new_RandomNumberSequence, getRandomReal +!! mji +!! use time_manager_mod, only: time_type, get_date + +!mz use parkind, only : im => kind_im, rb => kind_rb use machine, only: im => kind_io4, rb => kind_phys - - implicit none - private - - type randomNumberStream - type(randomNumberSequence) :: theNumbers - end type randomNumberStream - - interface getRandomNumbers - module procedure getRandomNumber_Scalar, getRandomNumber_1D, getRandomNumber_2D - end interface getRandomNumbers - - interface initializeRandomNumberStream - module procedure initializeRandomNumberStream_S, initializeRandomNumberStream_V - end interface initializeRandomNumberStream - - public :: randomNumberStream, & - initializeRandomNumberStream, getRandomNumbers -!! mji -!! initializeRandomNumberStream, getRandomNumbers, & -!! constructSeed -contains - ! --------------------------------------------------------- - ! Initialization - ! --------------------------------------------------------- - function initializeRandomNumberStream_S(seed) result(new) - integer(kind=im), intent( in) :: seed - type(randomNumberStream) :: new - - new%theNumbers = new_RandomNumberSequence(seed) - - end function initializeRandomNumberStream_S - ! --------------------------------------------------------- - function initializeRandomNumberStream_V(seed) result(new) - integer(kind=im), dimension(:), intent( in) :: seed - type(randomNumberStream) :: new - - new%theNumbers = new_RandomNumberSequence(seed) - - end function initializeRandomNumberStream_V - - ! --------------------------------------------------------- - ! Procedures for drawing random numbers - ! --------------------------------------------------------- - subroutine getRandomNumber_Scalar(stream, number) - type(randomNumberStream), intent(inout) :: stream - real(kind=rb), intent( out) :: number - - number = getRandomReal(stream%theNumbers) - end subroutine getRandomNumber_Scalar - ! --------------------------------------------------------- - subroutine getRandomNumber_1D(stream, numbers) - type(randomNumberStream), intent(inout) :: stream - real(kind=rb), dimension(:), intent( out) :: numbers - - ! Local variables - integer(kind=im) :: i - - do i = 1, size(numbers) - numbers(i) = getRandomReal(stream%theNumbers) - end do - end subroutine getRandomNumber_1D - ! --------------------------------------------------------- - subroutine getRandomNumber_2D(stream, numbers) - type(randomNumberStream), intent(inout) :: stream - real(kind=rb), dimension(:, :), intent( out) :: numbers - - ! Local variables - integer(kind=im) :: i - - do i = 1, size(numbers, 2) - call getRandomNumber_1D(stream, numbers(:, i)) - end do - end subroutine getRandomNumber_2D - -! mji -! ! --------------------------------------------------------- -! ! Constructing a unique seed from grid cell index and model date/time -! ! Once we have the GFDL stuff we'll add the year, month, day, hour, minute -! ! --------------------------------------------------------- -! function constructSeed(i, j, time) result(seed) -! integer(kind=im), intent( in) :: i, j -! type(time_type), intent( in) :: time -! integer(kind=im), dimension(8) :: seed -! -! ! Local variables -! integer(kind=im) :: year, month, day, hour, minute, second -! -! -! call get_date(time, year, month, day, hour, minute, second) -! seed = (/ i, j, year, month, day, hour, minute, second /) -! end function constructSeed - - end module mcica_random_numbers + + implicit none + private + + type randomNumberStream + type(randomNumberSequence) :: theNumbers + end type randomNumberStream + + interface getRandomNumbers + module procedure getRandomNumber_Scalar, getRandomNumber_1D, getRandomNumber_2D + end interface getRandomNumbers + + interface initializeRandomNumberStream + module procedure initializeRandomNumberStream_S, initializeRandomNumberStream_V + end interface initializeRandomNumberStream + + public :: randomNumberStream, & + initializeRandomNumberStream, getRandomNumbers +!! mji +!! initializeRandomNumberStream, getRandomNumbers, & +!! constructSeed +contains + ! --------------------------------------------------------- + ! Initialization + ! --------------------------------------------------------- + function initializeRandomNumberStream_S(seed) result(new) + integer(kind=im), intent( in) :: seed + type(randomNumberStream) :: new + + new%theNumbers = new_RandomNumberSequence(seed) + + end function initializeRandomNumberStream_S + ! --------------------------------------------------------- + function initializeRandomNumberStream_V(seed) result(new) + integer(kind=im), dimension(:), intent( in) :: seed + type(randomNumberStream) :: new + + new%theNumbers = new_RandomNumberSequence(seed) + + end function initializeRandomNumberStream_V + + ! --------------------------------------------------------- + ! Procedures for drawing random numbers + ! --------------------------------------------------------- + subroutine getRandomNumber_Scalar(stream, number) + type(randomNumberStream), intent(inout) :: stream + real(kind=rb), intent( out) :: number + + number = getRandomReal(stream%theNumbers) + end subroutine getRandomNumber_Scalar + ! --------------------------------------------------------- + subroutine getRandomNumber_1D(stream, numbers) + type(randomNumberStream), intent(inout) :: stream + real(kind=rb), dimension(:), intent( out) :: numbers + + ! Local variables + integer(kind=im) :: i + + do i = 1, size(numbers) + numbers(i) = getRandomReal(stream%theNumbers) + end do + end subroutine getRandomNumber_1D + ! --------------------------------------------------------- + subroutine getRandomNumber_2D(stream, numbers) + type(randomNumberStream), intent(inout) :: stream + real(kind=rb), dimension(:, :), intent( out) :: numbers + + ! Local variables + integer(kind=im) :: i + + do i = 1, size(numbers, 2) + call getRandomNumber_1D(stream, numbers(:, i)) + end do + end subroutine getRandomNumber_2D + +! mji +! ! --------------------------------------------------------- +! ! Constructing a unique seed from grid cell index and model date/time +! ! Once we have the GFDL stuff we'll add the year, month, day, hour, minute +! ! --------------------------------------------------------- +! function constructSeed(i, j, time) result(seed) +! integer(kind=im), intent( in) :: i, j +! type(time_type), intent( in) :: time +! integer(kind=im), dimension(8) :: seed +! +! ! Local variables +! integer(kind=im) :: year, month, day, hour, minute, second +! +! +! call get_date(time, year, month, day, hour, minute, second) +! seed = (/ i, j, year, month, day, hour, minute, second /) +! end function constructSeed + + end module mcica_random_numbers diff --git a/physics/HWRF_mersenne_twister.F90 b/physics/HWRF_mersenne_twister.F90 index f9e3b0b0a..a7a4a85c4 100644 --- a/physics/HWRF_mersenne_twister.F90 +++ b/physics/HWRF_mersenne_twister.F90 @@ -1,304 +1,304 @@ -! Fortran-95 implementation of the Mersenne Twister 19937, following -! the C implementation described below (code mt19937ar-cok.c, dated 2002/2/10), -! adapted cosmetically by making the names more general. -! Users must declare one or more variables of type randomNumberSequence in the calling -! procedure which are then initialized using a required seed. If the -! variable is not initialized the random numbers will all be 0. -! For example: -! program testRandoms -! use RandomNumbers -! type(randomNumberSequence) :: randomNumbers -! integer :: i -! -! randomNumbers = new_RandomNumberSequence(seed = 100) -! do i = 1, 10 -! print ('(f12.10, 2x)'), getRandomReal(randomNumbers) -! end do -! end program testRandoms -! -! Fortran-95 implementation by -! Robert Pincus -! NOAA-CIRES Climate Diagnostics Center -! Boulder, CO 80305 -! email: Robert.Pincus@colorado.edu -! -! This documentation in the original C program reads: -! ------------------------------------------------------------- -! A C-program for MT19937, with initialization improved 2002/2/10. -! Coded by Takuji Nishimura and Makoto Matsumoto. -! This is a faster version by taking Shawn Cokus's optimization, -! Matthe Bellew's simplification, Isaku Wada's real version. -! -! Before using, initialize the state by using init_genrand(seed) -! or init_by_array(init_key, key_length). -! -! Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, -! All rights reserved. -! -! Redistribution and use in source and binary forms, with or without -! modification, are permitted provided that the following conditions -! are met: -! -! 1. Redistributions of source code must retain the above copyright -! notice, this list of conditions and the following disclaimer. -! -! 2. Redistributions in binary form must reproduce the above copyright -! notice, this list of conditions and the following disclaimer in the -! documentation and/or other materials provided with the distribution. -! -! 3. The names of its contributors may not be used to endorse or promote -! products derived from this software without specific prior written -! permission. -! -! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -! A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -! CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -! -! -! Any feedback is very welcome. -! http://www.math.keio.ac.jp/matumoto/emt.html -! email: matumoto@math.keio.ac.jp -! ------------------------------------------------------------- - - module MersenneTwister -! ------------------------------------------------------------- - -!mz use parkind, only : im => kind_im, rb => kind_rb +! Fortran-95 implementation of the Mersenne Twister 19937, following +! the C implementation described below (code mt19937ar-cok.c, dated 2002/2/10), +! adapted cosmetically by making the names more general. +! Users must declare one or more variables of type randomNumberSequence in the calling +! procedure which are then initialized using a required seed. If the +! variable is not initialized the random numbers will all be 0. +! For example: +! program testRandoms +! use RandomNumbers +! type(randomNumberSequence) :: randomNumbers +! integer :: i +! +! randomNumbers = new_RandomNumberSequence(seed = 100) +! do i = 1, 10 +! print ('(f12.10, 2x)'), getRandomReal(randomNumbers) +! end do +! end program testRandoms +! +! Fortran-95 implementation by +! Robert Pincus +! NOAA-CIRES Climate Diagnostics Center +! Boulder, CO 80305 +! email: Robert.Pincus@colorado.edu +! +! This documentation in the original C program reads: +! ------------------------------------------------------------- +! A C-program for MT19937, with initialization improved 2002/2/10. +! Coded by Takuji Nishimura and Makoto Matsumoto. +! This is a faster version by taking Shawn Cokus's optimization, +! Matthe Bellew's simplification, Isaku Wada's real version. +! +! Before using, initialize the state by using init_genrand(seed) +! or init_by_array(init_key, key_length). +! +! Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, +! All rights reserved. +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! +! 3. The names of its contributors may not be used to endorse or promote +! products derived from this software without specific prior written +! permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +! A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +! CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +! +! +! Any feedback is very welcome. +! http://www.math.keio.ac.jp/matumoto/emt.html +! email: matumoto@math.keio.ac.jp +! ------------------------------------------------------------- + + module MersenneTwister +! ------------------------------------------------------------- + +!mz use parkind, only : im => kind_im, rb => kind_rb use machine, only: im => kind_io4, rb => kind_phys - - implicit none - private - - ! Algorithm parameters - ! ------- - ! Period parameters - integer(kind=im), parameter :: blockSize = 624, & - M = 397, & - MATRIX_A = -1727483681, & ! constant vector a (0x9908b0dfUL) - UMASK = -2147483647-1, & ! most significant w-r bits (0x80000000UL) - LMASK = 2147483647 ! least significant r bits (0x7fffffffUL) - ! Tempering parameters - integer(kind=im), parameter :: TMASKB= -1658038656, & ! (0x9d2c5680UL) - TMASKC= -272236544 ! (0xefc60000UL) - ! ------- - - ! The type containing the state variable - type randomNumberSequence - integer(kind=im) :: currentElement ! = blockSize - integer(kind=im), dimension(0:blockSize -1) :: state ! = 0 - end type randomNumberSequence - - interface new_RandomNumberSequence - module procedure initialize_scalar, initialize_vector - end interface new_RandomNumberSequence - - - public :: randomNumberSequence - public :: new_RandomNumberSequence, finalize_RandomNumberSequence, & - getRandomInt, getRandomPositiveInt, getRandomReal -! ------------------------------------------------------------- -contains - ! ------------------------------------------------------------- - ! Private functions - ! --------------------------- - function mixbits(u, v) - integer(kind=im), intent( in) :: u, v - integer(kind=im) :: mixbits - - mixbits = ior(iand(u, UMASK), iand(v, LMASK)) - end function mixbits - ! --------------------------- - function twist(u, v) - integer(kind=im), intent( in) :: u, v - integer(kind=im) :: twist - - ! Local variable - integer(kind=im), parameter, dimension(0:1) :: t_matrix = (/ 0_im, MATRIX_A /) - - twist = ieor(ishft(mixbits(u, v), -1_im), t_matrix(iand(v, 1_im))) - twist = ieor(ishft(mixbits(u, v), -1_im), t_matrix(iand(v, 1_im))) - end function twist - ! --------------------------- - subroutine nextState(twister) - type(randomNumberSequence), intent(inout) :: twister - - ! Local variables - integer(kind=im) :: k - - do k = 0, blockSize - M - 1 - twister%state(k) = ieor(twister%state(k + M), & - twist(twister%state(k), twister%state(k + 1_im))) - end do - do k = blockSize - M, blockSize - 2 - twister%state(k) = ieor(twister%state(k + M - blockSize), & - twist(twister%state(k), twister%state(k + 1_im))) - end do - twister%state(blockSize - 1_im) = ieor(twister%state(M - 1_im), & - twist(twister%state(blockSize - 1_im), twister%state(0_im))) - twister%currentElement = 0_im - - end subroutine nextState - ! --------------------------- - elemental function temper(y) - integer(kind=im), intent(in) :: y - integer(kind=im) :: temper - - integer(kind=im) :: x - - ! Tempering - x = ieor(y, ishft(y, -11)) - x = ieor(x, iand(ishft(x, 7), TMASKB)) - x = ieor(x, iand(ishft(x, 15), TMASKC)) - temper = ieor(x, ishft(x, -18)) - end function temper - ! ------------------------------------------------------------- - ! Public (but hidden) functions - ! -------------------- - function initialize_scalar(seed) result(twister) - integer(kind=im), intent(in ) :: seed - type(randomNumberSequence) :: twister - - integer(kind=im) :: i - ! See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. In the previous versions, - ! MSBs of the seed affect only MSBs of the array state[]. - ! 2002/01/09 modified by Makoto Matsumoto - - twister%state(0) = iand(seed, -1_im) - do i = 1, blockSize - 1 ! ubound(twister%state) - twister%state(i) = 1812433253_im * ieor(twister%state(i-1), & - ishft(twister%state(i-1), -30_im)) + i - twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines - end do - twister%currentElement = blockSize - end function initialize_scalar - ! ------------------------------------------------------------- - function initialize_vector(seed) result(twister) - integer(kind=im), dimension(0:), intent(in) :: seed - type(randomNumberSequence) :: twister - - integer(kind=im) :: i, j, k, nFirstLoop, nWraps - - nWraps = 0 - twister = initialize_scalar(19650218_im) - - nFirstLoop = max(blockSize, size(seed)) - do k = 1, nFirstLoop - i = mod(k + nWraps, blockSize) - j = mod(k - 1, size(seed)) - if(i == 0) then - twister%state(i) = twister%state(blockSize - 1) - twister%state(1) = ieor(twister%state(1), & - ieor(twister%state(1-1), & - ishft(twister%state(1-1), -30_im)) * 1664525_im) + & - seed(j) + j ! Non-linear - twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines - nWraps = nWraps + 1 - else - twister%state(i) = ieor(twister%state(i), & - ieor(twister%state(i-1), & - ishft(twister%state(i-1), -30_im)) * 1664525_im) + & - seed(j) + j ! Non-linear - twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines - end if - end do - - ! - ! Walk through the state array, beginning where we left off in the block above - ! - do i = mod(nFirstLoop, blockSize) + nWraps + 1, blockSize - 1 - twister%state(i) = ieor(twister%state(i), & - ieor(twister%state(i-1), & + + implicit none + private + + ! Algorithm parameters + ! ------- + ! Period parameters + integer(kind=im), parameter :: blockSize = 624, & + M = 397, & + MATRIX_A = -1727483681, & ! constant vector a (0x9908b0dfUL) + UMASK = -2147483647-1, & ! most significant w-r bits (0x80000000UL) + LMASK = 2147483647 ! least significant r bits (0x7fffffffUL) + ! Tempering parameters + integer(kind=im), parameter :: TMASKB= -1658038656, & ! (0x9d2c5680UL) + TMASKC= -272236544 ! (0xefc60000UL) + ! ------- + + ! The type containing the state variable + type randomNumberSequence + integer(kind=im) :: currentElement ! = blockSize + integer(kind=im), dimension(0:blockSize -1) :: state ! = 0 + end type randomNumberSequence + + interface new_RandomNumberSequence + module procedure initialize_scalar, initialize_vector + end interface new_RandomNumberSequence + + + public :: randomNumberSequence + public :: new_RandomNumberSequence, finalize_RandomNumberSequence, & + getRandomInt, getRandomPositiveInt, getRandomReal +! ------------------------------------------------------------- +contains + ! ------------------------------------------------------------- + ! Private functions + ! --------------------------- + function mixbits(u, v) + integer(kind=im), intent( in) :: u, v + integer(kind=im) :: mixbits + + mixbits = ior(iand(u, UMASK), iand(v, LMASK)) + end function mixbits + ! --------------------------- + function twist(u, v) + integer(kind=im), intent( in) :: u, v + integer(kind=im) :: twist + + ! Local variable + integer(kind=im), parameter, dimension(0:1) :: t_matrix = (/ 0_im, MATRIX_A /) + + twist = ieor(ishft(mixbits(u, v), -1_im), t_matrix(iand(v, 1_im))) + twist = ieor(ishft(mixbits(u, v), -1_im), t_matrix(iand(v, 1_im))) + end function twist + ! --------------------------- + subroutine nextState(twister) + type(randomNumberSequence), intent(inout) :: twister + + ! Local variables + integer(kind=im) :: k + + do k = 0, blockSize - M - 1 + twister%state(k) = ieor(twister%state(k + M), & + twist(twister%state(k), twister%state(k + 1_im))) + end do + do k = blockSize - M, blockSize - 2 + twister%state(k) = ieor(twister%state(k + M - blockSize), & + twist(twister%state(k), twister%state(k + 1_im))) + end do + twister%state(blockSize - 1_im) = ieor(twister%state(M - 1_im), & + twist(twister%state(blockSize - 1_im), twister%state(0_im))) + twister%currentElement = 0_im + + end subroutine nextState + ! --------------------------- + elemental function temper(y) + integer(kind=im), intent(in) :: y + integer(kind=im) :: temper + + integer(kind=im) :: x + + ! Tempering + x = ieor(y, ishft(y, -11)) + x = ieor(x, iand(ishft(x, 7), TMASKB)) + x = ieor(x, iand(ishft(x, 15), TMASKC)) + temper = ieor(x, ishft(x, -18)) + end function temper + ! ------------------------------------------------------------- + ! Public (but hidden) functions + ! -------------------- + function initialize_scalar(seed) result(twister) + integer(kind=im), intent(in ) :: seed + type(randomNumberSequence) :: twister + + integer(kind=im) :: i + ! See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. In the previous versions, + ! MSBs of the seed affect only MSBs of the array state[]. + ! 2002/01/09 modified by Makoto Matsumoto + + twister%state(0) = iand(seed, -1_im) + do i = 1, blockSize - 1 ! ubound(twister%state) + twister%state(i) = 1812433253_im * ieor(twister%state(i-1), & + ishft(twister%state(i-1), -30_im)) + i + twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines + end do + twister%currentElement = blockSize + end function initialize_scalar + ! ------------------------------------------------------------- + function initialize_vector(seed) result(twister) + integer(kind=im), dimension(0:), intent(in) :: seed + type(randomNumberSequence) :: twister + + integer(kind=im) :: i, j, k, nFirstLoop, nWraps + + nWraps = 0 + twister = initialize_scalar(19650218_im) + + nFirstLoop = max(blockSize, size(seed)) + do k = 1, nFirstLoop + i = mod(k + nWraps, blockSize) + j = mod(k - 1, size(seed)) + if(i == 0) then + twister%state(i) = twister%state(blockSize - 1) + twister%state(1) = ieor(twister%state(1), & + ieor(twister%state(1-1), & + ishft(twister%state(1-1), -30_im)) * 1664525_im) + & + seed(j) + j ! Non-linear + twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines + nWraps = nWraps + 1 + else + twister%state(i) = ieor(twister%state(i), & + ieor(twister%state(i-1), & + ishft(twister%state(i-1), -30_im)) * 1664525_im) + & + seed(j) + j ! Non-linear + twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines + end if + end do + + ! + ! Walk through the state array, beginning where we left off in the block above + ! + do i = mod(nFirstLoop, blockSize) + nWraps + 1, blockSize - 1 + twister%state(i) = ieor(twister%state(i), & + ieor(twister%state(i-1), & ishft(twister%state(i-1), -30_im)) * 1566083941_im) - i ! Non-linear - twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines - end do - - twister%state(0) = twister%state(blockSize - 1) - - do i = 1, mod(nFirstLoop, blockSize) + nWraps - twister%state(i) = ieor(twister%state(i), & - ieor(twister%state(i-1), & + twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines + end do + + twister%state(0) = twister%state(blockSize - 1) + + do i = 1, mod(nFirstLoop, blockSize) + nWraps + twister%state(i) = ieor(twister%state(i), & + ieor(twister%state(i-1), & ishft(twister%state(i-1), -30_im)) * 1566083941_im) - i ! Non-linear - twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines - end do - - twister%state(0) = UMASK - twister%currentElement = blockSize - - end function initialize_vector - ! ------------------------------------------------------------- - ! Public functions - ! -------------------- - function getRandomInt(twister) - type(randomNumberSequence), intent(inout) :: twister - integer(kind=im) :: getRandomInt - ! Generate a random integer on the interval [0,0xffffffff] - ! Equivalent to genrand_int32 in the C code. - ! Fortran doesn't have a type that's unsigned like C does, - ! so this is integers in the range -2**31 - 2**31 - ! All functions for getting random numbers call this one, - ! then manipulate the result - - if(twister%currentElement >= blockSize) call nextState(twister) - - getRandomInt = temper(twister%state(twister%currentElement)) - twister%currentElement = twister%currentElement + 1 - - end function getRandomInt - ! -------------------- - function getRandomPositiveInt(twister) - type(randomNumberSequence), intent(inout) :: twister - integer(kind=im) :: getRandomPositiveInt - ! Generate a random integer on the interval [0,0x7fffffff] - ! or [0,2**31] - ! Equivalent to genrand_int31 in the C code. - - ! Local integers - integer(kind=im) :: localInt - - localInt = getRandomInt(twister) - getRandomPositiveInt = ishft(localInt, -1) - - end function getRandomPositiveInt - ! -------------------- - ! -------------------- -!! mji - modified Jan 2007, double converted to rrtmg real kind type - function getRandomReal(twister) - type(randomNumberSequence), intent(inout) :: twister -! double precision :: getRandomReal - real(kind=rb) :: getRandomReal - ! Generate a random number on [0,1] - ! Equivalent to genrand_real1 in the C code - ! The result is stored as double precision but has 32 bit resolution - - integer(kind=im) :: localInt - - localInt = getRandomInt(twister) - if(localInt < 0) then -! getRandomReal = dble(localInt + 2.0d0**32)/(2.0d0**32 - 1.0d0) - getRandomReal = (localInt + 2.0**32_rb)/(2.0**32_rb - 1.0_rb) - else -! getRandomReal = dble(localInt )/(2.0d0**32 - 1.0d0) - getRandomReal = (localInt )/(2.0**32_rb - 1.0_rb) - end if - - end function getRandomReal - ! -------------------- - subroutine finalize_RandomNumberSequence(twister) - type(randomNumberSequence), intent(inout) :: twister - - twister%currentElement = blockSize - twister%state(:) = 0_im - end subroutine finalize_RandomNumberSequence - - ! -------------------- - - end module MersenneTwister + twister%state(i) = iand(twister%state(i), -1_im) ! for >32 bit machines + end do + + twister%state(0) = UMASK + twister%currentElement = blockSize + + end function initialize_vector + ! ------------------------------------------------------------- + ! Public functions + ! -------------------- + function getRandomInt(twister) + type(randomNumberSequence), intent(inout) :: twister + integer(kind=im) :: getRandomInt + ! Generate a random integer on the interval [0,0xffffffff] + ! Equivalent to genrand_int32 in the C code. + ! Fortran doesn't have a type that's unsigned like C does, + ! so this is integers in the range -2**31 - 2**31 + ! All functions for getting random numbers call this one, + ! then manipulate the result + + if(twister%currentElement >= blockSize) call nextState(twister) + + getRandomInt = temper(twister%state(twister%currentElement)) + twister%currentElement = twister%currentElement + 1 + + end function getRandomInt + ! -------------------- + function getRandomPositiveInt(twister) + type(randomNumberSequence), intent(inout) :: twister + integer(kind=im) :: getRandomPositiveInt + ! Generate a random integer on the interval [0,0x7fffffff] + ! or [0,2**31] + ! Equivalent to genrand_int31 in the C code. + + ! Local integers + integer(kind=im) :: localInt + + localInt = getRandomInt(twister) + getRandomPositiveInt = ishft(localInt, -1) + + end function getRandomPositiveInt + ! -------------------- + ! -------------------- +!! mji - modified Jan 2007, double converted to rrtmg real kind type + function getRandomReal(twister) + type(randomNumberSequence), intent(inout) :: twister +! double precision :: getRandomReal + real(kind=rb) :: getRandomReal + ! Generate a random number on [0,1] + ! Equivalent to genrand_real1 in the C code + ! The result is stored as double precision but has 32 bit resolution + + integer(kind=im) :: localInt + + localInt = getRandomInt(twister) + if(localInt < 0) then +! getRandomReal = dble(localInt + 2.0d0**32)/(2.0d0**32 - 1.0d0) + getRandomReal = (localInt + 2.0**32_rb)/(2.0**32_rb - 1.0_rb) + else +! getRandomReal = dble(localInt )/(2.0d0**32 - 1.0d0) + getRandomReal = (localInt )/(2.0**32_rb - 1.0_rb) + end if + + end function getRandomReal + ! -------------------- + subroutine finalize_RandomNumberSequence(twister) + type(randomNumberSequence), intent(inout) :: twister + + twister%currentElement = blockSize + twister%state(:) = 0_im + end subroutine finalize_RandomNumberSequence + + ! -------------------- + + end module MersenneTwister diff --git a/physics/docs/pdftxt/HWRF_FAMP.txt b/physics/docs/pdftxt/HWRF_FAMP.txt index 4fb555d84..b12ff0d80 100644 --- a/physics/docs/pdftxt/HWRF_FAMP.txt +++ b/physics/docs/pdftxt/HWRF_FAMP.txt @@ -8,17 +8,17 @@ cloud ice (\f$q_i\f$), and snow-graupel (\f$q_s\f$). The FA scheme is currently in the North American Mesoscale Forecast System (NAM; including the parent 12-km domain, the 3-km NAM nests, and the 1.5km fire weather nest), the Hurricane Weather Research and Forecasting Model (HWRF), the Hurricanes in a Multi-scale Ocean-coupled Non-hydrostatic Model (HMON), and the High-Resolution -Window (HiResW) Non-dydrostatic Multiscale Model on the B grid (NMMB). The FA scheme advects each +Window (HiResW) Non-dydrostatic Multiscale Model on the B grid (NMMB). The FA scheme advects each species separately in the NAM nests, and advects the total condensate in the 12-km parent NAM,HiResW NMMB, HWRF, and HMON. Unique to the FA scheme is the calculation of a diagnostic array called the "rime factor" (RF), which -represents the degree of riming onto snow-graupel, and takes into account the temperature of the ice particle, +represents the degree of riming onto snow-graupel, and takes into account the temperature of the ice particle, the impact velocity of the cloud droplet on the ice particle, and the size of the cloud droplet. For all practical purposes, one can categorize precipitation ice as snow, graupel, or hail, similar to the ice -species predicted in other microphysical schemes based on the value of the RF. For example, an RF = 1 +species predicted in other microphysical schemes based on the value of the RF. For example, an RF = 1 represents unrimed snow; lightly rimed snow occurs when 1 < RF < 2; heavily rimed snow when 2< RF \f$\leq\f$ 5; -graupel when 5 < RF < 10; and frozen drops or hail when RF \f$geqslant\f$ 10. In reality, the RF knows +graupel when 5 < RF < 10; and frozen drops or hail when RF \f$geqslant\f$ 10. In reality, the RF knows no arbitrary cutoff between different ice categories, and the categorizations above are somewhat subjective. Figure 1 is a schematic illustration of the FA scheme processes and each process is described in Table 1. @@ -26,9 +26,9 @@ Figure 1 is a schematic illustration of the FA scheme processes and each process Table 1. List of microphysical processes and their description. All processes are in units of \f$kg kg^{-1}\f$. \tableofcontents -| Microphysical Source/Sinks | Description | +| Microphysical Source/Sinks | Description | |----------------------------------|--------------------------------------------------------| -| PIHOM | Homogeneous freezing of cloud water to ice. | +| PIHOM | Homogeneous freezing of cloud water to ice. | | PIDEP | Net ice deposition (> 0) or sublimation (< 0). | | PINIT | Initiation (nucleation) of cloud ice. | | PIACW | Cloud water collection by precipitation ice. | @@ -44,34 +44,34 @@ Table 1. List of microphysical processes and their description. All processes ar | PIACWR | Accreted cloud water shed to form rain at > 0 | \tableofcontents -Owing to operational computation constraints, and unique to the FA scheme, the sedimentation process -does not use finite differencing of precipitation fluxes in the vertical in order to circumvent the -requirement that small time steps be used in order to maintain numerical stability, particularly since +Owing to operational computation constraints, and unique to the FA scheme, the sedimentation process +does not use finite differencing of precipitation fluxes in the vertical in order to circumvent the +requirement that small time steps be used in order to maintain numerical stability, particularly since the vertical resolution often increases dramatically near the ground. The algorithm is instead based upon a partitioning of precipitation already present in the grid box at the beginning of the time step and the -precipitation entering the grid box from above at the end of the time step. A more detailed description +precipitation entering the grid box from above at the end of the time step. A more detailed description of the sedimentation algorithm can be found in Aligo et al. (2018, appendix D). An algorithm was developed in FA to improve stratiform rainfall by allowing the rain intercept parameter, -\f$N_{or}\f$, to vary with height and the mean drop diameter to be fixed below melting layers. This is +\f$N_{or}\f$, to vary with height and the mean drop diameter to be fixed below melting layers. This is different from other single-moment microphysics schemes (WSM6 and Lin) that assume a constant value for \f$N_{or}\f$. The algorithm in the FA scheme, simular to what is done in the Thompson scheme \cite Thompson_2008, assumes that a snow-graupel particle about to enter the melting layer from above has the same mean mass as a drop formed from melting below the melting layer. The mean drop diameter calculated below the melting layer acts as the lower limit for the mean drop sizes as the rain descends to lower levels. This algorithm is only -active if 1) the snow-graupel density above the melting level (i.e.\f$T_c<0^{o}C\f$) is \f$<225kg m^{-3}\f$ +active if 1) the snow-graupel density above the melting level (i.e.\f$T_c<0^{o}C\f$) is \f$<225kg m^{-3}\f$ (which corresponds to an RF=10), 2) the rain content does not exceed \f$1gm^{-3}\f$, and 3) there is vertical continuity of the rain at lower levels with the rain that formed from melting ice. The FA scheme also uses a drizzle parameterization in order to minimize the spatial extent of light (<20dBZ) reflectivity echoes that developed at the top of moist boundary layers, over the Southeastern U.S., within warm conveyor belts, and over ocean areas covered by stratocumulus in the NMMB. The drizzle parameterization -uses a variable \f$N_{or}\f$ following Westbrook et al. (2010) \cite westbrook_et_al_2010, and approach +uses a variable \f$N_{or}\f$ following Westbrook et al. (2010) \cite westbrook_et_al_2010, and approach conceptually similar to that described in Thompson et al.(2008) \cite Thompson_2008 for drizzle. Figure 2a shows an example of drizzle forming in a single low-level liquid cloud layer above \f$0^oC\f$, in which the smaller, more numerous drizzle drops produce lower radar reflectivities, compared to rain, with \f$N_{or}=8\times10^6m\f$, for example. For multiple cloud layers, drizzle from low clouds must be completely disconnected from rain formed -aloft from melting ice, such that a rain-free layer must seperate any stratiform rain layer aloft from drizzle formed +aloft from melting ice, such that a rain-free layer must seperate any stratiform rain layer aloft from drizzle formed within liquid clouds at lower levels.Supercooled drizzle is also allowed to form from warm-rain processes below \f$0^oC\f$. The quantity \f$N_{or}\f$ is modified only when the rainwater content is \f$< 0.5 gm^{-3}\f$, such that \f$N_{or}\f$ is assumed to vary (red line in Fig.2b) with rain content (\f$\rho_\alpha\times q_r\f$) as @@ -82,7 +82,7 @@ assumed to vary (red line in Fig.2b) with rain content (\f$\rho_\alpha\times q_r \section intra_famp Intraphysics Communication -\ref arg_table_mp_fer_hires_run +\ref arg_table_mp_fer_hires_run \section gen_famp General Algorithm \ref gen_al_famp diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 6bd969ac3..b3c539994 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -16,57 +16,57 @@ module gfdl_sfc_layer !> \section arg_table_gfdl_sfc_layer_init Argument Table !! \htmlinclude gfdl_sfc_layer_init.html -!! +!! subroutine gfdl_sfc_layer_init (icoef_sf, cplwav, cplwav2atm, lcurr_sf, & pert_cd, ntsflg, errmsg, errflg) - + implicit none - + integer, intent(in) :: icoef_sf, ntsflg logical, intent(in) :: cplwav, cplwav2atm, lcurr_sf, pert_cd - + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 - + #if HWRF==1 write(errmsg,'(*(a))') 'The GFDL surface layer scheme does not support '& //'use of the HWRF preprocessor flag in gfdl_sfc_layer.F90' errflg = 1 return -#endif - +#endif + if (icoef_sf < 0 .or. icoef_sf > 8) then write(errmsg,'(*(a))') 'The value of icoef_sf is outside of the ' & //'supported range (0-8) in gfdl_sfc_layer.F90' errflg = 1 return end if - + if (cplwav .or. cplwav2atm) then write(errmsg,'(*(a))') 'The GFDL surface layer scheme is not set up ' & //'to be coupled to waves in gfdl_sfc_layer.F90' errflg = 1 return end if - + if (lcurr_sf) then write(errmsg,'(*(a))') 'The GFDL surface layer scheme is not set up ' & //'to be used with the lcurr_sf option in gfdl_sfc_layer.F90' errflg = 1 return end if - + if (pert_cd) then write(errmsg,'(*(a))') 'The GFDL surface layer scheme is not set up ' & //'to be used with the pert_cd option in gfdl_sfc_layer.F90' errflg = 1 return end if - + if (ntsflg > 0) then !GJF: In order to enable ntsflg > 0, the variable 'tstrc' passed into MFLUX2 should be set ! to the surface_skin_temperature_over_X_interstitial rather than the average of it and @@ -75,8 +75,8 @@ subroutine gfdl_sfc_layer_init (icoef_sf, cplwav, cplwav2atm, lcurr_sf, & //' in gfdl_sfc_layer.F90' errflg = 1 return - end if - + end if + !GJF: Initialization notes: In WRF, the subroutine module_sf_myjsfc/myjsfcinit ! is called for initialization of the GFDL surface layer scheme from ! the module_physics_init subroutine. It contains the following @@ -90,7 +90,7 @@ subroutine gfdl_sfc_layer_init (icoef_sf, cplwav, cplwav2atm, lcurr_sf, & ! ENDDO ! ENDIF !also initialize surface roughness length - + end subroutine gfdl_sfc_layer_init subroutine gfdl_sfc_layer_finalize () @@ -99,7 +99,7 @@ end subroutine gfdl_sfc_layer_finalize !> \section arg_table_gfdl_sfc_layer_run Argument Table !! \htmlinclude gfdl_sfc_layer_run.html !! - subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & + subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & lsm_noah, lsm_noahmp, lsm_ruc, lsm_noah_wrfv4, icoef_sf, cplwav, & cplwav2atm, lcurr_sf, pert_Cd, ntsflg, sfenth, z1, shdmax, ivegsrc, & vegtype, sigmaf, dt, wet, dry, icy, isltyp, rd, grav, ep1, ep2, smois, & @@ -110,9 +110,9 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, qss_ocn, & qss_lnd, qss_ice, errmsg, errflg) - + use funcphys, only: fpvs - + !#### GJF: temporarily grab parameters from LSM-specific modules -- should go through CCPP #### ! (fixing this involves replacing the functionality of set_soilveg and namelist_soilveg) use namelist_soilveg, only: maxsmc_noah => maxsmc, drysmc_noah => drysmc @@ -120,7 +120,7 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & use noahmp_tables, only: maxsmc_noahmp => smcmax_table, drysmc_noahmp => smcdry_table use module_sf_noahlsm, only: maxsmc_noah_wrfv4 => maxsmc, drysmc_noah_wrfv4 => drysmc !################################################################################################ - + implicit none integer, intent(in) :: im, nsoil, km, ivegsrc @@ -138,53 +138,53 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & real(kind=kind_phys), dimension(im), intent(in) :: psfc, prsl1, & q1, t1, u1, v1, wspd, u10, v10, gsw, glw, z1, shdmax, sigmaf, xlat, & xlon, tsurf_ocn, tsurf_lnd, tsurf_ice - - real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & + + real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & tskin_lnd, tskin_ice, ustar_ocn, ustar_lnd, ustar_ice, & znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, & qss_ocn, qss_lnd, qss_ice - + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + !local variables - + integer :: i, its, ite, ims, ime - + logical :: ch_bound_excursion - + !GJF: the vonKarman constant should come in through the CCPP and be defined by the host model real (kind=kind_phys), parameter :: karman = 0.4 real (kind=kind_phys), parameter :: log01=log(0.01), log05=log(0.05), & log07=log(0.07) - + !GJF: if the following variables will be used, they should be turned into intent(in) namelist options integer :: iwavecpl, ens_random_seed, issflx logical :: diag_wind10m, diag_qss real(kind=kind_phys) :: ens_Cdamp - + real(kind=kind_phys), dimension(im) :: wetc, pspc, pkmax, tstrc, upc, & vpc, mznt, slwdc, wind10, qfx, qgh, zkmax, z1_cm, z0max, ztmax real(kind=kind_phys), dimension(im) :: u10_lnd, u10_ocn, u10_ice, & v10_lnd, v10_ocn, v10_ice - + !GJF: the following variables are identified as: !"SCURX" "Surface Currents(X)" "m s-1" !"SCURY" "Surface Currents(Y)" "m s-1 !"CHARN" "Charnock Coeff" " " !"MSANG" "Wind/Stress Angle" "Radian" real(kind=kind_phys), dimension(im) :: charn, msang, scurx, scury - + real(kind=kind_phys), dimension(im) :: fxh, fxe, fxmx, fxmy, xxfh, & xxfh2, tzot real(kind=kind_phys), dimension(1:30) :: maxsmc, drysmc real(kind=kind_phys) :: smcmax, smcdry, zhalf, cd10, & esat, fm_lnd_old, fh_lnd_old, tem1, tem2, czilc, cd_low_limit, & cd_high_limit, ch_low_limit, ch_high_limit, fh2_fh_ratio - + !#### This block will become unnecessary when maxsmc and drysmc come through the CCPP #### if (lsm == lsm_noah) then maxsmc = maxsmc_noah @@ -215,88 +215,88 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ end if !######################################################################## - - !GJF: This code has not been tested with iwavecpl = 1; the variables 'charn' and 'msang' (and others?) need to be input in order to use this + + !GJF: This code has not been tested with iwavecpl = 1; the variables 'charn' and 'msang' (and others?) need to be input in order to use this ! if (cplwav .or. cplwav2atm) then ! iwavecpl = 1 ! else ! iwavecpl = 0 ! end if iwavecpl = 0 - + !GJF: temporary setting of variables that should be moved to namelist is they are used ens_random_seed = 0 !used for HWRF ensemble? ens_Cdamp = 0.0 !used for HWRF ensemble? issflx = 0 !GJF: 1 = calculate surface fluxes, 0 = don't - diag_wind10m = .false. !GJF: if one wants 10m wind speeds to come from this scheme, set this to True, + diag_wind10m = .false. !GJF: if one wants 10m wind speeds to come from this scheme, set this to True, ! put [u,v]10_[lnd/ocn/ice] in the scheme argument list (and metadata), and modify ! GFS_surface_compsites to receive the individual components and calculate an all-grid value diag_qss = .false. !GJF: saturation specific humidities are calculated by LSM, sea surface, and sea ice schemes in ! GFS-based suites - + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 - + its = 1 ims = 1 ite = im ime = im - + do i=its, ite if (flag_iter(i)) then !GJF: Perform data preparation that is the same for all surface types - + pspc(i) = psfc(i)*10. ! convert from Pa to cgs pkmax(i) = prsl1(i)*10. ! convert from Pa to cgs upc(i) = u1(i)*100. ! convert from m s-1 to cm s-1 vpc(i) = v1(i)*100. ! convert from m s-1 to cm s-1 - + !Wang: use previous u10 v10 to compute wind10, input to MFLUX2 to compute z0 (for first time step, u10 and v10 may be zero) wind10(i)=sqrt(u10(i)*u10(i)+v10(i)*v10(i)) !m s-1 - + !Wang: calulate height of the first half level ! if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then ! zhalf = -rd*t1(i)*alog(pkmax(i)/pspc(i))/grav !m ! endif - + !GJF: rather than calculate the height of the first half level, if it is precalculated ! in a different scheme, pass it in and use it; note that in FV3, calculating via the hypsometric equation ! occasionally produced values much shallower than those passed in !zkmax(i) = -rd*t1(i)*alog(pkmax(i)/pspc(i))/grav !m zkmax(i) = z1(i) z1_cm(i) = 100.0*z1(i) - + !GJF: these drag coefficient limits were suggested by Chunxi Zhang via his module_sf_sfclayrev.f90 cd_low_limit = 1.0e-5/zkmax(i) cd_high_limit = 0.1 - !GJF: use the lower of 0.1 from Chunxi Zhang or 0.05/wspd from WRF's module_sf_gfdl.F + !GJF: use the lower of 0.1 from Chunxi Zhang or 0.05/wspd from WRF's module_sf_gfdl.F ! (this will always be the latter if wspd has a minimum of 1.0 m s-1 from above) ch_low_limit = cd_low_limit ch_high_limit = min(0.1,0.05/wspd(i)) - + !slwdc... GFDL downward net flux in units of cal/(cm**2/min) !also divide by 10**4 to convert from /m**2 to /cm**2 slwdc(i)=gsw(i)+glw(i) slwdc(i)=0.239*60.*slwdc(i)*1.e-4 - + !GJF: these variables should be passed in if these options are used charn(i) = 0.0 !used with wave coupling (iwavecpl == 1) msang(i) = 0.0 !used with wave coupling (iwavecpl == 1) scurx(i) = 0.0 !used with ocean currents? (lcurr_sf == T) scury(i) = 0.0 !used with ocean currents? (lcurr_sf == T) - + if (diag_qss) then esat = fpvs(t1(i)) qgh(i) = ep2*esat/(psfc(i)-esat) end if - + !GJF: these vars are not needed in a GFS-based suite !rho1(i)=prsl1(i)/(rd*t1(i)*(1.+ep1*q1(i))) !cpm(i)=cp*(1.+0.8*q1(i)) - + !GJF: perform data preparation that depends on surface types and call the mflux2 subroutine for each surface type ! Note that this is different than the original WRF module_sf_gfdl.F where mflux2 is called once for all surface ! types, with negative roughness lengths denoting open ocean. @@ -306,24 +306,24 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & smcmax=maxsmc(isltyp(i)) wetc(i)=(smois(i,1)-smcdry)/(smcmax-smcdry) wetc(i)=amin1(1.,amax1(wetc(i),0.)) - + !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: tstrc(i) = 0.5*(tskin_lnd(i) + tsurf_lnd(i)) !averaging tskin_lnd and tsurf_lnd as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: !tstrc(i) = tskin_lnd(i) - + !GJF: Roughness Length Limitation section ! The WRF version of module_sf_gfdl.F has no checks on the roughness lengths prior to entering MFLUX2. ! The following limits were placed on roughness lengths from the GFS surface layer scheme at the suggestion ! of Chunxi Zhang. Using the GFDL surface layer without such checks can lead to instability in the UFS. - + !znt_lnd is in cm, z0max/ztmax are in m at this point z0max(i) = max(1.0e-6, min(0.01 * znt_lnd(i), zkmax(i))) - + tem1 = 1.0 - shdmax(i) tem2 = tem1 * tem1 tem1 = 1.0 - tem2 - + if( ivegsrc == 1 ) then if (vegtype(i) == 10) then z0max(i) = exp( tem2*log01 + tem1*log07 ) @@ -353,7 +353,7 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & z0max(i) = exp( tem2*log01 + tem1*log(z0max(i)) ) endif endif - + z0max(i) = max(z0max(i), 1.0e-6) ! czilc = 10.0 ** (- (0.40/0.07) * z0) ! fei's canopy height dependance of czil @@ -363,16 +363,16 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = z0max(i)*exp( - tem1*tem1 & & * czilc*karman*sqrt(ustar_lnd(i)*(0.01/1.5e-05))) ztmax(i) = max(ztmax(i), 1.0e-6) - + !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then wind10(i)=wspd(i)*alog(10.0/z0max(i))/alog(z1(i)/z0max(i)) !m s-1 end if wind10(i)=wind10(i)*100.0 !convert from m/s to cm/s - + ztmax(i) = ztmax(i)*100.0 !convert from m to cm z0max(i) = z0max(i)*100.0 !convert from m to cm - + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_lnd(i), rib_lnd(i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & @@ -380,62 +380,62 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), errmsg, & errflg) if (errflg /= 0) return - + !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_lnd(i) = tstrc(i) ! gopal's doing + tskin_lnd(i) = tstrc(i) ! gopal's doing end if - + if (diag_wind10m) then u10_lnd(i) = u1(i)*(0.01*wind10(i)/wspd(i)) v10_lnd(i) = v1(i)*(0.01*wind10(i)/wspd(i)) end if - + !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy - !gz1oz0(i) = alog(zkmax(i)/(0.01*znt_lnd(i))) + !gz1oz0(i) = alog(zkmax(i)/(0.01*znt_lnd(i))) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - + cdm_lnd(i) = max(cdm_lnd(i), cd_low_limit) cdm_lnd(i) = min(cdm_lnd(i), cd_high_limit) fm_lnd(i) = karman/sqrt(cdm_lnd(i)) - + !1) try fh_lnd from MFLUX2 fh_lnd(i) = karman*xxfh(i) - + !2) calc ch_lnd from fm_lnd and fh_lnd ch_lnd(i) = karman*karman/(fm_lnd(i) * fh_lnd(i)) - + !3) check if ch_lnd is out of bounds (if so, recalculate fh_lnd from bounded value) ch_bound_excursion = .false. - if (ch_lnd(i) < ch_low_limit) then + if (ch_lnd(i) < ch_low_limit) then ch_bound_excursion = .true. ch_lnd(i) = ch_low_limit else if (ch_lnd(i) > ch_high_limit) then ch_bound_excursion = .true. ch_lnd(i) = ch_high_limit end if - + fh2_lnd(i) = karman*xxfh2(i) - + if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) fh_lnd(i) = karman*karman/(fm_lnd(i)*ch_lnd(i)) fh2_lnd(i) = fh2_fh_ratio*fh_lnd(i) end if - + !GJF: Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih !psim_lnd(i)=gz1oz0(i)-fm_lnd(i) !psih_lnd(i)=gz1oz0(i)-fh_lnd(i) - + !GJF: from WRF's module_sf_gfdl.F ustar_lnd(i) = 0.01*sqrt(cdm_lnd(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) ustar_lnd(i) = amax1(ustar_lnd(i),0.001) - + stress_lnd(i) = cdm_lnd(i)*wspd(i)*wspd(i) - + !GJF: from WRF's module_sf_gfdl.F ! convert cd, ch to values at 10m, for output cd10 = cdm_lnd(i) @@ -446,48 +446,48 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if fm10_lnd(i) = karman/sqrt(cd10) - - !GJF: conductances aren't used in other CCPP schemes, but this limit + + !GJF: conductances aren't used in other CCPP schemes, but this limit ! might be able to replace the limits on drag coefficients above - + !chs_lnd(i)=ch_lnd(i)*wspd (i) !conductance !chs2_lnd(i)=ustar_lnd(i)*karman/fh2_lnd(i) !2m conductance - + !!!2014-0922 cap CHS over land points ! chs_lnd(i)=amin1(chs_lnd(i), 0.05) ! chs2_lnd(i)=amin1(chs2_lnd(i), 0.05) ! if (chs2_lnd(i) < 0) chs2_lnd(i)=1.0e-6 - + if (diag_qss) then esat = fpvs(tskin_lnd(i)) qss_lnd(i) = ep2*esat/(psfc(i)-esat) end if - + !GJF: not used in CCPP !flhc_lnd(i)=cpm(i)*rho1(i)*chs_lnd(i) !flqc_lnd(i)=rho1(i)*chs_lnd(i) !cqs2_lnd(i)=chs2_lnd(i) end if !dry - + if (icy(i)) then !GJF: from WRF's module_sf_gfdl.F smcdry=drysmc(isltyp(i)) smcmax=maxsmc(isltyp(i)) wetc(i)=(smois(i,1)-smcdry)/(smcmax-smcdry) wetc(i)=amin1(1.,amax1(wetc(i),0.)) - - + + !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: tstrc(i) = 0.5*(tskin_ice(i) + tsurf_ice(i)) !averaging tskin_ice and tsurf_ice as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: !tstrc(i) = tskin_ice(i) !averaging tskin_ice and tsurf_ice as in GFS surface layer breaks ntsflg functionality - + !GJF: Roughness Length Limitation section ! The WRF version of module_sf_gfdl.F has no checks on the roughness lengths prior to entering MFLUX2. ! The following limits were placed on roughness lengths from the GFS surface layer scheme at the suggestion ! of Chunxi Zhang. Using the GFDL surface layer without such checks can lead to instability in the UFS. - + !znt_ice is in cm, z0max/ztmax are in m at this point z0max(i) = max(1.0e-6, min(0.01 * znt_ice(i), zkmax(i))) !** xubin's new z0 over land and sea ice @@ -511,17 +511,17 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = z0max(i)*exp( - tem1*tem1 & & * czilc*karman*sqrt(ustar_ice(i)*(0.01/1.5e-05))) ztmax(i) = max(ztmax(i), 1.0e-6) - - + + !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then wind10(i)=wspd(i)*alog(10.0/z0max(i))/alog(z1(i)/z0max(i)) end if wind10(i)=wind10(i)*100.0 !! m/s to cm/s - + ztmax(i) = ztmax(i)*100.0 !m to cm z0max(i) = z0max(i)*100.0 !m to cm - + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ice(i), rib_ice(i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & @@ -529,61 +529,61 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), errmsg, & errflg) if (errflg /= 0) return - + !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_ice(i) = tstrc(i) ! gopal's doing + tskin_ice(i) = tstrc(i) ! gopal's doing end if - + if (diag_wind10m) then u10_ice(i) = u1(i)*(0.01*wind10(i)/wspd(i)) v10_ice(i) = v1(i)*(0.01*wind10(i)/wspd(i)) end if - + !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy !gz1oz0(i) = alog(zkmax(i)/znt_ice(i)) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - + cdm_ice(i) = max(cdm_ice(i), cd_low_limit) cdm_ice(i) = min(cdm_ice(i), cd_high_limit) fm_ice(i) = karman/sqrt(cdm_ice(i)) - + !1) try fh_ice from MFLUX2 fh_ice(i) = karman*xxfh(i) - + !2) calc ch_ice from fm_ice and fh_ice ch_ice(i) = karman*karman/(fm_ice(i) * fh_ice(i)) - + !3) check if ch_ice is out of bounds (if so, recalculate fh_ice from bounded value) ch_bound_excursion = .false. - if (ch_ice(i) < ch_low_limit) then + if (ch_ice(i) < ch_low_limit) then ch_bound_excursion = .true. ch_ice(i) = ch_low_limit else if (ch_ice(i) > ch_high_limit) then ch_bound_excursion = .true. ch_ice(i) = ch_high_limit end if - + fh2_ice(i) = karman*xxfh2(i) - + if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) fh_ice(i) = karman*karman/(fm_ice(i)*ch_ice(i)) fh2_ice(i) = fh2_fh_ratio*fh_ice(i) end if - + !Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih !psim_ice(i)=gz1oz0(i)-fm_ice(i) !psih_ice(i)=gz1oz0(i)-fh_ice(i) - + ustar_ice(i) = 0.01*sqrt(cdm_ice(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) ustar_ice(i) = amax1(ustar_ice(i),0.001) - + stress_ice(i) = cdm_ice(i)*wspd(i)*wspd(i) - + !GJF: from WRF's module_sf_gfdl.F !!! convert cd, ch to values at 10m, for output cd10 = cdm_ice(i) @@ -594,38 +594,38 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if fm10_ice(i) = karman/sqrt(cd10) - + !GJF: conductances aren't used in other CCPP schemes !chs_ice(i)=ch_ice(i)*wspd (i) !conductance !chs2_ice(i)=ustar_ice(i)*karman/fh2_ice(i) !2m conductance - + if (diag_qss) then esat = fpvs(tskin_ice(i)) qss_ice(i) = ep2*esat/(psfc(i)-esat) end if - + !flhc_ice(i)=cpm(i)*rho1(i)*chs_ice(i) !flqc_ice(i)=rho1(i)*chs_ice(i) !cqs2_ice(i)=chs2_ice(i) end if !ice - + if (wet(i)) then wetc(i) = 1.0 - + !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: tstrc(i) = 0.5*(tskin_ocn(i) + tsurf_ocn(i)) !averaging tskin_ocn and tsurf_ocn as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: !tstrc(i) = tskin_ocn(i) - + !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then wind10(i)=wspd(i)*alog(10.0/(0.01*znt_ocn(i)))/alog(z1(i)/(0.01*znt_ocn(i))) end if wind10(i)=wind10(i)*100.0 !! m/s to cm/s - + !GJF: mflux2 expects negative roughness length for ocean points znt_ocn(i) = -znt_ocn(i) - + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i), rib_ocn(i), & xxfh(i), znt_ocn(i), mznt(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & @@ -633,67 +633,67 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), errmsg, & errflg) if (errflg /= 0) return - + !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_ocn(i) = tstrc(i) ! gopal's doing + tskin_ocn(i) = tstrc(i) ! gopal's doing end if - + znt_ocn(i)= abs(znt_ocn(i)) mznt(i)= abs(mznt(i)) - + !GJF: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) - + if (diag_wind10m) then u10_ocn(i) = u1(i)*(0.01*wind10(i)/wspd(i)) v10_ocn(i) = v1(i)*(0.01*wind10(i)/wspd(i)) end if - + !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy !gz1oz0(i) = alog(zkmax(i)/znt_ocn(i)) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - + cdm_ocn(i) = max(cdm_ocn(i), cd_low_limit) cdm_ocn(i) = min(cdm_ocn(i), cd_high_limit) fm_ocn(i) = karman/sqrt(cdm_ocn(i)) - + !1) try fh_ocn from MFLUX2 fh_ocn(i) = karman*xxfh(i) - + !2) calc ch_ocn from fm_ocn and fh_ocn ch_ocn(i) = karman*karman/(fm_ocn(i) * fh_ocn(i)) - + !3) check if ch_lnd is out of bounds (if so, recalculate fh_lnd from bounded value) ch_bound_excursion = .false. - if (ch_ocn(i) < ch_low_limit) then + if (ch_ocn(i) < ch_low_limit) then ch_bound_excursion = .true. ch_ocn(i) = ch_low_limit else if (ch_ocn(i) > ch_high_limit) then ch_bound_excursion = .true. ch_ocn(i) = ch_high_limit end if - + fh2_ocn(i) = karman*xxfh2(i) - + if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) fh_ocn(i) = karman*karman/(fm_ocn(i)*ch_ocn(i)) fh2_ocn(i) = fh2_fh_ratio*fh_ocn(i) end if - + !Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih !psim_ocn(i)=gz1oz0(i)-fm_ocn(i) !psih_ocn(i)=gz1oz0(i)-fh_ocn(i) - + ustar_ocn(i) = 0.01*sqrt(cdm_ocn(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) ustar_ocn(i) = amax1(ustar_ocn(i),0.001) - + stress_ocn(i) = cdm_ocn(i)*wspd(i)*wspd(i) - + !GJF: from WRF's module_sf_gfdl.F !!! convert cd, ch to values at 10m, for output cd10 = cdm_ocn(i) @@ -704,23 +704,23 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if fm10_ocn(i) = karman/sqrt(cd10) - + !GJF: conductances aren't used in other CCPP schemes !chs_ocn(i)=ch_ocn(i)*wspd (i) !conductance !chs2_ocn(i)=ustar_ocn(i)*karman/fh2_ocn(i) !2m conductance - + if (diag_qss) then esat = fpvs(tskin_ocn(i)) qss_ocn(i) = ep2*esat/(psfc(i)-esat) end if end if !wet - + !flhc_ocn(i)=cpm(i)*rho1(i)*chs_ocn(i) !flqc_ocn(i)=rho1(i)*chs_ocn(i) !cqs2_ocn(i)=chs2_ocn(i) end if !flag_iter end do - + !GJF: this code has not been updated since GFS suites don't require this; one would need to have different values of hfx, qfx, lh for each surface type ! if (isfflx.eq.0) then ! do i=its,ite @@ -734,7 +734,7 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ! !water ! hfx(i)= -10.*cp*fxh(i) ! else if (islmsk == 1) then - ! hfx(i)= -10.*cp*fxh(i) + ! hfx(i)= -10.*cp*fxh(i) ! hfx(i)=amax1(hfx(i),-250.) ! end if ! qfx(j)=-10.*fxe(i) @@ -742,8 +742,8 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ! lh(i)=xlv*qfx(i) ! enddo ! endif - - + + end subroutine gfdl_sfc_layer_run !--------------------------------- @@ -754,13 +754,13 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m pert_Cd, ens_random_seed, ens_Cdamp, & upc,vpc,tpc,rpc,dt,wind10,xxfh2,ntsflg,sfenth, & tzot, errmsg, errflg) - + !------------------------------------------------------------------------ ! -! MFLUX2 computes surface fluxes of momentum, heat,and moisture -! using monin-obukhov. the roughness length "z0" is prescribed +! MFLUX2 computes surface fluxes of momentum, heat,and moisture +! using monin-obukhov. the roughness length "z0" is prescribed ! over land and over ocean "z0" is computed using charnocks formula. -! the universal functions (from similarity theory approach) are +! the universal functions (from similarity theory approach) are ! those of hicks. This is Bob's doing. ! !------------------------------------------------------------------------ @@ -782,7 +782,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m integer,intent(in) :: icoef_sf integer,intent(in) :: iwavecpl logical,intent(in) :: lcurr_sf - logical,intent(in) :: pert_Cd + logical,intent(in) :: pert_Cd integer,intent(in) :: ens_random_seed real(kind=kind_phys),intent(in) :: ens_Cdamp @@ -815,7 +815,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys), intent ( in), dimension (ims :ime ) :: vpc real(kind=kind_phys), intent ( in), dimension (ims :ime ) :: tpc real(kind=kind_phys), intent ( in), dimension (ims :ime ) :: rpc - + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -841,7 +841,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys), dimension(1 :ime) :: estsop real(kind=kind_phys), dimension(1 :ime) :: fmz1 real(kind=kind_phys), dimension(1 :ime) :: fmz10 - real(kind=kind_phys), dimension(1 :ime) :: fmz2 + real(kind=kind_phys), dimension(1 :ime) :: fmz2 real(kind=kind_phys), dimension(1 :ime) :: fmzo1 real(kind=kind_phys), dimension(1 :ime) :: foft real(kind=kind_phys), dimension(1 :ime) :: foftm @@ -855,7 +855,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys), dimension(1 :ime) :: rstso real(kind=kind_phys), dimension(1 :ime) :: rstsop real(kind=kind_phys), dimension(1 :ime) :: sf10 - real(kind=kind_phys), dimension(1 :ime) :: sf2 + real(kind=kind_phys), dimension(1 :ime) :: sf2 real(kind=kind_phys), dimension(1 :ime) :: sfm real(kind=kind_phys), dimension(1 :ime) :: sfzo real(kind=kind_phys), dimension(1 :ime) :: sgzm @@ -876,7 +876,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys), dimension(1 :ime) :: tss real(kind=kind_phys), dimension(1 :ime) :: ucom real(kind=kind_phys), dimension(1 :ime) :: uf10 - real(kind=kind_phys), dimension(1 :ime) :: uf2 + real(kind=kind_phys), dimension(1 :ime) :: uf2 real(kind=kind_phys), dimension(1 :ime) :: ufh real(kind=kind_phys), dimension(1 :ime) :: ufm real(kind=kind_phys), dimension(1 :ime) :: ufzo @@ -894,7 +894,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys), dimension(1 :ime) :: xxfm real(kind=kind_phys), dimension(1 :ime) :: xxsh real(kind=kind_phys), dimension(1 :ime) :: z10 - real(kind=kind_phys), dimension(1 :ime) :: z2 + real(kind=kind_phys), dimension(1 :ime) :: z2 real(kind=kind_phys), dimension(1 :ime) :: zeta real(kind=kind_phys), dimension(1 :ime) :: zkmax @@ -910,7 +910,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real(kind=kind_phys) :: ux13, yo, y,xo,x,ux21,ugzzo,ux11,ux12,uzetao,xnum,alll real(kind=kind_phys) :: ux1,ugz,x10,uzo,uq,ux2,ux3,xtan,xden,y10,uzet1o,ugz10 - real(kind=kind_phys) :: szet2, zal2,ugz2 + real(kind=kind_phys) :: szet2, zal2,ugz2 real(kind=kind_phys) :: rovcp,boycon,cmo2,psps1,zog,enrca,rca,cmo1,amask,en,ca,a,c real(kind=kind_phys) :: sgz,zal10,szet10,fmz,szo,sq,fmzo,rzeta1,zal1g,szetao,rzeta2,zal2g real(kind=kind_phys) :: hcap,xks,pith,teps,diffot,delten,alevp,psps2,alfus,nstep @@ -925,7 +925,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ! internal variables !----------------------------------------------------------------------- - real(kind=kind_phys), dimension (223) :: tab + real(kind=kind_phys), dimension (223) :: tab real(kind=kind_phys), dimension (223) :: table real(kind=kind_phys), dimension (101) :: tab11 real(kind=kind_phys), dimension (41) :: table4 @@ -947,7 +947,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m data amask/ -98.0/ !----------------------------------------------------------------------- -! tables used to obtain the vapor pressures or saturated vapor +! tables used to obtain the vapor pressures or saturated vapor ! pressure !----------------------------------------------------------------------- @@ -1003,7 +1003,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m data table3/.7520e+03,.7980e+03,.8470e+03,.8980e+03,.9520e+03, & &.1008e+04,.1067e+04,.1129e+04,.1194e+04,.1263e+04,.1334e+04, & &.1409e+04,.1488e+04,.1569e+04,.1656e+04,.1745e+04,.1840e+04, & - &.1937e+04,.2041e+04,.2147e+04,.2259e+04,.2375e+04,.2497e+04, & + &.1937e+04,.2041e+04,.2147e+04,.2259e+04,.2375e+04,.2497e+04, & &.2624e+04,.2756e+04,.2893e+04,.3036e+04,.3186e+04,.3340e+04, & &.3502e+04,.3670e+04,.3843e+04,.4025e+04,.4213e+04,.4408e+04, & &.4611e+04,.4821e+04,.5035e+04,.5270e+04,.5500e+04,.5740e+04, & @@ -1027,7 +1027,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m real,parameter :: rgas = 2.87e6 real,parameter :: og = 1./g integer :: ntstep = 0 - + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 @@ -1072,7 +1072,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ! routine = 'mflux2' ! !------------------------------------------------------------------------ -! set water availability constant "ecof" and land mask "land". +! set water availability constant "ecof" and land mask "land". ! limit minimum wind speed to 100 cm/s !------------------------------------------------------------------------ ! constants for 10 m winds (correction for knots @@ -1162,13 +1162,13 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m enddo !------------------------------------------------------------------------ -! define constants: -! a and c = constants used in evaluating universal function for -! stable case -! ca = karmen constant -! cm01 = constant part of vertical integral of universal -! function; stable case ( 0.5 < zeta < or = 10.0) -! cm02 = constant part of vertical integral of universal +! define constants: +! a and c = constants used in evaluating universal function for +! stable case +! ca = karmen constant +! cm01 = constant part of vertical integral of universal +! function; stable case ( 0.5 < zeta < or = 10.0) +! cm02 = constant part of vertical integral of universal ! function; stable case ( zeta > 10.0) !------------------------------------------------------------------------ @@ -1204,14 +1204,14 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m if(psps1 .EQ. 0.0)then psps1 = .1 endif - rstso(i) = 0.622*estso(i)/psps1 + rstso(i) = 0.622*estso(i)/psps1 vrts (i) = 1. + boycon*ecof(i)*rstso(i) enddo !------------------------------------------------------------------------ ! check if consideration of virtual temperature changes stability. -! if so, set "dthetav" to near neutral value (1.0e-4). also check -! for very small lapse rates; if ABS(tempa1) <1.0e-4 then +! if so, set "dthetav" to near neutral value (1.0e-4). also check +! for very small lapse rates; if ABS(tempa1) <1.0e-4 then ! tempa1=1.0e-4 !------------------------------------------------------------------------ @@ -1238,13 +1238,13 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m enddo !------------------------------------------------------------------------ -! begin looping through points on line, solving wegsteins iteration +! begin looping through points on line, solving wegsteins iteration ! for zeta at each point, and using hicks functions !------------------------------------------------------------------------ !------------------------------------------------------------------------ -! set initial guess of zeta=non - dimensional height "szeta" for -! stable points +! set initial guess of zeta=non - dimensional height "szeta" for +! stable points !------------------------------------------------------------------------ rca = 1./ca @@ -1346,14 +1346,14 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m if (szet2 .LE. 0.5) then fmz2 (i) = (zal2 + a*szet2 )*rca else if (szet2 .GT. 0.5 .AND. szet2 .LE. 2.) then - rzeta2 = 1./szet2 + rzeta2 = 1./szet2 fmz2 (i) = (8.*zal2 + 4.25*rzeta2 - & 0.5*rzeta2*rzeta2 + cmo1)*rca else if (szet2 .GT. 2.) then fmz2 (i) = (c*szet2 + cmo2)*rca endif sf2 (i) = fmz2 (i) - fmzo1(i) - + sfm(i) = fmz1(i) - fmzo1(i) sfh(i) = fmz1(i) - fhzo1(i) sgz = ca*rib(istb(i))*sfm(i)*sfm(i)/ & @@ -1385,7 +1385,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m go to 130 110 continue - + write(errmsg,'(*(a))') 'NON-CONVERGENCE FOR STABLE ZETA IN gfdl_sfc_layer.F90/MFLUX2' errflg = 1 return @@ -1394,7 +1394,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m !------------------------------------------------------------------------ ! update "zo" for ocean points. "zo"cannot be updated within the ! wegsteins iteration as the scheme (for the near neutral case) -! can become unstable +! can become unstable !------------------------------------------------------------------------ 130 continue @@ -1416,7 +1416,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ustar = sqrt( -szo / zog) restar = -ustar * szo / vis - restar = max(restar,cons_p000001) + restar = max(restar,cons_p000001) ! Rat taken from Zeng, Zhao and Dickinson 1997 rat = 2.67 * restar ** .25 - 2.57 rat = min(rat ,cons_7) !constant @@ -1425,7 +1425,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m else zot(istb(i)) = zoc(istb(i)) endif - + ! in hwrf thermal znot is loaded back into the zoc array for next step zoc(istb(i)) = szo enddo @@ -1450,7 +1450,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m endif ! the above correction done by GFDL in centi-kts!!!-change back wind10(istb(i)) = wind10(istb(i)) / 1.944 - enddo + enddo !------------------------------------------------------------------------ ! unstable points @@ -1537,7 +1537,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ugz2 = ALOG(z2 (iutb(i))/ABS(zoc(iutb(i)))) uzet1o = ABS(z2 (iutb(i)))/zkmax(iutb(i))*uzeta(i) uzetao = ABS(zoc(iutb(i)))/zkmax(iutb(i))*uzeta(i) - ux11 = 1. - 16.*uzet1o + ux11 = 1. - 16.*uzet1o ux12 = 1. - 16.*uzetao y = SQRT(ux11) yo = SQRT(ux12) @@ -1579,7 +1579,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m 'uq is 1 ',ux2,ugz,ugzm(i),uzeta(i),uzetam(i) errflg = 1 return - + ! call MPI_CLOSE(1,routine) !------------------------------------------------------------------------ @@ -1591,7 +1591,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m !------------------------------------------------------------------------ ! update "zo" for ocean points. zo cannot be updated within the ! wegsteins iteration as the scheme (for the near neutral case) -! can become unstable. +! can become unstable. !------------------------------------------------------------------------ do i = 1,iq @@ -1636,7 +1636,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m endif ! the above correction done by GFDL in centi-kts!!!-change back wind10(iutb(i)) = wind10(iutb(i)) / 1.944 - enddo + enddo do i = 1,iq xxfm(iutb(i)) = ufm(i) @@ -1661,7 +1661,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m enddo ! do land sfc temperature prediction if ntsflg=1 -! ntsflg = 1 ! gopal's doing +! ntsflg = 1 ! gopal's doing if (ntsflg .EQ. 0) go to 370 alll = 600. @@ -1671,7 +1671,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m alfus = alll/2.39e-8 teps = 0.1 ! slwdc... in units of cal/min ???? -! slwa... in units of ergs/sec/cm*2 +! slwa... in units of ergs/sec/cm*2 ! 1 erg=2.39e-8 cal !------------------------------------------------------------------------ ! pack land and sea ice points @@ -1732,7 +1732,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m if(psps2 .EQ. 0.0)then psps2 = .1 endif - rstsop(i) = 0.622*estsop(i)/psps2 + rstsop(i) = 0.622*estsop(i)/psps2 rdiff (i) = amin1(0.0,(rkmaxp(i) - rstsop(i))) foft(i) = tss(i) + delsrad(i)*(slwa(i) - aap(i)*tsp(i)**4 - & @@ -1742,7 +1742,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m frac(i) = ABS((foft(i) - tsp(i))/tsp(i)) !------------------------------------------------------------------------ -! check for convergence of all points use wegstein iteration +! check for convergence of all points use wegstein iteration !------------------------------------------------------------------------ if (frac(i) .GE. teps) then @@ -1770,7 +1770,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ! call MPI_CLOSE(1,routine) endif enddo - + do i = 1,ip ii = indx(i) tstrc(ii) = tsp (i) @@ -1782,7 +1782,7 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m 370 continue do i = its,ite -!!! +!!! if ( iwavecpl .eq. 1 .and. zoc(i) .le. 0.0 ) then windmks = wind10(i) * 0.01 call znot_wind10m(windmks,znott,znotm,icoef_sf) @@ -1816,5 +1816,5 @@ SUBROUTINE MFLUX2( fxh,fxe,fxmx,fxmy,cdm,rib,xxfh,zoc,mzoc,tstrc, & !m ntstep = ntstep + 1 return end subroutine MFLUX2 - + end module gfdl_sfc_layer diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index 5a245cd69..cb20690b3 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -436,7 +436,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [glw] standard_name = surface_downwelling_longwave_flux long_name = surface downwelling longwave flux at current time diff --git a/physics/module_sf_exchcoef.f90 b/physics/module_sf_exchcoef.f90 index 0e3dae80c..500fc3afd 100755 --- a/physics/module_sf_exchcoef.f90 +++ b/physics/module_sf_exchcoef.f90 @@ -1,4 +1,4 @@ -! This MODULE holds the routines that calculate air-sea exchange coefficients +! This MODULE holds the routines that calculate air-sea exchange coefficients MODULE module_sf_exchcoef CONTAINS @@ -48,7 +48,7 @@ SUBROUTINE znot_m_v1(uref,znotm) END IF END SUBROUTINE znot_m_v1 - + SUBROUTINE znot_m_v0(uref,znotm) IMPLICIT NONE @@ -57,7 +57,7 @@ SUBROUTINE znot_m_v0(uref,znotm) ! Author : Biju Thomas on 02/07/2014 REAL, INTENT(IN) :: uref - REAL, INTENT(OUT):: znotm + REAL, INTENT(OUT):: znotm REAL :: yz, y1, y2, y3, y4 yz = 0.0001344 @@ -145,7 +145,7 @@ SUBROUTINE znot_t_v1(uref,znott) END IF END SUBROUTINE znot_t_v1 - + SUBROUTINE znot_t_v0(uref,znott) IMPLICIT NONE @@ -154,7 +154,7 @@ SUBROUTINE znot_t_v0(uref,znott) ! Author : Biju Thomas on 02/07/2014 REAL, INTENT(IN) :: uref - REAL, INTENT(OUT):: znott + REAL, INTENT(OUT):: znott IF ( uref .LT. 7.0 ) THEN znott = (0.0185 / 9.8*(7.59e-4*uref**2+2.46e-2*uref)**2) @@ -210,7 +210,7 @@ SUBROUTINE znot_t_v2(uu,znott) znott = ta6 + ta5*uu + ta4*uu**2 + ta3*uu**3 + ta2*uu**4 + & ta1*uu**5 + ta0*uu**6 ELSEIF ( uu .GE. 15.0 .AND. uu .LT. 60.0) THEN - znott = tb6 + tb5*uu + tb4*uu**2 + tb3*uu**3 + tb2*uu**4 + & + znott = tb6 + tb5*uu + tb4*uu**2 + tb3*uu**3 + tb2*uu**4 + & tb1*uu**5 + tb0*uu**6 ELSE znott = tt6 + tt5*uu + tt4*uu**2 + tt3*uu**3 + tt2*uu**4 + & @@ -226,7 +226,7 @@ SUBROUTINE znot_m_v6(uref,znotm) ! For high winds, try to fit available observational data ! ! Bin Liu, NOAA/NCEP/EMC 2017 -! +! ! uref(m/s) : wind speed at 10-m height ! znotm(meter): areodynamical roughness scale over water ! @@ -361,10 +361,10 @@ SUBROUTINE znot_m_v7(uref,znotm) ! Calculate areodynamical roughness over water with input 10-m wind ! For low-to-moderate winds, try to match the Cd-U10 relationship from COARE V3.5 (Edson et al. 2013) ! For high winds, try to fit available observational data -! Comparing to znot_t_v6, slightly decrease Cd for higher wind speed +! Comparing to znot_t_v6, slightly decrease Cd for higher wind speed ! ! Bin Liu, NOAA/NCEP/EMC 2018 -! +! ! uref(m/s) : wind speed at 10-m height ! znotm(meter): areodynamical roughness scale over water ! @@ -443,28 +443,28 @@ SUBROUTINE znot_t_v7(uref,znott) p12 = 3.342963077911962e-05 p11 = -2.633566691328004e-04 p10 = 8.644979973037803e-04 - + p25 = -9.402722450219142e-12 p24 = 1.325396583616614e-09 p23 = -7.299148051141852e-08 p22 = 1.982901461144764e-06 p21 = -2.680293455916390e-05 p20 = 1.484341646128200e-04 - + p35 = 7.921446674311864e-12 p34 = -1.019028029546602e-09 p33 = 5.251986927351103e-08 p32 = -1.337841892062716e-06 p31 = 1.659454106237737e-05 p30 = -7.558911792344770e-05 - + p45 = -2.694370426850801e-10 p44 = 5.817362913967911e-08 p43 = -5.000813324746342e-06 p42 = 2.143803523428029e-04 p41 = -4.588070983722060e-03 p40 = 3.924356617245624e-02 - + p56 = -1.663918773476178e-13 p55 = 6.724854483077447e-11 p54 = -1.127030176632823e-08 @@ -472,7 +472,7 @@ SUBROUTINE znot_t_v7(uref,znott) p52 = -5.012618091180904e-05 p51 = 1.329762020689302e-03 p50 = -1.450062148367566e-02 - + p60 = 6.840803042788488e-05 if (uref >= 0.0 .and. uref < 5.9 ) then @@ -500,11 +500,11 @@ SUBROUTINE znot_m_v8(uref,znotm) ! Calculate areodynamical roughness over water with input 10-m wind ! For low-to-moderate winds, try to match the Cd-U10 relationship from COARE V3.5 (Edson et al. 2013) ! For high winds, try to fit available observational data -! Comparing to znot_t_v6, slightly decrease Cd for higher wind speed +! Comparing to znot_t_v6, slightly decrease Cd for higher wind speed ! And this is another variation similar to v7 ! ! Bin Liu, NOAA/NCEP/EMC 2018 -! +! ! uref(m/s) : wind speed at 10-m height ! znotm(meter): areodynamical roughness scale over water ! @@ -584,14 +584,14 @@ SUBROUTINE znot_t_v8(uref,znott) p12 = 3.342963077911962e-05 p11 = -2.633566691328004e-04 p10 = 8.644979973037803e-04 - + p25 = -9.402722450219142e-12 p24 = 1.325396583616614e-09 p23 = -7.299148051141852e-08 p22 = 1.982901461144764e-06 p21 = -2.680293455916390e-05 p20 = 1.484341646128200e-04 - + p35 = 7.921446674311864e-12 p34 = -1.019028029546602e-09 p33 = 5.251986927351103e-08 @@ -605,7 +605,7 @@ SUBROUTINE znot_t_v8(uref,znott) p42 = 2.156326523752734e-04 p41 = -4.617267288861201e-03 p40 = 3.951492707214883e-02 - + p56 = -1.112896580069263e-13 p55 = 4.450334755105140e-11 p54 = -7.375373918500171e-09 @@ -613,7 +613,7 @@ SUBROUTINE znot_t_v8(uref,znott) p52 = -3.206421106713471e-05 p51 = 8.407596231678149e-04 p50 = -9.027924333673693e-03 - + p60 = 5.791179079892191e-05 if (uref >= 0.0 .and. uref < 5.9 ) then @@ -672,7 +672,7 @@ SUBROUTINE znot_wind10m(w10m,znott,znotm,icoef_sf) call znot_t_v2(windmks,zt) !! adjust a little to match obs at 10m, cd is reduced tmp=0.4*0.4/(alog(zlev/zm))**2 ! cd at zlev - zm1=z10/exp( sqrt(0.4*0.4/(tmp*0.95-0.0002)) ) + zm1=z10/exp( sqrt(0.4*0.4/(tmp*0.95-0.0002)) ) !ch tmp=0.4*0.4/(alog(zlevt/zm)*alog(zlevt/zt)) ! ch at zlev using old formula zt1=z10/exp( 0.4*0.4/( 0.95*tmp*alog(z10/zm1) ) ) @@ -681,7 +681,7 @@ SUBROUTINE znot_wind10m(w10m,znott,znotm,icoef_sf) call znot_m_v1(windmks,zm) call znot_t_v2(windmks,zt) -!! for wind<20, cd similar to icoef=2 at 10m, then reduced +!! for wind<20, cd similar to icoef=2 at 10m, then reduced tmp=0.4*0.4/(alog(10.0/zm))**2 ! cd at zlev aaa=0.75 if (windmks < 20) then @@ -689,7 +689,7 @@ SUBROUTINE znot_wind10m(w10m,znott,znotm,icoef_sf) elseif(windmks < 45.0) then aaa=0.99+(windmks-20)*(0.75-0.99)/(45.0-20.0) endif - zm1=z10/exp( sqrt(0.4*0.4/(tmp*aaa)) ) + zm1=z10/exp( sqrt(0.4*0.4/(tmp*aaa)) ) !ch tmp=0.4*0.4/(alog(zlevt/zm)*alog(zlevt/zt)) ! ch at zlev using old formula zt1=z10/exp( 0.4*0.4/( 0.95*tmp*alog(z10/zm1) ) ) diff --git a/physics/module_sf_noahlsm.F90 b/physics/module_sf_noahlsm.F90 index 13d8e9813..f8afe5a86 100644 --- a/physics/module_sf_noahlsm.F90 +++ b/physics/module_sf_noahlsm.F90 @@ -3,10 +3,10 @@ MODULE module_sf_noahlsm !ckay=KIRAN ALAPATY @ US EPA -- November 01, 2015 ! ! Tim Glotfelty@CNSU; AJ Deng@PSU -!modified for use with FASDAS -!Flux Adjusting Surface Data Assimilation System to assimilate +!modified for use with FASDAS +!Flux Adjusting Surface Data Assimilation System to assimilate !surface layer and soil layers temperature and moisture using -! surfance reanalsys +! surfance reanalsys !Reference: Alapaty et al., 2008: Development of the flux-adjusting surface ! data assimilation system for mesoscale models. JAMC, 47, 2331-2350 ! @@ -70,7 +70,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C EC,EDIR,ET,ETT,ESNOW,DRIP,DEW, & !O BETA,ETP,SSOIL, & !O FLX1,FLX2,FLX3, & !O - FLX4,FVB,FBUR,FGSN,UA_PHYS, & !UA + FLX4,FVB,FBUR,FGSN,UA_PHYS, & !UA SNOMLT,SNCOVR, & !O RUNOFF1,RUNOFF2,RUNOFF3, & !O RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL, & !O @@ -388,7 +388,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C ! ---------------------------------------------------------------------- errmsg = '' errflg = 0 - + ILOC = IILOC JLOC = JJLOC @@ -585,7 +585,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C CH = CH/(1.+RU*CH) ENDIF - SNCOVR = MIN(SNCOVR,0.98) + SNCOVR = MIN(SNCOVR,0.98) CALL ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,T1, & ALBEDO,EMISSI,DT,SNOWNG,SNOTIME1,LVCOEF) @@ -774,7 +774,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C BETA,DRIP,DEW,FLX1,FLX3,VEGTYP,ISURBAN, & SFHEAD1RT,INFXS1RT,ETPND1,SOILTYP,OPT_THCND & ,XSDA_QFX,QFX_PHY,XQNORM,fasdas,HCPCT_FASDAS, & !fasdas - SIGMA,CPH2O) + SIGMA,CPH2O) ETA_KINEMATIC = ETA ELSE CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, & @@ -793,7 +793,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C ETPN,FLX4,UA_PHYS, & SFHEAD1RT,INFXS1RT,ETPND1,SOILTYP,OPT_THCND & ,QFX_PHY,fasdas,HCPCT_FASDAS,SIGMA,CPH2O,CPICE, & !fasdas - LSUBF) + LSUBF) ETA_KINEMATIC = ESNOW + ETNS - 1000.0*DEW END IF @@ -807,7 +807,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C ! ---------------------------------------------------------------------- SHEAT = - (CH * CP * SFCPRS)/ (R * T2V) * ( TH2- T1 ) - IF(UA_PHYS) SHEAT = SHEAT + FLX4 + IF(UA_PHYS) SHEAT = SHEAT + FLX4 ! ! FASDAS ! @@ -826,7 +826,7 @@ SUBROUTINE SFLX (IILOC,JJLOC,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C ET(K) = ET(K) * LVH2O ENDDO ETT = ETT * LVH2O - + ETPND1=ETPND1 * LVH2O ESNOW = ESNOW * LSUBS @@ -1425,7 +1425,7 @@ END SUBROUTINE EVAPO ! ---------------------------------------------------------------------- SUBROUTINE FAC2MIT(SMCMAX,FLIMIT) - IMPLICIT NONE + IMPLICIT NONE REAL, INTENT(IN) :: SMCMAX REAL, INTENT(OUT) :: FLIMIT @@ -2025,7 +2025,7 @@ SUBROUTINE NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, & EFDIR = EFDIR * wetty(1) !TWG2015 Bugfix Flip Sign to conform to Net upward Flux EDIR1 = EDIR1 + EFDIR ! new value - + EFC = (EC1/EALL_now)*XSDA_QFX*1.0E-03*XQNORM !TWG2015 Bugfix Flip Sign to conform to Net upward Flux EC1 = EC1 + EFC ! new value @@ -2264,11 +2264,11 @@ SUBROUTINE PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, & FLX4 = 0.0 IF(UA_PHYS) THEN IF(SNEQV > 0. .AND. FNET > 0. .AND. SOLDN > 0. ) THEN - TOTABS = (1.-ALBEDO)*SOLDN*FVB ! solar radiation absorbed + TOTABS = (1.-ALBEDO)*SOLDN*FVB ! solar radiation absorbed ! by vegetated fraction UCABS = MIN(TOTABS,((1.0-ALGDSN)*(1.0-ALVGSN)*SOLDN*GAMA)*FVB) ! print*,'penman',UCABS,TOTABS,SOLDN,GAMA,FVB -! UCABS = MIN(TOTABS,(0.44*SOLDN*GAMA)*FVB) +! UCABS = MIN(TOTABS,(0.44*SOLDN*GAMA)*FVB) ! UCABS -> solar radiation ! absorbed under canopy FLX4 = MIN(TOTABS - UCABS, MIN(250., 0.5*(1.-ALBEDO)*SOLDN)) @@ -2431,11 +2431,11 @@ SUBROUTINE REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX, & REAL :: FRZFACT,FRZK,REFDK character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + CHARACTER*256 :: err_message errmsg = '' errflg = 0 - + ! SAVE ! ---------------------------------------------------------------------- ! @@ -2656,14 +2656,14 @@ SUBROUTINE SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, & ! ---------------------------------------------------------------------- ! HRT ROUTINE CALCS THE RIGHT HAND SIDE OF THE SOIL TEMP DIF EQN ! ---------------------------------------------------------------------- - + IF (TIME_AVERAGE_T_UPDATE) THEN OLDT1 = T1 DO I = 1, NSOIL OLDSTC(I) = STC(I) ENDDO ENDIF - + ! Land case CALL HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1,TBOT, & @@ -2688,15 +2688,15 @@ SUBROUTINE SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, & ! CALCULATE SURFACE SOIL HEAT FLUX ! ---------------------------------------------------------------------- T1 = (YY + (ZZ1- 1.0) * STC (1)) / ZZ1 - - !GJF: Following the GFS version of Noah, time average the updating of skin temperature and soil temperature + + !GJF: Following the GFS version of Noah, time average the updating of skin temperature and soil temperature IF (TIME_AVERAGE_T_UPDATE) THEN T1 = CTFIL1*T1 + CTFIL2*OLDT1 DO I = 1, NSOIL STC(I) = CTFIL1*STC(I) + CTFIL2*OLDSTC(I) ENDDO ENDIF - + SSOIL = DF1 * (STC (1) - T1) / (0.5 * ZSOIL (1)) ! ---------------------------------------------------------------------- @@ -2907,7 +2907,7 @@ SUBROUTINE SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR, & END IF !------------------------------------------------------------------ ! FBUR: VERTICAL FRACTION OF VEGETATION COVERED BY SNOW -! GRASS, CROP, AND SHRUB: MULTIPLY 0.4 BY ZTOPV AND ZBOTV BECAUSE +! GRASS, CROP, AND SHRUB: MULTIPLY 0.4 BY ZTOPV AND ZBOTV BECAUSE ! THEY WILL BE PRESSED DOWN BY THE SNOW. ! FOREST: DON'T NEED TO CHANGE ZTOPV AND ZBOTV. @@ -3620,10 +3620,10 @@ SUBROUTINE SNOWZ0 (SNCOVR,Z0, Z0BRD, SNOWH,FBUR,FGSN,SHDMAX,UA_PHYS) BURIAL = 7.0*Z0BRD - SNOWH IF(BURIAL.LE.0.0007) THEN Z0EFF = Z0S - ELSE + ELSE Z0EFF = BURIAL/7.0 ENDIF - + Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0EFF ENDIF @@ -3853,7 +3853,7 @@ SUBROUTINE SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP, & INFMAX = MAX (INFMAX,WCND) INFMAX = MIN (INFMAX,PX/DT) -#ifdef WRF_HYDRO +#ifdef WRF_HYDRO !DJG NDHMS/WRF-Hydro edit... !DJG IF (PCPDRP > INFMAX) THEN IF (SFCWATR > INFMAX) THEN @@ -4167,12 +4167,12 @@ SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O, BEXP, PSISAT, SOILTYP, OPT_THCND) ! June 2001 CHANGES: FROZEN SOIL CONDITION. ! ---------------------------------------------------------------------- IMPLICIT NONE - INTEGER, INTENT(IN) :: SOILTYP, OPT_THCND + INTEGER, INTENT(IN) :: SOILTYP, OPT_THCND REAL, INTENT(IN) :: QZ, SMC, SMCMAX, SH2O, BEXP, PSISAT REAL, INTENT(OUT) :: DF REAL :: AKE, GAMMD, THKDRY, THKICE, THKO, & THKQTZ,THKSAT,THKS,THKW,SATRATIO,XU, & - XUNFROZ,AKEI,AKEL,PSIF,PF + XUNFROZ,AKEI,AKEL,PSIF,PF ! ---------------------------------------------------------------------- ! WE NOW GET QUARTZ AS AN INPUT ARGUMENT (SET IN ROUTINE REDPRM): @@ -4276,7 +4276,7 @@ SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O, BEXP, PSISAT, SOILTYP, OPT_THCND) DF=.1744 END IF - ENDIF ! for OPT_THCND OPTIONS + ENDIF ! for OPT_THCND OPTIONS ! ---------------------------------------------------------------------- END SUBROUTINE TDFCND ! ---------------------------------------------------------------------- diff --git a/physics/module_sf_noahlsm_glacial_only.F90 b/physics/module_sf_noahlsm_glacial_only.F90 index 602b21e3b..a489cd13e 100644 --- a/physics/module_sf_noahlsm_glacial_only.F90 +++ b/physics/module_sf_noahlsm_glacial_only.F90 @@ -41,9 +41,9 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & & RIBB,errflg, errmsg) ! ---------------------------------------------------------------------- ! SUB-DRIVER FOR "Noah LSM" FAMILY OF PHYSICS SUBROUTINES FOR A -! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE ICE TEMPERATURE, SKIN -! TEMPERATURE, SNOWPACK WATER CONTENT, SNOWDEPTH, AND ALL TERMS OF THE -! SURFACE ENERGY BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF +! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE ICE TEMPERATURE, SKIN +! TEMPERATURE, SNOWPACK WATER CONTENT, SNOWDEPTH, AND ALL TERMS OF THE +! SURFACE ENERGY BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF ! DOWNWARD RADIATION AND PRECIP) ! ---------------------------------------------------------------------- ! SFLX ARGUMENT LIST KEY: @@ -196,10 +196,10 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & REAL, PARAMETER :: LVH2O = 2.501E+6 REAL, PARAMETER :: LSUBS = 2.83E+6 REAL, PARAMETER :: R = 287.04 - + errmsg = '' errflg = 0 - + ! ---------------------------------------------------------------------- iloc = iiloc jloc = jjloc @@ -210,7 +210,7 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & END DO ! ---------------------------------------------------------------------- -! IF S.W.E. (SNEQV) BELOW THRESHOLD LOWER BOUND (0.10 M FOR GLACIAL +! IF S.W.E. (SNEQV) BELOW THRESHOLD LOWER BOUND (0.10 M FOR GLACIAL ! ICE), THEN SET AT LOWER BOUND ! ---------------------------------------------------------------------- IF ( SNEQV < 0.10 ) THEN @@ -270,7 +270,7 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & ! ---------------------------------------------------------------------- ! kmh 09/04/2006 set Snow Density at 0.2 g/cm**3 ! for "cold permanent ice" or new "dry" snow -! if soil temperature less than 268.15 K, treat as typical +! if soil temperature less than 268.15 K, treat as typical ! Antarctic/Greenland snow firn ! ---------------------------------------------------------------------- IF ( SNCOVR .GT. 0.99 ) THEN @@ -293,17 +293,17 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & ! KWM: Set SNCOVR to 1.0 because SNUP is set small in VEGPARM.TBL, ! and SNEQV is at least 0.1 (as set above) ! ---------------------------------------------------------------------- - SNCOVR = 1.0 + SNCOVR = 1.0 ! ---------------------------------------------------------------------- ! DETERMINE SURFACE ALBEDO MODIFICATION DUE TO SNOWDEPTH STATE. ! ---------------------------------------------------------------------- CALL ALCALC (ALB,SNOALB,EMBRD,T1,ALBEDO,EMISSI, & - & DT,SNOWNG,SNOTIME1) + & DT,SNOWNG,SNOTIME1) ! ---------------------------------------------------------------------- -! THERMAL CONDUCTIVITY +! THERMAL CONDUCTIVITY ! ---------------------------------------------------------------------- DF1 = SNCOND @@ -402,7 +402,7 @@ SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & SSOIL = -1.0* SSOIL ! ---------------------------------------------------------------------- -! FOR THE CASE OF GLACIAL-ICE, ADD ANY SNOWMELT DIRECTLY TO SURFACE +! FOR THE CASE OF GLACIAL-ICE, ADD ANY SNOWMELT DIRECTLY TO SURFACE ! RUNOFF (RUNOFF1) SINCE THERE IS NO SOIL MEDIUM ! ---------------------------------------------------------------------- RUNOFF1 = SNOMLT / DT @@ -891,7 +891,7 @@ SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,NSOIL,DT,DF1, & & SNOEXP = 2.0 ! ---------------------------------------------------------------------- -! FOR GLACIAL-ICE, SNOWCOVER FRACTION = 1.0, AND SUBLIMATION IS AT THE +! FOR GLACIAL-ICE, SNOWCOVER FRACTION = 1.0, AND SUBLIMATION IS AT THE ! POTENTIAL RATE. ! ---------------------------------------------------------------------- ! INITIALIZE EVAP TERMS. @@ -1052,7 +1052,7 @@ SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,NSOIL,DT,DF1, & ! SPECIAL VALUES THAT ENSURE THAT GROUND HEAT FLUX CALCULATED IN SHFLX ! MATCHES THAT ALREADY COMPUTED FOR BELOW THE SNOWPACK, THUS THE SFC ! HEAT FLUX TO BE COMPUTED IN SHFLX WILL EFFECTIVELY BE THE FLUX AT THE -! SNOW TOP SURFACE. +! SNOW TOP SURFACE. ! ---------------------------------------------------------------------- ZZ1 = 1.0 YY = STC (1) -0.5* SSOIL * ZSOIL (1)* ZZ1/ DF1 @@ -1221,7 +1221,7 @@ SUBROUTINE SNOWZ0 (Z0, Z0BRD, SNOWH) BURIAL = 7.0*Z0BRD - SNOWH IF(BURIAL.LE.0.0007) THEN Z0EFF = Z0S - ELSE + ELSE Z0EFF = BURIAL/7.0 ENDIF diff --git a/physics/radiation_clouds.f b/physics/radiation_clouds.f index 65f483821..b04c3ff7a 100644 --- a/physics/radiation_clouds.f +++ b/physics/radiation_clouds.f @@ -184,7 +184,7 @@ !! !! Sub-grid cloud approximation (namelist control parameter - \b ISUBC_LW=2, \b ISUBC_SW=2) !!\n ISUBC=0: grid averaged quantities, without sub-grid cloud approximation -!!\n ISUBC=1: with McICA sub-grid approximation (use prescribed permutation seeds) +!!\n ISUBC=1: with McICA sub-grid approximation (use prescribed permutation seeds) !!\n ISUBC=2: with McICA sub-grid approximation (use random permutation seeds) !! !!\version NCEP-Radiation_clouds v5.1 Nov 2012 @@ -192,7 +192,7 @@ !! @} !> This module computes cloud related quantities for radiation computations. - module module_radiation_clouds + module module_radiation_clouds ! use physparam, only : icldflg, iovrsw, iovrlw, & & lcrick, lcnorm, lnoprec, & @@ -626,7 +626,7 @@ subroutine progcld1 & enddo endif -!> - Compute SFC/low/middle/high cloud top pressure for each cloud +!> - Compute SFC/low/middle/high cloud top pressure for each cloud !! domain for given latitude. ! ptopc(k,i): top presure of each cld domain (k=1-4 are sfc,L,m,h; ! --- i=1,2 are low-lat (<45 degree) and pole regions) @@ -755,14 +755,14 @@ subroutine progcld1 & enddo endif -!> - Compute effective ice cloud droplet radius following Heymsfield +!> - Compute effective ice cloud droplet radius following Heymsfield !! and McFarquhar (1996) \cite heymsfield_and_mcfarquhar_1996. if(.not.effr_in) then do k = 1, NLAY do i = 1, IX tem2 = tlyr(i,k) - con_ttp - + if (cip(i,k) > 0.0) then tem3 = gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k)) @@ -810,8 +810,8 @@ subroutine progcld1 & !> - Call gethml() to compute low,mid,high,total, and boundary layer !! cloud fractions and clouds top/bottom layer indices for low, mid, -!! and high clouds. The three cloud domain boundaries are defined by -!! ptopc. The cloud overlapping method is defined by control flag +!! and high clouds. The three cloud domain boundaries are defined by +!! ptopc. The cloud overlapping method is defined by control flag !! 'iovr', which may be different for lw and sw radiation programs. call gethml & ! --- inputs: @@ -852,7 +852,7 @@ end subroutine progcld1 !!\param delp (IX,NLAY), model layer pressure thickness in mb (100Pa) !!\param IX horizontal dimention !!\param NLAY,NLP1 vertical layer/level dimensions -!!\param lmfshal flag for mass-flux shallow convection scheme in the cloud fraction calculation +!!\param lmfshal flag for mass-flux shallow convection scheme in the cloud fraction calculation !!\param lmfdeep2 flag for mass-flux deep convection scheme in the cloud fraction calculation !!\param clouds (IX,NLAY,NF_CLDS), cloud profiles !!\n (:,:,1) - layer total cloud fraction @@ -872,10 +872,10 @@ end subroutine progcld1 !> @{ subroutine progcld2 & & ( plyr,plvl,tlyr,qlyr,qstl,rhly,tvly,clw, & ! --- inputs: - & xlat,xlon,slmsk,dz,delp, & + & xlat,xlon,slmsk,dz,delp, & & ntrac, ntcw, ntiw, ntrw, & & IX, NLAY, NLP1, & - & lmfshal, lmfdeep2, & + & lmfshal, lmfdeep2, & & clouds,clds,mtop,mbot,de_lgth & ! --- outputs: & ) @@ -1055,7 +1055,7 @@ subroutine progcld2 & enddo !> - Compute cloud ice effective radii - + do k = 1, NLAY do i = 1, IX tem2 = tlyr(i,k) - con_ttp @@ -1164,7 +1164,7 @@ subroutine progcld2 & clouds(i,k,3) = rew(i,k) clouds(i,k,4) = cip(i,k) clouds(i,k,5) = rei(i,k) - clouds(i,k,6) = crp(i,k) ! added for Thompson + clouds(i,k,6) = crp(i,k) ! added for Thompson clouds(i,k,7) = rer(i,k) clouds(i,k,8) = csp(i,k) ! added for Thompson clouds(i,k,9) = res(i,k) @@ -1230,7 +1230,7 @@ end subroutine progcld2 !!\param nlay,nlp1 vertical layer/level dimensions !!\param deltaq (ix,nlay), half total water distribution width !!\param sup supersaturation -!!\param kdt +!!\param kdt !!\param me print control flag !!\param clouds (ix,nlay,nf_clds), cloud profiles !!\n (:,:,1) - layer total cloud fraction @@ -1608,7 +1608,7 @@ end subroutine progcld3 !----------------------------------- !> \ingroup module_radiation_clouds -!> This subroutine computes cloud related quantities using +!> This subroutine computes cloud related quantities using !! GFDL Lin MP prognostic cloud microphysics scheme. !!\param plyr (ix,nlay), model layer mean pressure in mb (100Pa) !!\param plvl (ix,nlp1), model level pressure in mb (100Pa) @@ -1631,7 +1631,7 @@ end subroutine progcld3 !!\param nlay vertical layer dimension !!\param nlp1 vertical level dimension !!\param clouds (ix,nlay,nf_clds), cloud profiles -!!\n clouds(:,:,1) - layer total cloud fraction +!!\n clouds(:,:,1) - layer total cloud fraction !!\n clouds(:,:,2) - layer cloud liquid water path (\f$g m^{-2}\f$) !!\n clouds(:,:,3) - mean effective radius for liquid cloud (micron) !!\n clouds(:,:,4) - layer cloud ice water path (\f$g m^{-2}\f$) @@ -1646,10 +1646,10 @@ end subroutine progcld3 !!\param de_lgth clouds decorrelation length (km) !>\section gen_progcld4 progcld4 General Algorithm !! @{ - subroutine progcld4 & + subroutine progcld4 & & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw,cnvw,cnvc, & ! --- inputs: & xlat,xlon,slmsk,cldtot, dz, delp, & - & IX, NLAY, NLP1, & + & IX, NLAY, NLP1, & & clouds,clds,mtop,mbot,de_lgth & ! --- outputs: & ) @@ -1981,9 +1981,9 @@ end subroutine progcld4 !!\n clouds(:,:,8) - layer snow flake water path (\f$g m^{-2}\f$) !!\n clouds(:,:,9) - mean effective radius for snow flake (micron) !>\param clds (ix,5), fraction of clouds for low, mid, hi, tot, bl -!>\param mtop (ix,3), vertical indices for low, mid, hi cloud tops +!>\param mtop (ix,3), vertical indices for low, mid, hi cloud tops !>\param mbot (ix,3), vertical indices for low, mid, hi cloud bases -!>\param de_lgth clouds decorrelation length (km) +!>\param de_lgth clouds decorrelation length (km) !>\section gen_progcld4o progcld4o General Algorithm !! @{ subroutine progcld4o & @@ -2230,7 +2230,7 @@ subroutine progcld4o & clouds(i,k,3) = rew(i,k) clouds(i,k,4) = cip(i,k) clouds(i,k,5) = rei(i,k) - clouds(i,k,6) = crp(i,k) + clouds(i,k,6) = crp(i,k) clouds(i,k,7) = rer(i,k) clouds(i,k,8) = csp(i,k) clouds(i,k,9) = rei(i,k) @@ -2364,7 +2364,7 @@ subroutine progcld5 & ! --- inputs integer, intent(in) :: IX, NLAY, NLP1, ICLOUD - integer, intent(in) :: ntrac, ntcw, ntiw, ntrw + integer, intent(in) :: ntrac, ntcw, ntiw, ntrw logical, intent(in) :: uni_cld, lmfshal, lmfdeep2 @@ -2424,9 +2424,9 @@ subroutine progcld5 & crp (i,k) = 0.0 csp (i,k) = 0.0 rew (i,k) = re_cloud(i,k) - rei (i,k) = re_ice(i,k) + rei (i,k) = re_ice(i,k) rer (i,k) = rrain_def ! default rain radius to 1000 micron - res (i,k) = re_snow(i,K) + res (i,k) = re_snow(i,K) ! tem2d (i,k) = min( 1.0, max( 0.0, (con_ttp-tlyr(i,k))*0.05 ) ) clwf(i,k) = 0.0 enddo @@ -2452,7 +2452,7 @@ subroutine progcld5 & do k = 1, NLAY do i = 1, IX - clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) enddo enddo !> - Find top pressure for each cloud domain for given latitude. @@ -2573,7 +2573,7 @@ subroutine progcld5 & enddo enddo endif -!mz +!mz if (icloud .ne. 0) then ! assign/calculate efective radii for cloud water, ice, rain, snow @@ -2595,7 +2595,7 @@ subroutine progcld5 & endif enddo -!> -# Compute effective ice cloud droplet radius following Heymsfield +!> -# Compute effective ice cloud droplet radius following Heymsfield !! and McFarquhar (1996) \cite heymsfield_and_mcfarquhar_1996. do k = 1, NLAY @@ -2617,13 +2617,13 @@ subroutine progcld5 & rei(i,k) = max(25.,rei(i,k)) !mz* HWRF endif rei(i,k) = min(rei(i,k), 135.72) !- 1.0315*rei<= 140 microns - enddo - enddo + enddo + enddo -!mz +!mz !> -# Compute effective snow cloud droplet radius - do k = 1, NLAY - do i = 1, IX + do k = 1, NLAY + do i = 1, IX res(i,k) = 10.0 enddo enddo @@ -2637,14 +2637,14 @@ subroutine progcld5 & clouds(i,k,3) = rew(i,k) clouds(i,k,4) = cip(i,k) clouds(i,k,5) = rei(i,k) - clouds(i,k,6) = crp(i,k) ! added for Thompson + clouds(i,k,6) = crp(i,k) ! added for Thompson clouds(i,k,7) = rer(i,k) !mz inflg .ne.5 - clouds(i,k,8) = 0. + clouds(i,k,8) = 0. clouds(i,k,9) = 10. !mz for diagnostics? re_cloud(i,k) = rew(i,k) - re_ice(i,k) = rei(i,k) + re_ice(i,k) = rei(i,k) re_snow(i,k) = 10. enddo @@ -2713,296 +2713,296 @@ subroutine progcld6 & ! subprograms called: gethml ! ! ! ! attributes: ! -! language: fortran 90 ! -! machine: ibm-sp, sgi ! -! ! -! ! -! ==================== definition of variables ==================== ! -! ! -! ! -! input variables: ! -! plyr (IX,NLAY) : model layer mean pressure in mb (100Pa) ! -! plvl (IX,NLP1) : model level pressure in mb (100Pa) ! -! tlyr (IX,NLAY) : model layer mean temperature in k ! -! tvly (IX,NLAY) : model layer virtual temperature in k ! -! qlyr (IX,NLAY) : layer specific humidity in gm/gm ! -! qstl (IX,NLAY) : layer saturate humidity in gm/gm ! -! rhly (IX,NLAY) : layer relative humidity (=qlyr/qstl) ! -! clw (IX,NLAY,ntrac) : layer cloud condensate amount ! -! xlat (IX) : grid latitude in radians, default to pi/2 -> -pi/2! -! range, otherwise see in-line comment ! -! xlon (IX) : grid longitude in radians (not used) ! -! slmsk (IX) : sea/land mask array (sea:0,land:1,sea-ice:2) ! -! dz (ix,nlay) : layer thickness (km) ! -! delp (ix,nlay) : model layer pressure thickness in mb (100Pa) ! -! IX : horizontal dimention ! -! NLAY,NLP1 : vertical layer/level dimensions ! -! uni_cld : logical - true for cloud fraction from shoc ! -! lmfshal : logical - true for mass flux shallow convection ! -! lmfdeep2 : logical - true for mass flux deep convection ! -! cldcov : layer cloud fraction (used when uni_cld=.true. ! -! ! -! output variables: ! -! clouds(IX,NLAY,NF_CLDS) : cloud profiles ! -! clouds(:,:,1) - layer total cloud fraction ! -! clouds(:,:,2) - layer cloud liq water path (g/m**2) ! -! clouds(:,:,3) - mean eff radius for liq cloud (micron) ! -! clouds(:,:,4) - layer cloud ice water path (g/m**2) ! -! clouds(:,:,5) - mean eff radius for ice cloud (micron) ! -! clouds(:,:,6) - layer rain drop water path not assigned ! -! clouds(:,:,7) - mean eff radius for rain drop (micron) ! -! *** clouds(:,:,8) - layer snow flake water path not assigned ! -! clouds(:,:,9) - mean eff radius for snow flake (micron) ! -! *** fu's scheme need to be normalized by snow density (g/m**3/1.0e6) ! -! clds (IX,5) : fraction of clouds for low, mid, hi, tot, bl ! -! mtop (IX,3) : vertical indices for low, mid, hi cloud tops ! -! mbot (IX,3) : vertical indices for low, mid, hi cloud bases ! -! de_lgth(ix) : clouds decorrelation length (km) ! -! ! -! module variables: ! -! ivflip : control flag of vertical index direction ! -! =0: index from toa to surface ! -! =1: index from surface to toa ! -! lmfshal : mass-flux shallow conv scheme flag ! -! lmfdeep2 : scale-aware mass-flux deep conv scheme flag ! -! lcrick : control flag for eliminating CRICK ! -! =t: apply layer smoothing to eliminate CRICK ! -! =f: do not apply layer smoothing ! -! lcnorm : control flag for in-cld condensate ! -! =t: normalize cloud condensate ! -! =f: not normalize cloud condensate ! -! ! -! ==================== end of description ===================== ! -! +! language: fortran 90 ! +! machine: ibm-sp, sgi ! +! ! +! ! +! ==================== definition of variables ==================== ! +! ! +! ! +! input variables: ! +! plyr (IX,NLAY) : model layer mean pressure in mb (100Pa) ! +! plvl (IX,NLP1) : model level pressure in mb (100Pa) ! +! tlyr (IX,NLAY) : model layer mean temperature in k ! +! tvly (IX,NLAY) : model layer virtual temperature in k ! +! qlyr (IX,NLAY) : layer specific humidity in gm/gm ! +! qstl (IX,NLAY) : layer saturate humidity in gm/gm ! +! rhly (IX,NLAY) : layer relative humidity (=qlyr/qstl) ! +! clw (IX,NLAY,ntrac) : layer cloud condensate amount ! +! xlat (IX) : grid latitude in radians, default to pi/2 -> -pi/2! +! range, otherwise see in-line comment ! +! xlon (IX) : grid longitude in radians (not used) ! +! slmsk (IX) : sea/land mask array (sea:0,land:1,sea-ice:2) ! +! dz (ix,nlay) : layer thickness (km) ! +! delp (ix,nlay) : model layer pressure thickness in mb (100Pa) ! +! IX : horizontal dimention ! +! NLAY,NLP1 : vertical layer/level dimensions ! +! uni_cld : logical - true for cloud fraction from shoc ! +! lmfshal : logical - true for mass flux shallow convection ! +! lmfdeep2 : logical - true for mass flux deep convection ! +! cldcov : layer cloud fraction (used when uni_cld=.true. ! +! ! +! output variables: ! +! clouds(IX,NLAY,NF_CLDS) : cloud profiles ! +! clouds(:,:,1) - layer total cloud fraction ! +! clouds(:,:,2) - layer cloud liq water path (g/m**2) ! +! clouds(:,:,3) - mean eff radius for liq cloud (micron) ! +! clouds(:,:,4) - layer cloud ice water path (g/m**2) ! +! clouds(:,:,5) - mean eff radius for ice cloud (micron) ! +! clouds(:,:,6) - layer rain drop water path not assigned ! +! clouds(:,:,7) - mean eff radius for rain drop (micron) ! +! *** clouds(:,:,8) - layer snow flake water path not assigned ! +! clouds(:,:,9) - mean eff radius for snow flake (micron) ! +! *** fu's scheme need to be normalized by snow density (g/m**3/1.0e6) ! +! clds (IX,5) : fraction of clouds for low, mid, hi, tot, bl ! +! mtop (IX,3) : vertical indices for low, mid, hi cloud tops ! +! mbot (IX,3) : vertical indices for low, mid, hi cloud bases ! +! de_lgth(ix) : clouds decorrelation length (km) ! +! ! +! module variables: ! +! ivflip : control flag of vertical index direction ! +! =0: index from toa to surface ! +! =1: index from surface to toa ! +! lmfshal : mass-flux shallow conv scheme flag ! +! lmfdeep2 : scale-aware mass-flux deep conv scheme flag ! +! lcrick : control flag for eliminating CRICK ! +! =t: apply layer smoothing to eliminate CRICK ! +! =f: do not apply layer smoothing ! +! lcnorm : control flag for in-cld condensate ! +! =t: normalize cloud condensate ! +! =f: not normalize cloud condensate ! +! ! +! ==================== end of description ===================== ! +! implicit none ! --- inputs integer, intent(in) :: IX, NLAY, NLP1 integer, intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl - logical, intent(in) :: uni_cld, lmfshal, lmfdeep2 - - real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, plyr, & - & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, & - & re_cloud, re_ice, re_snow - - real (kind=kind_phys), dimension(:,:,:), intent(in) :: clw - - real (kind=kind_phys), dimension(:), intent(in) :: xlat, xlon, & - & slmsk - -! --- outputs - real (kind=kind_phys), dimension(:,:,:), intent(out) :: clouds - - real (kind=kind_phys), dimension(:,:), intent(out) :: clds - real (kind=kind_phys), dimension(:), intent(out) :: de_lgth - - integer, dimension(:,:), intent(out) :: mtop,mbot - -! --- local variables: - real (kind=kind_phys), dimension(IX,NLAY) :: cldtot, cldcnv, & - & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf - - real (kind=kind_phys) :: ptop1(IX,NK_CLDS+1), rxlat(ix) + logical, intent(in) :: uni_cld, lmfshal, lmfdeep2 + + real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, plyr, & + & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, & + & re_cloud, re_ice, re_snow + + real (kind=kind_phys), dimension(:,:,:), intent(in) :: clw + + real (kind=kind_phys), dimension(:), intent(in) :: xlat, xlon, & + & slmsk + +! --- outputs + real (kind=kind_phys), dimension(:,:,:), intent(out) :: clouds + + real (kind=kind_phys), dimension(:,:), intent(out) :: clds + real (kind=kind_phys), dimension(:), intent(out) :: de_lgth + + integer, dimension(:,:), intent(out) :: mtop,mbot + +! --- local variables: + real (kind=kind_phys), dimension(IX,NLAY) :: cldtot, cldcnv, & + & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf + + real (kind=kind_phys) :: ptop1(IX,NK_CLDS+1), rxlat(ix) real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh, value, & & tem1, tem2, tem3 integer :: i, k, id, nf - -! --- constant values -! real (kind=kind_phys), parameter :: xrc3 = 200. - real (kind=kind_phys), parameter :: xrc3 = 100. - -! -!===> ... begin here - -! - do nf=1,nf_clds - do k=1,nlay - do i=1,ix - clouds(i,k,nf) = 0.0 - enddo - enddo - enddo -! clouds(:,:,:) = 0.0 - - do k = 1, NLAY - do i = 1, IX - cldtot(i,k) = 0.0 - cldcnv(i,k) = 0.0 - cwp (i,k) = 0.0 - cip (i,k) = 0.0 - crp (i,k) = 0.0 - csp (i,k) = 0.0 - rew (i,k) = re_cloud(i,k) - rei (i,k) = re_ice(i,k) - rer (i,k) = rrain_def ! default rain radius to 1000 micron - res (i,k) = re_snow(i,K) -! tem2d (i,k) = min( 1.0, max( 0.0, (con_ttp-tlyr(i,k))*0.05 ) ) - clwf(i,k) = 0.0 - enddo - enddo -! -! -! if ( lcrick ) then -! do i = 1, IX -! clwf(i,1) = 0.75*clw(i,1) + 0.25*clw(i,2) -! clwf(i,nlay) = 0.75*clw(i,nlay) + 0.25*clw(i,nlay-1) -! enddo -! do k = 2, NLAY-1 -! do i = 1, IX -! clwf(i,K) = 0.25*clw(i,k-1) + 0.5*clw(i,k) + 0.25*clw(i,k+1) -! enddo -! enddo -! else -! do k = 1, NLAY -! do i = 1, IX -! clwf(i,k) = clw(i,k) -! enddo -! enddo -! endif - - do k = 1, NLAY - do i = 1, IX - clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw) - enddo - enddo -!> - Find top pressure for each cloud domain for given latitude. -!! ptopc(k,i): top presure of each cld domain (k=1-4 are sfc,L,m,h; -!! i=1,2 are low-lat (<45 degree) and pole regions) - - do i =1, IX - rxlat(i) = abs( xlat(i) / con_pi ) ! if xlat in pi/2 -> -pi/2 range -! rxlat(i) = abs(0.5 - xlat(i)/con_pi) ! if xlat in 0 -> pi range - enddo - - do id = 1, 4 - tem1 = ptopc(id,2) - ptopc(id,1) - - do i =1, IX - ptop1(i,id) = ptopc(id,1) + tem1*max( 0.0, 4.0*rxlat(i)-1.0 ) - enddo - enddo - -!> - Compute cloud liquid/ice condensate path in \f$ g/m^2 \f$ . - - do k = 1, NLAY - do i = 1, IX - cwp(i,k) = max(0.0, clw(i,k,ntcw) * gfac * delp(i,k)) - cip(i,k) = max(0.0, clw(i,k,ntiw) * gfac * delp(i,k)) - crp(i,k) = max(0.0, clw(i,k,ntrw) * gfac * delp(i,k)) - csp(i,k) = max(0.0, (clw(i,k,ntsw)+clw(i,k,ntgl)) * & - & gfac * delp(i,k)) - enddo - enddo - - if (uni_cld) then ! use unified sgs clouds generated outside - do k = 1, NLAY - do i = 1, IX - cldtot(i,k) = cldcov(i,k) - enddo - enddo - - else - + +! --- constant values +! real (kind=kind_phys), parameter :: xrc3 = 200. + real (kind=kind_phys), parameter :: xrc3 = 100. + +! +!===> ... begin here + +! + do nf=1,nf_clds + do k=1,nlay + do i=1,ix + clouds(i,k,nf) = 0.0 + enddo + enddo + enddo +! clouds(:,:,:) = 0.0 + + do k = 1, NLAY + do i = 1, IX + cldtot(i,k) = 0.0 + cldcnv(i,k) = 0.0 + cwp (i,k) = 0.0 + cip (i,k) = 0.0 + crp (i,k) = 0.0 + csp (i,k) = 0.0 + rew (i,k) = re_cloud(i,k) + rei (i,k) = re_ice(i,k) + rer (i,k) = rrain_def ! default rain radius to 1000 micron + res (i,k) = re_snow(i,K) +! tem2d (i,k) = min( 1.0, max( 0.0, (con_ttp-tlyr(i,k))*0.05 ) ) + clwf(i,k) = 0.0 + enddo + enddo +! +! +! if ( lcrick ) then +! do i = 1, IX +! clwf(i,1) = 0.75*clw(i,1) + 0.25*clw(i,2) +! clwf(i,nlay) = 0.75*clw(i,nlay) + 0.25*clw(i,nlay-1) +! enddo +! do k = 2, NLAY-1 +! do i = 1, IX +! clwf(i,K) = 0.25*clw(i,k-1) + 0.5*clw(i,k) + 0.25*clw(i,k+1) +! enddo +! enddo +! else +! do k = 1, NLAY +! do i = 1, IX +! clwf(i,k) = clw(i,k) +! enddo +! enddo +! endif + + do k = 1, NLAY + do i = 1, IX + clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw) + enddo + enddo +!> - Find top pressure for each cloud domain for given latitude. +!! ptopc(k,i): top presure of each cld domain (k=1-4 are sfc,L,m,h; +!! i=1,2 are low-lat (<45 degree) and pole regions) + + do i =1, IX + rxlat(i) = abs( xlat(i) / con_pi ) ! if xlat in pi/2 -> -pi/2 range +! rxlat(i) = abs(0.5 - xlat(i)/con_pi) ! if xlat in 0 -> pi range + enddo + + do id = 1, 4 + tem1 = ptopc(id,2) - ptopc(id,1) + + do i =1, IX + ptop1(i,id) = ptopc(id,1) + tem1*max( 0.0, 4.0*rxlat(i)-1.0 ) + enddo + enddo + +!> - Compute cloud liquid/ice condensate path in \f$ g/m^2 \f$ . + + do k = 1, NLAY + do i = 1, IX + cwp(i,k) = max(0.0, clw(i,k,ntcw) * gfac * delp(i,k)) + cip(i,k) = max(0.0, clw(i,k,ntiw) * gfac * delp(i,k)) + crp(i,k) = max(0.0, clw(i,k,ntrw) * gfac * delp(i,k)) + csp(i,k) = max(0.0, (clw(i,k,ntsw)+clw(i,k,ntgl)) * & + & gfac * delp(i,k)) + enddo + enddo + + if (uni_cld) then ! use unified sgs clouds generated outside + do k = 1, NLAY + do i = 1, IX + cldtot(i,k) = cldcov(i,k) + enddo + enddo + + else + !> - Calculate layer cloud fraction. - clwmin = 0.0 - if (.not. lmfshal) then - do k = 1, NLAY - do i = 1, IX - clwt = 1.0e-6 * (plyr(i,k)*0.001) -! clwt = 2.0e-6 * (plyr(i,k)*0.001) - - if (clwf(i,k) > clwt) then - - onemrh= max( 1.e-10, 1.0-rhly(i,k) ) - clwm = clwmin / max( 0.01, plyr(i,k)*0.001 ) - - tem1 = min(max(sqrt(sqrt(onemrh*qstl(i,k))),0.0001),1.0) - tem1 = 2000.0 / tem1 - -! tem1 = 1000.0 / tem1 - - value = max( min( tem1*(clwf(i,k)-clwm), 50.0 ), 0.0 ) - tem2 = sqrt( sqrt(rhly(i,k)) ) - - cldtot(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) - endif - enddo - enddo - else - do k = 1, NLAY - do i = 1, IX - clwt = 1.0e-6 * (plyr(i,k)*0.001) -! clwt = 2.0e-6 * (plyr(i,k)*0.001) - - if (clwf(i,k) > clwt) then - onemrh= max( 1.e-10, 1.0-rhly(i,k) ) - clwm = clwmin / max( 0.01, plyr(i,k)*0.001 ) -! - tem1 = min(max((onemrh*qstl(i,k))**0.49,0.0001),1.0) !jhan - if (lmfdeep2) then - tem1 = xrc3 / tem1 - else - tem1 = 100.0 / tem1 - endif -! - value = max( min( tem1*(clwf(i,k)-clwm), 50.0 ), 0.0 ) - tem2 = sqrt( sqrt(rhly(i,k)) ) - - cldtot(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) - endif - enddo - enddo - endif - - endif ! if (uni_cld) then - - do k = 1, NLAY - do i = 1, IX - if (cldtot(i,k) < climit) then - cldtot(i,k) = 0.0 - cwp(i,k) = 0.0 - cip(i,k) = 0.0 - crp(i,k) = 0.0 - csp(i,k) = 0.0 - endif - enddo - enddo - - if ( lcnorm ) then - do k = 1, NLAY - do i = 1, IX - if (cldtot(i,k) >= climit) then - tem1 = 1.0 / max(climit2, cldtot(i,k)) - cwp(i,k) = cwp(i,k) * tem1 - cip(i,k) = cip(i,k) * tem1 - crp(i,k) = crp(i,k) * tem1 - csp(i,k) = csp(i,k) * tem1 - endif - enddo - enddo - endif - -! - do k = 1, NLAY - do i = 1, IX - clouds(i,k,1) = cldtot(i,k) - clouds(i,k,2) = cwp(i,k) - clouds(i,k,3) = rew(i,k) - clouds(i,k,4) = cip(i,k) - clouds(i,k,5) = rei(i,k) - clouds(i,k,6) = crp(i,k) ! added for Thompson - clouds(i,k,7) = rer(i,k) - clouds(i,k,8) = csp(i,k) ! added for Thompson - clouds(i,k,9) = res(i,k) - enddo - enddo - -! --- ... estimate clouds decorrelation length in km -! this is only a tentative test, need to consider change later + clwmin = 0.0 + if (.not. lmfshal) then + do k = 1, NLAY + do i = 1, IX + clwt = 1.0e-6 * (plyr(i,k)*0.001) +! clwt = 2.0e-6 * (plyr(i,k)*0.001) + + if (clwf(i,k) > clwt) then + + onemrh= max( 1.e-10, 1.0-rhly(i,k) ) + clwm = clwmin / max( 0.01, plyr(i,k)*0.001 ) + + tem1 = min(max(sqrt(sqrt(onemrh*qstl(i,k))),0.0001),1.0) + tem1 = 2000.0 / tem1 + +! tem1 = 1000.0 / tem1 + + value = max( min( tem1*(clwf(i,k)-clwm), 50.0 ), 0.0 ) + tem2 = sqrt( sqrt(rhly(i,k)) ) + + cldtot(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) + endif + enddo + enddo + else + do k = 1, NLAY + do i = 1, IX + clwt = 1.0e-6 * (plyr(i,k)*0.001) +! clwt = 2.0e-6 * (plyr(i,k)*0.001) + + if (clwf(i,k) > clwt) then + onemrh= max( 1.e-10, 1.0-rhly(i,k) ) + clwm = clwmin / max( 0.01, plyr(i,k)*0.001 ) +! + tem1 = min(max((onemrh*qstl(i,k))**0.49,0.0001),1.0) !jhan + if (lmfdeep2) then + tem1 = xrc3 / tem1 + else + tem1 = 100.0 / tem1 + endif +! + value = max( min( tem1*(clwf(i,k)-clwm), 50.0 ), 0.0 ) + tem2 = sqrt( sqrt(rhly(i,k)) ) + + cldtot(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) + endif + enddo + enddo + endif + + endif ! if (uni_cld) then + + do k = 1, NLAY + do i = 1, IX + if (cldtot(i,k) < climit) then + cldtot(i,k) = 0.0 + cwp(i,k) = 0.0 + cip(i,k) = 0.0 + crp(i,k) = 0.0 + csp(i,k) = 0.0 + endif + enddo + enddo + + if ( lcnorm ) then + do k = 1, NLAY + do i = 1, IX + if (cldtot(i,k) >= climit) then + tem1 = 1.0 / max(climit2, cldtot(i,k)) + cwp(i,k) = cwp(i,k) * tem1 + cip(i,k) = cip(i,k) * tem1 + crp(i,k) = crp(i,k) * tem1 + csp(i,k) = csp(i,k) * tem1 + endif + enddo + enddo + endif + +! + do k = 1, NLAY + do i = 1, IX + clouds(i,k,1) = cldtot(i,k) + clouds(i,k,2) = cwp(i,k) + clouds(i,k,3) = rew(i,k) + clouds(i,k,4) = cip(i,k) + clouds(i,k,5) = rei(i,k) + clouds(i,k,6) = crp(i,k) ! added for Thompson + clouds(i,k,7) = rer(i,k) + clouds(i,k,8) = csp(i,k) ! added for Thompson + clouds(i,k,9) = res(i,k) + enddo + enddo + +! --- ... estimate clouds decorrelation length in km +! this is only a tentative test, need to consider change later if ( iovr == 3 ) then do i = 1, ix @@ -3029,7 +3029,7 @@ subroutine progcld6 & ! - return + return !............................................ end subroutine progcld6 @@ -3066,9 +3066,9 @@ end subroutine progcld6 !!\n (:,:,3) - mean eff radius for liq cloud (micron) !!\n (:,:,4) - layer cloud ice water path \f$(g/m^2)\f$ !!\n (:,:,5) - mean eff radius for ice cloud (micron) -!!\n (:,:,6) - layer rain drop water path +!!\n (:,:,6) - layer rain drop water path !!\n (:,:,7) - mean eff radius for rain drop (micron) -!!\n (:,:,8) - layer snow flake water path +!!\n (:,:,8) - layer snow flake water path !!\n (:,:,9) - mean eff radius for snow flake (micron) !!\param clds (IX,5), fraction of clouds for low, mid, hi, tot, bl !!\param mtop (IX,3), vertical indices for low, mid, hi cloud tops @@ -3313,7 +3313,7 @@ subroutine progclduni & endif enddo -!> -# Compute effective ice cloud droplet radius following Heymsfield +!> -# Compute effective ice cloud droplet radius following Heymsfield !! and McFarquhar (1996) \cite heymsfield_and_mcfarquhar_1996. do k = 1, NLAY @@ -3859,17 +3859,17 @@ SUBROUTINE cal_cldfra3(CLDFRA, qv, qc, qi, qs, & !+---+ !..First cut scale-aware. Higher resolution should require closer to -!.. saturated grid box for higher cloud fraction. Simple functions -!.. chosen based on Mocko and Cotton (1995) starting point and desire -!.. to get near 100% RH as grid spacing moves toward 1.0km, but higher -!.. RH over ocean required as compared to over land. - - RH_00L = 0.7 + SQRT(1./(25.0+gridkm*gridkm*gridkm)) - RH_00O = 0.81 + SQRT(1./(50.0+gridkm*gridkm*gridkm)) +!.. saturated grid box for higher cloud fraction. Simple functions +!.. chosen based on Mocko and Cotton (1995) starting point and desire +!.. to get near 100% RH as grid spacing moves toward 1.0km, but higher +!.. RH over ocean required as compared to over land. + + RH_00L = 0.7 + SQRT(1./(25.0+gridkm*gridkm*gridkm)) + RH_00O = 0.81 + SQRT(1./(50.0+gridkm*gridkm*gridkm)) DO j = jts,jte DO k = kts,kte - DO i = its,ite + DO i = its,ite RHI_max = 0.0 CLDFRA(I,K,J) = 0.0 @@ -3942,11 +3942,11 @@ SUBROUTINE cal_cldfra3(CLDFRA, qv, qc, qi, qs, & ENDDO ! if (debug_flag) then -! WRITE (dbg_msg,*) 'DEBUG-GT: finding cloud layers at point (', i, ', ', j, ')' +! WRITE (dbg_msg,*) 'DEBUG-GT: finding cloud layers at point (', i, ', ', j, ')' ! CALL wrf_debug (150, dbg_msg) -! endif +! endif call find_cloudLayers(qvs1d, cfr1d, T1d, P1d, R1d, entrmnt, & - & debug_flag, qc1d, qi1d, qs1d, kts,kte) + & debug_flag, qc1d, qi1d, qs1d, kts,kte) DO k = kts,kte cldfra(i,k,j) = cfr1d(k) @@ -3964,7 +3964,7 @@ END SUBROUTINE cal_cldfra3 !.. unless existing LWC/IWC is already there. SUBROUTINE find_cloudLayers(qvs1d, cfr1d, T1d, P1d, R1d, entrmnt, & - & debugfl, qc1d, qi1d, qs1d, kts,kte) + & debugfl, qc1d, qi1d, qs1d, kts,kte) ! IMPLICIT NONE @@ -4004,8 +4004,8 @@ SUBROUTINE find_cloudLayers(qvs1d, cfr1d, T1d, P1d, R1d, entrmnt, & dz(kts) = dz(kts+1) !..Find tropopause height, best surrogate, because we would not really -!.. wish to put fake clouds into the stratosphere. The 10/1500 ratio -!.. d(Theta)/d(Z) approximates a vertical line on typical SkewT chart +!.. wish to put fake clouds into the stratosphere. The 10/1500 ratio +!.. d(Theta)/d(Z) approximates a vertical line on typical SkewT chart !.. near typical (mid-latitude) tropopause height. Since messy data !.. could give us a false signal of such a transition, do the check over !.. three K-level change, not just a level-to-level check. This method @@ -4069,103 +4069,103 @@ SUBROUTINE find_cloudLayers(qvs1d, cfr1d, T1d, P1d, R1d, entrmnt, & in_cloud = .true. k_cldt = MAX(k_cldt, k) endif - if (in_cloud) then - DO k2 = k_cldt-1, k_m12C, -1 - if (cfr1d(k2).lt.0.01 .or. k2.eq.k_m12C) then - k_cldb = k2+1 - goto 87 - endif - ENDDO - 87 continue - in_cloud = .false. - endif - if ((k_cldt - k_cldb + 1) .ge. 2) then -! if (debugfl) then + if (in_cloud) then + DO k2 = k_cldt-1, k_m12C, -1 + if (cfr1d(k2).lt.0.01 .or. k2.eq.k_m12C) then + k_cldb = k2+1 + goto 87 + endif + ENDDO + 87 continue + in_cloud = .false. + endif + if ((k_cldt - k_cldb + 1) .ge. 2) then +! if (debugfl) then ! print*, 'An ice cloud layer is found between ', k_cldt, ! k_cldb, P1d(k_cldt)*0.01, P1d(k_cldb)*0.01 ! WRITE (dbg_msg,*) 'DEBUG-GT: An ice cloud layer is found between ! ', k_cldt, k_cldb, P1d(k_cldt)*0.01, P1d(k_cldb)*0.01 -! CALL wrf_debug (150, dbg_msg) -! endif +! CALL wrf_debug (150, dbg_msg) +! endif call adjust_cloudIce(cfr1d, qi1d, qs1d, qvs1d, T1d,R1d,dz, & - & entrmnt, k_cldb,k_cldt,kts,kte) - k = k_cldb - else + & entrmnt, k_cldb,k_cldt,kts,kte) + k = k_cldb + else if (cfr1d(k_cldb).gt.0.and.qi1d(k_cldb).lt.1.E-6) & - & qi1d(k_cldb)=1.E-5*cfr1d(k_cldb) - endif - - - k = k - 1 - ENDDO - - - - k_cldb = k_tropo - in_cloud = .false. - k = k_m12C + 2 - DO WHILE (.not. in_cloud .AND. k.gt.kbot) - k_cldt = 0 - if (cfr1d(k).ge.0.01) then - in_cloud = .true. - k_cldt = MAX(k_cldt, k) - endif - if (in_cloud) then - DO k2 = k_cldt-1, kbot, -1 - if (cfr1d(k2).lt.0.01 .or. k2.eq.kbot) then - k_cldb = k2+1 - goto 88 - endif - ENDDO - 88 continue - in_cloud = .false. - endif - if ((k_cldt - k_cldb + 1) .ge. 2) then -! if (debugfl) then + & qi1d(k_cldb)=1.E-5*cfr1d(k_cldb) + endif + + + k = k - 1 + ENDDO + + + + k_cldb = k_tropo + in_cloud = .false. + k = k_m12C + 2 + DO WHILE (.not. in_cloud .AND. k.gt.kbot) + k_cldt = 0 + if (cfr1d(k).ge.0.01) then + in_cloud = .true. + k_cldt = MAX(k_cldt, k) + endif + if (in_cloud) then + DO k2 = k_cldt-1, kbot, -1 + if (cfr1d(k2).lt.0.01 .or. k2.eq.kbot) then + k_cldb = k2+1 + goto 88 + endif + ENDDO + 88 continue + in_cloud = .false. + endif + if ((k_cldt - k_cldb + 1) .ge. 2) then +! if (debugfl) then ! print*, 'A water cloud layer is found between ', k_cldt, ! k_cldb, P1d(k_cldt)*0.01, P1d(k_cldb)*0.01 ! WRITE (dbg_msg,*) 'DEBUG-GT: A water cloud layer is found ! between ', k_cldt, k_cldb, P1d(k_cldt)*0.01, P1d(k_cldb)*0.01 -! CALL wrf_debug (150, dbg_msg) -! endif +! CALL wrf_debug (150, dbg_msg) +! endif call adjust_cloudH2O(cfr1d, qc1d, qvs1d, T1d,R1d,dz, & - & entrmnt, k_cldb,k_cldt,kts,kte) - k = k_cldb - else + & entrmnt, k_cldb,k_cldt,kts,kte) + k = k_cldb + else if (cfr1d(k_cldb).gt.0.and.qc1d(k_cldb).lt.1.E-6) & - & qc1d(k_cldb)=1.E-5*cfr1d(k_cldb) - endif - k = k - 1 - ENDDO - + & qc1d(k_cldb)=1.E-5*cfr1d(k_cldb) + endif + k = k - 1 + ENDDO + !..Do a final total column adjustment since we may have added more than -!1mm -!.. LWP/IWP for multiple cloud decks. - - call adjust_cloudFinal(cfr1d, qc1d, qi1d, R1d,dz, kts,kte,k_tropo) - -! if (debugfl) then -! print*, ' Made-up fake profile of clouds' -! do k = kte, kts, -1 +!1mm +!.. LWP/IWP for multiple cloud decks. + + call adjust_cloudFinal(cfr1d, qc1d, qi1d, R1d,dz, kts,kte,k_tropo) + +! if (debugfl) then +! print*, ' Made-up fake profile of clouds' +! do k = kte, kts, -1 ! write(*,'(i3, 2x, f8.2, 2x, f9.2, 2x, f6.2, 2x, f15.7, 2x, -! f15.7)') & +! f15.7)') & ! & K, T1d(k)-273.15, P1d(k)*0.01, cfr1d(k)*100., -! qc1d(k)*1000.,qi1d(k)*1000. -! enddo -! WRITE (dbg_msg,*) 'DEBUG-GT: Made-up fake profile of clouds' -! CALL wrf_debug (150, dbg_msg) -! do k = kte, kts, -1 +! qc1d(k)*1000.,qi1d(k)*1000. +! enddo +! WRITE (dbg_msg,*) 'DEBUG-GT: Made-up fake profile of clouds' +! CALL wrf_debug (150, dbg_msg) +! do k = kte, kts, -1 ! write(dbg_msg,'(f8.2, 2x, f9.2, 2x, f6.2, 2x, f15.7, 2x, -! f15.7)') & +! f15.7)') & ! & T1d(k)-273.15, P1d(k)*0.01, cfr1d(k)*100., -! qc1d(k)*1000.,qi1d(k)*1000. -! CALL wrf_debug (150, dbg_msg) -! enddo -! endif - - - END SUBROUTINE find_cloudLayers - +! qc1d(k)*1000.,qi1d(k)*1000. +! CALL wrf_debug (150, dbg_msg) +! enddo +! endif + + + END SUBROUTINE find_cloudLayers + !+---+-----------------------------------------------------------------+ SUBROUTINE adjust_cloudIce(cfr,qi,qs,qvs, T,Rho,dz, entr, k1,k2, & diff --git a/physics/radlw_main.F90 b/physics/radlw_main.F90 index f5278ed33..58a446f0b 100644 --- a/physics/radlw_main.F90 +++ b/physics/radlw_main.F90 @@ -229,7 +229,7 @@ ! apr 2012, b. ferrier and y. hou -- added conversion factor to fu's! ! cloud-snow optical property scheme. ! ! nov 2012, yu-tai hou -- modified control parameters thru ! -! module 'physparam'. ! +! module 'physparam'. ! ! FEB 2017 A.Cheng - add odpth output, effective radius input ! ! jun 2018, h-m lin/y-t hou -- added new option of cloud overlap ! ! method 'de-correlation-length' for mcica application ! @@ -238,9 +238,9 @@ !!!!! end descriptions !!!!! !!!!! ============================================================== !!!!! -!> This module contains the CCPP-compliant NCEP's modifications of the +!> This module contains the CCPP-compliant NCEP's modifications of the !! rrtm-lw radiation code from aer inc. - module rrtmg_lw + module rrtmg_lw ! use physparam, only : ilwrate, ilwrgas, ilwcliq, ilwcice, & & isubclw, icldflg, iovrlw, ivflip, & @@ -359,7 +359,7 @@ module rrtmg_lw subroutine rrtmg_lw_init () end subroutine rrtmg_lw_init -!> \defgroup module_radlw_main GFS RRTMG Longwave Module +!> \defgroup module_radlw_main GFS RRTMG Longwave Module !! \brief This module includes NCEP's modifications of the RRTMG-LW radiation !! code from AER. !! @@ -618,8 +618,8 @@ subroutine rrtmg_lw_run & ! ! Dimensions: (ncol,nlay,nbndlw) !mz* output from cldprmc integer :: ncbands ! number of cloud spectral bands - real(kind=kind_phys),dimension(ngptlw,nlay) :: taucmc ! cloud optical depth [mcica] - ! Dimensions: (ngptlw,nlayers) + real(kind=kind_phys),dimension(ngptlw,nlay) :: taucmc ! cloud optical depth [mcica] + ! Dimensions: (ngptlw,nlayers) !mz ! --- outputs: @@ -662,8 +662,8 @@ subroutine rrtmg_lw_run & & scaleminorn2, temcol, dz !mz* - real(kind=rb),dimension(0:nlay,nbands) :: planklay,planklev - real(kind=rb),dimension(0:nlay) :: pz + real(kind=rb),dimension(0:nlay,nbands) :: planklay,planklev + real(kind=rb),dimension(0:nlay) :: pz ! real(kind=rb) :: plankbnd(nbndlw) real (kind=kind_phys), dimension(nbands,0:nlay) :: pklev, pklay @@ -674,7 +674,7 @@ subroutine rrtmg_lw_run & real (kind=kind_phys), dimension(ngptlw,nlay) :: fracs, tautot real (kind=kind_phys), dimension(nlay,ngptlw) :: fracs_r !mz rtrnmc_mcica - real (kind=kind_phys), dimension(nlay,ngptlw) :: taut + real (kind=kind_phys), dimension(nlay,ngptlw) :: taut !mz* Atmosphere/clouds - cldprop real(kind=kind_phys), dimension(ngptlw,nlay) :: cldfmc, & & cldfmc_save ! cloud fraction [mcica] @@ -815,22 +815,22 @@ subroutine rrtmg_lw_run & if (iovrlw == 4 ) then !Add layer height needed for exponential (icld=4) and -! exponential-random (icld=5) overlap options +! exponential-random (icld=5) overlap options !iplon = 1 irng = 0 permuteseed = 150 -!mz* Derive height +!mz* Derive height dzsum =0.0 do k = 1,nlay hgt(iplon,k)= dzsum+0.5*dzlyr(iplon,k)*1000. !km->m - dzsum = dzsum+ dzlyr(iplon,k)*1000. + dzsum = dzsum+ dzlyr(iplon,k)*1000. enddo ! Zero out cloud optical properties here; not used when passing physical properties -! to radiation and taucld is calculated in radiation - do k = 1, nlay +! to radiation and taucld is calculated in radiation + do k = 1, nlay do j = 1, nbands taucld3(j,iplon,k) = 0.0 enddo @@ -843,7 +843,7 @@ subroutine rrtmg_lw_run & & cld_ref_snow, taucld3, & & cldfmcl, & !--output & ciwpmcl, clwpmcl, cswpmcl, reicmcl, relqmcl, & - & resnmcl, taucmcl) + & resnmcl, taucmcl) endif !mz* end @@ -948,7 +948,7 @@ subroutine rrtmg_lw_run & cda4(k) = cld_ref_snow(iplon,k1) enddo ! HWRF RRMTG - if (iovrlw == 4) then !mz HWRF + if (iovrlw == 4) then !mz HWRF do k = 1, nlay k1 = nlp1 - k do ig = 1, ngptlw @@ -1072,7 +1072,7 @@ subroutine rrtmg_lw_run & enddo if (iovrlw == 4) then !mz* Move incoming GCM cloud arrays to RRTMG cloud arrays. -!For GCM input, incoming reicmcl is defined based on selected +!For GCM input, incoming reicmcl is defined based on selected !ice parameterization (inflglw) do k = 1, nlay do ig = 1, ngptlw @@ -1209,12 +1209,12 @@ subroutine rrtmg_lw_run & endif !mz* HWRF: calculate taucmc with mcica - if (iovrlw == 4) then + if (iovrlw == 4) then call cldprmc(nlay, inflglw, iceflglw, liqflglw, & & cldfmc, ciwpmc, & & clwpmc, cswpmc, reicmc, relqmc, resnmc, & & ncbands, taucmc) - endif + endif ! if (lprnt) then ! print *,' after cldprop' @@ -1421,14 +1421,14 @@ end subroutine rrtmg_lw_run !----------------------------------- !> @} subroutine rrtmg_lw_finalize () - end subroutine rrtmg_lw_finalize + end subroutine rrtmg_lw_finalize !> \ingroup module_radlw_main !> \brief This subroutine performs calculations necessary for the initialization !! of the longwave model, which includes non-varying model variables, conversion -!! factors, and look-up tables +!! factors, and look-up tables !! !! Lookup tables are computed for use in the lw !! radiative transfer, and input absorption coefficient data for each @@ -1660,8 +1660,8 @@ end subroutine rlwinit !!\param nlay number of layer number !!\param nlp1 number of veritcal levels !!\param ipseed permutation seed for generating random numbers (isubclw>0) -!!\param dz layer thickness (km) -!!\param de_lgth layer cloud decorrelation length (km) +!!\param dz layer thickness (km) +!!\param de_lgth layer cloud decorrelation length (km) !!\param cldfmc cloud fraction for each sub-column !!\param taucld cloud optical depth for bands (non-mcica) !!\section gen_cldprop cldprop General Algorithm @@ -2042,7 +2042,7 @@ subroutine mcica_subcol & & ) !> -# Sub-column set up according to overlapping assumption: -!! - For random overlap, pick a random value at every level +!! - For random overlap, pick a random value at every level !! - For max-random overlap, pick a random value at every level !! - For maximum overlap, pick same random numebr at every level @@ -3928,7 +3928,7 @@ end subroutine rtrnmc !!\param tautot total optical depth (gas+aerosols) !>\section taumol_gen taumol General Algorithm !! @{ -!! subprograms called: taugb## (## = 01 -16) +!! subprograms called: taugb## (## = 01 -16) subroutine taumol & & ( laytrop,pavel,coldry,colamt,colbrd,wx,tauaer, & ! --- inputs & rfrate,fac00,fac01,fac10,fac11,jp,jt,jt1, & @@ -6960,7 +6960,7 @@ subroutine mcica_subcol_lw(iplon, ncol, nlay, icld, permuteseed, & integer(kind=im), intent(in) :: ncol ! number of columns integer(kind=im), intent(in) :: nlay ! number of model layers integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag - integer(kind=im), intent(in) :: permuteseed ! if the cloud generator is called multiple times, + integer(kind=im), intent(in) :: permuteseed ! if the cloud generator is called multiple times, ! permute the seed between each call. ! between calls for LW and SW, recommended ! permuteseed differes by 'ngpt' @@ -6970,7 +6970,7 @@ subroutine mcica_subcol_lw(iplon, ncol, nlay, icld, permuteseed, & ! Twister ! Atmosphere - real(kind=rb), intent(in) :: play(:,:) ! layer pressures (mb) + real(kind=rb), intent(in) :: play(:,:) ! layer pressures (mb) ! Dimensions: (ncol,nlay) ! mji - Add height @@ -6999,8 +6999,8 @@ subroutine mcica_subcol_lw(iplon, ncol, nlay, icld, permuteseed, & real(kind=rb), intent(in) :: res(:,:) ! snow particle size ! Dimensions: (ncol,nlay) -! ----- Output ----- -! Atmosphere/clouds - cldprmc [mcica] +! ----- Output ----- +! Atmosphere/clouds - cldprmc [mcica] real(kind=rb), intent(out) :: cldfmcl(:,:,:) ! cloud fraction [mcica] ! Dimensions: (ngptlw,ncol,nlay) real(kind=rb), intent(out) :: ciwpmcl(:,:,:) ! in-cloud ice water path [mcica] @@ -7059,7 +7059,7 @@ end subroutine mcica_subcol_lw subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & & irng, pmid, hgt, cld, clwp, ciwp, cswp, tauc, & & cld_stoch, clwp_stoch, ciwp_stoch, & - & cswp_stoch, tauc_stoch, changeSeed) + & cswp_stoch, tauc_stoch, changeSeed) !------------------------------------------------------------------------------------------------- !------------------------------------------------------------------------------------------------- ! Contact: Cecile Hannay (hannay@ucar.edu) @@ -7083,15 +7083,15 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! Overlap assumption: ! The cloud are consistent with 5 overlap assumptions: random, maximum, maximum-random, exponential and exponential random. ! The default option is maximum-random (option 2) -! The options are: 1=random overlap, 2=max/random, 3=maximum overlap, 4=exponential overlap, 5=exp/random +! The options are: 1=random overlap, 2=max/random, 3=maximum overlap, 4=exponential overlap, 5=exp/random ! This is set with the variable "overlap" ! The exponential overlap uses also a length scale, Zo. (real, parameter :: Zo = 2500. ) ! ! Seed: ! If the stochastic cloud generator is called several times during the same timestep, ! one should change the seed between the call to insure that the -! subcolumns are different. -! This is done by changing the argument 'changeSeed' +! subcolumns are different. +! This is done by changing the argument 'changeSeed' ! For example, if one wants to create a set of columns for the ! shortwave and another set for the longwave , ! use 'changeSeed = 1' for the first call and'changeSeed = 2' for the second call @@ -7105,8 +7105,8 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! Option to add diagnostics variables in the history file. (using FINCL in the namelist) ! nsubcol = number of subcolumns ! overlap = overlap type (1-3) -! Zo = length scale -! CLOUD_S = mean of the subcolumn cloud fraction ('_S" means Stochastic) +! Zo = length scale +! CLOUD_S = mean of the subcolumn cloud fraction ('_S" means Stochastic) ! CLDLIQ_S = mean of the subcolumn cloud water ! CLDICE_S = mean of the subcolumn cloud ice ! @@ -7135,7 +7135,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! 0 = kissvec ! 1 = Mersenne Twister integer(kind=im), intent(in) :: nsubcol ! number of sub-columns (g-point intervals) - integer(kind=im), optional, intent(in) :: changeSeed ! allows permuting seed + integer(kind=im), optional, intent(in) :: changeSeed ! allows permuting seed ! Column state (cloud fraction, cloud water, cloud ice) + variables needed to read physics state real(kind=rb), intent(in) :: pmid(:,:) ! layer pressure (Pa) @@ -7185,12 +7185,12 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! real(kind=rb) :: mean_clwp_stoch(ncol, nlay) ! cloud water ! real(kind=rb) :: mean_ciwp_stoch(ncol, nlay) ! cloud ice ! real(kind=rb) :: mean_tauc_stoch(ncol, nlay) ! cloud optical depth -! real(kind=rb) :: mean_ssac_stoch(ncol, nlay) ! cloud single scattering albedo -! real(kind=rb) :: mean_asmc_stoch(ncol, nlay) ! cloud asymmetry parameter +! real(kind=rb) :: mean_ssac_stoch(ncol, nlay) ! cloud single scattering albedo +! real(kind=rb) :: mean_asmc_stoch(ncol, nlay) ! cloud asymmetry parameter ! Set overlap integer(kind=im) :: overlap ! 1 = random overlap, 2 = maximum-random, - ! 3 = maximum overlap, 4 = exponential, + ! 3 = maximum overlap, 4 = exponential, ! 5 = exponential-random real(kind=rb), parameter :: Zo = 2500._rb ! length scale (m) real(kind=rb), dimension(ncol,nlay) :: alpha ! overlap parameter @@ -7233,7 +7233,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! ----- Create seed -------- ! Advance randum number generator by changeseed values - if (irng.eq.0) then + if (irng.eq.0) then ! For kissvec, create a seed that depends on the state of the columns. Maybe not the best way, but it works. ! Must use pmid from bottom four layers. do i=1,ncol @@ -7257,7 +7257,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! generate the random numbers - select case (overlap) + select case (overlap) case(1) ! Random overlap @@ -7268,7 +7268,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & do ilev = 1,nlay call kissvec(seed1, seed2, seed3, seed4, rand_num) ! we get different random number for each level CDF(isubcol,:,ilev) = rand_num - enddo + enddo enddo elseif (irng.eq.1) then do isubcol = 1, nsubcol @@ -7282,7 +7282,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & endif case(2) -! Maximum-Random overlap +! Maximum-Random overlap ! i) pick a random number for top layer. ! ii) walk down the column: ! - if the layer above is cloudy, we use the same random number than in the layer above @@ -7400,10 +7400,10 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & end select -! -- generate subcolumns for homogeneous clouds ----- - do ilev = 1,nlay +! -- generate subcolumns for homogeneous clouds ----- + do ilev = 1,nlay iscloudy(:,:,ilev) = (CDF(:,:,ilev) >= 1._rb - & - & spread(cldf(:,ilev), dim=1, nCopies=nsubcol) ) + & spread(cldf(:,ilev), dim=1, nCopies=nsubcol) ) enddo ! where the subcolumn is cloudy, the subcolumn cloud fraction is 1; @@ -7418,7 +7418,7 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & cld_stoch(isubcol,i,ilev) = 1._rb clwp_stoch(isubcol,i,ilev) = clwp(i,ilev) ciwp_stoch(isubcol,i,ilev) = ciwp(i,ilev) -!mz +!mz ! cswp_stoch(isubcol,i,ilev) = cswp(i,ilev) cswp_stoch(isubcol,i,ilev) = 0._rb n = ngb(isubcol) @@ -7446,13 +7446,13 @@ subroutine generate_stochastic_clouds(ncol, nlay, nsubcol, icld, & ! mean_ssac_stoch(:,:) = 0._rb ! mean_asmc_stoch(:,:) = 0._rb ! do i = 1, nsubcol -! mean_cld_stoch(:,:) = cld_stoch(i,:,:) + mean_cld_stoch(:,:) +! mean_cld_stoch(:,:) = cld_stoch(i,:,:) + mean_cld_stoch(:,:) ! mean_clwp_stoch(:,:) = clwp_stoch( i,:,:) + mean_clwp_stoch(:,:) ! mean_ciwp_stoch(:,:) = ciwp_stoch( i,:,:) + mean_ciwp_stoch(:,:) ! mean_tauc_stoch(:,:) = tauc_stoch( i,:,:) + mean_tauc_stoch(:,:) ! mean_ssac_stoch(:,:) = ssac_stoch( i,:,:) + mean_ssac_stoch(:,:) ! mean_asmc_stoch(:,:) = asmc_stoch( i,:,:) + mean_asmc_stoch(:,:) -! end do +! end do ! mean_cld_stoch(:,:) = mean_cld_stoch(:,:) / nsubcol ! mean_clwp_stoch(:,:) = mean_clwp_stoch(:,:) / nsubcol ! mean_ciwp_stoch(:,:) = mean_ciwp_stoch(:,:) / nsubcol @@ -7464,10 +7464,10 @@ end subroutine generate_stochastic_clouds !------------------------------------------------------------------ ! Private subroutines -!------------------------------------------------------------------ +!------------------------------------------------------------------ -!----------------------------------------------------------------- - subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) +!----------------------------------------------------------------- + subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) !---------------------------------------------------------------- ! public domain code @@ -7478,19 +7478,19 @@ subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) ! The KISS (Keep It Simple Stupid) random number generator. Combines: ! (1) The congruential generator x(n)=69069*x(n-1)+1327217885, period 2^32. ! (2) A 3-shift shift-register generator, period 2^32-1, -! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59 -! Overall period>2^123; +! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59 +! Overall period>2^123; real(kind=rb), dimension(:), intent(inout) :: ran_arr integer(kind=im), dimension(:), intent(inout) :: seed1,seed2,seed3& & ,seed4 integer(kind=im) :: i,sz,kiss integer(kind=im) :: m, k, n -! inline function +! inline function m(k, n) = ieor (k, ishft (k, n) ) sz = size(ran_arr) - do i = 1, sz + do i = 1, sz seed1(i) = 69069_im * seed1(i) + 1327217885_im seed2(i) = m (m (m (seed2(i), 13_im), - 17_im), 5_im) seed3(i) = 18000_im * iand (seed3(i), 65535_im) + & @@ -7499,7 +7499,7 @@ subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) & ishft (seed4(i), - 16_im) kiss = seed1(i) + seed2(i) + ishft (seed3(i), 16_im) + seed4(i) ran_arr(i) = kiss*2.328306e-10_rb + 0.5_rb - end do + end do end subroutine kissvec ! @@ -7517,445 +7517,445 @@ subroutine rtrnmc_mcica(nlayers, istart, iend, iout, pz, semiss, & ! This program calculates the upward fluxes, downward fluxes, and ! heating rates for an arbitrary clear or cloudy atmosphere. The input ! to this program is the atmospheric profile, all Planck function -! information, and the cloud fraction by layer. A variable diffusivity -! angle (SECDIFF) is used for the angle integration. Bands 2-3 and 5-9 -! use a value for SECDIFF that varies from 1.50 to 1.80 as a function of -! the column water vapor, and other bands use a value of 1.66. The Gaussian -! weight appropriate to this angle (WTDIFF=0.5) is applied here. Note that -! use of the emissivity angle for the flux integration can cause errors of -! 1 to 4 W/m2 within cloudy layers. -! Clouds are treated with the McICA stochastic approach and maximum-random -! cloud overlap. -!*************************************************************************** - -! ------- Declarations ------- - -! ----- Input ----- - integer(kind=im), intent(in) :: nlayers ! total number of layers - integer(kind=im), intent(in) :: istart ! beginning band of calculation - integer(kind=im), intent(in) :: iend ! ending band of calculation - integer(kind=im), intent(in) :: iout ! output option flag - -! Atmosphere +! information, and the cloud fraction by layer. A variable diffusivity +! angle (SECDIFF) is used for the angle integration. Bands 2-3 and 5-9 +! use a value for SECDIFF that varies from 1.50 to 1.80 as a function of +! the column water vapor, and other bands use a value of 1.66. The Gaussian +! weight appropriate to this angle (WTDIFF=0.5) is applied here. Note that +! use of the emissivity angle for the flux integration can cause errors of +! 1 to 4 W/m2 within cloudy layers. +! Clouds are treated with the McICA stochastic approach and maximum-random +! cloud overlap. +!*************************************************************************** + +! ------- Declarations ------- + +! ----- Input ----- + integer(kind=im), intent(in) :: nlayers ! total number of layers + integer(kind=im), intent(in) :: istart ! beginning band of calculation + integer(kind=im), intent(in) :: iend ! ending band of calculation + integer(kind=im), intent(in) :: iout ! output option flag + +! Atmosphere real(kind=rb), intent(in) :: pz(0:) ! level (interface) pressures (hPa, mb) - ! Dimensions: (0:nlayers) - real(kind=rb), intent(in) :: pwvcm ! precipitable water vapor (cm) - real(kind=rb), intent(in) :: semiss(:) ! lw surface emissivity - ! Dimensions: (nbndlw) + ! Dimensions: (0:nlayers) + real(kind=rb), intent(in) :: pwvcm ! precipitable water vapor (cm) + real(kind=rb), intent(in) :: semiss(:) ! lw surface emissivity + ! Dimensions: (nbndlw) !mz - real(kind=rb), intent(in) :: planklay(0:,:) ! - ! Dimensions: (nlayers,nbndlw) - real(kind=rb), intent(in) :: planklev(0:,:) ! - ! Dimensions: (0:nlayers,nbndlw) -! real(kind=rb), intent(in) :: plankbnd(:) ! - ! Dimensions: (nbndlw) - real(kind=rb), intent(in) :: fracs(:,:) ! - ! Dimensions: (nlayers,ngptw) - real(kind=rb), intent(in) :: taut(:,:) ! gaseous + aerosol optical depths - ! Dimensions: (nlayers,ngptlw) - -! Clouds - integer(kind=im), intent(in) :: ncbands ! number of cloud spectral bands - real(kind=rb), intent(in) :: cldfmc(:,:) ! layer cloud fraction [mcica] - ! Dimensions: (ngptlw,nlayers) - real(kind=rb), intent(in) :: taucmc(:,:) ! layer cloud optical depth [mcica] - ! Dimensions: (ngptlw,nlayers) - -! ----- Output ----- - real(kind=rb), intent(out) :: totuflux(0:) ! upward longwave flux (w/m2) - ! Dimensions: (0:nlayers) - real(kind=rb), intent(out) :: totdflux(0:) ! downward longwave flux (w/m2) - ! Dimensions: (0:nlayers) -!mz* real(kind=rb), intent(out) :: fnet(0:) ! net longwave flux (w/m2) - ! Dimensions: (0:nlayers) + real(kind=rb), intent(in) :: planklay(0:,:) ! + ! Dimensions: (nlayers,nbndlw) + real(kind=rb), intent(in) :: planklev(0:,:) ! + ! Dimensions: (0:nlayers,nbndlw) +! real(kind=rb), intent(in) :: plankbnd(:) ! + ! Dimensions: (nbndlw) + real(kind=rb), intent(in) :: fracs(:,:) ! + ! Dimensions: (nlayers,ngptw) + real(kind=rb), intent(in) :: taut(:,:) ! gaseous + aerosol optical depths + ! Dimensions: (nlayers,ngptlw) + +! Clouds + integer(kind=im), intent(in) :: ncbands ! number of cloud spectral bands + real(kind=rb), intent(in) :: cldfmc(:,:) ! layer cloud fraction [mcica] + ! Dimensions: (ngptlw,nlayers) + real(kind=rb), intent(in) :: taucmc(:,:) ! layer cloud optical depth [mcica] + ! Dimensions: (ngptlw,nlayers) + +! ----- Output ----- + real(kind=rb), intent(out) :: totuflux(0:) ! upward longwave flux (w/m2) + ! Dimensions: (0:nlayers) + real(kind=rb), intent(out) :: totdflux(0:) ! downward longwave flux (w/m2) + ! Dimensions: (0:nlayers) +!mz* real(kind=rb), intent(out) :: fnet(0:) ! net longwave flux (w/m2) + ! Dimensions: (0:nlayers) real(kind=rb), intent(out) :: htr(:) -!mz real(kind=rb), intent(out) :: htr(0:) ! longwave heating rate (k/day) - ! Dimensions: (0:nlayers) +!mz real(kind=rb), intent(out) :: htr(0:) ! longwave heating rate (k/day) + ! Dimensions: (0:nlayers) real(kind=rb), intent(out) :: totuclfl(0:) ! clear sky upward longwave flux (w/m2) - ! Dimensions: (0:nlayers) + ! Dimensions: (0:nlayers) real(kind=rb), intent(out) :: totdclfl(0:) ! clear sky downward longwave flux (w/m2) - ! Dimensions: (0:nlayers) + ! Dimensions: (0:nlayers) !mz*real(kind=rb), intent(out) :: fnetc(0:) ! clear sky net longwave flux (w/m2) - ! Dimensions: (0:nlayers) - real(kind=rb), intent(out) :: htrc(:) + ! Dimensions: (0:nlayers) + real(kind=rb), intent(out) :: htrc(:) ! real(kind=rb), intent(out) :: htrc(0:) ! clear sky longwave heating rate (k/day) - ! Dimensions: (0:nlayers) - -! ----- Local ----- -! Declarations for radiative transfer + ! Dimensions: (0:nlayers) + +! ----- Local ----- +! Declarations for radiative transfer real (kind=kind_phys), dimension(0:nlayers) :: fnet, fnetc - real(kind=rb) :: abscld(nlayers,ngptlw) - real(kind=rb) :: atot(nlayers) - real(kind=rb) :: atrans(nlayers) - real(kind=rb) :: bbugas(nlayers) - real(kind=rb) :: bbutot(nlayers) - real(kind=rb) :: clrurad(0:nlayers) - real(kind=rb) :: clrdrad(0:nlayers) - real(kind=rb) :: efclfrac(nlayers,ngptlw) - real(kind=rb) :: uflux(0:nlayers) - real(kind=rb) :: dflux(0:nlayers) - real(kind=rb) :: urad(0:nlayers) - real(kind=rb) :: drad(0:nlayers) - real(kind=rb) :: uclfl(0:nlayers) - real(kind=rb) :: dclfl(0:nlayers) - real(kind=rb) :: odcld(nlayers,ngptlw) - - - real(kind=rb) :: secdiff(nbands) ! secant of diffusivity angle + real(kind=rb) :: abscld(nlayers,ngptlw) + real(kind=rb) :: atot(nlayers) + real(kind=rb) :: atrans(nlayers) + real(kind=rb) :: bbugas(nlayers) + real(kind=rb) :: bbutot(nlayers) + real(kind=rb) :: clrurad(0:nlayers) + real(kind=rb) :: clrdrad(0:nlayers) + real(kind=rb) :: efclfrac(nlayers,ngptlw) + real(kind=rb) :: uflux(0:nlayers) + real(kind=rb) :: dflux(0:nlayers) + real(kind=rb) :: urad(0:nlayers) + real(kind=rb) :: drad(0:nlayers) + real(kind=rb) :: uclfl(0:nlayers) + real(kind=rb) :: dclfl(0:nlayers) + real(kind=rb) :: odcld(nlayers,ngptlw) + + + real(kind=rb) :: secdiff(nbands) ! secant of diffusivity angle real(kind=rb) :: transcld, radld, radclrd, plfrac, blay, dplankup,& - & dplankdn - real(kind=rb) :: odepth, odtot, odepth_rec, odtot_rec, gassrc + & dplankdn + real(kind=rb) :: odepth, odtot, odepth_rec, odtot_rec, gassrc real(kind=rb) :: tblind, tfactot, bbd, bbdtot, tfacgas, transc, & - & tausfac - real(kind=rb) :: rad0, reflect, radlu, radclru - - integer(kind=im) :: icldlyr(nlayers) ! flag for cloud in layer - integer(kind=im) :: ibnd, ib, iband, lay, lev, l, ig ! loop indices - integer(kind=im) :: igc ! g-point interval counter - integer(kind=im) :: iclddn ! flag for cloud in down path - integer(kind=im) :: ittot, itgas, itr ! lookup table indices + & tausfac + real(kind=rb) :: rad0, reflect, radlu, radclru + + integer(kind=im) :: icldlyr(nlayers) ! flag for cloud in layer + integer(kind=im) :: ibnd, ib, iband, lay, lev, l, ig ! loop indices + integer(kind=im) :: igc ! g-point interval counter + integer(kind=im) :: iclddn ! flag for cloud in down path + integer(kind=im) :: ittot, itgas, itr ! lookup table indices !mz* real (kind=kind_phys), parameter :: rec_6 = 0.166667 ! The cumulative sum of new g-points for each band integer(kind=im) :: ngs(nbands) ngs(:) = (/10,22,38,52,68,76,88,96,108,114,122,130,134,136,138, & & 140/) - -! ------- Definitions ------- -! input -! nlayers ! number of model layers -! ngptlw ! total number of g-point subintervals -! nbndlw ! number of longwave spectral bands -! ncbands ! number of spectral bands for clouds -! secdiff ! diffusivity angle -! wtdiff ! weight for radiance to flux conversion -! pavel ! layer pressures (mb) -! pz ! level (interface) pressures (mb) -! tavel ! layer temperatures (k) -! tz ! level (interface) temperatures(mb) -! tbound ! surface temperature (k) -! cldfrac ! layer cloud fraction -! taucloud ! layer cloud optical depth -! itr ! integer look-up table index -! icldlyr ! flag for cloudy layers -! iclddn ! flag for cloud in column at any layer -! semiss ! surface emissivities for each band -! reflect ! surface reflectance -! bpade ! 1/(pade constant) -! tau_tbl ! clear sky optical depth look-up table -! exp_tbl ! exponential look-up table for transmittance -! tfn_tbl ! tau transition function look-up table - -! local -! atrans ! gaseous absorptivity -! abscld ! cloud absorptivity -! atot ! combined gaseous and cloud absorptivity -! odclr ! clear sky (gaseous) optical depth -! odcld ! cloud optical depth -! odtot ! optical depth of gas and cloud -! tfacgas ! gas-only pade factor, used for planck fn -! tfactot ! gas and cloud pade factor, used for planck fn -! bbdgas ! gas-only planck function for downward rt -! bbugas ! gas-only planck function for upward rt -! bbdtot ! gas and cloud planck function for downward rt -! bbutot ! gas and cloud planck function for upward calc. -! gassrc ! source radiance due to gas only -! efclfrac ! effective cloud fraction -! radlu ! spectrally summed upward radiance -! radclru ! spectrally summed clear sky upward radiance -! urad ! upward radiance by layer -! clrurad ! clear sky upward radiance by layer -! radld ! spectrally summed downward radiance -! radclrd ! spectrally summed clear sky downward radiance -! drad ! downward radiance by layer -! clrdrad ! clear sky downward radiance by layer - - -! output -! totuflux ! upward longwave flux (w/m2) -! totdflux ! downward longwave flux (w/m2) -! fnet ! net longwave flux (w/m2) -! htr ! longwave heating rate (k/day) -! totuclfl ! clear sky upward longwave flux (w/m2) -! totdclfl ! clear sky downward longwave flux (w/m2) -! fnetc ! clear sky net longwave flux (w/m2) -! htrc ! clear sky longwave heating rate (k/day) - - -!jm not thread safe hvrrtc = '$Revision: 1.3 $' - - do ibnd = 1,nbands!mz*nbndlw - if (ibnd.eq.1 .or. ibnd.eq.4 .or. ibnd.ge.10) then - secdiff(ibnd) = 1.66_rb - else - secdiff(ibnd) = a0(ibnd) + a1(ibnd)*exp(a2(ibnd)*pwvcm) - if (secdiff(ibnd) .gt. 1.80_rb) secdiff(ibnd) = 1.80_rb - if (secdiff(ibnd) .lt. 1.50_rb) secdiff(ibnd) = 1.50_rb - endif - enddo - - urad(0) = 0.0_rb - drad(0) = 0.0_rb - totuflux(0) = 0.0_rb - totdflux(0) = 0.0_rb - clrurad(0) = 0.0_rb - clrdrad(0) = 0.0_rb - totuclfl(0) = 0.0_rb - totdclfl(0) = 0.0_rb - - do lay = 1, nlayers - urad(lay) = 0.0_rb - drad(lay) = 0.0_rb - totuflux(lay) = 0.0_rb - totdflux(lay) = 0.0_rb - clrurad(lay) = 0.0_rb - clrdrad(lay) = 0.0_rb - totuclfl(lay) = 0.0_rb - totdclfl(lay) = 0.0_rb - icldlyr(lay) = 0 - -! Change to band loop? - do ig = 1, ngptlw - if (cldfmc(ig,lay) .eq. 1._rb) then - ib = ngb(ig) - odcld(lay,ig) = secdiff(ib) * taucmc(ig,lay) - transcld = exp(-odcld(lay,ig)) - abscld(lay,ig) = 1._rb - transcld - efclfrac(lay,ig) = abscld(lay,ig) * cldfmc(ig,lay) - icldlyr(lay) = 1 - else - odcld(lay,ig) = 0.0_rb - abscld(lay,ig) = 0.0_rb - efclfrac(lay,ig) = 0.0_rb - endif - enddo - - enddo - - igc = 1 -! Loop over frequency bands. - do iband = istart, iend - -! Reinitialize g-point counter for each band if output for each band is requested. - if (iout.gt.0.and.iband.ge.2) igc = ngs(iband-1)+1 - -! Loop over g-channels. - 1000 continue - -! Radiative transfer starts here. - radld = 0._rb - radclrd = 0._rb - iclddn = 0 - -! Downward radiative transfer loop. - - do lev = nlayers, 1, -1 - plfrac = fracs(lev,igc) - blay = planklay(lev,iband) - dplankup = planklev(lev,iband) - blay - dplankdn = planklev(lev-1,iband) - blay - odepth = secdiff(iband) * taut(lev,igc) - if (odepth .lt. 0.0_rb) odepth = 0.0_rb -! Cloudy layer - if (icldlyr(lev).eq.1) then - iclddn = 1 - odtot = odepth + odcld(lev,igc) - if (odtot .lt. 0.06_rb) then - atrans(lev) = odepth - 0.5_rb*odepth*odepth + +! ------- Definitions ------- +! input +! nlayers ! number of model layers +! ngptlw ! total number of g-point subintervals +! nbndlw ! number of longwave spectral bands +! ncbands ! number of spectral bands for clouds +! secdiff ! diffusivity angle +! wtdiff ! weight for radiance to flux conversion +! pavel ! layer pressures (mb) +! pz ! level (interface) pressures (mb) +! tavel ! layer temperatures (k) +! tz ! level (interface) temperatures(mb) +! tbound ! surface temperature (k) +! cldfrac ! layer cloud fraction +! taucloud ! layer cloud optical depth +! itr ! integer look-up table index +! icldlyr ! flag for cloudy layers +! iclddn ! flag for cloud in column at any layer +! semiss ! surface emissivities for each band +! reflect ! surface reflectance +! bpade ! 1/(pade constant) +! tau_tbl ! clear sky optical depth look-up table +! exp_tbl ! exponential look-up table for transmittance +! tfn_tbl ! tau transition function look-up table + +! local +! atrans ! gaseous absorptivity +! abscld ! cloud absorptivity +! atot ! combined gaseous and cloud absorptivity +! odclr ! clear sky (gaseous) optical depth +! odcld ! cloud optical depth +! odtot ! optical depth of gas and cloud +! tfacgas ! gas-only pade factor, used for planck fn +! tfactot ! gas and cloud pade factor, used for planck fn +! bbdgas ! gas-only planck function for downward rt +! bbugas ! gas-only planck function for upward rt +! bbdtot ! gas and cloud planck function for downward rt +! bbutot ! gas and cloud planck function for upward calc. +! gassrc ! source radiance due to gas only +! efclfrac ! effective cloud fraction +! radlu ! spectrally summed upward radiance +! radclru ! spectrally summed clear sky upward radiance +! urad ! upward radiance by layer +! clrurad ! clear sky upward radiance by layer +! radld ! spectrally summed downward radiance +! radclrd ! spectrally summed clear sky downward radiance +! drad ! downward radiance by layer +! clrdrad ! clear sky downward radiance by layer + + +! output +! totuflux ! upward longwave flux (w/m2) +! totdflux ! downward longwave flux (w/m2) +! fnet ! net longwave flux (w/m2) +! htr ! longwave heating rate (k/day) +! totuclfl ! clear sky upward longwave flux (w/m2) +! totdclfl ! clear sky downward longwave flux (w/m2) +! fnetc ! clear sky net longwave flux (w/m2) +! htrc ! clear sky longwave heating rate (k/day) + + +!jm not thread safe hvrrtc = '$Revision: 1.3 $' + + do ibnd = 1,nbands!mz*nbndlw + if (ibnd.eq.1 .or. ibnd.eq.4 .or. ibnd.ge.10) then + secdiff(ibnd) = 1.66_rb + else + secdiff(ibnd) = a0(ibnd) + a1(ibnd)*exp(a2(ibnd)*pwvcm) + if (secdiff(ibnd) .gt. 1.80_rb) secdiff(ibnd) = 1.80_rb + if (secdiff(ibnd) .lt. 1.50_rb) secdiff(ibnd) = 1.50_rb + endif + enddo + + urad(0) = 0.0_rb + drad(0) = 0.0_rb + totuflux(0) = 0.0_rb + totdflux(0) = 0.0_rb + clrurad(0) = 0.0_rb + clrdrad(0) = 0.0_rb + totuclfl(0) = 0.0_rb + totdclfl(0) = 0.0_rb + + do lay = 1, nlayers + urad(lay) = 0.0_rb + drad(lay) = 0.0_rb + totuflux(lay) = 0.0_rb + totdflux(lay) = 0.0_rb + clrurad(lay) = 0.0_rb + clrdrad(lay) = 0.0_rb + totuclfl(lay) = 0.0_rb + totdclfl(lay) = 0.0_rb + icldlyr(lay) = 0 + +! Change to band loop? + do ig = 1, ngptlw + if (cldfmc(ig,lay) .eq. 1._rb) then + ib = ngb(ig) + odcld(lay,ig) = secdiff(ib) * taucmc(ig,lay) + transcld = exp(-odcld(lay,ig)) + abscld(lay,ig) = 1._rb - transcld + efclfrac(lay,ig) = abscld(lay,ig) * cldfmc(ig,lay) + icldlyr(lay) = 1 + else + odcld(lay,ig) = 0.0_rb + abscld(lay,ig) = 0.0_rb + efclfrac(lay,ig) = 0.0_rb + endif + enddo + + enddo + + igc = 1 +! Loop over frequency bands. + do iband = istart, iend + +! Reinitialize g-point counter for each band if output for each band is requested. + if (iout.gt.0.and.iband.ge.2) igc = ngs(iband-1)+1 + +! Loop over g-channels. + 1000 continue + +! Radiative transfer starts here. + radld = 0._rb + radclrd = 0._rb + iclddn = 0 + +! Downward radiative transfer loop. + + do lev = nlayers, 1, -1 + plfrac = fracs(lev,igc) + blay = planklay(lev,iband) + dplankup = planklev(lev,iband) - blay + dplankdn = planklev(lev-1,iband) - blay + odepth = secdiff(iband) * taut(lev,igc) + if (odepth .lt. 0.0_rb) odepth = 0.0_rb +! Cloudy layer + if (icldlyr(lev).eq.1) then + iclddn = 1 + odtot = odepth + odcld(lev,igc) + if (odtot .lt. 0.06_rb) then + atrans(lev) = odepth - 0.5_rb*odepth*odepth odepth_rec = rec_6*odepth - gassrc = plfrac*(blay+dplankdn*odepth_rec)*atrans(lev) - - atot(lev) = odtot - 0.5_rb*odtot*odtot - odtot_rec = rec_6*odtot - bbdtot = plfrac * (blay+dplankdn*odtot_rec) - bbd = plfrac*(blay+dplankdn*odepth_rec) + gassrc = plfrac*(blay+dplankdn*odepth_rec)*atrans(lev) + + atot(lev) = odtot - 0.5_rb*odtot*odtot + odtot_rec = rec_6*odtot + bbdtot = plfrac * (blay+dplankdn*odtot_rec) + bbd = plfrac*(blay+dplankdn*odepth_rec) radld = radld - radld * (atrans(lev) + & & efclfrac(lev,igc) * (1. - atrans(lev))) + & & gassrc + cldfmc(igc,lev) * & - & (bbdtot * atot(lev) - gassrc) - drad(lev-1) = drad(lev-1) + radld - - bbugas(lev) = plfrac * (blay+dplankup*odepth_rec) - bbutot(lev) = plfrac * (blay+dplankup*odtot_rec) - - elseif (odepth .le. 0.06_rb) then - atrans(lev) = odepth - 0.5_rb*odepth*odepth - odepth_rec = rec_6*odepth - gassrc = plfrac*(blay+dplankdn*odepth_rec)*atrans(lev) - - odtot = odepth + odcld(lev,igc) - tblind = odtot/(bpade+odtot) - ittot = tblint*tblind + 0.5_rb - tfactot = tfn_tbl(ittot) - bbdtot = plfrac * (blay + tfactot*dplankdn) - bbd = plfrac*(blay+dplankdn*odepth_rec) - atot(lev) = 1. - exp_tbl(ittot) - + & (bbdtot * atot(lev) - gassrc) + drad(lev-1) = drad(lev-1) + radld + + bbugas(lev) = plfrac * (blay+dplankup*odepth_rec) + bbutot(lev) = plfrac * (blay+dplankup*odtot_rec) + + elseif (odepth .le. 0.06_rb) then + atrans(lev) = odepth - 0.5_rb*odepth*odepth + odepth_rec = rec_6*odepth + gassrc = plfrac*(blay+dplankdn*odepth_rec)*atrans(lev) + + odtot = odepth + odcld(lev,igc) + tblind = odtot/(bpade+odtot) + ittot = tblint*tblind + 0.5_rb + tfactot = tfn_tbl(ittot) + bbdtot = plfrac * (blay + tfactot*dplankdn) + bbd = plfrac*(blay+dplankdn*odepth_rec) + atot(lev) = 1. - exp_tbl(ittot) + radld = radld - radld * (atrans(lev) + & & efclfrac(lev,igc) * (1._rb - atrans(lev))) + & & gassrc + cldfmc(igc,lev) * & - & (bbdtot * atot(lev) - gassrc) - drad(lev-1) = drad(lev-1) + radld - - bbugas(lev) = plfrac * (blay + dplankup*odepth_rec) - bbutot(lev) = plfrac * (blay + tfactot * dplankup) - - else - - tblind = odepth/(bpade+odepth) - itgas = tblint*tblind+0.5_rb - odepth = tau_tbl(itgas) - atrans(lev) = 1._rb - exp_tbl(itgas) - tfacgas = tfn_tbl(itgas) - gassrc = atrans(lev) * plfrac * (blay + tfacgas*dplankdn) - - odtot = odepth + odcld(lev,igc) - tblind = odtot/(bpade+odtot) - ittot = tblint*tblind + 0.5_rb - tfactot = tfn_tbl(ittot) - bbdtot = plfrac * (blay + tfactot*dplankdn) - bbd = plfrac*(blay+tfacgas*dplankdn) - atot(lev) = 1._rb - exp_tbl(ittot) - + & (bbdtot * atot(lev) - gassrc) + drad(lev-1) = drad(lev-1) + radld + + bbugas(lev) = plfrac * (blay + dplankup*odepth_rec) + bbutot(lev) = plfrac * (blay + tfactot * dplankup) + + else + + tblind = odepth/(bpade+odepth) + itgas = tblint*tblind+0.5_rb + odepth = tau_tbl(itgas) + atrans(lev) = 1._rb - exp_tbl(itgas) + tfacgas = tfn_tbl(itgas) + gassrc = atrans(lev) * plfrac * (blay + tfacgas*dplankdn) + + odtot = odepth + odcld(lev,igc) + tblind = odtot/(bpade+odtot) + ittot = tblint*tblind + 0.5_rb + tfactot = tfn_tbl(ittot) + bbdtot = plfrac * (blay + tfactot*dplankdn) + bbd = plfrac*(blay+tfacgas*dplankdn) + atot(lev) = 1._rb - exp_tbl(ittot) + radld = radld - radld * (atrans(lev) + & & efclfrac(lev,igc) * (1._rb - atrans(lev))) + & & gassrc + cldfmc(igc,lev) * & - & (bbdtot * atot(lev) - gassrc) - drad(lev-1) = drad(lev-1) + radld - bbugas(lev) = plfrac * (blay + tfacgas * dplankup) - bbutot(lev) = plfrac * (blay + tfactot * dplankup) - endif -! Clear layer - else - if (odepth .le. 0.06_rb) then - atrans(lev) = odepth-0.5_rb*odepth*odepth - odepth = rec_6*odepth - bbd = plfrac*(blay+dplankdn*odepth) - bbugas(lev) = plfrac*(blay+dplankup*odepth) - else - tblind = odepth/(bpade+odepth) - itr = tblint*tblind+0.5_rb - transc = exp_tbl(itr) - atrans(lev) = 1._rb-transc - tausfac = tfn_tbl(itr) - bbd = plfrac*(blay+tausfac*dplankdn) - bbugas(lev) = plfrac * (blay + tausfac * dplankup) - endif - radld = radld + (bbd-radld)*atrans(lev) - drad(lev-1) = drad(lev-1) + radld - endif -! Set clear sky stream to total sky stream as long as layers -! remain clear. Streams diverge when a cloud is reached (iclddn=1), -! and clear sky stream must be computed separately from that point. - if (iclddn.eq.1) then - radclrd = radclrd + (bbd-radclrd) * atrans(lev) - clrdrad(lev-1) = clrdrad(lev-1) + radclrd - else - radclrd = radld - clrdrad(lev-1) = drad(lev-1) - endif - enddo - -! Spectral emissivity & reflectance -! Include the contribution of spectrally varying longwave emissivity -! and reflection from the surface to the upward radiative transfer. -! Note: Spectral and Lambertian reflection are identical for the -! diffusivity angle flux integration used here. - + & (bbdtot * atot(lev) - gassrc) + drad(lev-1) = drad(lev-1) + radld + bbugas(lev) = plfrac * (blay + tfacgas * dplankup) + bbutot(lev) = plfrac * (blay + tfactot * dplankup) + endif +! Clear layer + else + if (odepth .le. 0.06_rb) then + atrans(lev) = odepth-0.5_rb*odepth*odepth + odepth = rec_6*odepth + bbd = plfrac*(blay+dplankdn*odepth) + bbugas(lev) = plfrac*(blay+dplankup*odepth) + else + tblind = odepth/(bpade+odepth) + itr = tblint*tblind+0.5_rb + transc = exp_tbl(itr) + atrans(lev) = 1._rb-transc + tausfac = tfn_tbl(itr) + bbd = plfrac*(blay+tausfac*dplankdn) + bbugas(lev) = plfrac * (blay + tausfac * dplankup) + endif + radld = radld + (bbd-radld)*atrans(lev) + drad(lev-1) = drad(lev-1) + radld + endif +! Set clear sky stream to total sky stream as long as layers +! remain clear. Streams diverge when a cloud is reached (iclddn=1), +! and clear sky stream must be computed separately from that point. + if (iclddn.eq.1) then + radclrd = radclrd + (bbd-radclrd) * atrans(lev) + clrdrad(lev-1) = clrdrad(lev-1) + radclrd + else + radclrd = radld + clrdrad(lev-1) = drad(lev-1) + endif + enddo + +! Spectral emissivity & reflectance +! Include the contribution of spectrally varying longwave emissivity +! and reflection from the surface to the upward radiative transfer. +! Note: Spectral and Lambertian reflection are identical for the +! diffusivity angle flux integration used here. + !mz* -! rad0 = fracs(1,igc) * plankbnd(iband) +! rad0 = fracs(1,igc) * plankbnd(iband) rad0 = semiss(iband) * fracs(1,igc) * planklay(0,iband) !mz -! Add in specular reflection of surface downward radiance. - reflect = 1._rb - semiss(iband) - radlu = rad0 + reflect * radld - radclru = rad0 + reflect * radclrd - - -! Upward radiative transfer loop. - urad(0) = urad(0) + radlu - clrurad(0) = clrurad(0) + radclru - - do lev = 1, nlayers -! Cloudy layer - if (icldlyr(lev) .eq. 1) then +! Add in specular reflection of surface downward radiance. + reflect = 1._rb - semiss(iband) + radlu = rad0 + reflect * radld + radclru = rad0 + reflect * radclrd + + +! Upward radiative transfer loop. + urad(0) = urad(0) + radlu + clrurad(0) = clrurad(0) + radclru + + do lev = 1, nlayers +! Cloudy layer + if (icldlyr(lev) .eq. 1) then gassrc = bbugas(lev) * atrans(lev) radlu = radlu - radlu * (atrans(lev) + & & efclfrac(lev,igc) * (1._rb - atrans(lev))) + & & gassrc + cldfmc(igc,lev) * & - & (bbutot(lev) * atot(lev) - gassrc) - urad(lev) = urad(lev) + radlu -! Clear layer - else - radlu = radlu + (bbugas(lev)-radlu)*atrans(lev) - urad(lev) = urad(lev) + radlu - endif -! Set clear sky stream to total sky stream as long as all layers -! are clear (iclddn=0). Streams must be calculated separately at -! all layers when a cloud is present (ICLDDN=1), because surface -! reflectance is different for each stream. - if (iclddn.eq.1) then - radclru = radclru + (bbugas(lev)-radclru)*atrans(lev) - clrurad(lev) = clrurad(lev) + radclru - else - radclru = radlu - clrurad(lev) = urad(lev) - endif - enddo - -! Increment g-point counter - igc = igc + 1 -! Return to continue radiative transfer for all g-channels in present band - if (igc .le. ngs(iband)) go to 1000 - -! Process longwave output from band for total and clear streams. -! Calculate upward, downward, and net flux. - do lev = nlayers, 0, -1 - uflux(lev) = urad(lev)*wtdiff - dflux(lev) = drad(lev)*wtdiff - urad(lev) = 0.0_rb - drad(lev) = 0.0_rb - totuflux(lev) = totuflux(lev) + uflux(lev) * delwave(iband) - totdflux(lev) = totdflux(lev) + dflux(lev) * delwave(iband) - uclfl(lev) = clrurad(lev)*wtdiff - dclfl(lev) = clrdrad(lev)*wtdiff - clrurad(lev) = 0.0_rb - clrdrad(lev) = 0.0_rb - totuclfl(lev) = totuclfl(lev) + uclfl(lev) * delwave(iband) - totdclfl(lev) = totdclfl(lev) + dclfl(lev) * delwave(iband) - enddo - -! End spectral band loop - enddo - -! Calculate fluxes at surface - totuflux(0) = totuflux(0) * fluxfac - totdflux(0) = totdflux(0) * fluxfac - fnet(0) = totuflux(0) - totdflux(0) - totuclfl(0) = totuclfl(0) * fluxfac - totdclfl(0) = totdclfl(0) * fluxfac - fnetc(0) = totuclfl(0) - totdclfl(0) - -! Calculate fluxes at model levels - do lev = 1, nlayers - totuflux(lev) = totuflux(lev) * fluxfac - totdflux(lev) = totdflux(lev) * fluxfac - fnet(lev) = totuflux(lev) - totdflux(lev) - totuclfl(lev) = totuclfl(lev) * fluxfac - totdclfl(lev) = totdclfl(lev) * fluxfac - fnetc(lev) = totuclfl(lev) - totdclfl(lev) - l = lev - 1 - -! Calculate heating rates at model layers - htr(l)=heatfac*(fnet(l)-fnet(lev))/(pz(l)-pz(lev)) - htrc(l)=heatfac*(fnetc(l)-fnetc(lev))/(pz(l)-pz(lev)) - enddo - -! Set heating rate to zero in top layer - htr(nlayers) = 0.0_rb - htrc(nlayers) = 0.0_rb - - end subroutine rtrnmc_mcica + & (bbutot(lev) * atot(lev) - gassrc) + urad(lev) = urad(lev) + radlu +! Clear layer + else + radlu = radlu + (bbugas(lev)-radlu)*atrans(lev) + urad(lev) = urad(lev) + radlu + endif +! Set clear sky stream to total sky stream as long as all layers +! are clear (iclddn=0). Streams must be calculated separately at +! all layers when a cloud is present (ICLDDN=1), because surface +! reflectance is different for each stream. + if (iclddn.eq.1) then + radclru = radclru + (bbugas(lev)-radclru)*atrans(lev) + clrurad(lev) = clrurad(lev) + radclru + else + radclru = radlu + clrurad(lev) = urad(lev) + endif + enddo + +! Increment g-point counter + igc = igc + 1 +! Return to continue radiative transfer for all g-channels in present band + if (igc .le. ngs(iband)) go to 1000 + +! Process longwave output from band for total and clear streams. +! Calculate upward, downward, and net flux. + do lev = nlayers, 0, -1 + uflux(lev) = urad(lev)*wtdiff + dflux(lev) = drad(lev)*wtdiff + urad(lev) = 0.0_rb + drad(lev) = 0.0_rb + totuflux(lev) = totuflux(lev) + uflux(lev) * delwave(iband) + totdflux(lev) = totdflux(lev) + dflux(lev) * delwave(iband) + uclfl(lev) = clrurad(lev)*wtdiff + dclfl(lev) = clrdrad(lev)*wtdiff + clrurad(lev) = 0.0_rb + clrdrad(lev) = 0.0_rb + totuclfl(lev) = totuclfl(lev) + uclfl(lev) * delwave(iband) + totdclfl(lev) = totdclfl(lev) + dclfl(lev) * delwave(iband) + enddo + +! End spectral band loop + enddo + +! Calculate fluxes at surface + totuflux(0) = totuflux(0) * fluxfac + totdflux(0) = totdflux(0) * fluxfac + fnet(0) = totuflux(0) - totdflux(0) + totuclfl(0) = totuclfl(0) * fluxfac + totdclfl(0) = totdclfl(0) * fluxfac + fnetc(0) = totuclfl(0) - totdclfl(0) + +! Calculate fluxes at model levels + do lev = 1, nlayers + totuflux(lev) = totuflux(lev) * fluxfac + totdflux(lev) = totdflux(lev) * fluxfac + fnet(lev) = totuflux(lev) - totdflux(lev) + totuclfl(lev) = totuclfl(lev) * fluxfac + totdclfl(lev) = totdclfl(lev) * fluxfac + fnetc(lev) = totuclfl(lev) - totdclfl(lev) + l = lev - 1 + +! Calculate heating rates at model layers + htr(l)=heatfac*(fnet(l)-fnet(lev))/(pz(l)-pz(lev)) + htrc(l)=heatfac*(fnetc(l)-fnetc(lev))/(pz(l)-pz(lev)) + enddo + +! Set heating rate to zero in top layer + htr(nlayers) = 0.0_rb + htrc(nlayers) = 0.0_rb + + end subroutine rtrnmc_mcica ! ------------------------------------------------------------------------------ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & @@ -8007,59 +8007,59 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & integer(kind=im) :: lay ! Layer index integer(kind=im) :: ib ! spectral band index integer(kind=im) :: ig ! g-point interval index - integer(kind=im) :: index - integer(kind=im) :: icb(nbands) + integer(kind=im) :: index + integer(kind=im) :: icb(nbands) real(kind=rb) , dimension(2) :: absice0 real(kind=rb) , dimension(2,5) :: absice1 real(kind=rb) , dimension(43,16) :: absice2 real(kind=rb) , dimension(46,16) :: absice3 real(kind=rb) :: absliq0 real(kind=rb) , dimension(58,16) :: absliq1 - - real(kind=rb) :: abscoice(ngptlw) ! ice absorption coefficients - real(kind=rb) :: abscoliq(ngptlw) ! liquid absorption coefficients - real(kind=rb) :: abscosno(ngptlw) ! snow absorption coefficients - real(kind=rb) :: cwp ! cloud water path - real(kind=rb) :: radice ! cloud ice effective size (microns) - real(kind=rb) :: factor ! - real(kind=rb) :: fint ! - real(kind=rb) :: radliq ! cloud liquid droplet radius (microns) - real(kind=rb) :: radsno ! cloud snow effective size (microns) - real(kind=rb), parameter :: eps = 1.e-6_rb ! epsilon - real(kind=rb), parameter :: cldmin = 1.e-20_rb ! minimum value for cloud quantities - character*80 errmess - -! ------- Definitions ------- - -! Explanation of the method for each value of INFLAG. Values of -! 0 or 1 for INFLAG do not distingish being liquid and ice clouds. -! INFLAG = 2 does distinguish between liquid and ice clouds, and -! requires further user input to specify the method to be used to -! compute the aborption due to each. -! INFLAG = 0: For each cloudy layer, the cloud fraction and (gray) -! optical depth are input. -! INFLAG = 1: For each cloudy layer, the cloud fraction and cloud -! water path (g/m2) are input. The (gray) cloud optical -! depth is computed as in CCM2. -! INFLAG = 2: For each cloudy layer, the cloud fraction, cloud -! water path (g/m2), and cloud ice fraction are input. -! ICEFLAG = 0: The ice effective radius (microns) is input and the -! optical depths due to ice clouds are computed as in CCM3. -! ICEFLAG = 1: The ice effective radius (microns) is input and the -! optical depths due to ice clouds are computed as in -! Ebert and Curry, JGR, 97, 3831-3836 (1992). The -! spectral regions in this work have been matched with -! the spectral bands in RRTM to as great an extent -! as possible: -! E&C 1 IB = 5 RRTM bands 9-16 -! E&C 2 IB = 4 RRTM bands 6-8 -! E&C 3 IB = 3 RRTM bands 3-5 -! E&C 4 IB = 2 RRTM band 2 -! E&C 5 IB = 1 RRTM band 1 + + real(kind=rb) :: abscoice(ngptlw) ! ice absorption coefficients + real(kind=rb) :: abscoliq(ngptlw) ! liquid absorption coefficients + real(kind=rb) :: abscosno(ngptlw) ! snow absorption coefficients + real(kind=rb) :: cwp ! cloud water path + real(kind=rb) :: radice ! cloud ice effective size (microns) + real(kind=rb) :: factor ! + real(kind=rb) :: fint ! + real(kind=rb) :: radliq ! cloud liquid droplet radius (microns) + real(kind=rb) :: radsno ! cloud snow effective size (microns) + real(kind=rb), parameter :: eps = 1.e-6_rb ! epsilon + real(kind=rb), parameter :: cldmin = 1.e-20_rb ! minimum value for cloud quantities + character*80 errmess + +! ------- Definitions ------- + +! Explanation of the method for each value of INFLAG. Values of +! 0 or 1 for INFLAG do not distingish being liquid and ice clouds. +! INFLAG = 2 does distinguish between liquid and ice clouds, and +! requires further user input to specify the method to be used to +! compute the aborption due to each. +! INFLAG = 0: For each cloudy layer, the cloud fraction and (gray) +! optical depth are input. +! INFLAG = 1: For each cloudy layer, the cloud fraction and cloud +! water path (g/m2) are input. The (gray) cloud optical +! depth is computed as in CCM2. +! INFLAG = 2: For each cloudy layer, the cloud fraction, cloud +! water path (g/m2), and cloud ice fraction are input. +! ICEFLAG = 0: The ice effective radius (microns) is input and the +! optical depths due to ice clouds are computed as in CCM3. +! ICEFLAG = 1: The ice effective radius (microns) is input and the +! optical depths due to ice clouds are computed as in +! Ebert and Curry, JGR, 97, 3831-3836 (1992). The +! spectral regions in this work have been matched with +! the spectral bands in RRTM to as great an extent +! as possible: +! E&C 1 IB = 5 RRTM bands 9-16 +! E&C 2 IB = 4 RRTM bands 6-8 +! E&C 3 IB = 3 RRTM bands 3-5 +! E&C 4 IB = 2 RRTM band 2 +! E&C 5 IB = 1 RRTM band 1 ! ICEFLAG = 2: The ice effective radius (microns) is input and the ! optical properties due to ice clouds are computed from ! the optical properties stored in the RT code, -! STREAMER v3.0 (Reference: Key. J., Streamer +! STREAMER v3.0 (Reference: Key. J., Streamer ! User's Guide, Cooperative Institute for ! Meteorological Satellite Studies, 2001, 96 pp.). ! Valid range of values for re are between 5.0 and @@ -8074,20 +8074,20 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & ! 140.0 micron. ! LIQFLAG = 0: The optical depths due to water clouds are computed as ! in CCM3. -! LIQFLAG = 1: The water droplet effective radius (microns) is input -! and the optical depths due to water clouds are computed +! LIQFLAG = 1: The water droplet effective radius (microns) is input +! and the optical depths due to water clouds are computed ! as in Hu and Stamnes, J., Clim., 6, 728-742, (1993). ! The values for absorption coefficients appropriate for -! the spectral bands in RRTM have been obtained for a -! range of effective radii by an averaging procedure +! the spectral bands in RRTM have been obtained for a +! range of effective radii by an averaging procedure ! based on the work of J. Pinto (private communication). -! Linear interpolation is used to get the absorption +! Linear interpolation is used to get the absorption ! coefficients for the input effective radius. data icb /1,2,3,3,3,4,4,4,5, 5, 5, 5, 5, 5, 5, 5/ ! Everything below is for INFLAG = 2. -! ABSICEn(J,IB) are the parameters needed to compute the liquid water +! ABSICEn(J,IB) are the parameters needed to compute the liquid water ! absorption coefficient in spectral region IB for ICEFLAG=n. The units ! of ABSICEn(1,IB) are m2/g and ABSICEn(2,IB) has units (microns (m2/g)). ! For ICEFLAG = 0. @@ -8142,57 +8142,57 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & ! band 4 1.804566e-01_rb,1.168987e-01_rb,8.680442e-02_rb,6.910060e-02_rb,5.738174e-02_rb, & 4.902332e-02_rb,4.274585e-02_rb,3.784923e-02_rb,3.391734e-02_rb,3.068690e-02_rb, & - 2.798301e-02_rb,2.568480e-02_rb,2.370600e-02_rb,2.198337e-02_rb,2.046940e-02_rb, & - 1.912777e-02_rb,1.793016e-02_rb,1.685420e-02_rb,1.588193e-02_rb,1.499882e-02_rb, & - 1.419293e-02_rb,1.345440e-02_rb,1.277496e-02_rb,1.214769e-02_rb,1.156669e-02_rb, & - 1.102694e-02_rb,1.052412e-02_rb,1.005451e-02_rb,9.614854e-03_rb,9.202335e-03_rb, & - 8.814470e-03_rb,8.449077e-03_rb,8.104223e-03_rb,7.778195e-03_rb,7.469466e-03_rb, & - 7.176671e-03_rb,6.898588e-03_rb,6.634117e-03_rb,6.382264e-03_rb,6.142134e-03_rb, & - 5.912913e-03_rb,5.693862e-03_rb,5.484308e-03_rb/) - absice2(:,5) = (/ & -! band 5 - 2.131806e-01_rb,1.311372e-01_rb,9.407171e-02_rb,7.299442e-02_rb,5.941273e-02_rb, & - 4.994043e-02_rb,4.296242e-02_rb,3.761113e-02_rb,3.337910e-02_rb,2.994978e-02_rb, & - 2.711556e-02_rb,2.473461e-02_rb,2.270681e-02_rb,2.095943e-02_rb,1.943839e-02_rb, & - 1.810267e-02_rb,1.692057e-02_rb,1.586719e-02_rb,1.492275e-02_rb,1.407132e-02_rb, & - 1.329989e-02_rb,1.259780e-02_rb,1.195618e-02_rb,1.136761e-02_rb,1.082583e-02_rb, & - 1.032552e-02_rb,9.862158e-03_rb,9.431827e-03_rb,9.031157e-03_rb,8.657217e-03_rb, & - 8.307449e-03_rb,7.979609e-03_rb,7.671724e-03_rb,7.382048e-03_rb,7.109032e-03_rb, & - 6.851298e-03_rb,6.607615e-03_rb,6.376881e-03_rb,6.158105e-03_rb,5.950394e-03_rb, & - 5.752942e-03_rb,5.565019e-03_rb,5.385963e-03_rb/) - absice2(:,6) = (/ & -! band 6 - 1.546177e-01_rb,1.039251e-01_rb,7.910347e-02_rb,6.412429e-02_rb,5.399997e-02_rb, & - 4.664937e-02_rb,4.104237e-02_rb,3.660781e-02_rb,3.300218e-02_rb,3.000586e-02_rb, & - 2.747148e-02_rb,2.529633e-02_rb,2.340647e-02_rb,2.174723e-02_rb,2.027731e-02_rb, & - 1.896487e-02_rb,1.778492e-02_rb,1.671761e-02_rb,1.574692e-02_rb,1.485978e-02_rb, & - 1.404543e-02_rb,1.329489e-02_rb,1.260066e-02_rb,1.195636e-02_rb,1.135657e-02_rb, & - 1.079664e-02_rb,1.027257e-02_rb,9.780871e-03_rb,9.318505e-03_rb,8.882815e-03_rb, & - 8.471458e-03_rb,8.082364e-03_rb,7.713696e-03_rb,7.363817e-03_rb,7.031264e-03_rb, & - 6.714725e-03_rb,6.413021e-03_rb,6.125086e-03_rb,5.849958e-03_rb,5.586764e-03_rb, & - 5.334707e-03_rb,5.093066e-03_rb,4.861179e-03_rb/) - absice2(:,7) = (/ & -! band 7 - 7.583404e-02_rb,6.181558e-02_rb,5.312027e-02_rb,4.696039e-02_rb,4.225986e-02_rb, & - 3.849735e-02_rb,3.538340e-02_rb,3.274182e-02_rb,3.045798e-02_rb,2.845343e-02_rb, & - 2.667231e-02_rb,2.507353e-02_rb,2.362606e-02_rb,2.230595e-02_rb,2.109435e-02_rb, & - 1.997617e-02_rb,1.893916e-02_rb,1.797328e-02_rb,1.707016e-02_rb,1.622279e-02_rb, & - 1.542523e-02_rb,1.467241e-02_rb,1.395997e-02_rb,1.328414e-02_rb,1.264164e-02_rb, & - 1.202958e-02_rb,1.144544e-02_rb,1.088697e-02_rb,1.035218e-02_rb,9.839297e-03_rb, & - 9.346733e-03_rb,8.873057e-03_rb,8.416980e-03_rb,7.977335e-03_rb,7.553066e-03_rb, & - 7.143210e-03_rb,6.746888e-03_rb,6.363297e-03_rb,5.991700e-03_rb,5.631422e-03_rb, & - 5.281840e-03_rb,4.942378e-03_rb,4.612505e-03_rb/) - absice2(:,8) = (/ & -! band 8 - 9.022185e-02_rb,6.922700e-02_rb,5.710674e-02_rb,4.898377e-02_rb,4.305946e-02_rb, & - 3.849553e-02_rb,3.484183e-02_rb,3.183220e-02_rb,2.929794e-02_rb,2.712627e-02_rb, & - 2.523856e-02_rb,2.357810e-02_rb,2.210286e-02_rb,2.078089e-02_rb,1.958747e-02_rb, & - 1.850310e-02_rb,1.751218e-02_rb,1.660205e-02_rb,1.576232e-02_rb,1.498440e-02_rb, & - 1.426107e-02_rb,1.358624e-02_rb,1.295474e-02_rb,1.236212e-02_rb,1.180456e-02_rb, & - 1.127874e-02_rb,1.078175e-02_rb,1.031106e-02_rb,9.864433e-03_rb,9.439878e-03_rb, & - 9.035637e-03_rb,8.650140e-03_rb,8.281981e-03_rb,7.929895e-03_rb,7.592746e-03_rb, & - 7.269505e-03_rb,6.959238e-03_rb,6.661100e-03_rb,6.374317e-03_rb,6.098185e-03_rb, & - 5.832059e-03_rb,5.575347e-03_rb,5.327504e-03_rb/) + 2.798301e-02_rb,2.568480e-02_rb,2.370600e-02_rb,2.198337e-02_rb,2.046940e-02_rb, & + 1.912777e-02_rb,1.793016e-02_rb,1.685420e-02_rb,1.588193e-02_rb,1.499882e-02_rb, & + 1.419293e-02_rb,1.345440e-02_rb,1.277496e-02_rb,1.214769e-02_rb,1.156669e-02_rb, & + 1.102694e-02_rb,1.052412e-02_rb,1.005451e-02_rb,9.614854e-03_rb,9.202335e-03_rb, & + 8.814470e-03_rb,8.449077e-03_rb,8.104223e-03_rb,7.778195e-03_rb,7.469466e-03_rb, & + 7.176671e-03_rb,6.898588e-03_rb,6.634117e-03_rb,6.382264e-03_rb,6.142134e-03_rb, & + 5.912913e-03_rb,5.693862e-03_rb,5.484308e-03_rb/) + absice2(:,5) = (/ & +! band 5 + 2.131806e-01_rb,1.311372e-01_rb,9.407171e-02_rb,7.299442e-02_rb,5.941273e-02_rb, & + 4.994043e-02_rb,4.296242e-02_rb,3.761113e-02_rb,3.337910e-02_rb,2.994978e-02_rb, & + 2.711556e-02_rb,2.473461e-02_rb,2.270681e-02_rb,2.095943e-02_rb,1.943839e-02_rb, & + 1.810267e-02_rb,1.692057e-02_rb,1.586719e-02_rb,1.492275e-02_rb,1.407132e-02_rb, & + 1.329989e-02_rb,1.259780e-02_rb,1.195618e-02_rb,1.136761e-02_rb,1.082583e-02_rb, & + 1.032552e-02_rb,9.862158e-03_rb,9.431827e-03_rb,9.031157e-03_rb,8.657217e-03_rb, & + 8.307449e-03_rb,7.979609e-03_rb,7.671724e-03_rb,7.382048e-03_rb,7.109032e-03_rb, & + 6.851298e-03_rb,6.607615e-03_rb,6.376881e-03_rb,6.158105e-03_rb,5.950394e-03_rb, & + 5.752942e-03_rb,5.565019e-03_rb,5.385963e-03_rb/) + absice2(:,6) = (/ & +! band 6 + 1.546177e-01_rb,1.039251e-01_rb,7.910347e-02_rb,6.412429e-02_rb,5.399997e-02_rb, & + 4.664937e-02_rb,4.104237e-02_rb,3.660781e-02_rb,3.300218e-02_rb,3.000586e-02_rb, & + 2.747148e-02_rb,2.529633e-02_rb,2.340647e-02_rb,2.174723e-02_rb,2.027731e-02_rb, & + 1.896487e-02_rb,1.778492e-02_rb,1.671761e-02_rb,1.574692e-02_rb,1.485978e-02_rb, & + 1.404543e-02_rb,1.329489e-02_rb,1.260066e-02_rb,1.195636e-02_rb,1.135657e-02_rb, & + 1.079664e-02_rb,1.027257e-02_rb,9.780871e-03_rb,9.318505e-03_rb,8.882815e-03_rb, & + 8.471458e-03_rb,8.082364e-03_rb,7.713696e-03_rb,7.363817e-03_rb,7.031264e-03_rb, & + 6.714725e-03_rb,6.413021e-03_rb,6.125086e-03_rb,5.849958e-03_rb,5.586764e-03_rb, & + 5.334707e-03_rb,5.093066e-03_rb,4.861179e-03_rb/) + absice2(:,7) = (/ & +! band 7 + 7.583404e-02_rb,6.181558e-02_rb,5.312027e-02_rb,4.696039e-02_rb,4.225986e-02_rb, & + 3.849735e-02_rb,3.538340e-02_rb,3.274182e-02_rb,3.045798e-02_rb,2.845343e-02_rb, & + 2.667231e-02_rb,2.507353e-02_rb,2.362606e-02_rb,2.230595e-02_rb,2.109435e-02_rb, & + 1.997617e-02_rb,1.893916e-02_rb,1.797328e-02_rb,1.707016e-02_rb,1.622279e-02_rb, & + 1.542523e-02_rb,1.467241e-02_rb,1.395997e-02_rb,1.328414e-02_rb,1.264164e-02_rb, & + 1.202958e-02_rb,1.144544e-02_rb,1.088697e-02_rb,1.035218e-02_rb,9.839297e-03_rb, & + 9.346733e-03_rb,8.873057e-03_rb,8.416980e-03_rb,7.977335e-03_rb,7.553066e-03_rb, & + 7.143210e-03_rb,6.746888e-03_rb,6.363297e-03_rb,5.991700e-03_rb,5.631422e-03_rb, & + 5.281840e-03_rb,4.942378e-03_rb,4.612505e-03_rb/) + absice2(:,8) = (/ & +! band 8 + 9.022185e-02_rb,6.922700e-02_rb,5.710674e-02_rb,4.898377e-02_rb,4.305946e-02_rb, & + 3.849553e-02_rb,3.484183e-02_rb,3.183220e-02_rb,2.929794e-02_rb,2.712627e-02_rb, & + 2.523856e-02_rb,2.357810e-02_rb,2.210286e-02_rb,2.078089e-02_rb,1.958747e-02_rb, & + 1.850310e-02_rb,1.751218e-02_rb,1.660205e-02_rb,1.576232e-02_rb,1.498440e-02_rb, & + 1.426107e-02_rb,1.358624e-02_rb,1.295474e-02_rb,1.236212e-02_rb,1.180456e-02_rb, & + 1.127874e-02_rb,1.078175e-02_rb,1.031106e-02_rb,9.864433e-03_rb,9.439878e-03_rb, & + 9.035637e-03_rb,8.650140e-03_rb,8.281981e-03_rb,7.929895e-03_rb,7.592746e-03_rb, & + 7.269505e-03_rb,6.959238e-03_rb,6.661100e-03_rb,6.374317e-03_rb,6.098185e-03_rb, & + 5.832059e-03_rb,5.575347e-03_rb,5.327504e-03_rb/) absice2(:,9) = (/ & ! band 9 1.294087e-01_rb,8.788217e-02_rb,6.728288e-02_rb,5.479720e-02_rb,4.635049e-02_rb, & @@ -8210,79 +8210,79 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 4.171159e-02_rb,3.638480e-02_rb,3.226692e-02_rb,2.898717e-02_rb,2.631256e-02_rb, & 2.408925e-02_rb,2.221156e-02_rb,2.060448e-02_rb,1.921325e-02_rb,1.799699e-02_rb, & 1.692456e-02_rb,1.597177e-02_rb,1.511961e-02_rb,1.435289e-02_rb,1.365933e-02_rb, & - 1.302890e-02_rb,1.245334e-02_rb,1.192576e-02_rb,1.144037e-02_rb,1.099230e-02_rb, & - 1.057739e-02_rb,1.019208e-02_rb,9.833302e-03_rb,9.498395e-03_rb,9.185047e-03_rb, & - 8.891237e-03_rb,8.615185e-03_rb,8.355325e-03_rb,8.110267e-03_rb,7.878778e-03_rb, & - 7.659759e-03_rb,7.452224e-03_rb,7.255291e-03_rb,7.068166e-03_rb,6.890130e-03_rb, & - 6.720536e-03_rb,6.558794e-03_rb,6.404371e-03_rb/) - absice2(:,11) = (/ & -! band 11 - 1.656227e-01_rb,1.032129e-01_rb,7.487359e-02_rb,5.871431e-02_rb,4.828355e-02_rb, & - 4.099989e-02_rb,3.562924e-02_rb,3.150755e-02_rb,2.824593e-02_rb,2.560156e-02_rb, & - 2.341503e-02_rb,2.157740e-02_rb,2.001169e-02_rb,1.866199e-02_rb,1.748669e-02_rb, & - 1.645421e-02_rb,1.554015e-02_rb,1.472535e-02_rb,1.399457e-02_rb,1.333553e-02_rb, & - 1.273821e-02_rb,1.219440e-02_rb,1.169725e-02_rb,1.124104e-02_rb,1.082096e-02_rb, & - 1.043290e-02_rb,1.007336e-02_rb,9.739338e-03_rb,9.428223e-03_rb,9.137756e-03_rb, & - 8.865964e-03_rb,8.611115e-03_rb,8.371686e-03_rb,8.146330e-03_rb,7.933852e-03_rb, & - 7.733187e-03_rb,7.543386e-03_rb,7.363597e-03_rb,7.193056e-03_rb,7.031072e-03_rb, & - 6.877024e-03_rb,6.730348e-03_rb,6.590531e-03_rb/) - absice2(:,12) = (/ & -! band 12 - 9.194591e-02_rb,6.446867e-02_rb,4.962034e-02_rb,4.042061e-02_rb,3.418456e-02_rb, & - 2.968856e-02_rb,2.629900e-02_rb,2.365572e-02_rb,2.153915e-02_rb,1.980791e-02_rb, & - 1.836689e-02_rb,1.714979e-02_rb,1.610900e-02_rb,1.520946e-02_rb,1.442476e-02_rb, & - 1.373468e-02_rb,1.312345e-02_rb,1.257858e-02_rb,1.209010e-02_rb,1.164990e-02_rb, & - 1.125136e-02_rb,1.088901e-02_rb,1.055827e-02_rb,1.025531e-02_rb,9.976896e-03_rb, & - 9.720255e-03_rb,9.483022e-03_rb,9.263160e-03_rb,9.058902e-03_rb,8.868710e-03_rb, & - 8.691240e-03_rb,8.525312e-03_rb,8.369886e-03_rb,8.224042e-03_rb,8.086961e-03_rb, & - 7.957917e-03_rb,7.836258e-03_rb,7.721400e-03_rb,7.612821e-03_rb,7.510045e-03_rb, & - 7.412648e-03_rb,7.320242e-03_rb,7.232476e-03_rb/) + 1.302890e-02_rb,1.245334e-02_rb,1.192576e-02_rb,1.144037e-02_rb,1.099230e-02_rb, & + 1.057739e-02_rb,1.019208e-02_rb,9.833302e-03_rb,9.498395e-03_rb,9.185047e-03_rb, & + 8.891237e-03_rb,8.615185e-03_rb,8.355325e-03_rb,8.110267e-03_rb,7.878778e-03_rb, & + 7.659759e-03_rb,7.452224e-03_rb,7.255291e-03_rb,7.068166e-03_rb,6.890130e-03_rb, & + 6.720536e-03_rb,6.558794e-03_rb,6.404371e-03_rb/) + absice2(:,11) = (/ & +! band 11 + 1.656227e-01_rb,1.032129e-01_rb,7.487359e-02_rb,5.871431e-02_rb,4.828355e-02_rb, & + 4.099989e-02_rb,3.562924e-02_rb,3.150755e-02_rb,2.824593e-02_rb,2.560156e-02_rb, & + 2.341503e-02_rb,2.157740e-02_rb,2.001169e-02_rb,1.866199e-02_rb,1.748669e-02_rb, & + 1.645421e-02_rb,1.554015e-02_rb,1.472535e-02_rb,1.399457e-02_rb,1.333553e-02_rb, & + 1.273821e-02_rb,1.219440e-02_rb,1.169725e-02_rb,1.124104e-02_rb,1.082096e-02_rb, & + 1.043290e-02_rb,1.007336e-02_rb,9.739338e-03_rb,9.428223e-03_rb,9.137756e-03_rb, & + 8.865964e-03_rb,8.611115e-03_rb,8.371686e-03_rb,8.146330e-03_rb,7.933852e-03_rb, & + 7.733187e-03_rb,7.543386e-03_rb,7.363597e-03_rb,7.193056e-03_rb,7.031072e-03_rb, & + 6.877024e-03_rb,6.730348e-03_rb,6.590531e-03_rb/) + absice2(:,12) = (/ & +! band 12 + 9.194591e-02_rb,6.446867e-02_rb,4.962034e-02_rb,4.042061e-02_rb,3.418456e-02_rb, & + 2.968856e-02_rb,2.629900e-02_rb,2.365572e-02_rb,2.153915e-02_rb,1.980791e-02_rb, & + 1.836689e-02_rb,1.714979e-02_rb,1.610900e-02_rb,1.520946e-02_rb,1.442476e-02_rb, & + 1.373468e-02_rb,1.312345e-02_rb,1.257858e-02_rb,1.209010e-02_rb,1.164990e-02_rb, & + 1.125136e-02_rb,1.088901e-02_rb,1.055827e-02_rb,1.025531e-02_rb,9.976896e-03_rb, & + 9.720255e-03_rb,9.483022e-03_rb,9.263160e-03_rb,9.058902e-03_rb,8.868710e-03_rb, & + 8.691240e-03_rb,8.525312e-03_rb,8.369886e-03_rb,8.224042e-03_rb,8.086961e-03_rb, & + 7.957917e-03_rb,7.836258e-03_rb,7.721400e-03_rb,7.612821e-03_rb,7.510045e-03_rb, & + 7.412648e-03_rb,7.320242e-03_rb,7.232476e-03_rb/) absice2(:,13) = (/ & -! band 13 - 1.437021e-01_rb,8.872535e-02_rb,6.392420e-02_rb,4.991833e-02_rb,4.096790e-02_rb, & - 3.477881e-02_rb,3.025782e-02_rb,2.681909e-02_rb,2.412102e-02_rb,2.195132e-02_rb, & - 2.017124e-02_rb,1.868641e-02_rb,1.743044e-02_rb,1.635529e-02_rb,1.542540e-02_rb, & - 1.461388e-02_rb,1.390003e-02_rb,1.326766e-02_rb,1.270395e-02_rb,1.219860e-02_rb, & - 1.174326e-02_rb,1.133107e-02_rb,1.095637e-02_rb,1.061442e-02_rb,1.030126e-02_rb, & - 1.001352e-02_rb,9.748340e-03_rb,9.503256e-03_rb,9.276155e-03_rb,9.065205e-03_rb, & - 8.868808e-03_rb,8.685571e-03_rb,8.514268e-03_rb,8.353820e-03_rb,8.203272e-03_rb, & - 8.061776e-03_rb,7.928578e-03_rb,7.803001e-03_rb,7.684443e-03_rb,7.572358e-03_rb, & - 7.466258e-03_rb,7.365701e-03_rb,7.270286e-03_rb/) - absice2(:,14) = (/ & -! band 14 - 1.288870e-01_rb,8.160295e-02_rb,5.964745e-02_rb,4.703790e-02_rb,3.888637e-02_rb, & - 3.320115e-02_rb,2.902017e-02_rb,2.582259e-02_rb,2.330224e-02_rb,2.126754e-02_rb, & - 1.959258e-02_rb,1.819130e-02_rb,1.700289e-02_rb,1.598320e-02_rb,1.509942e-02_rb, & - 1.432666e-02_rb,1.364572e-02_rb,1.304156e-02_rb,1.250220e-02_rb,1.201803e-02_rb, & - 1.158123e-02_rb,1.118537e-02_rb,1.082513e-02_rb,1.049605e-02_rb,1.019440e-02_rb, & - 9.916989e-03_rb,9.661116e-03_rb,9.424457e-03_rb,9.205005e-03_rb,9.001022e-03_rb, & - 8.810992e-03_rb,8.633588e-03_rb,8.467646e-03_rb,8.312137e-03_rb,8.166151e-03_rb, & - 8.028878e-03_rb,7.899597e-03_rb,7.777663e-03_rb,7.662498e-03_rb,7.553581e-03_rb, & - 7.450444e-03_rb,7.352662e-03_rb,7.259851e-03_rb/) - absice2(:,15) = (/ & -! band 15 - 8.254229e-02_rb,5.808787e-02_rb,4.492166e-02_rb,3.675028e-02_rb,3.119623e-02_rb, & - 2.718045e-02_rb,2.414450e-02_rb,2.177073e-02_rb,1.986526e-02_rb,1.830306e-02_rb, & - 1.699991e-02_rb,1.589698e-02_rb,1.495199e-02_rb,1.413374e-02_rb,1.341870e-02_rb, & - 1.278883e-02_rb,1.223002e-02_rb,1.173114e-02_rb,1.128322e-02_rb,1.087900e-02_rb, & - 1.051254e-02_rb,1.017890e-02_rb,9.873991e-03_rb,9.594347e-03_rb,9.337044e-03_rb, & - 9.099589e-03_rb,8.879842e-03_rb,8.675960e-03_rb,8.486341e-03_rb,8.309594e-03_rb, & - 8.144500e-03_rb,7.989986e-03_rb,7.845109e-03_rb,7.709031e-03_rb,7.581007e-03_rb, & - 7.460376e-03_rb,7.346544e-03_rb,7.238978e-03_rb,7.137201e-03_rb,7.040780e-03_rb, & - 6.949325e-03_rb,6.862483e-03_rb,6.779931e-03_rb/) - absice2(:,16) = (/ & -! band 16 - 1.382062e-01_rb,8.643227e-02_rb,6.282935e-02_rb,4.934783e-02_rb,4.063891e-02_rb, & - 3.455591e-02_rb,3.007059e-02_rb,2.662897e-02_rb,2.390631e-02_rb,2.169972e-02_rb, & - 1.987596e-02_rb,1.834393e-02_rb,1.703924e-02_rb,1.591513e-02_rb,1.493679e-02_rb, & - 1.407780e-02_rb,1.331775e-02_rb,1.264061e-02_rb,1.203364e-02_rb,1.148655e-02_rb, & - 1.099099e-02_rb,1.054006e-02_rb,1.012807e-02_rb,9.750215e-03_rb,9.402477e-03_rb, & - 9.081428e-03_rb,8.784143e-03_rb,8.508107e-03_rb,8.251146e-03_rb,8.011373e-03_rb, & - 7.787140e-03_rb,7.577002e-03_rb,7.379687e-03_rb,7.194071e-03_rb,7.019158e-03_rb, & - 6.854061e-03_rb,6.697986e-03_rb,6.550224e-03_rb,6.410138e-03_rb,6.277153e-03_rb, & - 6.150751e-03_rb,6.030462e-03_rb,5.915860e-03_rb/) - -! ICEFLAG = 3; Fu parameterization. Particle size 5 - 140 micron in +! band 13 + 1.437021e-01_rb,8.872535e-02_rb,6.392420e-02_rb,4.991833e-02_rb,4.096790e-02_rb, & + 3.477881e-02_rb,3.025782e-02_rb,2.681909e-02_rb,2.412102e-02_rb,2.195132e-02_rb, & + 2.017124e-02_rb,1.868641e-02_rb,1.743044e-02_rb,1.635529e-02_rb,1.542540e-02_rb, & + 1.461388e-02_rb,1.390003e-02_rb,1.326766e-02_rb,1.270395e-02_rb,1.219860e-02_rb, & + 1.174326e-02_rb,1.133107e-02_rb,1.095637e-02_rb,1.061442e-02_rb,1.030126e-02_rb, & + 1.001352e-02_rb,9.748340e-03_rb,9.503256e-03_rb,9.276155e-03_rb,9.065205e-03_rb, & + 8.868808e-03_rb,8.685571e-03_rb,8.514268e-03_rb,8.353820e-03_rb,8.203272e-03_rb, & + 8.061776e-03_rb,7.928578e-03_rb,7.803001e-03_rb,7.684443e-03_rb,7.572358e-03_rb, & + 7.466258e-03_rb,7.365701e-03_rb,7.270286e-03_rb/) + absice2(:,14) = (/ & +! band 14 + 1.288870e-01_rb,8.160295e-02_rb,5.964745e-02_rb,4.703790e-02_rb,3.888637e-02_rb, & + 3.320115e-02_rb,2.902017e-02_rb,2.582259e-02_rb,2.330224e-02_rb,2.126754e-02_rb, & + 1.959258e-02_rb,1.819130e-02_rb,1.700289e-02_rb,1.598320e-02_rb,1.509942e-02_rb, & + 1.432666e-02_rb,1.364572e-02_rb,1.304156e-02_rb,1.250220e-02_rb,1.201803e-02_rb, & + 1.158123e-02_rb,1.118537e-02_rb,1.082513e-02_rb,1.049605e-02_rb,1.019440e-02_rb, & + 9.916989e-03_rb,9.661116e-03_rb,9.424457e-03_rb,9.205005e-03_rb,9.001022e-03_rb, & + 8.810992e-03_rb,8.633588e-03_rb,8.467646e-03_rb,8.312137e-03_rb,8.166151e-03_rb, & + 8.028878e-03_rb,7.899597e-03_rb,7.777663e-03_rb,7.662498e-03_rb,7.553581e-03_rb, & + 7.450444e-03_rb,7.352662e-03_rb,7.259851e-03_rb/) + absice2(:,15) = (/ & +! band 15 + 8.254229e-02_rb,5.808787e-02_rb,4.492166e-02_rb,3.675028e-02_rb,3.119623e-02_rb, & + 2.718045e-02_rb,2.414450e-02_rb,2.177073e-02_rb,1.986526e-02_rb,1.830306e-02_rb, & + 1.699991e-02_rb,1.589698e-02_rb,1.495199e-02_rb,1.413374e-02_rb,1.341870e-02_rb, & + 1.278883e-02_rb,1.223002e-02_rb,1.173114e-02_rb,1.128322e-02_rb,1.087900e-02_rb, & + 1.051254e-02_rb,1.017890e-02_rb,9.873991e-03_rb,9.594347e-03_rb,9.337044e-03_rb, & + 9.099589e-03_rb,8.879842e-03_rb,8.675960e-03_rb,8.486341e-03_rb,8.309594e-03_rb, & + 8.144500e-03_rb,7.989986e-03_rb,7.845109e-03_rb,7.709031e-03_rb,7.581007e-03_rb, & + 7.460376e-03_rb,7.346544e-03_rb,7.238978e-03_rb,7.137201e-03_rb,7.040780e-03_rb, & + 6.949325e-03_rb,6.862483e-03_rb,6.779931e-03_rb/) + absice2(:,16) = (/ & +! band 16 + 1.382062e-01_rb,8.643227e-02_rb,6.282935e-02_rb,4.934783e-02_rb,4.063891e-02_rb, & + 3.455591e-02_rb,3.007059e-02_rb,2.662897e-02_rb,2.390631e-02_rb,2.169972e-02_rb, & + 1.987596e-02_rb,1.834393e-02_rb,1.703924e-02_rb,1.591513e-02_rb,1.493679e-02_rb, & + 1.407780e-02_rb,1.331775e-02_rb,1.264061e-02_rb,1.203364e-02_rb,1.148655e-02_rb, & + 1.099099e-02_rb,1.054006e-02_rb,1.012807e-02_rb,9.750215e-03_rb,9.402477e-03_rb, & + 9.081428e-03_rb,8.784143e-03_rb,8.508107e-03_rb,8.251146e-03_rb,8.011373e-03_rb, & + 7.787140e-03_rb,7.577002e-03_rb,7.379687e-03_rb,7.194071e-03_rb,7.019158e-03_rb, & + 6.854061e-03_rb,6.697986e-03_rb,6.550224e-03_rb,6.410138e-03_rb,6.277153e-03_rb, & + 6.150751e-03_rb,6.030462e-03_rb,5.915860e-03_rb/) + +! ICEFLAG = 3; Fu parameterization. Particle size 5 - 140 micron in ! increments of 3 microns. ! units = m2/g ! Hexagonal Ice Particle Parameterization @@ -8346,9 +8346,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.301260e-02_rb,1.254781e-02_rb,1.210941e-02_rb,1.169468e-02_rb,1.130118e-02_rb, & 1.092675e-02_rb,1.056945e-02_rb,1.022757e-02_rb,9.899560e-03_rb,9.584021e-03_rb, & 9.279705e-03_rb,8.985479e-03_rb,8.700322e-03_rb,8.423306e-03_rb,8.153590e-03_rb, & - 7.890412e-03_rb/) - absice3(:,6) = (/ & -! band 6 + 7.890412e-03_rb/) + absice3(:,6) = (/ & +! band 6 1.145369e-01_rb,1.174566e-01_rb,9.917866e-02_rb,8.332990e-02_rb,7.104263e-02_rb, & 6.153370e-02_rb,5.405472e-02_rb,4.806281e-02_rb,4.317918e-02_rb,3.913795e-02_rb, & 3.574916e-02_rb,3.287437e-02_rb,3.041067e-02_rb,2.828017e-02_rb,2.642292e-02_rb, & @@ -8358,9 +8358,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.293447e-02_rb,1.252685e-02_rb,1.213939e-02_rb,1.176968e-02_rb,1.141555e-02_rb, & 1.107508e-02_rb,1.074655e-02_rb,1.042839e-02_rb,1.011923e-02_rb,9.817799e-03_rb, & 9.522962e-03_rb,9.233688e-03_rb,8.949041e-03_rb,8.668171e-03_rb,8.390301e-03_rb, & - 8.114723e-03_rb/) - absice3(:,7) = (/ & -! band 7 + 8.114723e-03_rb/) + absice3(:,7) = (/ & +! band 7 1.222345e-02_rb,5.344230e-02_rb,5.523465e-02_rb,5.128759e-02_rb,4.676925e-02_rb, & 4.266150e-02_rb,3.910561e-02_rb,3.605479e-02_rb,3.342843e-02_rb,3.115052e-02_rb, & 2.915776e-02_rb,2.739935e-02_rb,2.583499e-02_rb,2.443266e-02_rb,2.316681e-02_rb, & @@ -8370,9 +8370,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.191172e-02_rb,1.149171e-02_rb,1.108936e-02_rb,1.070341e-02_rb,1.033271e-02_rb, & 9.976220e-03_rb,9.633021e-03_rb,9.302273e-03_rb,8.983216e-03_rb,8.675161e-03_rb, & 8.377478e-03_rb,8.089595e-03_rb,7.810986e-03_rb,7.541170e-03_rb,7.279706e-03_rb, & - 7.026186e-03_rb/) - absice3(:,8) = (/ & -! band 8 + 7.026186e-03_rb/) + absice3(:,8) = (/ & +! band 8 6.711058e-02_rb,6.918198e-02_rb,6.127484e-02_rb,5.411944e-02_rb,4.836902e-02_rb, & 4.375293e-02_rb,3.998077e-02_rb,3.683587e-02_rb,3.416508e-02_rb,3.186003e-02_rb, & 2.984290e-02_rb,2.805671e-02_rb,2.645895e-02_rb,2.501733e-02_rb,2.370689e-02_rb, & @@ -8382,9 +8382,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.173682e-02_rb,1.129925e-02_rb,1.088393e-02_rb,1.048961e-02_rb,1.011516e-02_rb, & 9.759543e-03_rb,9.421813e-03_rb,9.101089e-03_rb,8.796559e-03_rb,8.507464e-03_rb, & 8.233098e-03_rb,7.972798e-03_rb,7.725942e-03_rb,7.491940e-03_rb,7.270238e-03_rb, & - 7.060305e-03_rb/) - absice3(:,9) = (/ & -! band 9 + 7.060305e-03_rb/) + absice3(:,9) = (/ & +! band 9 1.236780e-01_rb,9.222386e-02_rb,7.383997e-02_rb,6.204072e-02_rb,5.381029e-02_rb, & 4.770678e-02_rb,4.296928e-02_rb,3.916131e-02_rb,3.601540e-02_rb,3.335878e-02_rb, & 3.107493e-02_rb,2.908247e-02_rb,2.732282e-02_rb,2.575276e-02_rb,2.433968e-02_rb, & @@ -8394,9 +8394,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.208808e-02_rb,1.167094e-02_rb,1.127862e-02_rb,1.090979e-02_rb,1.056323e-02_rb, & 1.023786e-02_rb,9.932665e-03_rb,9.646744e-03_rb,9.379250e-03_rb,9.129409e-03_rb, & 8.896500e-03_rb,8.679856e-03_rb,8.478852e-03_rb,8.292904e-03_rb,8.121463e-03_rb, & - 7.964013e-03_rb/) - absice3(:,10) = (/ & -! band 10 + 7.964013e-03_rb/) + absice3(:,10) = (/ & +! band 10 1.655966e-01_rb,1.134205e-01_rb,8.714344e-02_rb,7.129241e-02_rb,6.063739e-02_rb, & 5.294203e-02_rb,4.709309e-02_rb,4.247476e-02_rb,3.871892e-02_rb,3.559206e-02_rb, & 3.293893e-02_rb,3.065226e-02_rb,2.865558e-02_rb,2.689288e-02_rb,2.532221e-02_rb, & @@ -8406,9 +8406,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.239992e-02_rb,1.198486e-02_rb,1.159647e-02_rb,1.123323e-02_rb,1.089375e-02_rb, & 1.057679e-02_rb,1.028124e-02_rb,1.000607e-02_rb,9.750376e-03_rb,9.513303e-03_rb, & 9.294082e-03_rb,9.092003e-03_rb,8.906412e-03_rb,8.736702e-03_rb,8.582314e-03_rb, & - 8.442725e-03_rb/) - absice3(:,11) = (/ & -! band 11 + 8.442725e-03_rb/) + absice3(:,11) = (/ & +! band 11 1.775615e-01_rb,1.180046e-01_rb,8.929607e-02_rb,7.233500e-02_rb,6.108333e-02_rb, & 5.303642e-02_rb,4.696927e-02_rb,4.221206e-02_rb,3.836768e-02_rb,3.518576e-02_rb, & 3.250063e-02_rb,3.019825e-02_rb,2.819758e-02_rb,2.643943e-02_rb,2.487953e-02_rb, & @@ -8418,9 +8418,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.229321e-02_rb,1.189350e-02_rb,1.151915e-02_rb,1.116859e-02_rb,1.084042e-02_rb, & 1.053338e-02_rb,1.024636e-02_rb,9.978326e-03_rb,9.728357e-03_rb,9.495613e-03_rb, & 9.279327e-03_rb,9.078798e-03_rb,8.893383e-03_rb,8.722488e-03_rb,8.565568e-03_rb, & - 8.422115e-03_rb/) - absice3(:,12) = (/ & -! band 12 + 8.422115e-03_rb/) + absice3(:,12) = (/ & +! band 12 9.465447e-02_rb,6.432047e-02_rb,5.060973e-02_rb,4.267283e-02_rb,3.741843e-02_rb, & 3.363096e-02_rb,3.073531e-02_rb,2.842405e-02_rb,2.651789e-02_rb,2.490518e-02_rb, & 2.351273e-02_rb,2.229056e-02_rb,2.120335e-02_rb,2.022541e-02_rb,1.933763e-02_rb, & @@ -8430,9 +8430,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.112148e-02_rb,1.081609e-02_rb,1.052642e-02_rb,1.025178e-02_rb,9.991540e-03_rb, & 9.745130e-03_rb,9.512038e-03_rb,9.291797e-03_rb,9.083980e-03_rb,8.888195e-03_rb, & 8.704081e-03_rb,8.531306e-03_rb,8.369560e-03_rb,8.218558e-03_rb,8.078032e-03_rb, & - 7.947730e-03_rb/) - absice3(:,13) = (/ & -! band 13 + 7.947730e-03_rb/) + absice3(:,13) = (/ & +! band 13 1.560311e-01_rb,9.961097e-02_rb,7.502949e-02_rb,6.115022e-02_rb,5.214952e-02_rb, & 4.578149e-02_rb,4.099731e-02_rb,3.724174e-02_rb,3.419343e-02_rb,3.165356e-02_rb, & 2.949251e-02_rb,2.762222e-02_rb,2.598073e-02_rb,2.452322e-02_rb,2.321642e-02_rb, & @@ -8442,9 +8442,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.204183e-02_rb,1.167164e-02_rb,1.132567e-02_rb,1.100281e-02_rb,1.070207e-02_rb, & 1.042258e-02_rb,1.016352e-02_rb,9.924197e-03_rb,9.703953e-03_rb,9.502199e-03_rb, & 9.318400e-03_rb,9.152066e-03_rb,9.002749e-03_rb,8.870038e-03_rb,8.753555e-03_rb, & - 8.652951e-03_rb/) - absice3(:,14) = (/ & -! band 14 + 8.652951e-03_rb/) + absice3(:,14) = (/ & +! band 14 1.559547e-01_rb,9.896700e-02_rb,7.441231e-02_rb,6.061469e-02_rb,5.168730e-02_rb, & 4.537821e-02_rb,4.064106e-02_rb,3.692367e-02_rb,3.390714e-02_rb,3.139438e-02_rb, & 2.925702e-02_rb,2.740783e-02_rb,2.578547e-02_rb,2.434552e-02_rb,2.305506e-02_rb, & @@ -8454,9 +8454,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.205973e-02_rb,1.169780e-02_rb,1.135989e-02_rb,1.104492e-02_rb,1.075192e-02_rb, & 1.048004e-02_rb,1.022850e-02_rb,9.996611e-03_rb,9.783753e-03_rb,9.589361e-03_rb, & 9.412924e-03_rb,9.253977e-03_rb,9.112098e-03_rb,8.986903e-03_rb,8.878039e-03_rb, & - 8.785184e-03_rb/) - absice3(:,15) = (/ & -! band 15 + 8.785184e-03_rb/) + absice3(:,15) = (/ & +! band 15 1.102926e-01_rb,7.176622e-02_rb,5.530316e-02_rb,4.606056e-02_rb,4.006116e-02_rb, & 3.579628e-02_rb,3.256909e-02_rb,3.001360e-02_rb,2.791920e-02_rb,2.615617e-02_rb, & 2.464023e-02_rb,2.331426e-02_rb,2.213817e-02_rb,2.108301e-02_rb,2.012733e-02_rb, & @@ -8466,9 +8466,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.145348e-02_rb,1.114612e-02_rb,1.085730e-02_rb,1.058633e-02_rb,1.033263e-02_rb, & 1.009564e-02_rb,9.874895e-03_rb,9.669960e-03_rb,9.480449e-03_rb,9.306014e-03_rb, & 9.146339e-03_rb,9.001138e-03_rb,8.870154e-03_rb,8.753148e-03_rb,8.649907e-03_rb, & - 8.560232e-03_rb/) + 8.560232e-03_rb/) absice3(:,16) = (/ & -! band 16 +! band 16 1.688344e-01_rb,1.077072e-01_rb,7.994467e-02_rb,6.403862e-02_rb,5.369850e-02_rb, & 4.641582e-02_rb,4.099331e-02_rb,3.678724e-02_rb,3.342069e-02_rb,3.065831e-02_rb, & 2.834557e-02_rb,2.637680e-02_rb,2.467733e-02_rb,2.319286e-02_rb,2.188299e-02_rb, & @@ -8478,16 +8478,16 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.149683e-02_rb,1.116436e-02_rb,1.085153e-02_rb,1.055701e-02_rb,1.027961e-02_rb, & 1.001831e-02_rb,9.772141e-03_rb,9.540280e-03_rb,9.321966e-03_rb,9.116517e-03_rb, & 8.923315e-03_rb,8.741803e-03_rb,8.571472e-03_rb,8.411860e-03_rb,8.262543e-03_rb, & - 8.123136e-03_rb/) - -! For LIQFLAG = 0. - absliq0 = 0.0903614_rb - -! For LIQFLAG = 1. In each band, the absorption -! coefficients are listed for a range of effective radii from 2.5 -! to 59.5 microns in increments of 1.0 micron. - absliq1(:, 1) = (/ & -! band 1 + 8.123136e-03_rb/) + +! For LIQFLAG = 0. + absliq0 = 0.0903614_rb + +! For LIQFLAG = 1. In each band, the absorption +! coefficients are listed for a range of effective radii from 2.5 +! to 59.5 microns in increments of 1.0 micron. + absliq1(:, 1) = (/ & +! band 1 1.64047e-03_rb, 6.90533e-02_rb, 7.72017e-02_rb, 7.78054e-02_rb, 7.69523e-02_rb, & 7.58058e-02_rb, 7.46400e-02_rb, 7.35123e-02_rb, 7.24162e-02_rb, 7.13225e-02_rb, & 6.99145e-02_rb, 6.66409e-02_rb, 6.36582e-02_rb, 6.09425e-02_rb, 5.84593e-02_rb, & @@ -8499,9 +8499,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 2.47189e-02_rb, 2.40678e-02_rb, 2.34418e-02_rb, 2.28392e-02_rb, 2.22586e-02_rb, & 2.16986e-02_rb, 2.11580e-02_rb, 2.06356e-02_rb, 2.01305e-02_rb, 1.96417e-02_rb, & 1.91682e-02_rb, 1.87094e-02_rb, 1.82643e-02_rb, 1.78324e-02_rb, 1.74129e-02_rb, & - 1.70052e-02_rb, 1.66088e-02_rb, 1.62231e-02_rb/) - absliq1(:, 2) = (/ & -! band 2 + 1.70052e-02_rb, 1.66088e-02_rb, 1.62231e-02_rb/) + absliq1(:, 2) = (/ & +! band 2 2.19486e-01_rb, 1.80687e-01_rb, 1.59150e-01_rb, 1.44731e-01_rb, 1.33703e-01_rb, & 1.24355e-01_rb, 1.15756e-01_rb, 1.07318e-01_rb, 9.86119e-02_rb, 8.92739e-02_rb, & 8.34911e-02_rb, 7.70773e-02_rb, 7.15240e-02_rb, 6.66615e-02_rb, 6.23641e-02_rb, & @@ -8513,9 +8513,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 2.08834e-02_rb, 2.03051e-02_rb, 1.97536e-02_rb, 1.92271e-02_rb, 1.87239e-02_rb, & 1.82425e-02_rb, 1.77816e-02_rb, 1.73399e-02_rb, 1.69162e-02_rb, 1.65094e-02_rb, & 1.61187e-02_rb, 1.57430e-02_rb, 1.53815e-02_rb, 1.50334e-02_rb, 1.46981e-02_rb, & - 1.43748e-02_rb, 1.40628e-02_rb, 1.37617e-02_rb/) - absliq1(:, 3) = (/ & -! band 3 + 1.43748e-02_rb, 1.40628e-02_rb, 1.37617e-02_rb/) + absliq1(:, 3) = (/ & +! band 3 2.95174e-01_rb, 2.34765e-01_rb, 1.98038e-01_rb, 1.72114e-01_rb, 1.52083e-01_rb, & 1.35654e-01_rb, 1.21613e-01_rb, 1.09252e-01_rb, 9.81263e-02_rb, 8.79448e-02_rb, & 8.12566e-02_rb, 7.44563e-02_rb, 6.86374e-02_rb, 6.36042e-02_rb, 5.92094e-02_rb, & @@ -8527,9 +8527,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.96561e-02_rb, 1.91239e-02_rb, 1.86161e-02_rb, 1.81311e-02_rb, 1.76673e-02_rb, & 1.72234e-02_rb, 1.67981e-02_rb, 1.63903e-02_rb, 1.59989e-02_rb, 1.56230e-02_rb, & 1.52615e-02_rb, 1.49138e-02_rb, 1.45791e-02_rb, 1.42565e-02_rb, 1.39455e-02_rb, & - 1.36455e-02_rb, 1.33559e-02_rb, 1.30761e-02_rb/) - absliq1(:, 4) = (/ & -! band 4 + 1.36455e-02_rb, 1.33559e-02_rb, 1.30761e-02_rb/) + absliq1(:, 4) = (/ & +! band 4 3.00925e-01_rb, 2.36949e-01_rb, 1.96947e-01_rb, 1.68692e-01_rb, 1.47190e-01_rb, & 1.29986e-01_rb, 1.15719e-01_rb, 1.03568e-01_rb, 9.30028e-02_rb, 8.36658e-02_rb, & 7.71075e-02_rb, 7.07002e-02_rb, 6.52284e-02_rb, 6.05024e-02_rb, 5.63801e-02_rb, & @@ -8541,9 +8541,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.91711e-02_rb, 1.86625e-02_rb, 1.81769e-02_rb, 1.77126e-02_rb, 1.72683e-02_rb, & 1.68426e-02_rb, 1.64344e-02_rb, 1.60427e-02_rb, 1.56664e-02_rb, 1.53046e-02_rb, & 1.49565e-02_rb, 1.46214e-02_rb, 1.42985e-02_rb, 1.39871e-02_rb, 1.36866e-02_rb, & - 1.33965e-02_rb, 1.31162e-02_rb, 1.28453e-02_rb/) - absliq1(:, 5) = (/ & -! band 5 + 1.33965e-02_rb, 1.31162e-02_rb, 1.28453e-02_rb/) + absliq1(:, 5) = (/ & +! band 5 2.64691e-01_rb, 2.12018e-01_rb, 1.78009e-01_rb, 1.53539e-01_rb, 1.34721e-01_rb, & 1.19580e-01_rb, 1.06996e-01_rb, 9.62772e-02_rb, 8.69710e-02_rb, 7.87670e-02_rb, & 7.29272e-02_rb, 6.70920e-02_rb, 6.20977e-02_rb, 5.77732e-02_rb, 5.39910e-02_rb, & @@ -8555,9 +8555,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.89917e-02_rb, 1.84984e-02_rb, 1.80269e-02_rb, 1.75755e-02_rb, 1.71431e-02_rb, & 1.67283e-02_rb, 1.63303e-02_rb, 1.59478e-02_rb, 1.55801e-02_rb, 1.52262e-02_rb, & 1.48853e-02_rb, 1.45568e-02_rb, 1.42400e-02_rb, 1.39342e-02_rb, 1.36388e-02_rb, & - 1.33533e-02_rb, 1.30773e-02_rb, 1.28102e-02_rb/) - absliq1(:, 6) = (/ & -! band 6 + 1.33533e-02_rb, 1.30773e-02_rb, 1.28102e-02_rb/) + absliq1(:, 6) = (/ & +! band 6 8.81182e-02_rb, 1.06745e-01_rb, 9.79753e-02_rb, 8.99625e-02_rb, 8.35200e-02_rb, & 7.81899e-02_rb, 7.35939e-02_rb, 6.94696e-02_rb, 6.56266e-02_rb, 6.19148e-02_rb, & 5.83355e-02_rb, 5.49306e-02_rb, 5.19642e-02_rb, 4.93325e-02_rb, 4.69659e-02_rb, & @@ -8569,9 +8569,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.94280e-02_rb, 1.89501e-02_rb, 1.84913e-02_rb, 1.80506e-02_rb, 1.76270e-02_rb, & 1.72196e-02_rb, 1.68276e-02_rb, 1.64500e-02_rb, 1.60863e-02_rb, 1.57357e-02_rb, & 1.53975e-02_rb, 1.50710e-02_rb, 1.47558e-02_rb, 1.44511e-02_rb, 1.41566e-02_rb, & - 1.38717e-02_rb, 1.35960e-02_rb, 1.33290e-02_rb/) - absliq1(:, 7) = (/ & -! band 7 + 1.38717e-02_rb, 1.35960e-02_rb, 1.33290e-02_rb/) + absliq1(:, 7) = (/ & +! band 7 4.32174e-02_rb, 7.36078e-02_rb, 6.98340e-02_rb, 6.65231e-02_rb, 6.41948e-02_rb, & 6.23551e-02_rb, 6.06638e-02_rb, 5.88680e-02_rb, 5.67124e-02_rb, 5.38629e-02_rb, & 4.99579e-02_rb, 4.86289e-02_rb, 4.70120e-02_rb, 4.52854e-02_rb, 4.35466e-02_rb, & @@ -8583,9 +8583,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.90824e-02_rb, 1.86174e-02_rb, 1.81706e-02_rb, 1.77411e-02_rb, 1.73281e-02_rb, & 1.69307e-02_rb, 1.65483e-02_rb, 1.61801e-02_rb, 1.58254e-02_rb, 1.54835e-02_rb, & 1.51538e-02_rb, 1.48358e-02_rb, 1.45288e-02_rb, 1.42322e-02_rb, 1.39457e-02_rb, & - 1.36687e-02_rb, 1.34008e-02_rb, 1.31416e-02_rb/) - absliq1(:, 8) = (/ & -! band 8 + 1.36687e-02_rb, 1.34008e-02_rb, 1.31416e-02_rb/) + absliq1(:, 8) = (/ & +! band 8 1.41881e-01_rb, 7.15419e-02_rb, 6.30335e-02_rb, 6.11132e-02_rb, 6.01931e-02_rb, & 5.92420e-02_rb, 5.78968e-02_rb, 5.58876e-02_rb, 5.28923e-02_rb, 4.84462e-02_rb, & 4.60839e-02_rb, 4.56013e-02_rb, 4.45410e-02_rb, 4.31866e-02_rb, 4.17026e-02_rb, & @@ -8597,9 +8597,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.88056e-02_rb, 1.83564e-02_rb, 1.79241e-02_rb, 1.75079e-02_rb, 1.71070e-02_rb, & 1.67207e-02_rb, 1.63482e-02_rb, 1.59890e-02_rb, 1.56424e-02_rb, 1.53077e-02_rb, & 1.49845e-02_rb, 1.46722e-02_rb, 1.43702e-02_rb, 1.40782e-02_rb, 1.37955e-02_rb, & - 1.35219e-02_rb, 1.32569e-02_rb, 1.30000e-02_rb/) - absliq1(:, 9) = (/ & -! band 9 + 1.35219e-02_rb, 1.32569e-02_rb, 1.30000e-02_rb/) + absliq1(:, 9) = (/ & +! band 9 6.72726e-02_rb, 6.61013e-02_rb, 6.47866e-02_rb, 6.33780e-02_rb, 6.18985e-02_rb, & 6.03335e-02_rb, 5.86136e-02_rb, 5.65876e-02_rb, 5.39839e-02_rb, 5.03536e-02_rb, & 4.71608e-02_rb, 4.63630e-02_rb, 4.50313e-02_rb, 4.34526e-02_rb, 4.17876e-02_rb, & @@ -8611,9 +8611,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.83944e-02_rb, 1.79578e-02_rb, 1.75378e-02_rb, 1.71335e-02_rb, 1.67440e-02_rb, & 1.63687e-02_rb, 1.60069e-02_rb, 1.56579e-02_rb, 1.53210e-02_rb, 1.49958e-02_rb, & 1.46815e-02_rb, 1.43778e-02_rb, 1.40841e-02_rb, 1.37999e-02_rb, 1.35249e-02_rb, & - 1.32585e-02_rb, 1.30004e-02_rb, 1.27502e-02_rb/) - absliq1(:,10) = (/ & -! band 10 + 1.32585e-02_rb, 1.30004e-02_rb, 1.27502e-02_rb/) + absliq1(:,10) = (/ & +! band 10 7.97040e-02_rb, 7.63844e-02_rb, 7.36499e-02_rb, 7.13525e-02_rb, 6.93043e-02_rb, & 6.72807e-02_rb, 6.50227e-02_rb, 6.22395e-02_rb, 5.86093e-02_rb, 5.37815e-02_rb, & 5.14682e-02_rb, 4.97214e-02_rb, 4.77392e-02_rb, 4.56961e-02_rb, 4.36858e-02_rb, & @@ -8625,9 +8625,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.83483e-02_rb, 1.79043e-02_rb, 1.74778e-02_rb, 1.70678e-02_rb, 1.66735e-02_rb, & 1.62941e-02_rb, 1.59286e-02_rb, 1.55766e-02_rb, 1.52371e-02_rb, 1.49097e-02_rb, & 1.45937e-02_rb, 1.42885e-02_rb, 1.39936e-02_rb, 1.37085e-02_rb, 1.34327e-02_rb, & - 1.31659e-02_rb, 1.29075e-02_rb, 1.26571e-02_rb/) - absliq1(:,11) = (/ & -! band 11 + 1.31659e-02_rb, 1.29075e-02_rb, 1.26571e-02_rb/) + absliq1(:,11) = (/ & +! band 11 1.49438e-01_rb, 1.33535e-01_rb, 1.21542e-01_rb, 1.11743e-01_rb, 1.03263e-01_rb, & 9.55774e-02_rb, 8.83382e-02_rb, 8.12943e-02_rb, 7.42533e-02_rb, 6.70609e-02_rb, & 6.38761e-02_rb, 5.97788e-02_rb, 5.59841e-02_rb, 5.25318e-02_rb, 4.94132e-02_rb, & @@ -8639,9 +8639,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.84317e-02_rb, 1.79679e-02_rb, 1.75238e-02_rb, 1.70983e-02_rb, 1.66901e-02_rb, & 1.62983e-02_rb, 1.59219e-02_rb, 1.55599e-02_rb, 1.52115e-02_rb, 1.48761e-02_rb, & 1.45528e-02_rb, 1.42411e-02_rb, 1.39402e-02_rb, 1.36497e-02_rb, 1.33690e-02_rb, & - 1.30976e-02_rb, 1.28351e-02_rb, 1.25810e-02_rb/) - absliq1(:,12) = (/ & -! band 12 + 1.30976e-02_rb, 1.28351e-02_rb, 1.25810e-02_rb/) + absliq1(:,12) = (/ & +! band 12 3.71985e-02_rb, 3.88586e-02_rb, 3.99070e-02_rb, 4.04351e-02_rb, 4.04610e-02_rb, & 3.99834e-02_rb, 3.89953e-02_rb, 3.74886e-02_rb, 3.54551e-02_rb, 3.28870e-02_rb, & 3.32576e-02_rb, 3.22444e-02_rb, 3.12384e-02_rb, 3.02584e-02_rb, 2.93146e-02_rb, & @@ -8653,10 +8653,10 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.56842e-02_rb, 1.53840e-02_rb, 1.50920e-02_rb, 1.48080e-02_rb, 1.45318e-02_rb, & 1.42631e-02_rb, 1.40016e-02_rb, 1.37472e-02_rb, 1.34996e-02_rb, 1.32586e-02_rb, & 1.30239e-02_rb, 1.27954e-02_rb, 1.25728e-02_rb, 1.23559e-02_rb, 1.21445e-02_rb, & - 1.19385e-02_rb, 1.17376e-02_rb, 1.15417e-02_rb/) + 1.19385e-02_rb, 1.17376e-02_rb, 1.15417e-02_rb/) - absliq1(:,13) = (/ & -! band 13 + absliq1(:,13) = (/ & +! band 13 3.11868e-02_rb, 4.48357e-02_rb, 4.90224e-02_rb, 4.96406e-02_rb, 4.86806e-02_rb, & 4.69610e-02_rb, 4.48630e-02_rb, 4.25795e-02_rb, 4.02138e-02_rb, 3.78236e-02_rb, & 3.74266e-02_rb, 3.60384e-02_rb, 3.47074e-02_rb, 3.34434e-02_rb, 3.22499e-02_rb, & @@ -8668,9 +8668,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.62956e-02_rb, 1.59624e-02_rb, 1.56393e-02_rb, 1.53259e-02_rb, 1.50219e-02_rb, & 1.47268e-02_rb, 1.44404e-02_rb, 1.41624e-02_rb, 1.38925e-02_rb, 1.36302e-02_rb, & 1.33755e-02_rb, 1.31278e-02_rb, 1.28871e-02_rb, 1.26530e-02_rb, 1.24253e-02_rb, & - 1.22038e-02_rb, 1.19881e-02_rb, 1.17782e-02_rb/) - absliq1(:,14) = (/ & -! band 14 + 1.22038e-02_rb, 1.19881e-02_rb, 1.17782e-02_rb/) + absliq1(:,14) = (/ & +! band 14 1.58988e-02_rb, 3.50652e-02_rb, 4.00851e-02_rb, 4.07270e-02_rb, 3.98101e-02_rb, & 3.83306e-02_rb, 3.66829e-02_rb, 3.50327e-02_rb, 3.34497e-02_rb, 3.19609e-02_rb, & 3.13712e-02_rb, 3.03348e-02_rb, 2.93415e-02_rb, 2.83973e-02_rb, 2.75037e-02_rb, & @@ -8682,9 +8682,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.50936e-02_rb, 1.48146e-02_rb, 1.45429e-02_rb, 1.42782e-02_rb, 1.40203e-02_rb, & 1.37691e-02_rb, 1.35243e-02_rb, 1.32858e-02_rb, 1.30534e-02_rb, 1.28270e-02_rb, & 1.26062e-02_rb, 1.23909e-02_rb, 1.21810e-02_rb, 1.19763e-02_rb, 1.17766e-02_rb, & - 1.15817e-02_rb, 1.13915e-02_rb, 1.12058e-02_rb/) - absliq1(:,15) = (/ & -! band 15 + 1.15817e-02_rb, 1.13915e-02_rb, 1.12058e-02_rb/) + absliq1(:,15) = (/ & +! band 15 5.02079e-03_rb, 2.17615e-02_rb, 2.55449e-02_rb, 2.59484e-02_rb, 2.53650e-02_rb, & 2.45281e-02_rb, 2.36843e-02_rb, 2.29159e-02_rb, 2.22451e-02_rb, 2.16716e-02_rb, & 2.11451e-02_rb, 2.05817e-02_rb, 2.00454e-02_rb, 1.95372e-02_rb, 1.90567e-02_rb, & @@ -8696,9 +8696,9 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.20881e-02_rb, 1.19131e-02_rb, 1.17412e-02_rb, 1.15723e-02_rb, 1.14063e-02_rb, & 1.12434e-02_rb, 1.10834e-02_rb, 1.09264e-02_rb, 1.07722e-02_rb, 1.06210e-02_rb, & 1.04725e-02_rb, 1.03269e-02_rb, 1.01839e-02_rb, 1.00436e-02_rb, 9.90593e-03_rb, & - 9.77080e-03_rb, 9.63818e-03_rb, 9.50800e-03_rb/) - absliq1(:,16) = (/ & -! band 16 + 9.77080e-03_rb, 9.63818e-03_rb, 9.50800e-03_rb/) + absliq1(:,16) = (/ & +! band 16 5.64971e-02_rb, 9.04736e-02_rb, 8.11726e-02_rb, 7.05450e-02_rb, 6.20052e-02_rb, & 5.54286e-02_rb, 5.03503e-02_rb, 4.63791e-02_rb, 4.32290e-02_rb, 4.06959e-02_rb, & 3.74690e-02_rb, 3.52964e-02_rb, 3.33799e-02_rb, 3.16774e-02_rb, 3.01550e-02_rb, & @@ -8710,7 +8710,7 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & 1.41532e-02_rb, 1.38734e-02_rb, 1.36028e-02_rb, 1.33410e-02_rb, 1.30875e-02_rb, & 1.28420e-02_rb, 1.26041e-02_rb, 1.23735e-02_rb, 1.21497e-02_rb, 1.19325e-02_rb, & 1.17216e-02_rb, 1.15168e-02_rb, 1.13177e-02_rb, 1.11241e-02_rb, 1.09358e-02_rb, & - 1.07525e-02_rb, 1.05741e-02_rb, 1.04003e-02_rb/) + 1.07525e-02_rb, 1.05741e-02_rb, 1.04003e-02_rb/) !jm not thread safe hvrclc = '$Revision: 1.8 $' @@ -8786,76 +8786,76 @@ subroutine cldprmc(nlayers, inflag, iceflag, liqflag, cldfmc, & if (radice .lt. 5.0_rb .or. radice .gt. 140.0_rb) then write(errmess,'(A,i5,i5,f8.2,f8.2)' ) & & 'ERROR: ICE GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS' & - & ,ig, lay, ciwpmc(ig,lay), radice - !mz call wrf_error_fatal(errmess) - end if - ncbands = 16 - factor = (radice - 2._rb)/3._rb - index = int(factor) - if (index .eq. 46) index = 45 - fint = factor - float(index) - ib = ngb(ig) + & ,ig, lay, ciwpmc(ig,lay), radice + !mz call wrf_error_fatal(errmess) + end if + ncbands = 16 + factor = (radice - 2._rb)/3._rb + index = int(factor) + if (index .eq. 46) index = 45 + fint = factor - float(index) + ib = ngb(ig) abscoice(ig) = & & absice3(index,ib) + fint * & - & (absice3(index+1,ib) - (absice3(index,ib))) - abscosno(ig) = 0.0_rb - - endif - -!..Incorporate additional effects due to snow. - if (cswpmc(ig,lay).gt.0.0_rb .and. iceflag .eq. 5) then - radsno = resnmc(lay) - if (radsno .lt. 5.0_rb .or. radsno .gt. 140.0_rb) then + & (absice3(index+1,ib) - (absice3(index,ib))) + abscosno(ig) = 0.0_rb + + endif + +!..Incorporate additional effects due to snow. + if (cswpmc(ig,lay).gt.0.0_rb .and. iceflag .eq. 5) then + radsno = resnmc(lay) + if (radsno .lt. 5.0_rb .or. radsno .gt. 140.0_rb) then write(errmess,'(A,i5,i5,f8.2,f8.2)' ) & - & 'ERROR: SNOW GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS' & - & ,ig, lay, cswpmc(ig,lay), radsno - !mz call wrf_error_fatal(errmess) - end if - ncbands = 16 - factor = (radsno - 2._rb)/3._rb - index = int(factor) - if (index .eq. 46) index = 45 - fint = factor - float(index) - ib = ngb(ig) + & 'ERROR: SNOW GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS' & + & ,ig, lay, cswpmc(ig,lay), radsno + !mz call wrf_error_fatal(errmess) + end if + ncbands = 16 + factor = (radsno - 2._rb)/3._rb + index = int(factor) + if (index .eq. 46) index = 45 + fint = factor - float(index) + ib = ngb(ig) abscosno(ig) = & & absice3(index,ib) + fint * & - & (absice3(index+1,ib) - (absice3(index,ib))) - endif - - - -! Calculation of absorption coefficients due to water clouds. - if (clwpmc(ig,lay) .eq. 0.0_rb) then - abscoliq(ig) = 0.0_rb - - elseif (liqflag .eq. 0) then - abscoliq(ig) = absliq0 - - elseif (liqflag .eq. 1) then - radliq = relqmc(lay) + & (absice3(index+1,ib) - (absice3(index,ib))) + endif + + + +! Calculation of absorption coefficients due to water clouds. + if (clwpmc(ig,lay) .eq. 0.0_rb) then + abscoliq(ig) = 0.0_rb + + elseif (liqflag .eq. 0) then + abscoliq(ig) = absliq0 + + elseif (liqflag .eq. 1) then + radliq = relqmc(lay) if (radliq .lt. 2.5_rb .or. radliq .gt. 60._rb) stop & - & 'LIQUID EFFECTIVE RADIUS OUT OF BOUNDS' - index = int(radliq - 1.5_rb) - if (index .eq. 0) index = 1 - if (index .eq. 58) index = 57 - fint = radliq - 1.5_rb - float(index) - ib = ngb(ig) + & 'LIQUID EFFECTIVE RADIUS OUT OF BOUNDS' + index = int(radliq - 1.5_rb) + if (index .eq. 0) index = 1 + if (index .eq. 58) index = 57 + fint = radliq - 1.5_rb - float(index) + ib = ngb(ig) abscoliq(ig) = & & absliq1(index,ib) + fint * & - & (absliq1(index+1,ib) - (absliq1(index,ib))) - endif - + & (absliq1(index+1,ib) - (absliq1(index,ib))) + endif + taucmc(ig,lay) = ciwpmc(ig,lay) * abscoice(ig) + & & clwpmc(ig,lay) * abscoliq(ig) + & - & cswpmc(ig,lay) * abscosno(ig) - - endif - endif - enddo - enddo - - end subroutine cldprmc - + & cswpmc(ig,lay) * abscosno(ig) + + endif + endif + enddo + enddo + + end subroutine cldprmc + !........................................!$ end module rrtmg_lw !$ diff --git a/physics/radsw_main.F90 b/physics/radsw_main.F90 index 321414976..8465f2dd2 100644 --- a/physics/radsw_main.F90 +++ b/physics/radsw_main.F90 @@ -264,9 +264,9 @@ !!!!! end descriptions !!!!! !!!!! ============================================================== !!!!! -!> This module contains the CCPP-compliant NCEP's modifications of the rrtm-sw radiation -!! code from aer inc. - module rrtmg_sw +!> This module contains the CCPP-compliant NCEP's modifications of the rrtm-sw radiation +!! code from aer inc. + module rrtmg_sw ! use physparam, only : iswrate, iswrgas, iswcliq, iswcice, & & isubcsw, icldflg, iovrsw, ivflip, & @@ -369,7 +369,7 @@ module rrtmg_sw ! --- public accessable subprograms public rrtmg_sw_init, rrtmg_sw_run, rrtmg_sw_finalize, rswinit, & - & kissvec, generate_stochastic_clouds_sw, mcica_subcol_sw + & kissvec, generate_stochastic_clouds_sw, mcica_subcol_sw ! ================= @@ -668,8 +668,8 @@ subroutine rrtmg_sw_run & real (kind=kind_phys), dimension(npts,nlay), intent(in) :: & & plyr, tlyr, qlyr, olyr, dzlyr, delpin - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif + real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir + real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dir real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dif @@ -745,11 +745,11 @@ subroutine rrtmg_sw_run & real(kind=kind_phys),dimension(ngptsw,npts,nlay) :: taucmcl ! In-cloud optical depth ! Dimensions: (ngptsw,ncol,nlay) real(kind=kind_phys),dimension(ngptsw,npts,nlay) :: ssacmcl ! in-cloud single scattering albedo [mcica] - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (ngptsw,ncol,nlay) real(kind=kind_phys),dimension(ngptsw,npts,nlay) :: asmcmcl ! in-cloud asymmetry parameter [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=kind_phys),dimension(ngptsw,npts,nlay) :: fsfcmcl ! in-cloud forward scattering fraction [mcica] - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=kind_phys),dimension(ngptsw,npts,nlay) :: fsfcmcl ! in-cloud forward scattering fraction [mcica] + ! Dimensions: (ngptsw,ncol,nlay) !HWRF cldprmc_sw input ! real(kind=kind_phys),dimension(ngptsw,nlay) :: cldfmc,cldfmc_save! cloud fraction [mcica] ! ! Dimensions: (ngptsw,nlayers) @@ -761,30 +761,30 @@ subroutine rrtmg_sw_run & ! Dimensions: (ngptsw,nlayers) real(kind=kind_phys),dimension(nlay) :: resnmc ! cloud snow particle effective radius (microns) ! Dimensions: (nlayers) - real(kind=kind_phys),dimension(nlay) :: relqmc ! cloud liquid particle effective radius (microns) - ! Dimensions: (nlayers) - real(kind=kind_phys),dimension(nlay) :: reicmc ! cloud ice particle effective radius (microns) - ! Dimensions: (nlayers) - ! specific definition of reicmc depends on setting of iceflag: + real(kind=kind_phys),dimension(nlay) :: relqmc ! cloud liquid particle effective radius (microns) + ! Dimensions: (nlayers) + real(kind=kind_phys),dimension(nlay) :: reicmc ! cloud ice particle effective radius (microns) + ! Dimensions: (nlayers) + ! specific definition of reicmc depends on setting of iceflag: ! iceflag = 1: ice effective radius, r_ec, (Ebert and Curry, 1992), - ! r_ec range is limited to 13.0 to 130.0 microns - ! iceflag = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996) - ! r_k range is limited to 5.0 to 131.0 microns - ! iceflag = 3: generalized effective size, dge, (Fu, 1996), - ! dge range is limited to 5.0 to 140.0 microns - ! [dge = 1.0315 * r_ec] - real(kind=kind_phys),dimension(ngptsw,nlay) :: fsfcmc ! cloud forward scattering fraction - ! Dimensions: (ngptsw,nlayers) + ! r_ec range is limited to 13.0 to 130.0 microns + ! iceflag = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996) + ! r_k range is limited to 5.0 to 131.0 microns + ! iceflag = 3: generalized effective size, dge, (Fu, 1996), + ! dge range is limited to 5.0 to 140.0 microns + ! [dge = 1.0315 * r_ec] + real(kind=kind_phys),dimension(ngptsw,nlay) :: fsfcmc ! cloud forward scattering fraction + ! Dimensions: (ngptsw,nlayers) !mz* HWRF cldprmc_sw output (delta scaled) - real(kind=kind_phys),dimension(ngptsw,nlay) :: taucmc ! cloud optical depth (delta scaled) - ! Dimensions: (ngptsw,nlayers) - real(kind=kind_phys),dimension(ngptsw,nlay) :: ssacmc ! single scattering albedo (delta scaled) - ! Dimensions: (ngptsw,nlayers) - real(kind=kind_phys),dimension(ngptsw,nlay) :: asmcmc ! asymmetry parameter (delta scaled) - ! Dimensions: (ngptsw,nlayers) - real(kind=kind_phys),dimension(ngptsw,nlay) :: taormc ! cloud optical depth (non-delta scaled) - ! Dimensions: (ngptsw,nlayers) + real(kind=kind_phys),dimension(ngptsw,nlay) :: taucmc ! cloud optical depth (delta scaled) + ! Dimensions: (ngptsw,nlayers) + real(kind=kind_phys),dimension(ngptsw,nlay) :: ssacmc ! single scattering albedo (delta scaled) + ! Dimensions: (ngptsw,nlayers) + real(kind=kind_phys),dimension(ngptsw,nlay) :: asmcmc ! asymmetry parameter (delta scaled) + ! Dimensions: (ngptsw,nlayers) + real(kind=kind_phys),dimension(ngptsw,nlay) :: taormc ! cloud optical depth (non-delta scaled) + ! Dimensions: (ngptsw,nlayers) !mz* real (kind=kind_phys), dimension(nlay,ngptsw) :: cldfmc, & @@ -946,7 +946,7 @@ subroutine rrtmg_sw_run & !Add layer height needed for exponential (icld=4) and -! exponential-random (icld=5) overlap options +! exponential-random (icld=5) overlap options !iplon = 1 irng = 0 @@ -962,7 +962,7 @@ subroutine rrtmg_sw_run & enddo ! Zero out cloud optical properties here; not used when passing physical properties -! to radiation and taucld is calculated in radiation +! to radiation and taucld is calculated in radiation do k = 1, nlay do ib = 1, nbdsw taucld3(ib,j1,k) = 0.0 @@ -979,7 +979,7 @@ subroutine rrtmg_sw_run & & cld_ref_snow, taucld3,ssacld3,asmcld3,fsfcld3, & & cldfmcl, ciwpmcl, clwpmcl, cswpmcl, & !--output & reicmcl, relqmcl, resnmcl, & - & taucmcl, ssacmcl, asmcmcl, fsfcmcl) + & taucmcl, ssacmcl, asmcmcl, fsfcmcl) endif !mz* end @@ -1183,7 +1183,7 @@ subroutine rrtmg_sw_run & enddo if (iovrsw == 4) then !mz* HWRF !mz* Move incoming GCM cloud arrays to RRTMG cloud arrays. -!For GCM input, incoming reicmcl is defined based on selected +!For GCM input, incoming reicmcl is defined based on selected !ice parameterization (inflglw) do k = 1, nlay do ig = 1, ngptsw @@ -1258,7 +1258,7 @@ subroutine rrtmg_sw_run & do k = 1, nlay do ig = 1, ngptsw cldfmc_save(k,ig)=cldfmc (k,ig) - enddo + enddo enddo endif @@ -1270,14 +1270,14 @@ subroutine rrtmg_sw_run & & taucw, ssacw, asycw, cldfrc, cldfmc & & ) - if (iovrsw == 4) then - !mz for HWRF, still using mcica cldfmc - do k = 1, nlay - do ig = 1, ngptsw - cldfmc(k,ig)=cldfmc_save(k,ig) - enddo - enddo - endif + if (iovrsw == 4) then + !mz for HWRF, still using mcica cldfmc + do k = 1, nlay + do ig = 1, ngptsw + cldfmc(k,ig)=cldfmc_save(k,ig) + enddo + enddo + endif ! --- ... save computed layer cloud optical depth for output ! rrtm band 10 is approx to the 0.55 mu spectrum @@ -1674,7 +1674,7 @@ subroutine rswinit & heatfac = con_g * 1.0e-2 / con_cp ! (in k/second) endif -!> -# Define exponential lookup tables for transmittance. +!> -# Define exponential lookup tables for transmittance. ! tau is computed as a function of the \a tau transition function, and ! transmittance is calculated as a function of tau. all tables ! are computed at intervals of 0.0001. the inverse of the @@ -2790,11 +2790,11 @@ subroutine spcvrtc & zasy3 = 0.75 * zasy1 !> - Perform general two-stream expressions: -!!\n control parameters in module "physparam" -!!\n iswmode - control flag for 2-stream transfer schemes -!!\n = 1 delta-eddington (joseph et al., 1976) -!!\n = 2 pifm (zdunkowski et al., 1980) -!!\n = 3 discrete ordinates (liou, 1973) +!!\n control parameters in module "physparam" +!!\n iswmode - control flag for 2-stream transfer schemes +!!\n = 1 delta-eddington (joseph et al., 1976) +!!\n = 2 pifm (zdunkowski et al., 1980) +!!\n = 3 discrete ordinates (liou, 1973) if ( iswmode == 1 ) then zgam1 = 1.75 - zssa1 * (f_one + zasy3) zgam2 =-0.25 + zssa1 * (f_one - zasy3) @@ -3568,10 +3568,10 @@ subroutine spcvrtm & zasy3 = 0.75 * zasy1 !> - Perform general two-stream expressions: -!!\n control parameters in module "physparam" -!!\n iswmode - control flag for 2-stream transfer schemes -!!\n = 1 delta-eddington (joseph et al., 1976) -!!\n = 2 pifm (zdunkowski et al., 1980) +!!\n control parameters in module "physparam" +!!\n iswmode - control flag for 2-stream transfer schemes +!!\n = 1 delta-eddington (joseph et al., 1976) +!!\n = 2 pifm (zdunkowski et al., 1980) !!\n = 3 discrete ordinates (liou, 1973) if ( iswmode == 1 ) then zgam1 = 1.75 - zssa1 * (f_one + zasy3) @@ -3799,7 +3799,7 @@ subroutine spcvrtm & endif zgam4 = f_one - zgam3 -!> - Compute homogeneous reflectance and transmittance for both convertive +!> - Compute homogeneous reflectance and transmittance for both convertive !! and non-convertive scattering. if ( zssaw >= zcrit ) then ! for conservative scattering @@ -5666,568 +5666,568 @@ subroutine mcica_subcol_sw(iplon, ncol, nlay, icld, permuteseed, & & ssac, asmc, fsfc, & & cldfmcl, ciwpmcl, clwpmcl, cswpmcl, reicmcl, & & relqmcl, resnmcl, & - & taucmcl, ssacmcl, asmcmcl, fsfcmcl) - -! ----- Input ----- -! Control - integer(kind=im), intent(in) :: iplon ! column/longitude dimension - integer(kind=im), intent(in) :: ncol ! number of columns - integer(kind=im), intent(in) :: nlay ! number of model layers - integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag - integer(kind=im), intent(in) :: permuteseed ! if the cloud generator is called multiple times, + & taucmcl, ssacmcl, asmcmcl, fsfcmcl) + +! ----- Input ----- +! Control + integer(kind=im), intent(in) :: iplon ! column/longitude dimension + integer(kind=im), intent(in) :: ncol ! number of columns + integer(kind=im), intent(in) :: nlay ! number of model layers + integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag + integer(kind=im), intent(in) :: permuteseed ! if the cloud generator is called multiple times, ! permute the seed between each call; ! between calls for LW and SW, recommended - ! permuteseed differs by 'ngpt' - integer(kind=im), intent(inout) :: irng ! flag for random number generator - ! 0 = kissvec - ! 1 = Mersenne Twister - -! Atmosphere - real(kind=rb), intent(in) :: play(:,:) ! layer pressures (mb) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m) - ! Dimensions: (ncol,nlay) - -! Atmosphere/clouds - cldprop - real(kind=rb), intent(in) :: cldfrac(:,:) ! layer cloud fraction - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: tauc(:,:,:) ! in-cloud optical depth - ! Dimensions: (nbndsw,ncol,nlay) + ! permuteseed differs by 'ngpt' + integer(kind=im), intent(inout) :: irng ! flag for random number generator + ! 0 = kissvec + ! 1 = Mersenne Twister + +! Atmosphere + real(kind=rb), intent(in) :: play(:,:) ! layer pressures (mb) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m) + ! Dimensions: (ncol,nlay) + +! Atmosphere/clouds - cldprop + real(kind=rb), intent(in) :: cldfrac(:,:) ! layer cloud fraction + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: tauc(:,:,:) ! in-cloud optical depth + ! Dimensions: (nbndsw,ncol,nlay) real(kind=rb), intent(in) :: ssac(:,:,:) ! in-cloud single scattering albedo (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) - real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) + ! Dimensions: (nbndsw,ncol,nlay) + real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled) + ! Dimensions: (nbndsw,ncol,nlay) real(kind=rb), intent(in) :: fsfc(:,:,:) ! in-cloud forward scattering fraction (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) - real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: rei(:,:) ! cloud ice particle size - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: rel(:,:) ! cloud liquid particle size - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: res(:,:) ! cloud snow particle size - ! Dimensions: (ncol,nlay) - -! ----- Output ----- -! Atmosphere/clouds - cldprmc [mcica] - real(kind=rb), intent(out) :: cldfmcl(:,:,:) ! cloud fraction [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: ciwpmcl(:,:,:) ! in-cloud ice water path [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: clwpmcl(:,:,:) ! in-cloud liquid water path [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: cswpmcl(:,:,:) ! in-cloud snow water path [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: relqmcl(:,:) ! liquid particle size (microns) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(out) :: reicmcl(:,:) ! ice partcle size (microns) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(out) :: resnmcl(:,:) ! snow partcle size (microns) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(out) :: taucmcl(:,:,:) ! in-cloud optical depth [mcica] - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (nbndsw,ncol,nlay) + real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: rei(:,:) ! cloud ice particle size + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: rel(:,:) ! cloud liquid particle size + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: res(:,:) ! cloud snow particle size + ! Dimensions: (ncol,nlay) + +! ----- Output ----- +! Atmosphere/clouds - cldprmc [mcica] + real(kind=rb), intent(out) :: cldfmcl(:,:,:) ! cloud fraction [mcica] + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: ciwpmcl(:,:,:) ! in-cloud ice water path [mcica] + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: clwpmcl(:,:,:) ! in-cloud liquid water path [mcica] + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: cswpmcl(:,:,:) ! in-cloud snow water path [mcica] + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: relqmcl(:,:) ! liquid particle size (microns) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(out) :: reicmcl(:,:) ! ice partcle size (microns) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(out) :: resnmcl(:,:) ! snow partcle size (microns) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(out) :: taucmcl(:,:,:) ! in-cloud optical depth [mcica] + ! Dimensions: (ngptsw,ncol,nlay) real(kind=rb), intent(out) :: ssacmcl(:,:,:) ! in-cloud single scattering albedo [mcica] - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (ngptsw,ncol,nlay) real(kind=rb), intent(out) :: asmcmcl(:,:,:) ! in-cloud asymmetry parameter [mcica] - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: fsfcmcl(:,:,:) ! in-cloud forward scattering fraction [mcica] - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: fsfcmcl(:,:,:) ! in-cloud forward scattering fraction [mcica] + ! Dimensions: (ngptsw,ncol,nlay) -! ----- Local ----- +! ----- Local ----- -! Stochastic cloud generator variables [mcica] +! Stochastic cloud generator variables [mcica] integer(kind=im), parameter :: nsubcsw = ngptsw ! number of sub-columns (g-point intervals) - integer(kind=im) :: ilev ! loop index + integer(kind=im) :: ilev ! loop index - real(kind=rb) :: pmid(ncol,nlay) ! layer pressures (Pa) -! real(kind=rb) :: pdel(ncol,nlay) ! layer pressure thickness (Pa) -! real(kind=rb) :: qi(ncol,nlay) ! ice water (specific humidity) -! real(kind=rb) :: ql(ncol,nlay) ! liq water (specific humidity) + real(kind=rb) :: pmid(ncol,nlay) ! layer pressures (Pa) +! real(kind=rb) :: pdel(ncol,nlay) ! layer pressure thickness (Pa) +! real(kind=rb) :: qi(ncol,nlay) ! ice water (specific humidity) +! real(kind=rb) :: ql(ncol,nlay) ! liq water (specific humidity) -! Return if clear sky - if (icld.eq.0) return +! Return if clear sky + if (icld.eq.0) return -! NOTE: For GCM mode, permuteseed must be offset between LW and SW by at least number of subcolumns +! NOTE: For GCM mode, permuteseed must be offset between LW and SW by at least number of subcolumns -! Pass particle sizes to new arrays, no subcolumns for these properties yet -! Convert pressures from mb to Pa +! Pass particle sizes to new arrays, no subcolumns for these properties yet +! Convert pressures from mb to Pa - reicmcl(:ncol,:nlay) = rei(:ncol,:nlay) - relqmcl(:ncol,:nlay) = rel(:ncol,:nlay) + reicmcl(:ncol,:nlay) = rei(:ncol,:nlay) + relqmcl(:ncol,:nlay) = rel(:ncol,:nlay) resnmcl(:ncol,:nlay) = res(:ncol,:nlay) - pmid(:ncol,:nlay) = play(:ncol,:nlay)*1.e2_rb - -! Convert input ice and liquid cloud water paths to specific humidity ice and liquid components - -! cwp = (q * pdel * 1000.) / gravit) -! = (kg/kg * kg m-1 s-2 *1000.) / m s-2 -! = (g m-2) -! -! q = (cwp * gravit) / (pdel *1000.) -! = (g m-2 * m s-2) / (kg m-1 s-2 * 1000.) -! = kg/kg - -! do ilev = 1, nlay -! qi(ilev) = (ciwp(ilev) * grav) / (pdel(ilev) * 1000._rb) -! ql(ilev) = (clwp(ilev) * grav) / (pdel(ilev) * 1000._rb) -! enddo + pmid(:ncol,:nlay) = play(:ncol,:nlay)*1.e2_rb + +! Convert input ice and liquid cloud water paths to specific humidity ice and liquid components + +! cwp = (q * pdel * 1000.) / gravit) +! = (kg/kg * kg m-1 s-2 *1000.) / m s-2 +! = (g m-2) +! +! q = (cwp * gravit) / (pdel *1000.) +! = (g m-2 * m s-2) / (kg m-1 s-2 * 1000.) +! = kg/kg + +! do ilev = 1, nlay +! qi(ilev) = (ciwp(ilev) * grav) / (pdel(ilev) * 1000._rb) +! ql(ilev) = (clwp(ilev) * grav) / (pdel(ilev) * 1000._rb) +! enddo call generate_stochastic_clouds_sw (ncol, nlay, nsubcsw, icld, & & irng, pmid, hgt, cldfrac, clwp, ciwp, cswp, & & tauc, ssac, asmc, fsfc, cldfmcl, clwpmcl, & & ciwpmcl, cswpmcl, & - & taucmcl, ssacmcl, asmcmcl, fsfcmcl, permuteseed) + & taucmcl, ssacmcl, asmcmcl, fsfcmcl, permuteseed) - end subroutine mcica_subcol_sw + end subroutine mcica_subcol_sw !------------------------------------------------------------------------------------------------- subroutine generate_stochastic_clouds_sw(ncol, nlay, nsubcol, & & icld, irng, pmid, hgt, cld, clwp, ciwp, cswp, & & tauc, ssac, asmc, fsfc, cld_stoch, clwp_stoch, & & ciwp_stoch, cswp_stoch, & - & tauc_stoch, ssac_stoch, asmc_stoch, fsfc_stoch, changeSeed) -!------------------------------------------------------------------------------------------------- -! Contact: Cecile Hannay (hannay@ucar.edu) -! -! Original code: Based on Raisanen et al., QJRMS, 2004. -! + & tauc_stoch, ssac_stoch, asmc_stoch, fsfc_stoch, changeSeed) +!------------------------------------------------------------------------------------------------- +! Contact: Cecile Hannay (hannay@ucar.edu) +! +! Original code: Based on Raisanen et al., QJRMS, 2004. +! ! Modifications: Generalized for use with RRTMG and added Mersenne Twister as the default -! random number generator, which can be changed to the optional kissvec random number generator -! with flag 'irng'. Some extra functionality has been commented or removed. -! Michael J. Iacono, AER, Inc., February 2007 -! -! Given a profile of cloud fraction, cloud water and cloud ice, we produce a set of subcolumns. -! Each layer within each subcolumn is homogeneous, with cloud fraction equal to zero or one -! and uniform cloud liquid and cloud ice concentration. -! The ensemble as a whole reproduces the probability function of cloud liquid and ice within each layer -! and obeys an overlap assumption in the vertical. -! -! Overlap assumption: -! The cloud are consistent with 4 overlap assumptions: random, maximum, maximum-random and exponential. -! The default option is maximum-random (option 3) +! random number generator, which can be changed to the optional kissvec random number generator +! with flag 'irng'. Some extra functionality has been commented or removed. +! Michael J. Iacono, AER, Inc., February 2007 +! +! Given a profile of cloud fraction, cloud water and cloud ice, we produce a set of subcolumns. +! Each layer within each subcolumn is homogeneous, with cloud fraction equal to zero or one +! and uniform cloud liquid and cloud ice concentration. +! The ensemble as a whole reproduces the probability function of cloud liquid and ice within each layer +! and obeys an overlap assumption in the vertical. +! +! Overlap assumption: +! The cloud are consistent with 4 overlap assumptions: random, maximum, maximum-random and exponential. +! The default option is maximum-random (option 3) ! The options are: 1=random overlap, 2=max/random, 3=maximum overlap, 4=exponential overlap -! This is set with the variable "overlap" -!mji - Exponential overlap option (overlap=4) has been deactivated in this version -! The exponential overlap uses also a length scale, Zo. (real, parameter :: Zo = 2500. ) -! -! Seed: -! If the stochastic cloud generator is called several times during the same timestep, +! This is set with the variable "overlap" +!mji - Exponential overlap option (overlap=4) has been deactivated in this version +! The exponential overlap uses also a length scale, Zo. (real, parameter :: Zo = 2500. ) +! +! Seed: +! If the stochastic cloud generator is called several times during the same timestep, ! one should change the seed between the call to insure that the subcolumns are different. -! This is done by changing the argument 'changeSeed' +! This is done by changing the argument 'changeSeed' ! For example, if one wants to create a set of columns for the shortwave and another set for the longwave , -! use 'changeSeed = 1' for the first call and'changeSeed = 2' for the second call -! -! PDF assumption: -! We can use arbitrary complicated PDFS. -! In the present version, we produce homogeneuous clouds (the simplest case). -! Future developments include using the PDF scheme of Ben Johnson. -! -! History file: +! use 'changeSeed = 1' for the first call and'changeSeed = 2' for the second call +! +! PDF assumption: +! We can use arbitrary complicated PDFS. +! In the present version, we produce homogeneuous clouds (the simplest case). +! Future developments include using the PDF scheme of Ben Johnson. +! +! History file: ! Option to add diagnostics variables in the history file. (using FINCL in the namelist) -! nsubcol = number of subcolumns -! overlap = overlap type (1-3) +! nsubcol = number of subcolumns +! overlap = overlap type (1-3) ! Zo = length scale -! CLOUD_S = mean of the subcolumn cloud fraction ('_S" means Stochastic) +! CLOUD_S = mean of the subcolumn cloud fraction ('_S" means Stochastic) ! CLDLIQ_S = mean of the subcolumn cloud water -! CLDICE_S = mean of the subcolumn cloud ice -! -! -! Note: -! Here: we force that the cloud condensate to be consistent with the cloud fraction -! i.e we only have cloud condensate when the cell is cloudy. -! In CAM: The cloud condensate and the cloud fraction are obtained from 2 different equations -! and the 2 quantities can be inconsistent (i.e. CAM can produce cloud fraction -! without cloud condensate or the opposite). +! CLDICE_S = mean of the subcolumn cloud ice +! +! +! Note: +! Here: we force that the cloud condensate to be consistent with the cloud fraction +! i.e we only have cloud condensate when the cell is cloudy. +! In CAM: The cloud condensate and the cloud fraction are obtained from 2 different equations +! and the 2 quantities can be inconsistent (i.e. CAM can produce cloud fraction +! without cloud condensate or the opposite). !---------------------------------------------------------------------- - + use mcica_random_numbers -! The Mersenne Twister random number engine - use MersenneTwister, only: randomNumberSequence, & - new_RandomNumberSequence, getRandomReal - - type(randomNumberSequence) :: randomNumbers - +! The Mersenne Twister random number engine + use MersenneTwister, only: randomNumberSequence, & + new_RandomNumberSequence, getRandomReal + + type(randomNumberSequence) :: randomNumbers + ! -- Arguments - - integer(kind=im), intent(in) :: ncol ! number of layers - integer(kind=im), intent(in) :: nlay ! number of layers - integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag - integer(kind=im), intent(inout) :: irng ! flag for random number generator - ! 0 = kissvec - ! 1 = Mersenne Twister + + integer(kind=im), intent(in) :: ncol ! number of layers + integer(kind=im), intent(in) :: nlay ! number of layers + integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag + integer(kind=im), intent(inout) :: irng ! flag for random number generator + ! 0 = kissvec + ! 1 = Mersenne Twister integer(kind=im), intent(in) :: nsubcol ! number of sub-columns (g-point intervals) - integer(kind=im), optional, intent(in) :: changeSeed ! allows permuting seed - -! Column state (cloud fraction, cloud water, cloud ice) + variables needed to read physics state - real(kind=rb), intent(in) :: pmid(:,:) ! layer pressure (Pa) - ! Dimensions: (ncol,nlay) -! mji - Add height - real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: cld(:,:) ! cloud fraction - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path (g/m2) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path (g/m2) - ! Dimensions: (ncol,nlay) - real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path (g/m2) - ! Dimensions: (ncol,nlay) + integer(kind=im), optional, intent(in) :: changeSeed ! allows permuting seed + +! Column state (cloud fraction, cloud water, cloud ice) + variables needed to read physics state + real(kind=rb), intent(in) :: pmid(:,:) ! layer pressure (Pa) + ! Dimensions: (ncol,nlay) +! mji - Add height + real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: cld(:,:) ! cloud fraction + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path (g/m2) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path (g/m2) + ! Dimensions: (ncol,nlay) + real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path (g/m2) + ! Dimensions: (ncol,nlay) real(kind=rb), intent(in) :: tauc(:,:,:) ! in-cloud optical depth (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) + ! Dimensions: (nbndsw,ncol,nlay) real(kind=rb), intent(in) :: ssac(:,:,:) ! in-cloud single scattering albedo (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) - real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled) + ! Dimensions: (nbndsw,ncol,nlay) + real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled) ! Dimensions: (nbndsw,ncol,nlay) real(kind=rb), intent(in) :: fsfc(:,:,:) ! in-cloud forward scattering fraction (non-delta scaled) - ! Dimensions: (nbndsw,ncol,nlay) - real(kind=rb), intent(out) :: cld_stoch(:,:,:) ! subcolumn cloud fraction - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (nbndsw,ncol,nlay) + real(kind=rb), intent(out) :: cld_stoch(:,:,:) ! subcolumn cloud fraction + ! Dimensions: (ngptsw,ncol,nlay) real(kind=rb), intent(out) :: clwp_stoch(:,:,:) ! subcolumn in-cloud liquid water path - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: ciwp_stoch(:,:,:) ! subcolumn in-cloud ice water path - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: cswp_stoch(:,:,:) ! subcolumn in-cloud snow water path - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: tauc_stoch(:,:,:) ! subcolumn in-cloud optical depth - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: ssac_stoch(:,:,:) ! subcolumn in-cloud single scattering albedo - ! Dimensions: (ngptsw,ncol,nlay) + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: ciwp_stoch(:,:,:) ! subcolumn in-cloud ice water path + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: cswp_stoch(:,:,:) ! subcolumn in-cloud snow water path + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: tauc_stoch(:,:,:) ! subcolumn in-cloud optical depth + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: ssac_stoch(:,:,:) ! subcolumn in-cloud single scattering albedo + ! Dimensions: (ngptsw,ncol,nlay) real(kind=rb), intent(out) :: asmc_stoch(:,:,:) ! subcolumn in-cloud asymmetry parameter - ! Dimensions: (ngptsw,ncol,nlay) - real(kind=rb), intent(out) :: fsfc_stoch(:,:,:) ! subcolumn in-cloud forward scattering fraction - ! Dimensions: (ngptsw,ncol,nlay) - -! -- Local variables - real(kind=rb) :: cldf(ncol,nlay) ! cloud fraction + ! Dimensions: (ngptsw,ncol,nlay) + real(kind=rb), intent(out) :: fsfc_stoch(:,:,:) ! subcolumn in-cloud forward scattering fraction + ! Dimensions: (ngptsw,ncol,nlay) + +! -- Local variables + real(kind=rb) :: cldf(ncol,nlay) ! cloud fraction ! Dimensions: (ncol,nlay) - -! Mean over the subcolumns (cloud fraction, cloud water , cloud ice) - inactive -! real(kind=rb) :: mean_cld_stoch(ncol,nlay) ! cloud fraction -! real(kind=rb) :: mean_clwp_stoch(ncol,nlay) ! cloud water -! real(kind=rb) :: mean_ciwp_stoch(ncol,nlay) ! cloud ice -! real(kind=rb) :: mean_tauc_stoch(ncol,nlay) ! cloud optical depth -! real(kind=rb) :: mean_ssac_stoch(ncol,nlay) ! cloud single scattering albedo -! real(kind=rb) :: mean_asmc_stoch(ncol,nlay) ! cloud asymmetry parameter -! real(kind=rb) :: mean_fsfc_stoch(ncol,nlay) ! cloud forward scattering fraction - -! Set overlap + +! Mean over the subcolumns (cloud fraction, cloud water , cloud ice) - inactive +! real(kind=rb) :: mean_cld_stoch(ncol,nlay) ! cloud fraction +! real(kind=rb) :: mean_clwp_stoch(ncol,nlay) ! cloud water +! real(kind=rb) :: mean_ciwp_stoch(ncol,nlay) ! cloud ice +! real(kind=rb) :: mean_tauc_stoch(ncol,nlay) ! cloud optical depth +! real(kind=rb) :: mean_ssac_stoch(ncol,nlay) ! cloud single scattering albedo +! real(kind=rb) :: mean_asmc_stoch(ncol,nlay) ! cloud asymmetry parameter +! real(kind=rb) :: mean_fsfc_stoch(ncol,nlay) ! cloud forward scattering fraction + +! Set overlap integer(kind=im) :: overlap ! 1 = random overlap, 2 = maximum-random, ! 3 = maximum overlap, 4 = exponential, - ! 5 = exponential-random - real(kind=rb), parameter :: Zo = 2500._rb ! length scale (m) - real(kind=rb), dimension(ncol,nlay) :: alpha ! overlap parameter - -! Constants (min value for cloud fraction and cloud water and ice) - real(kind=rb), parameter :: cldmin = 1.0e-20_rb ! min cloud fraction -! real(kind=rb), parameter :: qmin = 1.0e-10_rb ! min cloud water and cloud ice (not used) - -! Variables related to random number and seed - real(kind=rb), dimension(nsubcol, ncol, nlay) :: CDF, CDF2 ! random numbers - integer(kind=im), dimension(ncol) :: seed1, seed2, seed3, seed4 ! seed to create random number - real(kind=rb), dimension(ncol) :: rand_num ! random number (kissvec) - integer(kind=im) :: iseed ! seed to create random number (Mersenne Twister) - real(kind=rb) :: rand_num_mt ! random number (Mersenne Twister) - -! Flag to identify cloud fraction in subcolumns + ! 5 = exponential-random + real(kind=rb), parameter :: Zo = 2500._rb ! length scale (m) + real(kind=rb), dimension(ncol,nlay) :: alpha ! overlap parameter + +! Constants (min value for cloud fraction and cloud water and ice) + real(kind=rb), parameter :: cldmin = 1.0e-20_rb ! min cloud fraction +! real(kind=rb), parameter :: qmin = 1.0e-10_rb ! min cloud water and cloud ice (not used) + +! Variables related to random number and seed + real(kind=rb), dimension(nsubcol, ncol, nlay) :: CDF, CDF2 ! random numbers + integer(kind=im), dimension(ncol) :: seed1, seed2, seed3, seed4 ! seed to create random number + real(kind=rb), dimension(ncol) :: rand_num ! random number (kissvec) + integer(kind=im) :: iseed ! seed to create random number (Mersenne Twister) + real(kind=rb) :: rand_num_mt ! random number (Mersenne Twister) + +! Flag to identify cloud fraction in subcolumns logical, dimension(nsubcol, ncol, nlay) :: isCloudy ! flag that says whether a gridbox is cloudy - -! Indices - integer(kind=im) :: ilev, isubcol, i, n, ngbm ! indices - -!------------------------------------------------------------------------------------------ - -! Check that irng is in bounds; if not, set to default - if (irng .ne. 0) irng = 1 - -! Pass input cloud overlap setting to local variable + +! Indices + integer(kind=im) :: ilev, isubcol, i, n, ngbm ! indices + +!------------------------------------------------------------------------------------------ + +! Check that irng is in bounds; if not, set to default + if (irng .ne. 0) irng = 1 + +! Pass input cloud overlap setting to local variable overlap = icld - -! Ensure that cloud fractions are in bounds - do ilev = 1, nlay - do i = 1, ncol - cldf(i,ilev) = cld(i,ilev) - if (cldf(i,ilev) < cldmin) then - cldf(i,ilev) = 0._rb - endif - enddo - enddo - -! ----- Create seed -------- - -! Advance randum number generator by changeseed values - if (irng.eq.0) then -! For kissvec, create a seed that depends on the state of the columns. Maybe not the best way, but it works. - -! Must use pmid from bottom four layers. - do i=1,ncol - if (pmid(i,1).lt.pmid(i,2)) then + +! Ensure that cloud fractions are in bounds + do ilev = 1, nlay + do i = 1, ncol + cldf(i,ilev) = cld(i,ilev) + if (cldf(i,ilev) < cldmin) then + cldf(i,ilev) = 0._rb + endif + enddo + enddo + +! ----- Create seed -------- + +! Advance randum number generator by changeseed values + if (irng.eq.0) then +! For kissvec, create a seed that depends on the state of the columns. Maybe not the best way, but it works. + +! Must use pmid from bottom four layers. + do i=1,ncol + if (pmid(i,1).lt.pmid(i,2)) then stop 'MCICA_SUBCOL: KISSVEC SEED GENERATOR REQUIRES PMID FROM BOTTOM FOUR LAYERS.' - endif - seed1(i) = (pmid(i,1) - int(pmid(i,1))) * 1000000000_im - seed2(i) = (pmid(i,2) - int(pmid(i,2))) * 1000000000_im - seed3(i) = (pmid(i,3) - int(pmid(i,3))) * 1000000000_im - seed4(i) = (pmid(i,4) - int(pmid(i,4))) * 1000000000_im - enddo - do i=1,changeSeed - call kissvec(seed1, seed2, seed3, seed4, rand_num) - enddo - elseif (irng.eq.1) then - randomNumbers = new_RandomNumberSequence(seed = changeSeed) - endif - - -! ------ Apply overlap assumption -------- - -! generate the random numbers - - select case (overlap) - - - case(1) -! Random overlap -! i) pick a random value at every level - - if (irng.eq.0) then - do isubcol = 1,nsubcol - do ilev = 1,nlay - call kissvec(seed1, seed2, seed3, seed4, rand_num) - CDF(isubcol,:,ilev) = rand_num - enddo - enddo - elseif (irng.eq.1) then - do isubcol = 1, nsubcol - do i = 1, ncol - do ilev = 1, nlay - rand_num_mt = getRandomReal(randomNumbers) - CDF(isubcol,i,ilev) = rand_num_mt - enddo - enddo - enddo - endif - - case(2) -! Maximum-Random overlap -! i) pick a random number for top layer. -! ii) walk down the column: -! - if the layer above is cloudy, we use the same random number than in the layer above -! - if the layer above is clear, we use a new random number - - if (irng.eq.0) then - do isubcol = 1,nsubcol - do ilev = 1,nlay - call kissvec(seed1, seed2, seed3, seed4, rand_num) - CDF(isubcol,:,ilev) = rand_num - enddo - enddo - elseif (irng.eq.1) then - do isubcol = 1, nsubcol + endif + seed1(i) = (pmid(i,1) - int(pmid(i,1))) * 1000000000_im + seed2(i) = (pmid(i,2) - int(pmid(i,2))) * 1000000000_im + seed3(i) = (pmid(i,3) - int(pmid(i,3))) * 1000000000_im + seed4(i) = (pmid(i,4) - int(pmid(i,4))) * 1000000000_im + enddo + do i=1,changeSeed + call kissvec(seed1, seed2, seed3, seed4, rand_num) + enddo + elseif (irng.eq.1) then + randomNumbers = new_RandomNumberSequence(seed = changeSeed) + endif + + +! ------ Apply overlap assumption -------- + +! generate the random numbers + + select case (overlap) + + + case(1) +! Random overlap +! i) pick a random value at every level + + if (irng.eq.0) then + do isubcol = 1,nsubcol + do ilev = 1,nlay + call kissvec(seed1, seed2, seed3, seed4, rand_num) + CDF(isubcol,:,ilev) = rand_num + enddo + enddo + elseif (irng.eq.1) then + do isubcol = 1, nsubcol do i = 1, ncol - do ilev = 1, nlay - rand_num_mt = getRandomReal(randomNumbers) - CDF(isubcol,i,ilev) = rand_num_mt - enddo - enddo - enddo - endif - - do ilev = 2,nlay - do i = 1, ncol - do isubcol = 1, nsubcol - if (CDF(isubcol, i, ilev-1) > 1._rb - cldf(i,ilev-1) ) then - CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev-1) - else - CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev) * (1._rb - cldf(i,ilev-1)) - endif - enddo - enddo - enddo - + do ilev = 1, nlay + rand_num_mt = getRandomReal(randomNumbers) + CDF(isubcol,i,ilev) = rand_num_mt + enddo + enddo + enddo + endif + + case(2) +! Maximum-Random overlap +! i) pick a random number for top layer. +! ii) walk down the column: +! - if the layer above is cloudy, we use the same random number than in the layer above +! - if the layer above is clear, we use a new random number + + if (irng.eq.0) then + do isubcol = 1,nsubcol + do ilev = 1,nlay + call kissvec(seed1, seed2, seed3, seed4, rand_num) + CDF(isubcol,:,ilev) = rand_num + enddo + enddo + elseif (irng.eq.1) then + do isubcol = 1, nsubcol + do i = 1, ncol + do ilev = 1, nlay + rand_num_mt = getRandomReal(randomNumbers) + CDF(isubcol,i,ilev) = rand_num_mt + enddo + enddo + enddo + endif + + do ilev = 2,nlay + do i = 1, ncol + do isubcol = 1, nsubcol + if (CDF(isubcol, i, ilev-1) > 1._rb - cldf(i,ilev-1) ) then + CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev-1) + else + CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev) * (1._rb - cldf(i,ilev-1)) + endif + enddo + enddo + enddo + case(3) ! Maximum overlap -! i) pick same random numebr at every level - - if (irng.eq.0) then - do isubcol = 1,nsubcol - call kissvec(seed1, seed2, seed3, seed4, rand_num) - do ilev = 1,nlay - CDF(isubcol,:,ilev) = rand_num - enddo - enddo - elseif (irng.eq.1) then - do isubcol = 1, nsubcol - do i = 1, ncol - rand_num_mt = getRandomReal(randomNumbers) - do ilev = 1, nlay - CDF(isubcol,i,ilev) = rand_num_mt - enddo - enddo - enddo - endif - - -! mji - Activate exponential cloud overlap option - case(4) +! i) pick same random numebr at every level + + if (irng.eq.0) then + do isubcol = 1,nsubcol + call kissvec(seed1, seed2, seed3, seed4, rand_num) + do ilev = 1,nlay + CDF(isubcol,:,ilev) = rand_num + enddo + enddo + elseif (irng.eq.1) then + do isubcol = 1, nsubcol + do i = 1, ncol + rand_num_mt = getRandomReal(randomNumbers) + do ilev = 1, nlay + CDF(isubcol,i,ilev) = rand_num_mt + enddo + enddo + enddo + endif + + +! mji - Activate exponential cloud overlap option + case(4) ! Exponential overlap: weighting between maximum and random overlap increases with the distance. - ! The random numbers for exponential overlap verify: - ! j=1 RAN(j)=RND1 - ! j>1 if RND1 < alpha(j,j-1) => RAN(j) = RAN(j-1) - ! RAN(j) = RND2 - ! alpha is obtained from the equation - ! alpha = exp(-(Z(j)-Z(j-1))/Zo) where Zo is a characteristic length scale - - ! compute alpha - do i = 1, ncol - alpha(i, 1) = 0._rb - do ilev = 2,nlay - alpha(i, ilev) = exp( -( hgt (i, ilev) - hgt (i, ilev-1)) / Zo) - enddo - enddo - - ! generate 2 streams of random numbers - if (irng.eq.0) then - do isubcol = 1,nsubcol - do ilev = 1,nlay - call kissvec(seed1, seed2, seed3, seed4, rand_num) - CDF(isubcol, :, ilev) = rand_num - call kissvec(seed1, seed2, seed3, seed4, rand_num) - CDF2(isubcol, :, ilev) = rand_num - enddo - enddo - elseif (irng.eq.1) then - do isubcol = 1, nsubcol - do i = 1, ncol - do ilev = 1, nlay - rand_num_mt = getRandomReal(randomNumbers) - CDF(isubcol,i,ilev) = rand_num_mt - rand_num_mt = getRandomReal(randomNumbers) - CDF2(isubcol,i,ilev) = rand_num_mt - enddo - enddo - enddo - endif - - ! generate random numbers - do ilev = 2,nlay - where (CDF2(:, :, ilev) < spread(alpha (:,ilev), dim=1, nCopies=nsubcol) ) - CDF(:,:,ilev) = CDF(:,:,ilev-1) - end where - end do - -! mji - Activate exponential-random cloud overlap option - case(5) - ! Exponential-random overlap: -! call wrf_error_fatal("Cloud Overlap case 5: ER has not yet been implemented. Stopping...") - - end select - - -! -- generate subcolumns for homogeneous clouds ----- - do ilev = 1, nlay - isCloudy(:,:,ilev) = (CDF(:,:,ilev) >= 1._rb - spread(cldf(:,ilev), dim=1, nCopies=nsubcol) ) - enddo - -! where the subcolumn is cloudy, the subcolumn cloud fraction is 1; -! where the subcolumn is not cloudy, the subcolumn cloud fraction is 0; -! where there is a cloud, define the subcolumn cloud properties, -! otherwise set these to zero - - ngbm = ngb(1) - 1 - do ilev = 1,nlay - do i = 1, ncol - do isubcol = 1, nsubcol - if ( iscloudy(isubcol,i,ilev) ) then - cld_stoch(isubcol,i,ilev) = 1._rb - clwp_stoch(isubcol,i,ilev) = clwp(i,ilev) - ciwp_stoch(isubcol,i,ilev) = ciwp(i,ilev) - cswp_stoch(isubcol,i,ilev) = cswp(i,ilev) - n = ngb(isubcol) - ngbm - tauc_stoch(isubcol,i,ilev) = tauc(n,i,ilev) - ssac_stoch(isubcol,i,ilev) = ssac(n,i,ilev) - asmc_stoch(isubcol,i,ilev) = asmc(n,i,ilev) - fsfc_stoch(isubcol,i,ilev) = fsfc(n,i,ilev) - else - cld_stoch(isubcol,i,ilev) = 0._rb - clwp_stoch(isubcol,i,ilev) = 0._rb - ciwp_stoch(isubcol,i,ilev) = 0._rb - cswp_stoch(isubcol,i,ilev) = 0._rb - tauc_stoch(isubcol,i,ilev) = 0._rb - ssac_stoch(isubcol,i,ilev) = 1._rb - asmc_stoch(isubcol,i,ilev) = 0._rb - fsfc_stoch(isubcol,i,ilev) = 0._rb - endif - enddo - enddo - enddo - - -! -- compute the means of the subcolumns --- -! mean_cld_stoch(:,:) = 0._rb -! mean_clwp_stoch(:,:) = 0._rb -! mean_ciwp_stoch(:,:) = 0._rb -! mean_tauc_stoch(:,:) = 0._rb -! mean_ssac_stoch(:,:) = 0._rb -! mean_asmc_stoch(:,:) = 0._rb -! mean_fsfc_stoch(:,:) = 0._rb -! do i = 1, nsubcol -! mean_cld_stoch(:,:) = cld_stoch(i,:,:) + mean_cld_stoch(:,:) -! mean_clwp_stoch(:,:) = clwp_stoch( i,:,:) + mean_clwp_stoch(:,:) -! mean_ciwp_stoch(:,:) = ciwp_stoch( i,:,:) + mean_ciwp_stoch(:,:) -! mean_tauc_stoch(:,:) = tauc_stoch( i,:,:) + mean_tauc_stoch(:,:) -! mean_ssac_stoch(:,:) = ssac_stoch( i,:,:) + mean_ssac_stoch(:,:) -! mean_asmc_stoch(:,:) = asmc_stoch( i,:,:) + mean_asmc_stoch(:,:) -! mean_fsfc_stoch(:,:) = fsfc_stoch( i,:,:) + mean_fsfc_stoch(:,:) -! end do -! mean_cld_stoch(:,:) = mean_cld_stoch(:,:) / nsubcol -! mean_clwp_stoch(:,:) = mean_clwp_stoch(:,:) / nsubcol -! mean_ciwp_stoch(:,:) = mean_ciwp_stoch(:,:) / nsubcol -! mean_tauc_stoch(:,:) = mean_tauc_stoch(:,:) / nsubcol -! mean_ssac_stoch(:,:) = mean_ssac_stoch(:,:) / nsubcol -! mean_asmc_stoch(:,:) = mean_asmc_stoch(:,:) / nsubcol -! mean_fsfc_stoch(:,:) = mean_fsfc_stoch(:,:) / nsubcol + ! The random numbers for exponential overlap verify: + ! j=1 RAN(j)=RND1 + ! j>1 if RND1 < alpha(j,j-1) => RAN(j) = RAN(j-1) + ! RAN(j) = RND2 + ! alpha is obtained from the equation + ! alpha = exp(-(Z(j)-Z(j-1))/Zo) where Zo is a characteristic length scale + + ! compute alpha + do i = 1, ncol + alpha(i, 1) = 0._rb + do ilev = 2,nlay + alpha(i, ilev) = exp( -( hgt (i, ilev) - hgt (i, ilev-1)) / Zo) + enddo + enddo + + ! generate 2 streams of random numbers + if (irng.eq.0) then + do isubcol = 1,nsubcol + do ilev = 1,nlay + call kissvec(seed1, seed2, seed3, seed4, rand_num) + CDF(isubcol, :, ilev) = rand_num + call kissvec(seed1, seed2, seed3, seed4, rand_num) + CDF2(isubcol, :, ilev) = rand_num + enddo + enddo + elseif (irng.eq.1) then + do isubcol = 1, nsubcol + do i = 1, ncol + do ilev = 1, nlay + rand_num_mt = getRandomReal(randomNumbers) + CDF(isubcol,i,ilev) = rand_num_mt + rand_num_mt = getRandomReal(randomNumbers) + CDF2(isubcol,i,ilev) = rand_num_mt + enddo + enddo + enddo + endif + + ! generate random numbers + do ilev = 2,nlay + where (CDF2(:, :, ilev) < spread(alpha (:,ilev), dim=1, nCopies=nsubcol) ) + CDF(:,:,ilev) = CDF(:,:,ilev-1) + end where + end do + +! mji - Activate exponential-random cloud overlap option + case(5) + ! Exponential-random overlap: +! call wrf_error_fatal("Cloud Overlap case 5: ER has not yet been implemented. Stopping...") + + end select + + +! -- generate subcolumns for homogeneous clouds ----- + do ilev = 1, nlay + isCloudy(:,:,ilev) = (CDF(:,:,ilev) >= 1._rb - spread(cldf(:,ilev), dim=1, nCopies=nsubcol) ) + enddo + +! where the subcolumn is cloudy, the subcolumn cloud fraction is 1; +! where the subcolumn is not cloudy, the subcolumn cloud fraction is 0; +! where there is a cloud, define the subcolumn cloud properties, +! otherwise set these to zero + + ngbm = ngb(1) - 1 + do ilev = 1,nlay + do i = 1, ncol + do isubcol = 1, nsubcol + if ( iscloudy(isubcol,i,ilev) ) then + cld_stoch(isubcol,i,ilev) = 1._rb + clwp_stoch(isubcol,i,ilev) = clwp(i,ilev) + ciwp_stoch(isubcol,i,ilev) = ciwp(i,ilev) + cswp_stoch(isubcol,i,ilev) = cswp(i,ilev) + n = ngb(isubcol) - ngbm + tauc_stoch(isubcol,i,ilev) = tauc(n,i,ilev) + ssac_stoch(isubcol,i,ilev) = ssac(n,i,ilev) + asmc_stoch(isubcol,i,ilev) = asmc(n,i,ilev) + fsfc_stoch(isubcol,i,ilev) = fsfc(n,i,ilev) + else + cld_stoch(isubcol,i,ilev) = 0._rb + clwp_stoch(isubcol,i,ilev) = 0._rb + ciwp_stoch(isubcol,i,ilev) = 0._rb + cswp_stoch(isubcol,i,ilev) = 0._rb + tauc_stoch(isubcol,i,ilev) = 0._rb + ssac_stoch(isubcol,i,ilev) = 1._rb + asmc_stoch(isubcol,i,ilev) = 0._rb + fsfc_stoch(isubcol,i,ilev) = 0._rb + endif + enddo + enddo + enddo + + +! -- compute the means of the subcolumns --- +! mean_cld_stoch(:,:) = 0._rb +! mean_clwp_stoch(:,:) = 0._rb +! mean_ciwp_stoch(:,:) = 0._rb +! mean_tauc_stoch(:,:) = 0._rb +! mean_ssac_stoch(:,:) = 0._rb +! mean_asmc_stoch(:,:) = 0._rb +! mean_fsfc_stoch(:,:) = 0._rb +! do i = 1, nsubcol +! mean_cld_stoch(:,:) = cld_stoch(i,:,:) + mean_cld_stoch(:,:) +! mean_clwp_stoch(:,:) = clwp_stoch( i,:,:) + mean_clwp_stoch(:,:) +! mean_ciwp_stoch(:,:) = ciwp_stoch( i,:,:) + mean_ciwp_stoch(:,:) +! mean_tauc_stoch(:,:) = tauc_stoch( i,:,:) + mean_tauc_stoch(:,:) +! mean_ssac_stoch(:,:) = ssac_stoch( i,:,:) + mean_ssac_stoch(:,:) +! mean_asmc_stoch(:,:) = asmc_stoch( i,:,:) + mean_asmc_stoch(:,:) +! mean_fsfc_stoch(:,:) = fsfc_stoch( i,:,:) + mean_fsfc_stoch(:,:) +! end do +! mean_cld_stoch(:,:) = mean_cld_stoch(:,:) / nsubcol +! mean_clwp_stoch(:,:) = mean_clwp_stoch(:,:) / nsubcol +! mean_ciwp_stoch(:,:) = mean_ciwp_stoch(:,:) / nsubcol +! mean_tauc_stoch(:,:) = mean_tauc_stoch(:,:) / nsubcol +! mean_ssac_stoch(:,:) = mean_ssac_stoch(:,:) / nsubcol +! mean_asmc_stoch(:,:) = mean_asmc_stoch(:,:) / nsubcol +! mean_fsfc_stoch(:,:) = mean_fsfc_stoch(:,:) / nsubcol end subroutine generate_stochastic_clouds_sw - - -!-------------------------------------------------------------------------------------------------- - subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) -!-------------------------------------------------------------------------------------------------- + + +!-------------------------------------------------------------------------------------------------- + subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr) +!-------------------------------------------------------------------------------------------------- ! public domain code made available from http://www.fortran.com/ -! downloaded by pjr on 03/16/04 for NCAR CAM -! converted to vector form, functions inlined by pjr,mvr on 05/10/2004 - -! The KISS (Keep It Simple Stupid) random number generator. Combines: -! (1) The congruential generator x(n)=69069*x(n-1)+1327217885, period 2^32. -! (2) A 3-shift shift-register generator, period 2^32-1, -! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59 -! Overall period>2^123; - -! - real(kind=rb), dimension(:), intent(inout) :: ran_arr - integer(kind=im), dimension(:), intent(inout) :: seed1,seed2,seed3,seed4 - integer(kind=im) :: i,sz,kiss - integer(kind=im) :: m, k, n - -! inline function - m(k, n) = ieor (k, ishft (k, n) ) - - sz = size(ran_arr) - do i = 1, sz - seed1(i) = 69069_im * seed1(i) + 1327217885_im - seed2(i) = m (m (m (seed2(i), 13_im), - 17_im), 5_im) - seed3(i) = 18000_im * iand (seed3(i), 65535_im) + ishft (seed3(i), - 16_im) - seed4(i) = 30903_im * iand (seed4(i), 65535_im) + ishft (seed4(i), - 16_im) - kiss = seed1(i) + seed2(i) + ishft (seed3(i), 16_im) + seed4(i) - ran_arr(i) = kiss*2.328306e-10_rb + 0.5_rb - end do - - end subroutine kissvec - +! downloaded by pjr on 03/16/04 for NCAR CAM +! converted to vector form, functions inlined by pjr,mvr on 05/10/2004 + +! The KISS (Keep It Simple Stupid) random number generator. Combines: +! (1) The congruential generator x(n)=69069*x(n-1)+1327217885, period 2^32. +! (2) A 3-shift shift-register generator, period 2^32-1, +! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59 +! Overall period>2^123; + +! + real(kind=rb), dimension(:), intent(inout) :: ran_arr + integer(kind=im), dimension(:), intent(inout) :: seed1,seed2,seed3,seed4 + integer(kind=im) :: i,sz,kiss + integer(kind=im) :: m, k, n + +! inline function + m(k, n) = ieor (k, ishft (k, n) ) + + sz = size(ran_arr) + do i = 1, sz + seed1(i) = 69069_im * seed1(i) + 1327217885_im + seed2(i) = m (m (m (seed2(i), 13_im), - 17_im), 5_im) + seed3(i) = 18000_im * iand (seed3(i), 65535_im) + ishft (seed3(i), - 16_im) + seed4(i) = 30903_im * iand (seed4(i), 65535_im) + ishft (seed4(i), - 16_im) + kiss = seed1(i) + seed2(i) + ishft (seed3(i), 16_im) + seed4(i) + ran_arr(i) = kiss*2.328306e-10_rb + 0.5_rb + end do + + end subroutine kissvec + !! @} ! diff --git a/physics/sfc_noah_wrfv4.F90 b/physics/sfc_noah_wrfv4.F90 index c435b2d38..33885449e 100644 --- a/physics/sfc_noah_wrfv4.F90 +++ b/physics/sfc_noah_wrfv4.F90 @@ -1,7 +1,7 @@ !> \file sfc_noah_wrfv4.F90 !! This file contains the Noah land surface scheme driver for the version of the scheme found in WRF v4.0. -!> This module contains the CCPP-compliant Noah land surface scheme driver for +!> This module contains the CCPP-compliant Noah land surface scheme driver for !! the version found in WRF v4.0. module sfc_noah_wrfv4 @@ -20,9 +20,9 @@ module sfc_noah_wrfv4 subroutine sfc_noah_wrfv4_init(lsm, lsm_noah_wrfv4, nsoil, ua_phys, fasdas, restart, errmsg, errflg) use machine, only : kind_phys - + implicit none - + integer, intent(in) :: lsm, lsm_noah_wrfv4, nsoil, fasdas logical, intent(in) :: ua_phys, restart @@ -32,32 +32,32 @@ subroutine sfc_noah_wrfv4_init(lsm, lsm_noah_wrfv4, nsoil, ua_phys, fasdas, rest ! Initialize CCPP error handling variables errmsg = '' errflg = 0 - + if (lsm/=lsm_noah_wrfv4) then write(errmsg,'(*(a))') "Logic error: namelist choice of LSM is different from NOAH WRFv4" errflg = 1 return end if - + if (nsoil < 2) then write(errmsg,'(*(a))') "The NOAH WRFv4 scheme expects at least 2 soil layers." errflg = 1 return end if - + if (ua_phys) then write(errmsg,'(*(a))') "The NOAH WRFv4 scheme has not been tested with ua_phys = T" errflg = 1 return end if - - + + if (fasdas > 0) then write(errmsg,'(*(a))') "The NOAH WRFv4 scheme has not been tested with fasdas > 0" errflg = 1 return end if - + if (restart) then !GJF: for restart functionality, the host model will need to write/read snotime (time_since_last_snowfall (s)) write(errmsg,'(*(a))') "The NOAH WRFv4 scheme has not been configured for restarts." @@ -67,7 +67,7 @@ subroutine sfc_noah_wrfv4_init(lsm, lsm_noah_wrfv4, nsoil, ua_phys, fasdas, rest !GJF: check for rdlai != F? !GJF: check for usemonalb != T? - + end subroutine sfc_noah_wrfv4_init @@ -103,19 +103,19 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is lsubf, sheat, eta, ec, edir, ett, esnow, etp, ssoil, & flx1, flx2, flx3, sncovr, runoff1, runoff2, soilm, qsurf, ribb, & smcwlt, smcref, smcmax, opt_thcnd, snotime, errmsg, errflg) - + use machine , only : kind_phys use module_sf_noahlsm, only: sflx, lutype, sltype use module_sf_noahlsm_glacial_only, only: sflx_glacial implicit none - + integer, intent(in) :: im, isice, isurban, nsoil, opt_thcnd, fasdas logical, intent(in) :: rdlai, ua_phys, usemonalb !GJF: usemonalb = True if the surface diffused shortwave albedo is EITHER read from input OR ! provided by a previous scheme (like radiation: as is done in GFS_rrtmgp_sw_pre) real(kind=kind_phys), intent(in) :: aoasis - + real(kind=kind_phys), intent(in) :: dt, cp, rd, sigma, cph2o, cpice, lsubf integer, dimension(im), intent(in) :: vegtyp, soiltyp, slopetyp @@ -129,7 +129,7 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is cmc, t1, snowhk, sneqv, chk, flx1, & flx2, flx3, ribb, snotime real(kind=kind_phys), dimension(im,nsoil), intent(inout) :: stc, smc, swc - + !variables that are intent(out) in module_sf_noahlsm, but are inout here due to being set within an IF statement real(kind=kind_phys), dimension(im), intent(inout) :: embrd, sheat, eta, ec, & edir, ett, esnow, etp, ssoil, sncovr, & @@ -138,28 +138,28 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + !GJF: There is some confusion regarding specific humidities vs mixing ratios in NOAH LSM. ! Looking at module_sf_noahlsm.F, sometimes the comments say mixing ratio and sometimes - ! specific humidity. The WRF code (module_sf_noahdrv.F) specifically converts from mixing + ! specific humidity. The WRF code (module_sf_noahdrv.F) specifically converts from mixing ! ratio to specific humidity in preparation for calling SFLX, so I am assuming that - ! all inputs/outputs into SFLX should be specific humidities, despite some comments in + ! all inputs/outputs into SFLX should be specific humidities, despite some comments in ! module_sf_noahdrv.F describing arguments saying "mixing ratios". This applies to many ! arguments into SFLX (q1k, qs1, dqsdt2, eta, qsurf, etc.). - + ! local Variables integer :: i, k logical, parameter :: local = .false. !(not actually used in SFLX) described in module_sf_noahlsm as: ! Flag for local-site simulation (where there is no maps for albedo, veg fraction, and roughness ! true: all LSM parameters (inluding albedo, veg fraction and roughness length) will be defined by three tables - real(kind=kind_phys) :: dummy - + real(kind=kind_phys) :: dummy + !GJF: The following variables are part of the interface to SFLX but not required as diagnostic - ! output or otherwise outside of this subroutine (at least as part of a GFS-based suite). - ! If any of these variables are needed by other schemes or diagnostics, one needs to add it to + ! output or otherwise outside of this subroutine (at least as part of a GFS-based suite). + ! If any of these variables are needed by other schemes or diagnostics, one needs to add it to ! the host model and CCPP metadata. Alternatively, none of these variables NEED to be allocated - ! and one could also just pass in dummy arguments. + ! and one could also just pass in dummy arguments. ! ! The variables descriptions are from module_sf_noahlsm.F: ! @@ -187,7 +187,7 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is ! smcdry (output from SFLX): dry soil moisture threshold where direct evap frm top layer ends (volumetric) ! smcmax (output from SFLX): porosity, i.e. saturated value of soil moisture (volumetric) ! nroot (output from SFLX): number of root layers, a function of veg type, determined in subroutine redprm. - + integer :: nroot real(kind=kind_phys) :: albedok, eta_kinematic, fdown, drip, dew, beta, snomlt, & runoff3, rc, pc, rsmin, xlai, rcs, rct, rcq, & @@ -195,15 +195,15 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is real (kind=kind_phys), dimension(nsoil) :: et, smav real(kind=kind_phys) :: sfcheadrt, infxsrt, etpnd1 !don't appear to be used unless WRF_HYDRO preprocessor directive is defined and no documentation real(kind=kind_phys) :: xsda_qfx, hfx_phy, qfx_phy, xqnorm, hcpct_fasdas !only used if fasdas = 1 - + !variables associated with UA_PHYS (not used for now) real(kind=kind_phys) :: flx4, fvb, fbur, fgsn errmsg = '' errflg = 0 - + do i=1, im - if (flag_lsm(i)) then + if (flag_lsm(i)) then !GJF: Why do LSMs want the dynamics time step instead of the physics time step? call sflx (i, 1, srflag(i), & isurban, dt, zlvl(i), nsoil, sthick, & !c @@ -222,7 +222,7 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is eta(i), sheat(i), eta_kinematic, fdown, & !O ec(i), edir(i), et, ett(i), esnow(i), drip, dew, & !O beta, etp(i), ssoil(i), flx1(i), flx2(i), flx3(i),& !O - flx4, fvb, fbur, fgsn, ua_phys, & !UA + flx4, fvb, fbur, fgsn, ua_phys, & !UA snomlt, sncovr(i), runoff1(i), runoff2(i),runoff3,& !O rc, pc, rsmin, xlai, rcs, rct, rcq, rcsoil, & !O soilw, soilm(i), qsurf(i), smav, & !D @@ -239,7 +239,7 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is runoff2(i) = 0.0 swc(i,:) = 1.0 smc(i,:) = 1.0 - + call sflx_glacial (i, 1, isice, srflag(i), dt, zlvl(i), & nsoil, sthick, lwdn(i), solnet(i), sfcprs(i), & prcp(i), sfctmp(i), q1k(i), th1(i), qs1(i), & @@ -254,7 +254,7 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is if (errflg > 0) return end if end do - + end subroutine sfc_noah_wrfv4_run !> @} diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 781a21d3b..05cd94ab1 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -133,7 +133,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [isurban] standard_name = urban_vegetation_category long_name = index of the urban vegetation category in the chosen vegetation dataset @@ -200,7 +200,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [nsoil] standard_name = soil_vertical_dimension long_name = soil vertical layer dimension @@ -208,7 +208,7 @@ dimensions = () type = integer intent = in - optional = F + optional = F [sthick] standard_name = soil_layer_thickness long_name = soil layer thickness @@ -217,7 +217,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [lwdn] standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_land long_name = total sky surface downward longwave flux absorbed by the ground over land @@ -226,7 +226,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [soldn] standard_name = surface_downwelling_shortwave_flux long_name = total sky surface downward shortwave flux diff --git a/physics/sfc_noah_wrfv4_interstitial.F90 b/physics/sfc_noah_wrfv4_interstitial.F90 index b30f8a131..d2d496934 100644 --- a/physics/sfc_noah_wrfv4_interstitial.F90 +++ b/physics/sfc_noah_wrfv4_interstitial.F90 @@ -7,11 +7,11 @@ module sfc_noah_wrfv4_pre implicit none public :: sfc_noah_wrfv4_pre_init, sfc_noah_wrfv4_pre_run, sfc_noah_wrfv4_pre_finalize - + private logical :: is_initialized = .false. - + contains !> \ingroup NOAH_LSM_WRFv4 @@ -22,33 +22,33 @@ subroutine sfc_noah_wrfv4_pre_init(lsm, lsm_noah_wrfv4, veg_data_choice, & soil_data_choice, isurban, isice, iswater, errmsg, errflg) use machine, only : kind_phys - + implicit none - + integer, intent(in) :: lsm, lsm_noah_wrfv4, & veg_data_choice, soil_data_choice - + integer, intent(inout) :: isurban, isice, iswater - + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + ! Local variables - + character(len=256) :: mminlu, mminsl - + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 if (is_initialized) return - + if (lsm/=lsm_noah_wrfv4) then write(errmsg,'(*(a))') "Logic error: namelist choice of LSM is different from NOAH WRFv4" errflg = 1 return end if - + select case (veg_data_choice) case (0) mminlu = 'USGS' @@ -80,7 +80,7 @@ subroutine sfc_noah_wrfv4_pre_init(lsm, lsm_noah_wrfv4, veg_data_choice, & errflg = 1 return end select - + select case (soil_data_choice) case (1) mminsl = 'STAS' @@ -91,11 +91,11 @@ subroutine sfc_noah_wrfv4_pre_init(lsm, lsm_noah_wrfv4, veg_data_choice, & errflg = 1 return end select - + call soil_veg_gen_parm(trim(mminlu), trim(mminsl), errmsg, errflg) - + is_initialized = .true. - + end subroutine sfc_noah_wrfv4_pre_init @@ -140,10 +140,10 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & !GJF: Data preparation and output preparation from SFLX follows the GFS physics code (sfc_drv.F) ! rather than the WRF code (module_sf_noahdrv.F) in order to "fit in" with other GFS physics-based ! suites. Another version of this scheme (and the associated post) could potentially be - ! created from the WRF version. No attempt was made to test sensitivities to either approach. + ! created from the WRF version. No attempt was made to test sensitivities to either approach. ! Note that the version of NOAH LSM expected here is "generic" - there are no urban, fasdas, or ! or University of Arizona(?) additions. - + integer, intent(in) :: im, nsoil, ialb, isice logical, intent(in) :: restart, first_time_step real(kind=kind_phys), intent(in) :: dt, rhowater, rd, rvrdm1, eps, epsm1 @@ -166,30 +166,30 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & ! local Variables integer :: i, k real(kind=kind_phys) :: sneqv - + REAL, PARAMETER :: A2=17.67,A3=273.15,A4=29.65, & A23M4=A2*(A3-A4) - real(kind=kind_phys), parameter, dimension(4) :: zsoil = (/ -0.1,-0.4,-1.0,-2.0/) !what if nsoil /= 4? - + real(kind=kind_phys), parameter, dimension(4) :: zsoil = (/ -0.1,-0.4,-1.0,-2.0/) !what if nsoil /= 4? + !> - Initialize CCPP error handling variables errmsg = '' errflg = 0 - + !from module_sf_noahdrv.F/lsminit if (.not. restart .and. first_time_step .and. ialb == 0) then - do i = 1, im + do i = 1, im snoalb(i) = maxalb(int(0.5 + vtype(i)))*0.01 end do end if - + do i=1, im if (land(i) .and. flag_guess(i)) then weasd_save(i) = weasd(i) snwdph_save(i) = snwdph(i) tsfc_save(i) = tsfc(i) canopy_save(i) = canopy(i) - + do k=1,nsoil smc_save(i,k) = smc(i,k) stc_save(i,k) = stc(i,k) @@ -197,12 +197,12 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & end do end if end do - + sthick(1) = - zsoil(1) do k = 2, nsoil sthick(k) = zsoil(k-1) - zsoil(k) enddo - + flag_lsm(:) = .false. flag_lsm_glacier(:) = .false. do i=1, im @@ -214,7 +214,7 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & end if !GJF: module_sf_noahdrv.F from WRF has hardcoded slopetyp = 1; why? replicate here? !GJF: shdfac is zeroed out for particular combinations of vegetation table source and vegetation types; replicate here? - + ep(i) = 0.0 evap (i) = 0.0 hflx (i) = 0.0 @@ -227,28 +227,28 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & sbsno(i) = 0.0 snowc(i) = 0.0 snohf(i) = 0.0 - + !GJF: could potentially pass in pre-calculated rates instead of calculating here prcp(i) = rhowater * tprcp(i) / dt - + !GJF: The GFS version of NOAH prepares the specific humidity in sfc_drv.f as follows: q2k(i) = max(q1(i), 1.e-8) rho1(i) = sfcprs(i) / (rd*sfctmp(i)*(1.0+rvrdm1*q2k(i))) - + qs1(i) = fpvs( sfctmp(i) ) qs1(i) = max(eps*qs1(i) / (sfcprs(i)+epsm1*qs1(i)), 1.e-8) q2k(i) = min(qs1(i), q2k(i)) - + !GJF: could potentially pass in pre-calcualted potential temperature if other schemes also need it (to avoid redundant calculation) th1(i) = sfctmp(i) * prslki(i) - + !GJF: module_sf_noahdrv.F from WRF modifies dqsdt2 if the surface has snow. dqsdt2(i)=qs1(i)*a23m4/(sfctmp(i)-a4)**2 - + !GJF: convert canopy moisture from kg m-2 to m canopy(i) = max(canopy(i), 0.0) !check for positive values in sfc_drv.f cmc(i) = canopy(i)/rhowater - + !GJF: snow depth passed in to NOAH is conditionally modified differently in GFS and WRF: sneqv = weasd(i) * 0.001 snowhk(i) = snwdph(i) * 0.001 @@ -259,18 +259,18 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & ! if (sneqv(i) /= 0.0 .and. snwdph(i) == 0.0) then ! snowhk(i) = 10.0 * sneqv(i) ! endif - + !GJF: calculate conductance from surface exchange coefficient chk(i) = ch(i) * wind(i) - + chh(i) = chk(i) * rho1(i) cmm(i) = cm(i) * wind(i) - + !GJF: If the perturbations of vegetation fraction is desired, one could uncomment this code ! and add appropriate arguments to make this work. This is from the GFS version of NOAH LSM ! in sfc_drv.f. - + !> - Call surface_perturbation::ppfbet() to perturb vegetation fraction that goes into gsflx(). ! perturb vegetation fraction that goes into sflx, use the same ! perturbation strategy as for albedo (percentile matching) @@ -295,10 +295,10 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & ! *** sfc-perts, mgehne endif end do - - + + end subroutine sfc_noah_wrfv4_pre_run - + subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) !this routine is mostly taken from module_sf_noahdrv.F in WRF use module_sf_noahlsm, only: shdtbl, nrotbl, rstbl, rgltbl, hstbl, snuptbl, & ! begin land use / vegetation variables @@ -319,7 +319,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) character(len=*), intent(in) :: mminlu, mminsl character(len=*), intent(inout) :: errmsg integer, intent(inout) :: errflg - + integer :: lumatch, iindex, lc, num_slope, iunit_noah integer :: ierr integer , parameter :: open_ok = 0 @@ -329,7 +329,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) character*256 :: a_string integer , parameter :: loop_max = 10 integer :: loop_count, i - + !-----SPECIFY VEGETATION RELATED CHARACTERISTICS : ! ALBBCK: SFC albedo (in percentage) ! Z0: Roughness length (m) @@ -368,14 +368,14 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) 'can not find unused fortran unit to read.' return endif - + open(iunit_noah, file='VEGPARM.TBL',form='formatted',status='old',iostat=ierr) if(ierr .ne. open_ok ) then errflg = 1 errmsg = 'sfc_noah_wrfv4_interstitial: set_soil_veg_parm: failure opening VEGPARM.TBL' return end if - + lumatch=0 loop_count = 0 @@ -402,7 +402,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) enddo find_vegetation_parameter_flag endif enddo find_lutype - + ! prevent possible array overwrite, Bill Bovermann, IBM, May 6, 2008 if ( size(shdtbl) < lucats .or. & size(nrotbl) < lucats .or. & @@ -436,7 +436,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) albedomaxtbl(lc), z0mintbl(lc), z0maxtbl(lc),& ztopvtbl(lc), zbotvtbl(lc) enddo - + read (iunit_noah,*) read (iunit_noah,*)topt_data read (iunit_noah,*) @@ -472,8 +472,8 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) errmsg = 'sfc_noah_wrfv4_interstitial: set_soil_veg_parm: land use dataset '//mminlu//' not found in VEGPARM.TBL.' return endif - - + + !CALL wrf_dm_bcast_string ( LUTYPE , 4 ) !CALL wrf_dm_bcast_integer ( LUCATS , 1 ) !CALL wrf_dm_bcast_integer ( IINDEX , 1 ) @@ -504,11 +504,11 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) !CALL wrf_dm_bcast_integer ( LOW_DENSITY_RESIDENTIAL , 1 ) !CALL wrf_dm_bcast_integer ( HIGH_DENSITY_RESIDENTIAL , 1 ) !CALL wrf_dm_bcast_integer ( HIGH_INTENSITY_INDUSTRIAL , 1 ) - + ! !-----READ IN SOIL PROPERTIES FROM SOILPARM.TBL ! - + open(iunit_noah, file='SOILPARM.TBL',form='formatted',status='old',iostat=ierr) if(ierr .ne. open_ok ) then errflg = 1 @@ -557,7 +557,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) 2003 continue close (iunit_noah) - + ! CALL wrf_dm_bcast_integer ( LUMATCH , 1 ) ! CALL wrf_dm_bcast_string ( SLTYPE , 4 ) @@ -584,7 +584,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) ! !-----READ IN GENERAL PARAMETERS FROM GENPARM.TBL ! - + open(iunit_noah, file='GENPARM.TBL',form='formatted',status='old',iostat=ierr) if(ierr .ne. open_ok ) then errflg = 1 @@ -633,7 +633,7 @@ subroutine soil_veg_gen_parm( mminlu, mminsl, errmsg, errflg) read (iunit_noah,*) read (iunit_noah,*)lvcoef_data close (iunit_noah) - + ! call wrf_dm_bcast_integer ( num_slope , 1 ) ! call wrf_dm_bcast_integer ( slpcats , 1 ) @@ -658,7 +658,7 @@ end subroutine soil_veg_gen_parm end module sfc_noah_wrfv4_pre module sfc_noah_wrfv4_post - + implicit none private @@ -666,13 +666,13 @@ module sfc_noah_wrfv4_post public :: sfc_noah_wrfv4_post_init, sfc_noah_wrfv4_post_run, sfc_noah_wrfv4_post_finalize contains - + subroutine sfc_noah_wrfv4_post_init () end subroutine sfc_noah_wrfv4_post_init - + subroutine sfc_noah_wrfv4_post_finalize () end subroutine sfc_noah_wrfv4_post_finalize - + !! \section arg_table_sfc_noah_wrfv4_post_run Argument Table !! \htmlinclude sfc_noah_wrfv4_post_run.html !! @@ -680,13 +680,13 @@ subroutine sfc_noah_wrfv4_post_run (im, nsoil, land, flag_guess, flag_lsm, & rhowater, cp, hvap, cmc, rho1, sheat, eta, flx1, flx2, flx3, sncovr, runoff1,& runoff2, soilm, snowhk, weasd_save, snwdph_save, tsfc_save, tsurf, & canopy_save, smc_save, stc_save, slc_save, smcmax, canopy, shflx, & - lhflx, snohf, snowc, runoff, drain, stm, weasd, snwdph, tsfc, smc, stc,& + lhflx, snohf, snowc, runoff, drain, stm, weasd, snwdph, tsfc, smc, stc,& slc, wet1, errmsg, errflg) - + use machine, only : kind_phys - + implicit none - + integer, intent(in) :: im, nsoil logical, dimension(im), intent(in) :: land, flag_guess, flag_lsm real(kind=kind_phys), intent(in) :: rhowater, cp, hvap @@ -694,59 +694,59 @@ subroutine sfc_noah_wrfv4_post_run (im, nsoil, land, flag_guess, flag_lsm, & flx1, flx2, flx3, sncovr, runoff1, runoff2, soilm, snowhk real(kind=kind_phys), dimension(im), intent(in) :: weasd_save, snwdph_save, tsfc_save, tsurf, canopy_save, smcmax real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smc_save, stc_save, slc_save - + real(kind=kind_phys), dimension(im), intent(inout) :: canopy, shflx, lhflx, & snohf, snowc, runoff, drain, stm, wet1 real(kind=kind_phys), dimension(im), intent(inout) :: weasd, snwdph, tsfc real(kind=kind_phys), dimension(im, nsoil), intent(inout) :: smc, stc, slc - + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - + !local variables integer :: i, k - + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 - + do i=1, im if (flag_lsm(i)) then canopy(i) = cmc(i)*rhowater snwdph(i) = 1000.0*snowhk(i) - + shflx(i) = sheat(i) / (cp*rho1(i)) lhflx(i) = eta(i) / (hvap*rho1(i)) - + !aggregating several outputs into one like GFS sfc_drv.F snohf(i) = flx1(i) + flx2(i) + flx3(i) - + snowc(i) = sncovr(i) !GJF: redundant? - + !convert from m s-1 to kg m-2 s-1 by multiplying by rhowater runoff(i) = runoff1(i) * rhowater drain(i) = runoff2(i) * rhowater - + stm(i) = soilm(i) * rhowater - + wet1(i) = smc(i,1) / smcmax(i) !Sarah Lu added 09/09/2010 (for GOCART) end if end do - + do i=1, im - if (land(i)) then + if (land(i)) then if (flag_guess(i)) then weasd(i) = weasd_save(i) snwdph(i) = snwdph_save(i) tsfc(i) = tsfc_save(i) canopy(i) = canopy_save(i) - + do k=1,nsoil smc(i,k) = smc_save(i,k) stc(i,k) = stc_save(i,k) slc(i,k) = slc_save(i,k) end do - + else tsfc(i) = tsurf(i) end if @@ -754,5 +754,5 @@ subroutine sfc_noah_wrfv4_post_run (im, nsoil, land, flag_guess, flag_lsm, & end do end subroutine sfc_noah_wrfv4_post_run - + end module sfc_noah_wrfv4_post diff --git a/physics/sfc_noah_wrfv4_interstitial.meta b/physics/sfc_noah_wrfv4_interstitial.meta index e993780fd..59f5723d8 100644 --- a/physics/sfc_noah_wrfv4_interstitial.meta +++ b/physics/sfc_noah_wrfv4_interstitial.meta @@ -683,7 +683,7 @@ type = integer intent = out optional = F - + ######################################################################## [ccpp-arg-table] name = sfc_noah_wrfv4_post_run From 53fc0ff092ebd9f0749f7480d6dc5c1eeb4980c6 Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Wed, 8 Jul 2020 00:41:58 +0000 Subject: [PATCH 002/119] In GFS_rrtmg_pre.F90, separate out the imp_physics == 6 option and let it call the progcld6 instead of progcld5. --- physics/GFS_rrtmg_pre.F90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index eeb68db83..0dc3f97dd 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -948,7 +948,7 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input ! clouds, cldsa, mtopa, mbota, de_lgth) ! --- outputs endif - elseif(Model%imp_physics == 8) then + elseif(Model%imp_physics == 6 .or. Model%imp_physics == 8) then if (Model%kdt == 1) then Tbd%phy_f3d(:,:,Model%nleffr) = 10. Tbd%phy_f3d(:,:,Model%nieffr) = 50. @@ -967,8 +967,7 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input Tbd%phy_f3d(:,:,2), Tbd%phy_f3d(:,:,3), & clouds,cldsa,mtopa,mbota, de_lgth) ! --- outputs - - elseif(Model%imp_physics == 6 .or. Model%imp_physics == 15) then + elseif(Model%imp_physics == 15) then if (Model%kdt == 1) then Tbd%phy_f3d(:,:,Model%nleffr) = 10. Tbd%phy_f3d(:,:,Model%nieffr) = 50. From 0a8bd93ba91f7b0f7916483a67add01f1d8952dc Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Thu, 9 Jul 2020 01:15:16 +0000 Subject: [PATCH 003/119] Initialize crtlame properly in physics/samfdeepcnv.f. --- physics/samfdeepcnv.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index 67576af15..9e0e75afe 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -423,9 +423,9 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & cxlamu = 1.0e-3 else aafac = .05 - crtlame = 1.0e-4 cxlame = 1.0e-4 endif + crtlame = 1.0e-4 crtlamd = 1.0e-4 cxlamd = 1.0e-4 xlamde = 1.0e-4 From 1b400f5d53c82b042f9eea321f64ac8c5dad5719 Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Fri, 17 Jul 2020 00:13:58 +0000 Subject: [PATCH 004/119] Follow the master branch to change the unit of radians into radian in physics/gfdl_sfc_layer.meta. (Dom) --- physics/gfdl_sfc_layer.meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index cb20690b3..5b8e6e891 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -98,7 +98,7 @@ [xlat] standard_name = latitude long_name = latitude - units = radians + units = radian dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -107,7 +107,7 @@ [xlon] standard_name = longitude long_name = longitude - units = radians + units = radian dimensions = (horizontal_loop_extent) type = real kind = kind_phys From 370e3a94549578f3ebb78e9a2a98ffa9ab1a8b87 Mon Sep 17 00:00:00 2001 From: XiaSun-NOAA Date: Mon, 24 Aug 2020 21:54:22 +0000 Subject: [PATCH 005/119] change hard-coded dimensions to assumed sizes --- physics/GFS_DCNV_generic.F90 | 28 +- physics/GFS_GWD_generic.F90 | 6 +- physics/GFS_MP_generic.F90 | 56 +- physics/GFS_PBL_generic.F90 | 28 +- physics/GFS_SCNV_generic.F90 | 16 +- physics/GFS_cloud_diagnostics.F90 | 14 +- physics/GFS_debug.F90 | 36 +- physics/GFS_rrtmg_post.F90 | 14 +- physics/GFS_rrtmg_pre.F90 | 30 +- physics/GFS_rrtmgp_gfdlmp_pre.F90 | 12 +- physics/GFS_rrtmgp_lw_post.F90 | 26 +- physics/GFS_rrtmgp_pre.F90 | 16 +- physics/GFS_rrtmgp_setup.F90 | 4 +- physics/GFS_rrtmgp_sw_post.F90 | 32 +- physics/GFS_rrtmgp_sw_pre.F90 | 16 +- physics/GFS_rrtmgp_zhaocarr_pre.F90 | 12 +- physics/GFS_stochastics.F90 | 48 +- physics/GFS_suite_interstitial.F90 | 96 +- physics/GFS_surface_composites.F90 | 48 +- physics/GFS_surface_generic.F90 | 68 +- physics/GFS_surface_loop_control.F90 | 8 +- physics/GFS_time_vary_pre.fv3.F90 | 2 +- physics/GFS_time_vary_pre.scm.F90 | 2 +- physics/cires_ugwp.F90 | 34 +- physics/cnvc90.f | 20 +- physics/cs_conv.F90 | 74 +- physics/cs_conv_aw_adj.F90 | 18 +- physics/cu_gf_driver.F90 | 34 +- physics/cu_ntiedtke.F90 | 20 +- physics/dcyc2.f | 16 +- physics/drag_suite.F90 | 44 +- physics/flake_driver.F90 | 8 +- physics/gcm_shoc.F90 | 34 +- physics/get_prs_fv3.F90 | 22 +- physics/gfdl_cloud_microphys.F90 | 28 +- physics/gfdl_fv_sat_adj.F90 | 4 +- physics/gfdl_fv_sat_adj.F90_assumedsizes | 1431 +++++++ physics/gitdiff | 4397 +++++++++++++++++++++ physics/gscond.f | 16 +- physics/gwdc.f | 14 +- physics/gwdps.f | 2 +- physics/h2ophys.f | 8 +- physics/lsm_ruc_sfc_sice_interstitial.F90 | 16 +- physics/m_micro.F90 | 18 +- physics/m_micro_interstitial.F90 | 32 +- physics/maximum_hourly_diagnostics.F90 | 38 +- physics/module_MYJSFC_wrapper.F90 | 20 +- physics/module_MYNNPBL_wrapper.F90 | 26 +- physics/module_MYNNSFC_wrapper.F90 | 18 +- physics/module_SGSCloud_RadPost.F90 | 4 +- physics/module_SGSCloud_RadPre.F90 | 20 +- physics/moninedmf.f | 42 +- physics/moninedmf_hafs.f | 44 +- physics/moninshoc.f | 22 +- physics/mp_fer_hires.F90 | 44 +- physics/mp_thompson.F90 | 44 +- physics/mp_thompson_post.F90 | 6 +- physics/mp_thompson_pre.F90 | 4 +- physics/ozphys.f | 4 +- physics/ozphys_2015.f | 10 +- physics/precpd.f | 14 +- physics/radlw_main.f | 28 +- physics/radsw_main.f | 60 +- physics/rayleigh_damp.f | 6 +- physics/rrtmg_lw_post.F90 | 4 +- physics/rrtmg_lw_pre.F90 | 2 +- physics/rrtmg_sw_post.F90 | 6 +- physics/rrtmg_sw_pre.F90 | 8 +- physics/rrtmgp_lw_aerosol_optics.F90 | 12 +- physics/rrtmgp_lw_cloud_optics.F90 | 6 +- physics/rrtmgp_lw_cloud_sampling.F90 | 6 +- physics/rrtmgp_lw_gas_optics.F90 | 8 +- physics/rrtmgp_lw_pre.F90 | 6 +- physics/rrtmgp_lw_rte.F90 | 12 +- physics/rrtmgp_sw_aerosol_optics.F90 | 14 +- physics/rrtmgp_sw_cloud_optics.F90 | 6 +- physics/rrtmgp_sw_cloud_sampling.F90 | 8 +- physics/rrtmgp_sw_gas_optics.F90 | 12 +- physics/rrtmgp_sw_rte.F90 | 18 +- physics/samfdeepcnv.f | 26 +- physics/samfshalcnv.f | 18 +- physics/satmedmfvdif.F | 40 +- physics/satmedmfvdifq.F | 44 +- physics/sfc_cice.f | 4 +- physics/sfc_diag.f | 4 +- physics/sfc_diag_post.F90 | 8 +- physics/sfc_diff.f | 14 +- physics/sfc_drv.f | 14 +- physics/sfc_drv_ruc.F90 | 58 +- physics/sfc_noahmp_drv.f | 26 +- physics/sfc_nst.f | 14 +- physics/sfc_ocean.F | 6 +- physics/sfc_sice.f | 12 +- physics/shinhongvdif.F90 | 38 +- physics/ysuvdif.F90 | 18 +- 95 files changed, 6831 insertions(+), 1003 deletions(-) create mode 100644 physics/gfdl_fv_sat_adj.F90_assumedsizes create mode 100644 physics/gitdiff diff --git a/physics/GFS_DCNV_generic.F90 b/physics/GFS_DCNV_generic.F90 index bfe97bc70..def1e7f4e 100644 --- a/physics/GFS_DCNV_generic.F90 +++ b/physics/GFS_DCNV_generic.F90 @@ -26,14 +26,14 @@ subroutine GFS_DCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, do_cnvgwd, cplc integer, intent(in) :: im, levs logical, intent(in) :: ldiag3d, qdiag3d, do_cnvgwd, cplchm - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0 - real(kind=kind_phys), dimension(im,levs), intent(in) :: gv0 - real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im,levs), intent(inout) :: gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_v - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_t - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_qv + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gv0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:), intent(inout) :: gq0_water_vapor + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_u + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_v + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_qv ! dqdti only allocated if cplchm is .true. real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti character(len=*), intent(out) :: errmsg @@ -107,18 +107,18 @@ subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, qdiag3d, ras, cs logical, intent(in) :: flag_for_dcnv_generic_tend real(kind=kind_phys), intent(in) :: frain, dtf - real(kind=kind_phys), dimension(im), intent(in) :: rain1, cld1d - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(in) :: ud_mf, dd_mf, dt_mf + real(kind=kind_phys), dimension(:), intent(in) :: rain1, cld1d + real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t, save_qv + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0, gq0_water_vapor + real(kind=kind_phys), dimension(:,:), intent(in) :: ud_mf, dd_mf, dt_mf real(kind=kind_phys), intent(in) :: con_g integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d - real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cldwrk + real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cldwrk ! dt3dt, dq3dt, du3dt, dv3dt upd_mf, dwn_mf, det_mf only allocated if ldiag3d == .true. real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt, dq3dt, du3dt, dv3dt real(kind=kind_phys), dimension(:,:), intent(inout) :: upd_mf, dwn_mf, det_mf - real(kind=kind_phys), dimension(im,levs), intent(inout) :: cnvw, cnvc + real(kind=kind_phys), dimension(:,:), intent(inout) :: cnvw, cnvc ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index 09c969162..a6c6dd467 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -30,12 +30,12 @@ subroutine GFS_GWD_generic_pre_run( & real(kind=kind_phys), intent(in) :: mntvar(im,nmtvr) real(kind=kind_phys), intent(out) :: & - & oc(im), oa4(im,4), clx(im,4), & + & oc(:), oa4(:,:), clx(:,:), & & varss(:), ocss(:), oa4ss(:,:), clxss(:,:), & - & theta(im), sigma(im), gamma(im), elvmax(im) + & theta(:), sigma(:), gamma(:), elvmax(:) logical, intent(in) :: lssav, ldiag3d, flag_for_gwd_generic_tend - real(kind=kind_phys), intent(in) :: dtdt(im,levs), dudt(im,levs), dvdt(im,levs) + real(kind=kind_phys), intent(in) :: dtdt(:,:), dudt(:,:), dvdt(:,:) ! dt3dt only allocated only if ldiag3d is .true. real(kind=kind_phys), intent(inout) :: dt3dt(:,:), du3dt(:,:), dv3dt(:,:) real(kind=kind_phys), intent(in) :: dtf diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 8810cc7cf..be1953633 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -23,11 +23,11 @@ subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, implicit none integer, intent(in) :: im, levs, ntcw, nncl, ntrac logical, intent(in) :: ldiag3d, qdiag3d, do_aw - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t, save_qv + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -109,16 +109,16 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm real(kind=kind_phys), intent(in) :: dtf, frain, con_g - real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc - real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc - real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 - real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann - real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, save_qv, del - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: gq0 - - real(kind=kind_phys), dimension(im), intent(in ) :: sr - real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & + real(kind=kind_phys), dimension(:), intent(in) :: rain1, xlat, xlon, tsfc + real(kind=kind_phys), dimension(:), intent(inout) :: ice, snow, graupel, rainc + real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 + real(kind=kind_phys), dimension(:,:), intent(in) :: rann + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0, prsl, save_t, save_qv, del + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 + + real(kind=kind_phys), dimension(:), intent(in ) :: sr + real(kind=kind_phys), dimension(:), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & snow_cpl, pwat @@ -128,23 +128,23 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, ! Stochastic physics / surface perturbations logical, intent(in) :: do_sppt, ca_global - real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdtr - real(kind=kind_phys), dimension(im,levs), intent(in) :: dtdtc - real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr + real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc + real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(inout) :: dsnow_cpl ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp - real(kind=kind_phys), dimension(im), intent(inout) :: raincprv - real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: iceprv - real(kind=kind_phys), dimension(im), intent(inout) :: snowprv - real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv - real(kind=kind_phys), dimension(im), intent(inout) :: draincprv - real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: diceprv - real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv - real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: raincprv + real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: iceprv + real(kind=kind_phys), dimension(:), intent(inout) :: snowprv + real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: draincprv + real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: diceprv + real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv + real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv real(kind=kind_phys), intent(in) :: dtp diff --git a/physics/GFS_PBL_generic.F90 b/physics/GFS_PBL_generic.F90 index 357309b2a..95f626566 100644 --- a/physics/GFS_PBL_generic.F90 +++ b/physics/GFS_PBL_generic.F90 @@ -101,11 +101,11 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires logical, intent(in) :: cplchm, ltaerosol, hybedmf, do_shoc, satmedmf - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs - real(kind=kind_phys), dimension(im, levs, nvdiff), intent(inout) :: vdftra - real(kind=kind_phys), dimension(im, levs), intent(out) :: save_u, save_v, save_t - real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q + real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs + real(kind=kind_phys), dimension(:,:, :), intent(inout) :: vdftra + real(kind=kind_phys), dimension(:,:), intent(out) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:, :), intent(out) :: save_q ! CCPP error handling variables character(len=*), intent(out) :: errmsg @@ -336,8 +336,8 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, logical, dimension(:), intent(in) :: flag_cice logical, intent(in) :: flag_for_pbl_generic_tend - real(kind=kind_phys), dimension(im, levs), intent(in) :: save_u, save_v, save_t - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: save_q + real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:, :), intent(in) :: save_q real(kind=kind_phys), intent(in) :: dtf real(kind=kind_phys), intent(in) :: rd, cp, fvirt, hvap @@ -346,14 +346,14 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, real(kind=kind_phys), dimension(:), intent(in) :: dusfc_cice, dvsfc_cice, dtsfc_cice, dqsfc_cice, & wind, stress_wat, hflx_wat, evap_wat, ugrs1, vgrs1 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs + real(kind=kind_phys), dimension(:,:, :), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs - real(kind=kind_phys), dimension(im, levs, nvdiff), intent(in) :: dvdftra - real(kind=kind_phys), dimension(im), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu - real(kind=kind_phys), dimension(im, levs), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw + real(kind=kind_phys), dimension(:,:, :), intent(in) :: dvdftra + real(kind=kind_phys), dimension(:), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu + real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: dqdt + real(kind=kind_phys), dimension(:,:, :), intent(inout) :: dqdt ! The following arrays may not be allocated, depending on certain flags (cplflx, ...). ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, @@ -370,7 +370,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, real(kind=kind_phys), dimension(:,:), intent(in) :: dkt ! From canopy heat storage - reduction factors in latent/sensible heat flux due to surface roughness - real(kind=kind_phys), dimension(im), intent(in) :: hffac, hefac + real(kind=kind_phys), dimension(:), intent(in) :: hffac, hefac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 index ae8fac5f9..450f0e5a9 100644 --- a/physics/GFS_SCNV_generic.F90 +++ b/physics/GFS_SCNV_generic.F90 @@ -23,9 +23,9 @@ subroutine GFS_SCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, gu0, gv0, gt0, integer, intent(in) :: im, levs logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor + real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t, save_qv + real(kind=kind_phys), dimension(:, :), intent(inout) :: save_u, save_v, save_t, save_qv character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -84,20 +84,20 @@ subroutine GFS_SCNV_generic_post_run (im, levs, nn, lssav, ldiag3d, qdiag3d, cpl integer, intent(in) :: im, levs, nn logical, intent(in) :: lssav, ldiag3d, qdiag3d, cplchm, flag_for_scnv_generic_tend real(kind=kind_phys), intent(in) :: frain - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv + real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor + real(kind=kind_phys), dimension(:, :), intent(in) :: save_u, save_v, save_t, save_qv ! dqdti, dt3dt, dq3dt, only allocated if ldiag3d == .true. real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti real(kind=kind_phys), dimension(:,:), intent(inout) :: du3dt, dv3dt, dt3dt, dq3dt - real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw + real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw ! Post code for SAS/SAMF integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d logical, intent(in) :: shcnvcw - real(kind=kind_phys), dimension(im), intent(in) :: rain1 - real(kind=kind_phys), dimension(im,levs), intent(in) :: cnvw, cnvc - real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cnvprcp, cnvprcpb + real(kind=kind_phys), dimension(:), intent(in) :: rain1 + real(kind=kind_phys), dimension(:, :), intent(in) :: cnvw, cnvc + real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cnvprcp, cnvprcpb ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 index c62cc685d..f5d09cd56 100644 --- a/physics/GFS_cloud_diagnostics.F90 +++ b/physics/GFS_cloud_diagnostics.F90 @@ -53,15 +53,15 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l lslwr ! Call LW radiation real(kind_phys), intent(in) :: & con_pi ! Physical constant: pi - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lat, & ! Latitude de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure at model-layer cld_frac ! Total cloud fraction - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model interfaces - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & deltaZ, & ! Layer thickness (km) cloud_overlap_param, & ! Cloud-overlap parameter precip_overlap_param ! Precipitation overlap parameter @@ -71,10 +71,10 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l errmsg ! Error message integer, intent(out) :: & errflg ! Error flag - integer,dimension(ncol,3),intent(out) :: & + integer,dimension(:,:),intent(out) :: & mbota, & ! Vertical indices for cloud tops mtopa ! Vertical indices for cloud bases - real(kind_phys), dimension(ncol,5), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & cldsa ! Fraction of clouds for low, middle, high, total and BL ! Local variables @@ -136,7 +136,7 @@ subroutine hml_cloud_diagnostics_initialize(imp_physics, imp_physics_fer_hires, integer, intent(in) :: & nLev, & ! Number of vertical-layers mpi_rank - real(kind_phys), dimension(nLev+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & sigmainit ! Outputs integer, intent(out) :: & diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 0562324ee..3c358a25f 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -970,29 +970,29 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ integer, intent(in ) :: im integer, intent(in ) :: kdt integer, intent(in ) :: iter - logical, intent(in ) :: flag_iter(im) - logical, intent(in ) :: flag_guess(im) + logical, intent(in ) :: flag_iter(:) + logical, intent(in ) :: flag_guess(:) logical, intent(in ) :: flag_init logical, intent(in ) :: flag_restart logical, intent(in ) :: frac_grid integer, intent(in ) :: isot integer, intent(in ) :: ivegsrc - real(kind_phys), intent(in ) :: stype(im) - real(kind_phys), intent(in ) :: vtype(im) - real(kind_phys), intent(in ) :: slope(im) - integer, intent(in ) :: soiltyp(im) - integer, intent(in ) :: vegtype(im) - integer, intent(in ) :: slopetyp(im) - logical, intent(in ) :: dry(im) - logical, intent(in ) :: icy(im) - logical, intent(in ) :: wet(im) - logical, intent(in ) :: lake(im) - logical, intent(in ) :: ocean(im) - real(kind_phys), intent(in ) :: oceanfrac(im) - real(kind_phys), intent(in ) :: landfrac(im) - real(kind_phys), intent(in ) :: lakefrac(im) - real(kind_phys), intent(in ) :: slmsk(im) - integer, intent(in ) :: islmsk(im) + real(kind_phys), intent(in ) :: stype(:) + real(kind_phys), intent(in ) :: vtype(:) + real(kind_phys), intent(in ) :: slope(:) + integer, intent(in ) :: soiltyp(:) + integer, intent(in ) :: vegtype(:) + integer, intent(in ) :: slopetyp(:) + logical, intent(in ) :: dry(:) + logical, intent(in ) :: icy(:) + logical, intent(in ) :: wet(:) + logical, intent(in ) :: lake(:) + logical, intent(in ) :: ocean(:) + real(kind_phys), intent(in ) :: oceanfrac(:) + real(kind_phys), intent(in ) :: landfrac(:) + real(kind_phys), intent(in ) :: lakefrac(:) + real(kind_phys), intent(in ) :: slmsk(:) + integer, intent(in ) :: islmsk(:) character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 index 7f80ca4c3..82cc4c87a 100644 --- a/physics/GFS_rrtmg_post.F90 +++ b/physics/GFS_rrtmg_post.F90 @@ -39,17 +39,17 @@ subroutine GFS_rrtmg_post_run (Model, Grid, Diag, Radtend, Statein, & type(GFS_coupling_type), intent(inout) :: Coupling type(GFS_radtend_type), intent(in) :: Radtend type(GFS_diag_type), intent(inout) :: Diag - type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(in) :: scmpsw + type(cmpfsw_type), dimension(:), intent(in) :: scmpsw integer, intent(in) :: im, lm, ltp, kt, kb, kd, nday real(kind=kind_phys), intent(in) :: raddt - real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(in) :: aerodp - real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(in) :: cldsa - integer, dimension(size(Grid%xlon,1),3), intent(in) :: mbota, mtopa - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: clouds1 - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtausw - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtaulw + real(kind=kind_phys), dimension(:,:), intent(in) :: aerodp + real(kind=kind_phys), dimension(:,:), intent(in) :: cldsa + integer, dimension(:,:), intent(in) :: mbota, mtopa + real(kind=kind_phys), dimension(:,:), intent(in) :: clouds1 + real(kind=kind_phys), dimension(:,:), intent(in) :: cldtausw + real(kind=kind_phys), dimension(:,:), intent(in) :: cldtaulw character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index ca7695528..514ea8745 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -95,39 +95,39 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input integer, intent(out) :: kd, kt, kb ! F-A mp scheme only - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: f_ice, & + real(kind=kind_phys), dimension(:, :), intent(in) :: f_ice, & f_rain, f_rimef - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: cwm - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: flgmin + real(kind=kind_phys), dimension(:, :), intent(out) :: cwm + real(kind=kind_phys), dimension(:), intent(in) :: flgmin real(kind=kind_phys), intent(out) :: raddt - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: delp, & + real(kind=kind_phys), dimension(:, :), intent(out) :: delp, & dz, plyr, tlyr, qlyr, olyr - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+1+LTP), intent(out) :: plvl, tlvl + real(kind=kind_phys), dimension(:, :), intent(out) :: plvl, tlvl - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: tsfg, tsfa + real(kind=kind_phys), dimension(:), intent(out) :: tsfg, tsfa - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: gasvmr_co2, & + real(kind=kind_phys), dimension(:, :), intent(out) :: gasvmr_co2, & gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4, gasvmr_cfc113 - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDSW), intent(out) :: faersw1, & + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faersw1, & faersw2, faersw3 - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDLW), intent(out) :: faerlw1, & + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faerlw1, & faerlw2, faerlw3 - real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(out) :: aerodp + real(kind=kind_phys), dimension(:,:), intent(out) :: aerodp - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(inout) :: clouds1, & + real(kind=kind_phys), dimension(:,:), intent(inout) :: clouds1, & clouds2, clouds3, clouds4, clouds5 - real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: clouds6, & + real(kind=kind_phys), dimension(:,:), intent(out) :: clouds6, & clouds7, clouds8, clouds9 - real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(out) :: cldsa - integer, dimension(size(Grid%xlon,1),3), intent(out) :: mbota, mtopa - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: de_lgth, alb1d + real(kind=kind_phys), dimension(:,:), intent(out) :: cldsa + integer, dimension(:,:), intent(out) :: mbota, mtopa + real(kind=kind_phys), dimension(:), intent(out) :: de_lgth, alb1d character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 index b67b22d41..a11f03c3b 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 +++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 @@ -62,24 +62,24 @@ subroutine GFS_rrtmgp_gfdlmp_pre_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cld con_g, & ! Physical constant: gravitational constant con_rd, & ! Physical constant: gas-constant for dry air con_epsq ! Physical constant(?): Minimum value for specific humidity - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lat ! Latitude - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) effrin_cldliq, & ! Effective radius for liquid cloud-particles (microns) effrin_cldice, & ! Effective radius for ice cloud-particles (microns) effrin_cldrain, & ! Effective radius for rain cloud-particles (microns) effrin_cldsnow ! Effective radius for snow cloud-particles (microns) - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:, :, :),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! Outputs - real(kind_phys), dimension(nCol),intent(out) :: & + real(kind_phys), dimension(:),intent(out) :: & de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev),intent(out) :: & + real(kind_phys), dimension(:, :),intent(out) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius diff --git a/physics/GFS_rrtmgp_lw_post.F90 b/physics/GFS_rrtmgp_lw_post.F90 index a6b37acfc..b508996be 100644 --- a/physics/GFS_rrtmgp_lw_post.F90 +++ b/physics/GFS_rrtmgp_lw_post.F90 @@ -39,11 +39,11 @@ subroutine GFS_rrtmgp_lw_post_run (nCol, nLev, lslwr, do_lw_clrsky_hr, save_diag save_diag ! Output radiation diagnostics? real(kind_phys), intent(in) :: & fhlwr ! Frequency for SW radiation - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & tsfa ! Lowest model layer air temperature for radiation (K) - real(kind_phys), dimension(nCol, nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & t_lay ! Temperature @ model layer centers (K) - real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & p_lev, & ! Pressure @ model layer-interfaces (Pa) fluxlwUP_allsky, & ! RRTMGP longwave all-sky flux (W/m2) fluxlwDOWN_allsky, & ! RRTMGP longwave all-sky flux (W/m2) @@ -51,26 +51,26 @@ subroutine GFS_rrtmgp_lw_post_run (nCol, nLev, lslwr, do_lw_clrsky_hr, save_diag fluxlwDOWN_clrsky ! RRTMGP longwave clear-sky flux (W/m2) real(kind_phys), intent(in) :: & raddt ! Radiation time step - real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & aerodp ! Vertical integrated optical depth for various aerosol species - real(kind_phys), dimension(nCol,5), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & cldsa ! Fraction of clouds for low, middle, high, total and BL - integer, dimension(nCol,3), intent(in) ::& + integer, dimension(:, :), intent(in) ::& mbota, & ! vertical indices for low, middle and high cloud tops mtopa ! vertical indices for low, middle and high cloud bases - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & cld_frac, & ! Total cloud fraction in each layer cldtaulw ! approx 10.mu band layer cloud optical depth ! Outputs (mandatory) - real(kind_phys), dimension(nCol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & sfcdlw, & ! Total sky sfc downward lw flux (W/m2) tsflw ! surface air temp during lw calculation (K) - type(sfcflw_type), dimension(nCol), intent(out) :: & + type(sfcflw_type), dimension(:), intent(out) :: & sfcflw ! LW radiation fluxes at sfc - real(kind_phys), dimension(nCol,nLev), intent(out) :: & + real(kind_phys), dimension(:, :), intent(out) :: & htrlw ! LW all-sky heating rate - type(topflw_type), dimension(nCol), intent(out) :: & + type(topflw_type), dimension(:), intent(out) :: & topflw ! lw_fluxes_top_atmosphere character(len=*), intent(out) :: & errmsg @@ -78,13 +78,13 @@ subroutine GFS_rrtmgp_lw_post_run (nCol, nLev, lslwr, do_lw_clrsky_hr, save_diag errflg ! Outputs (optional) - type(proflw_type), dimension(nCol, nLev+1), optional, intent(out) :: & + type(proflw_type), dimension(:, :), optional, intent(out) :: & flxprf_lw ! 2D radiative fluxes, components: ! upfxc - total sky upward flux (W/m2) ! dnfxc - total sky dnward flux (W/m2) ! upfx0 - clear sky upward flux (W/m2) ! dnfx0 - clear sky dnward flux (W/m2) - real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & + real(kind_phys),dimension(:, :),intent(out),optional :: & htrlwc ! Longwave clear-sky heating-rate (K/sec) ! Local variables diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 0e5d65f5c..7d6633908 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -52,7 +52,7 @@ subroutine GFS_rrtmgp_pre_init(nGases, active_gases, active_gases_array, errmsg, character(len=*), intent(in) :: & active_gases ! List of active gases from namelist. ! Outputs - character(len=*),dimension(nGases), intent(out) :: & + character(len=*),dimension(:), intent(out) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP character(len=*), intent(out) :: & errmsg ! Error message @@ -159,7 +159,7 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nGases, nTracers, i_o3, lsswr, lslwr, logical, intent(in) :: & lsswr, & ! Call SW radiation? lslwr ! Call LW radiation - character(len=*),dimension(nGases), intent(in) :: & + character(len=*),dimension(:), intent(in) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP real(kind_phys), intent(in) :: & fhswr, & ! Frequency of SW radiation call. @@ -169,11 +169,11 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nGases, nTracers, i_o3, lsswr, lslwr, con_epsm1, & ! Physical constant: Epsilon (Rd/Rv) minus one con_fvirt, & ! Physical constant: Inverse of epsilon minus one con_epsqs ! Physical constant: Minimum saturation mixing-ratio (kg/kg) - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & xlon, & ! Longitude xlat, & ! Latitude tsfc ! Surface skin temperature (K) - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & prsl, & ! Pressure at model-layer centers (Pa) tgrs, & ! Temperature at model-layer centers (K) prslk ! Exner function at model layer centers (1) @@ -189,18 +189,18 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nGases, nTracers, i_o3, lsswr, lslwr, errflg ! Error flag real(kind_phys), intent(out) :: & raddt ! Radiation time-step - real(kind_phys), dimension(ncol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & tsfg, & ! Ground temperature tsfa ! Skin temperature - real(kind_phys), dimension(nCol,nLev), intent(out) :: & + real(kind_phys), dimension(:, :), intent(out) :: & p_lay, & ! Pressure at model-layer t_lay, & ! Temperature at model layer tv_lay, & ! Virtual temperature at model-layers relhum ! Relative-humidity at model-layers - real(kind_phys), dimension(nCol,nLev+1), intent(out) :: & + real(kind_phys), dimension(:, :), intent(out) :: & p_lev, & ! Pressure at model-interface t_lev ! Temperature at model-interface - real(kind_phys), dimension(nCol, nLev, nTracers),intent(out) :: & + real(kind_phys), dimension(:, :,:),intent(out) :: & tracer ! Array containing trace gases type(ty_gas_concs),intent(out) :: & gas_concentrations ! RRTMGP DDT: gas volumne mixing ratios diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 index 9b503e3bc..acc302405 100644 --- a/physics/GFS_rrtmgp_setup.F90 +++ b/physics/GFS_rrtmgp_setup.F90 @@ -54,14 +54,14 @@ subroutine GFS_rrtmgp_setup_init(imp_physics, imp_physics_fer_hires, imp_physics imp_physics_zhao_carr, & ! Flag for zhao-carr scheme imp_physics_zhao_carr_pdf, & ! Flag for zhao-carr+PDF scheme imp_physics_mg ! Flag for MG scheme - real(kind_phys), dimension(levr+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & si integer, intent(in) :: levr, ictm, isol, ico2, iaer, ialb, iems, & ntcw, num_p3d, ntoz, iovr_sw, iovr_lw, isubc_sw, isubc_lw, & icliq_sw, iflip, me logical, intent(in) :: & crick_proof, ccnorm, norad_precip - integer, intent(in), dimension(4) :: & + integer, intent(in), dimension(:) :: & idate ! Outputs character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 index 0d3991fcf..8fdf3fa65 100644 --- a/physics/GFS_rrtmgp_sw_post.F90 +++ b/physics/GFS_rrtmgp_sw_post.F90 @@ -37,7 +37,7 @@ subroutine GFS_rrtmgp_sw_post_run (nCol, nLev, nDay, idxday, lsswr, do_sw_clrsky nCol, & ! Horizontal loop extent nLev, & ! Number of vertical layers nDay ! Number of daylit columns - integer, intent(in), dimension(nday) :: & + integer, intent(in), dimension(:) :: & idxday ! Index array for daytime points logical, intent(in) :: & lsswr, & ! Call SW radiation? @@ -47,37 +47,37 @@ subroutine GFS_rrtmgp_sw_post_run (nCol, nLev, nDay, idxday, lsswr, do_sw_clrsky sw_gas_props ! DDT containing SW spectral information real(kind_phys), intent(in) :: & fhswr ! Frequency for SW radiation - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(ncol), intent(in) :: & t_lay, & ! Temperature at model layer centers (K) coszen, & ! Cosine(SZA) coszdg ! Cosine(SZA), daytime - real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & p_lev ! Pressure @ model layer-interfaces (Pa) - real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & sfc_alb_nir_dir, & ! Surface albedo (direct) sfc_alb_nir_dif, & ! Surface albedo (diffuse) sfc_alb_uvvis_dir, & ! Surface albedo (direct) sfc_alb_uvvis_dif ! Surface albedo (diffuse) - real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & fluxswUP_allsky, & ! SW All-sky flux (W/m2) fluxswDOWN_allsky, & ! SW All-sky flux (W/m2) fluxswUP_clrsky, & ! SW Clear-sky flux (W/m2) fluxswDOWN_clrsky ! SW All-sky flux (W/m2) real(kind_phys), intent(in) :: & raddt ! Radiation time step - real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & aerodp ! Vertical integrated optical depth for various aerosol species - real(kind_phys), dimension(nCol,5), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & cldsa ! Fraction of clouds for low, middle, high, total and BL - integer, dimension(nCol,3), intent(in) ::& + integer, dimension(:, :), intent(in) ::& mbota, & ! vertical indices for low, middle and high cloud tops mtopa ! vertical indices for low, middle and high cloud bases - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & cld_frac, & ! Total cloud fraction in each layer cldtausw ! approx .55mu band layer cloud optical depth ! Inputs (optional) - type(cmpfsw_type), dimension(nCol), intent(in), optional :: & + type(cmpfsw_type), dimension(:), intent(in), optional :: & scmpsw ! 2D surface fluxes, components: ! uvbfc - total sky downward uv-b flux at (W/m2) ! uvbf0 - clear sky downward uv-b flux at (W/m2) @@ -87,7 +87,7 @@ subroutine GFS_rrtmgp_sw_post_run (nCol, nLev, nDay, idxday, lsswr, do_sw_clrsky ! visdf - downward uv+vis diffused flux (W/m2) ! Outputs (mandatory) - real(kind_phys), dimension(nCol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & nirbmdi, & ! sfc nir beam sw downward flux (W/m2) nirdfdi, & ! sfc nir diff sw downward flux (W/m2) visbmdi, & ! sfc uv+vis beam sw downward flux (W/m2) @@ -98,11 +98,11 @@ subroutine GFS_rrtmgp_sw_post_run (nCol, nLev, nDay, idxday, lsswr, do_sw_clrsky visdfui, & ! sfc uv+vis diff sw upward flux (W/m2) sfcnsw, & ! total sky sfc netsw flx into ground sfcdsw ! - real(kind_phys), dimension(nCol,nLev), intent(out) :: & + real(kind_phys), dimension(:, :), intent(out) :: & htrsw ! SW all-sky heating rate - type(sfcfsw_type), dimension(nCol), intent(out) :: & + type(sfcfsw_type), dimension(:), intent(out) :: & sfcfsw ! sw radiation fluxes at sfc - type(topfsw_type), dimension(nCol), intent(out) :: & + type(topfsw_type), dimension(:), intent(out) :: & topfsw ! sw_fluxes_top_atmosphere character(len=*), intent(out) :: & errmsg @@ -110,13 +110,13 @@ subroutine GFS_rrtmgp_sw_post_run (nCol, nLev, nDay, idxday, lsswr, do_sw_clrsky errflg ! Outputs (optional) - type(profsw_type), dimension(nCol, nLev), intent(out), optional :: & + type(profsw_type), dimension(:, :), intent(out), optional :: & flxprf_sw ! 2D radiative fluxes, components: ! upfxc - total sky upward flux (W/m2) ! dnfxc - total sky dnward flux (W/m2) ! upfx0 - clear sky upward flux (W/m2) ! dnfx0 - clear sky dnward flux (W/m2) - real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & + real(kind_phys),dimension(:, :),intent(out),optional :: & htrswc ! Clear-sky heating rate (K/s) ! Local variables diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 index c4208d872..5c741a77e 100644 --- a/physics/GFS_rrtmgp_sw_pre.F90 +++ b/physics/GFS_rrtmgp_sw_pre.F90 @@ -45,9 +45,9 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, nsfcpert, lsswr, do_sfcperts, s do_sfcperts real(kind_phys), intent(in) :: & solhr ! Time in hours after 00z at the current timestep - real(kind_phys), dimension(5), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & pertalb ! Magnitude of surface albedo perturbation (frac) - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lsmask, & ! Landmask: sea/land/ice=0/1/2 lon, & ! Longitude coslat, & ! Cosine(latitude) @@ -66,13 +66,13 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, nsfcpert, lsswr, do_sfcperts, s facwf, & ! Fractional coverage with weak cosz dependency (frac) fice, & ! Ice fraction over open water (frac) tisfc ! Sea ice surface skin temperature (K) - real(kind_phys), dimension(nCol,nsfcpert), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & sfc_wts ! Weights for stochastic surface physics perturbation () - real(kind_phys), dimension(nCol,nLev),intent(in) :: & + real(kind_phys), dimension(:, :),intent(in) :: & p_lay, & ! Layer pressure tv_lay, & ! Layer virtual-temperature relhum ! Layer relative-humidity - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:, :),intent(in) :: & p_lev ! Pressure @ layer interfaces (Pa) type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! RRTMGP DDT: spectral information for SW calculation @@ -80,14 +80,14 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, nsfcpert, lsswr, do_sfcperts, s ! Outputs integer, intent(out) :: & nday ! Number of daylit points - integer, dimension(ncol), intent(out) :: & + integer, dimension(:), intent(out) :: & idxday ! Indices for daylit points - real(kind_phys), dimension(ncol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & alb1d, & ! Surface albedo pertubation coszen, & ! Cosine of SZA coszdg, & ! Cosine of SZA, daytime sfc_alb_dif ! Mean surface diffused (nIR+uvvis) sw albedo - real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(out) :: & + real(kind_phys), dimension(:, :), intent(out) :: & sfc_alb_nir_dir, & ! Surface albedo (direct) sfc_alb_nir_dif, & ! Surface albedo (diffuse) sfc_alb_uvvis_dir, & ! Surface albedo (direct) diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 index ac9fb7446..0be3be711 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 +++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 @@ -59,10 +59,10 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss con_ttp, & ! Triple point temperature of water (K) con_rd, & ! Ideal gas constant for dry air (J/kg/K) con_pi ! Pi - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lsmask, & ! Land/Sea mask lat ! Latitude - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) t_lay, & ! Temperature at model-layers (K) @@ -73,15 +73,15 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss effrin_cldsnow, & ! Effective radius for snow cloud-particles (microns) shoc_sgs_cldfrac, & ! Subgrid-scale cloud fraction from the SHOC scheme cncvw ! Convective cloud water mixing ratio (kg/kg) - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:, :, :),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! Outputs - real(kind_phys), dimension(nCol),intent(out) :: & + real(kind_phys), dimension(:),intent(out) :: & de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev),intent(out) :: & + real(kind_phys), dimension(:, :),intent(out) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index 9b4533cf9..ce3060ccf 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -50,7 +50,7 @@ subroutine GFS_stochastics_run (im, km, kdt, do_sppt, use_zmtnblck, do_shum, logical, intent(in) :: use_zmtnblck logical, intent(in) :: do_shum logical, intent(in) :: do_skeb - real(kind_phys), dimension(1:im), intent(in) :: zmtnblck + real(kind_phys), dimension(:), intent(in) :: zmtnblck ! sppt_wts only allocated if do_sppt == .true. real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts ! skebu_wts, skebv_wts only allocated if do_skeb == .true. @@ -59,28 +59,28 @@ subroutine GFS_stochastics_run (im, km, kdt, do_sppt, use_zmtnblck, do_shum, ! shum_wts only allocated if do_shum == .true. real(kind_phys), dimension(:,:), intent(in) :: shum_wts ! inverse/flipped weights are always allocated - real(kind_phys), dimension(1:im,1:km), intent(inout) :: sppt_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebu_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebv_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: shum_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(in) :: diss_est - real(kind_phys), dimension(1:im,1:km), intent(in) :: ugrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: vgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: tgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: qgrs - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gu0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gv0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gt0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gq0 + real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebu_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebv_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: shum_wts_inv + real(kind_phys), dimension(:,:), intent(in) :: diss_est + real(kind_phys), dimension(:,:), intent(in) :: ugrs + real(kind_phys), dimension(:,:), intent(in) :: vgrs + real(kind_phys), dimension(:,:), intent(in) :: tgrs + real(kind_phys), dimension(:,:), intent(in) :: qgrs + real(kind_phys), dimension(:,:), intent(inout) :: gu0 + real(kind_phys), dimension(:,:), intent(inout) :: gv0 + real(kind_phys), dimension(:,:), intent(inout) :: gt0 + real(kind_phys), dimension(:,:), intent(inout) :: gq0 ! dtdtr only allocated if do_sppt == .true. real(kind_phys), dimension(:,:), intent(in) :: dtdtr - real(kind_phys), dimension(1:im), intent(in) :: rain - real(kind_phys), dimension(1:im), intent(in) :: rainc - real(kind_phys), dimension(1:im), intent(inout) :: tprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcp - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcpb - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcpb + real(kind_phys), dimension(:), intent(in) :: rain + real(kind_phys), dimension(:), intent(in) :: rainc + real(kind_phys), dimension(:), intent(inout) :: tprcp + real(kind_phys), dimension(:), intent(inout) :: totprcp + real(kind_phys), dimension(:), intent(inout) :: cnvprcp + real(kind_phys), dimension(:), intent(inout) :: totprcpb + real(kind_phys), dimension(:), intent(inout) :: cnvprcpb logical, intent(in) :: cplflx ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(inout) :: rain_cpl @@ -88,9 +88,9 @@ subroutine GFS_stochastics_run (im, km, kdt, do_sppt, use_zmtnblck, do_shum, ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(in) :: drain_cpl real(kind_phys), dimension(:), intent(in) :: dsnow_cpl - real(kind_phys), dimension(1:km), intent(in) :: si - real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca - real(kind_phys), dimension(1:im), intent(in) :: ca1 + real(kind_phys), dimension(:), intent(in) :: si + real(kind_phys), dimension(:), intent(inout) :: vfact_ca + real(kind_phys), dimension(:), intent(in) :: ca1 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index 263e316a5..4214dbf18 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -94,12 +94,12 @@ subroutine GFS_suite_interstitial_1_run (im, levs, ntrac, dtf, dtp, slmsk, area, ! interface variables integer, intent(in) :: im, levs, ntrac real(kind=kind_phys), intent(in) :: dtf, dtp, dxmin, dxinv - real(kind=kind_phys), intent(in), dimension(im) :: slmsk, area, pgr + real(kind=kind_phys), intent(in), dimension(:) :: slmsk, area, pgr - integer, intent(out), dimension(im) :: islmsk - real(kind=kind_phys), intent(out), dimension(im) :: work1, work2, psurf - real(kind=kind_phys), intent(out), dimension(im,levs) :: dudt, dvdt, dtdt, dtdtc - real(kind=kind_phys), intent(out), dimension(im,levs,ntrac) :: dqdt + integer, intent(out), dimension(:) :: islmsk + real(kind=kind_phys), intent(out), dimension(:) :: work1, work2, psurf + real(kind=kind_phys), intent(out), dimension(:,:) :: dudt, dvdt, dtdt, dtdtc + real(kind=kind_phys), intent(out), dimension(:,:,:) :: dqdt real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -173,34 +173,34 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid real(kind=kind_phys), intent(in ) :: dtf, cp, hvap - logical, intent(in ), dimension(im) :: flag_cice - real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm - real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 - real(kind=kind_phys), intent(in ), dimension(im) :: cice - real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk - real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi - real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd - integer, intent(inout), dimension(im) :: kinver - real(kind=kind_phys), intent(inout), dimension(im) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r - real(kind=kind_phys), intent(in ), dimension(im) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat - real(kind=kind_phys), intent( out), dimension(im) :: adjsfculw + logical, intent(in ), dimension(:) :: flag_cice + real(kind=kind_phys), intent(in ), dimension(:) :: ctei_rm + real(kind=kind_phys), intent(in ), dimension(:) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 + real(kind=kind_phys), intent(in ), dimension(:) :: cice + real(kind=kind_phys), intent(in ), dimension(:, :) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(:, :) :: prsi + real(kind=kind_phys), intent(in ), dimension(:, :, :) :: lwhd + integer, intent(inout), dimension(:) :: kinver + real(kind=kind_phys), intent(inout), dimension(:) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r + real(kind=kind_phys), intent(in ), dimension(:) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat + real(kind=kind_phys), intent( out), dimension(:) :: adjsfculw ! RRTMGP logical, intent(in ) :: & use_GP_jacobian ! Use RRTMGP LW Jacobian of upwelling to adjust the surface flux? - real(kind=kind_phys), intent(in ), dimension(im) :: & + real(kind=kind_phys), intent(in ), dimension(:) :: & skt ! Skin temperature - real(kind=kind_phys), intent(inout), dimension(im) :: & + real(kind=kind_phys), intent(inout), dimension(:) :: & sktp1r ! Skin temperature at previous timestep - real(kind=kind_phys), intent(in ), dimension(im,levs+1), optional :: & + real(kind=kind_phys), intent(in ), dimension(:,:), optional :: & fluxlwUP, & ! Upwelling LW flux (W/m2) fluxlwUP_jac ! Jacobian of upwelling LW flux (W/m2/K) ! These arrays are only allocated if ldiag3d is .true. real(kind=kind_phys), intent(inout), dimension(:,:) :: dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp - logical, intent(in ), dimension(im) :: dry, icy, wet - real(kind=kind_phys), intent(in ), dimension(im) :: frland + logical, intent(in ), dimension(:) :: dry, icy, wet + real(kind=kind_phys), intent(in ), dimension(:) :: frland real(kind=kind_phys), intent(in ) :: huge character(len=*), intent(out) :: errmsg @@ -402,10 +402,10 @@ subroutine GFS_suite_stateout_reset_run (im, levs, ntrac, & integer, intent(in) :: im integer, intent(in) :: levs integer, intent(in) :: ntrac - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 + real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs + real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 + real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -451,12 +451,12 @@ subroutine GFS_suite_stateout_update_run (im, levs, ntrac, dtp, & integer, intent(in) :: ntrac real(kind=kind_phys), intent(in) :: dtp - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(in) :: dudt, dvdt, dtdt - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: dqdt - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 + real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs + real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt + real(kind=kind_phys), dimension(:,:,:), intent(in) :: dqdt + real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 + real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -509,22 +509,22 @@ subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & integer, intent(in) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, & ntsw, ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6,imp_physics_fer_hires, me - integer, dimension(im), intent(in) :: islmsk, kpbl, kinver + integer, dimension(:), intent(in) :: islmsk, kpbl, kinver logical, intent(in) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras real(kind=kind_phys), intent(in) :: rhcbot, rhcmax, rhcpbl, rhctop - real(kind=kind_phys), dimension(im), intent(in) :: work1, work2 - real(kind=kind_phys), dimension(im, levs), intent(in) :: prsl, prslk - real(kind=kind_phys), dimension(im, levs+1), intent(in) :: prsi - real(kind=kind_phys), dimension(im), intent(in) :: xlon, xlat - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 - - real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc + real(kind=kind_phys), dimension(:), intent(in) :: work1, work2 + real(kind=kind_phys), dimension(:, :), intent(in) :: prsl, prslk + real(kind=kind_phys), dimension(:, :), intent(in) :: prsi + real(kind=kind_phys), dimension(:), intent(in) :: xlon, xlat + real(kind=kind_phys), dimension(:, :), intent(in) :: gt0 + real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 + + real(kind=kind_phys), dimension(:, :), intent(inout) :: rhc, save_qc ! save_qi is not allocated for Zhao-Carr MP real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp ! ONLY ALLOCATE FOR THOMPSON! TODO - real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw + real(kind=kind_phys), dimension(:, :, :), intent(inout) :: clw character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -679,16 +679,16 @@ subroutine GFS_suite_interstitial_4_run (im, levs, ltaerosol, cplchm, tracers_to logical, intent(in) :: ltaerosol, cplchm real(kind=kind_phys), intent(in) :: con_pi, dtf - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_qc + real(kind=kind_phys), dimension(:, :), intent(in) :: save_qc ! save_qi is not allocated for Zhao-Carr MP real(kind=kind_phys), dimension(:, :), intent(in) :: save_qi - real(kind=kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 - real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw - real(kind=kind_phys), dimension(im,levs), intent(in) :: prsl + real(kind=kind_phys), dimension(:, :,:), intent(inout) :: gq0 + real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw + real(kind=kind_phys), dimension(:, :), intent(in) :: prsl real(kind=kind_phys), intent(in) :: con_rd real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp - real(kind=kind_phys), dimension(im,levs), intent(in) :: spechum + real(kind=kind_phys), dimension(:, :), intent(in) :: spechum ! dqdti may not be allocated real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti @@ -828,9 +828,9 @@ subroutine GFS_suite_interstitial_5_run (im, levs, ntrac, ntcw, ntiw, nn, gq0, c ! interface variables integer, intent(in) :: im, levs, ntrac, ntcw, ntiw, nn - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs, nn), intent(out) :: clw + real(kind=kind_phys), dimension(:, :, :), intent(out) :: clw character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index b3000b008..ff513a1b6 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -40,24 +40,24 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx ! Interface variables integer, intent(in ) :: im, lkm logical, intent(in ) :: frac_grid, cplflx, cplwav2atm - logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet + logical, dimension(:), intent(inout) :: flag_cice + logical, dimension(:), intent(inout) :: dry, icy, lake, ocean, wet real(kind=kind_phys), intent(in ) :: cimin - real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac - real(kind=kind_phys), dimension(im), intent(inout) :: cice - real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac + real(kind=kind_phys), dimension(:), intent(inout) :: cice + real(kind=kind_phys), dimension(:), intent( out) :: frland + real(kind=kind_phys), dimension(:), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf - real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & + real(kind=kind_phys), dimension(:), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(:), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice - real(kind=kind_phys), dimension(im), intent( out) :: tice + real(kind=kind_phys), dimension(:), intent( out) :: tice real(kind=kind_phys), intent(in ) :: tgice - integer, dimension(im), intent(inout) :: islmsk - real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad - real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice + integer, dimension(:), intent(inout) :: islmsk + real(kind=kind_phys), dimension(:), intent(in ) :: semis_rad + real(kind=kind_phys), dimension(:), intent(inout) :: semis_wat, semis_lnd, semis_ice real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice ! CCPP error handling @@ -252,11 +252,11 @@ subroutine GFS_surface_composites_inter_run (im, dry, icy, wet, semis_wat, semis ! Interface variables integer, intent(in ) :: im - logical, dimension(im), intent(in ) :: dry, icy, wet - real(kind=kind_phys), dimension(im), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & + logical, dimension(:), intent(in ) :: dry, icy, wet + real(kind=kind_phys), dimension(:), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & adjsfcdsw, adjsfcnsw - real(kind=kind_phys), dimension(im), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat - real(kind=kind_phys), dimension(im), intent(out) :: adjsfcusw + real(kind=kind_phys), dimension(:), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat + real(kind=kind_phys), dimension(:), intent(out) :: adjsfcusw ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -339,9 +339,9 @@ subroutine GFS_surface_composites_post_run ( integer, intent(in) :: im, kice, km logical, intent(in) :: cplflx, frac_grid, cplwav2atm - logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy - integer, dimension(im), intent(in) :: islmsk - real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & + logical, dimension(:), intent(in) :: flag_cice, dry, wet, icy + integer, dimension(:), intent(in) :: islmsk + real(kind=kind_phys), dimension(:), intent(in) :: landfrac, lakefrac, oceanfrac, & zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & @@ -349,15 +349,15 @@ subroutine GFS_surface_composites_post_run ( snowd_wat, snowd_lnd, snowd_ice,tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, tsfc_lnd, tsfc_ice - real(kind=kind_phys), dimension(im), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & + real(kind=kind_phys), dimension(:), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & fh2, tsurf, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc - real(kind=kind_phys), dimension(im), intent(in ) :: tice ! interstitial sea ice temperature - real(kind=kind_phys), dimension(im), intent(inout) :: hice, cice + real(kind=kind_phys), dimension(:), intent(in ) :: tice ! interstitial sea ice temperature + real(kind=kind_phys), dimension(:), intent(inout) :: hice, cice real(kind=kind_phys), intent(in ) :: min_seaice - real(kind=kind_phys), dimension(im, kice), intent(in ) :: tiice - real(kind=kind_phys), dimension(im, km), intent(inout) :: stc + real(kind=kind_phys), dimension(:, :), intent(in ) :: tiice + real(kind=kind_phys), dimension(:, :), intent(inout) :: stc character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index 337e4c58d..d65f4ad59 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -38,51 +38,51 @@ subroutine GFS_surface_generic_pre_run (im, levs, vfrac, islmsk, isot, ivegsrc, ! Interface variables integer, intent(in) :: im, levs, isot, ivegsrc - integer, dimension(im), intent(in) :: islmsk - integer, dimension(im), intent(inout) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: islmsk + integer, dimension(:), intent(inout) :: soiltyp, vegtype, slopetyp real(kind=kind_phys), intent(in) :: con_g - real(kind=kind_phys), dimension(im), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 + real(kind=kind_phys), dimension(:), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 - real(kind=kind_phys), dimension(im), intent(inout) :: tsfc - real(kind=kind_phys), dimension(im,levs), intent(in) :: phil + real(kind=kind_phys), dimension(:), intent(inout) :: tsfc + real(kind=kind_phys), dimension(:,:), intent(in) :: phil - real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl + real(kind=kind_phys), dimension(:), intent(inout) :: sigmaf, work3, tsurf, zlvl ! Stochastic physics / surface perturbations logical, intent(in) :: do_sppt, ca_global - real(kind=kind_phys), dimension(im,levs), intent(out) :: dtdtr - real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl - real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl - real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl + real(kind=kind_phys), dimension(:,:), intent(out) :: dtdtr + real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl + real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl logical, intent(in) :: do_sfcperts integer, intent(in) :: nsfcpert - real(kind=kind_phys), dimension(im,nsfcpert), intent(in) :: sfc_wts + real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts real(kind=kind_phys), dimension(:), intent(in) :: pertz0 real(kind=kind_phys), dimension(:), intent(in) :: pertzt real(kind=kind_phys), dimension(:), intent(in) :: pertshc real(kind=kind_phys), dimension(:), intent(in) :: pertlai real(kind=kind_phys), dimension(:), intent(in) :: pertvegf - real(kind=kind_phys), dimension(im), intent(out) :: z01d - real(kind=kind_phys), dimension(im), intent(out) :: zt1d - real(kind=kind_phys), dimension(im), intent(out) :: bexp1d - real(kind=kind_phys), dimension(im), intent(out) :: xlai1d - real(kind=kind_phys), dimension(im), intent(out) :: vegf1d + real(kind=kind_phys), dimension(:), intent(out) :: z01d + real(kind=kind_phys), dimension(:), intent(out) :: zt1d + real(kind=kind_phys), dimension(:), intent(out) :: bexp1d + real(kind=kind_phys), dimension(:), intent(out) :: xlai1d + real(kind=kind_phys), dimension(:), intent(out) :: vegf1d logical, intent(in) :: cplflx - real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl - logical, dimension(im), intent(inout) :: flag_cice - integer, dimension(im), intent(out) :: islmsk_cice - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl + logical, dimension(:), intent(inout) :: flag_cice + integer, dimension(:), intent(out) :: islmsk_cice + real(kind=kind_phys), dimension(:), intent(in) :: & tisfc, tsfco, fice, hice - real(kind=kind_phys), dimension(im), intent(out) :: wind - real(kind=kind_phys), dimension(im), intent(in ) :: u1, v1 + real(kind=kind_phys), dimension(:), intent(out) :: wind + real(kind=kind_phys), dimension(:), intent(in ) :: u1, v1 ! surface wind enhancement due to convection - real(kind=kind_phys), dimension(im), intent(inout ) :: cnvwind + real(kind=kind_phys), dimension(:), intent(inout ) :: cnvwind ! - real(kind=kind_phys), dimension(im), intent(out) :: smcwlt2, smcref2 + real(kind=kind_phys), dimension(:), intent(out) :: smcwlt2, smcref2 ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -227,29 +227,29 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplwav, lssav, icy, wet, dt integer, intent(in) :: im logical, intent(in) :: cplflx, cplwav, lssav - logical, dimension(im), intent(in) :: icy, wet + logical, dimension(:), intent(in) :: icy, wet real(kind=kind_phys), intent(in) :: dtf - real(kind=kind_phys), dimension(im), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & + real(kind=kind_phys), dimension(:), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & + real(kind=kind_phys), dimension(:), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & evcwa, transa, sbsnoa, snowca, snohfa, ep - real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff - real(kind=kind_phys), dimension(im), intent(in) :: drain, runof + real(kind=kind_phys), dimension(:), intent(inout) :: runoff, srunoff + real(kind=kind_phys), dimension(:), intent(in) :: drain, runof ! For canopy heat storage logical, intent(in) :: lheatstrg real(kind=kind_phys), intent(in) :: z0fac, e0fac - real(kind=kind_phys), dimension(im), intent(in) :: zorl - real(kind=kind_phys), dimension(im), intent(in) :: hflx, evap - real(kind=kind_phys), dimension(im), intent(out) :: hflxq, evapq - real(kind=kind_phys), dimension(im), intent(out) :: hffac, hefac + real(kind=kind_phys), dimension(:), intent(in) :: zorl + real(kind=kind_phys), dimension(:), intent(in) :: hflx, evap + real(kind=kind_phys), dimension(:), intent(out) :: hflxq, evapq + real(kind=kind_phys), dimension(:), intent(out) :: hffac, hefac ! CCPP error handling variables character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_surface_loop_control.F90 b/physics/GFS_surface_loop_control.F90 index c7f727d27..afa34130d 100644 --- a/physics/GFS_surface_loop_control.F90 +++ b/physics/GFS_surface_loop_control.F90 @@ -90,10 +90,10 @@ subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & ! Interface variables integer, intent(in) :: im integer, intent(in) :: iter - real(kind=kind_phys), dimension(im), intent(in) :: wind - logical, dimension(im), intent(inout) :: flag_guess - logical, dimension(im), intent(inout) :: flag_iter - logical, dimension(im), intent(in) :: dry, wet, icy + real(kind=kind_phys), dimension(:), intent(in) :: wind + logical, dimension(:), intent(inout) :: flag_guess + logical, dimension(:), intent(inout) :: flag_iter + logical, dimension(:), intent(in) :: dry, wet, icy integer, intent(in) :: nstf_name1 character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 index dc9332bb9..66c91738b 100644 --- a/physics/GFS_time_vary_pre.fv3.F90 +++ b/physics/GFS_time_vary_pre.fv3.F90 @@ -74,7 +74,7 @@ subroutine GFS_time_vary_pre_run (jdat, idat, dtp, lkm, lsm, lsm_noahmp, nsswr, implicit none integer, intent(in) :: idate(4) - integer, intent(in) :: jdat(1:8), idat(1:8) + integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lkm, lsm, lsm_noahmp, & nsswr, nslwr, me, & master, nscyc, nhfrad diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 index 2fa352710..842423d1e 100644 --- a/physics/GFS_time_vary_pre.scm.F90 +++ b/physics/GFS_time_vary_pre.scm.F90 @@ -74,7 +74,7 @@ subroutine GFS_time_vary_pre_run (jdat, idat, dtp, lsm, lsm_noahmp, nsswr, & implicit none integer, intent(in) :: idate(4) - integer, intent(in) :: jdat(1:8), idat(1:8) + integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lsm, lsm_noahmp, & nsswr, nslwr, me, & master, nscyc diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 index df0116cd0..018cf6ad9 100644 --- a/physics/cires_ugwp.F90 +++ b/physics/cires_ugwp.F90 @@ -54,7 +54,7 @@ subroutine cires_ugwp_init (me, master, nlunit, input_nml_file, logunit, & integer, intent (in) :: latr real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp - real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes + real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in real(kind=kind_phys), intent (in) :: con_p0 logical, intent (in) :: do_ugwp @@ -163,24 +163,24 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr ! interface variables integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr - integer, intent(in), dimension(im) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma + integer, intent(in), dimension(:) :: kpbl + real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma logical, intent(in) :: flag_for_gwd_generic_tend ! elvmax is intent(in) for CIRES UGWP, but intent(inout) for GFS GWDPS - real(kind=kind_phys), intent(inout), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs, ntrac):: qgrs - real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(4) + real(kind=kind_phys), intent(inout), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:, :) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:, :) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:, :) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:,:):: qgrs + real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(:) logical, intent(in) :: do_ugwp, do_tofd, ldiag_ugwp - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb - real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw - real(kind=kind_phys), intent(out), dimension(im, levs):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis - real(kind=kind_phys), intent(out), dimension(im, levs):: dudt_mtb, dudt_ogw, dudt_tms + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb + real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw + real(kind=kind_phys), intent(out), dimension(:, :):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis + real(kind=kind_phys), intent(out), dimension(:, :):: dudt_mtb, dudt_ogw, dudt_tms ! These arrays are only allocated if ldiag=.true. real(kind=kind_phys), intent(inout), dimension(:,:) :: ldu3dt_ogw, ldv3dt_ogw, ldt3dt_ogw @@ -190,11 +190,11 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr ! These arrays only allocated if ldiag_ugwp = .true. real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:, :):: dudt, dvdt, dtdt real(kind=kind_phys), intent(in) :: con_g, con_pi, con_cp, con_rd, con_rv, con_fvirt - real(kind=kind_phys), intent(in), dimension(im) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: rain integer, intent(in) :: ntke real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke diff --git a/physics/cnvc90.f b/physics/cnvc90.f index 9bef0ebf9..6a49158b4 100644 --- a/physics/cnvc90.f +++ b/physics/cnvc90.f @@ -30,16 +30,16 @@ SUBROUTINE cnvc90_run(CLSTP,IM,RN,KBOT,KTOP,KM,PRSI, & ! Interface variables real(kind=kind_phys), intent(in) :: clstp integer, intent(in) :: im, km - real(kind=kind_phys), intent(in) :: RN(IM) - integer, intent(in) :: KBOT(IM) - integer, intent(in) :: KTOP(IM) - real(kind=kind_phys), intent(in) :: prsi(IM,km+1) - real(kind=kind_phys), intent(inout) :: ACV(IM) - real(kind=kind_phys), intent(inout) :: ACVB(IM) - real(kind=kind_phys), intent(inout) :: ACVT(IM) - real(kind=kind_phys), intent(inout) :: CV(IM) - real(kind=kind_phys), intent(inout) :: CVB(IM) - real(kind=kind_phys), intent(inout) :: CVT(IM) + real(kind=kind_phys), intent(in) :: RN(:) + integer, intent(in) :: KBOT(:) + integer, intent(in) :: KTOP(:) + real(kind=kind_phys), intent(in) :: prsi(:,:) + real(kind=kind_phys), intent(inout) :: ACV(:) + real(kind=kind_phys), intent(inout) :: ACVB(:) + real(kind=kind_phys), intent(inout) :: ACVT(:) + real(kind=kind_phys), intent(inout) :: CV(:) + real(kind=kind_phys), intent(inout) :: CVB(:) + real(kind=kind_phys), intent(inout) :: CVT(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index 386349422..f1d138eb5 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -31,15 +31,15 @@ subroutine cs_conv_pre_run(im, levs, ntrac, ncld, q, clw1, clw2, & ! --- inputs integer, intent(in) :: im, levs, ntrac, ncld - real(r8), dimension(im,levs), intent(in) :: q - real(r8), dimension(im,levs), intent(in) :: clw1,clw2 - real(r8), dimension(im), intent(in) :: work1, work2 + real(r8), dimension(:, :), intent(in) :: q + real(r8), dimension(:, :), intent(in) :: clw1,clw2 + real(r8), dimension(:), intent(in) :: work1, work2 real(r8), intent(in) :: cs_parm1, cs_parm2 ! --- input/output - real(r8), dimension(ntrac-ncld+2), intent(out) :: fswtr, fscav - real(r8), dimension(im), intent(out) :: wcbmax - real(r8), dimension(im,levs), intent(out) :: save_q1,save_q2 + real(r8), dimension(:), intent(out) :: fswtr, fscav + real(r8), dimension(:), intent(out) :: wcbmax + real(r8), dimension(:, :), intent(out) :: save_q1,save_q2 ! save_q3 is not allocated for Zhao-Carr MP real(r8), dimension(:,:), intent(out) :: save_q3 @@ -101,10 +101,10 @@ subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg ! --- inputs integer, intent(in) :: im, kmax logical, intent(in) :: do_aw - real(r8), dimension(im,kmax), intent(in) :: sigmatot + real(r8), dimension(:, :), intent(in) :: sigmatot ! --- input/output - real(r8), dimension(im,kmax), intent(out) :: sigmafrac + real(r8), dimension(:, :), intent(out) :: sigmafrac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -309,23 +309,23 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & ! input arguments ! INTEGER, INTENT(IN) :: IJSDIM, KMAX, ntracp1, nn, NTR, mype, nctp, mp_phys, kdt, lat !! DD, for GFS, pass in - logical, intent(in) :: otspt(1:ntracp1,1:2)! otspt(:,1) - on/off switch for tracer transport by updraft and + logical, intent(in) :: otspt(:, :)! otspt(:,1) - on/off switch for tracer transport by updraft and ! downdraft. should not include subgrid PDF and turbulence ! otspt(:,2) - on/off switch for tracer transport by subsidence ! should include subgrid PDF and turbulence - real(r8), intent(inout) :: t(IJSDIM,KMAX) ! temperature at mid-layer (K) - real(r8), intent(inout) :: q(IJSDIM,KMAX) ! water vapor array including moisture (kg/kg) - real(r8), intent(inout) :: clw(IJSDIM,KMAX,nn) ! tracer array including cloud condensate (kg/kg) - real(r8), intent(in) :: pap(IJSDIM,KMAX) ! pressure at mid-layer (Pa) - real(r8), intent(in) :: paph(IJSDIM,KMAX+1) ! pressure at boundaries (Pa) - real(r8), intent(in) :: zm(IJSDIM,KMAX) ! geopotential at mid-layer (m) - real(r8), intent(in) :: zi(IJSDIM,KMAX+1) ! geopotential at boundaries (m) - real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) + real(r8), intent(inout) :: t(:, :) ! temperature at mid-layer (K) + real(r8), intent(inout) :: q(:, :) ! water vapor array including moisture (kg/kg) + real(r8), intent(inout) :: clw(:, :, :) ! tracer array including cloud condensate (kg/kg) + real(r8), intent(in) :: pap(:, :) ! pressure at mid-layer (Pa) + real(r8), intent(in) :: paph(:, :) ! pressure at boundaries (Pa) + real(r8), intent(in) :: zm(:, :) ! geopotential at mid-layer (m) + real(r8), intent(in) :: zi(:, :) ! geopotential at boundaries (m) + real(r8), intent(in) :: fscav(:), fswtr(:), wcbmaxm(:) real(r8), intent(in) :: precz0in, preczhin, clmdin ! added for cs_convr - real(r8), intent(inout) :: u(IJSDIM,KMAX) ! zonal wind at mid-layer (m/s) - real(r8), intent(inout) :: v(IJSDIM,KMAX) ! meridional wind at mid-layer (m/s) + real(r8), intent(inout) :: u(:, :) ! zonal wind at mid-layer (m/s) + real(r8), intent(inout) :: v(:, :) ! meridional wind at mid-layer (m/s) real(r8), intent(in) :: DELTA ! physics time step real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) @@ -333,12 +333,12 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & ! ! modified arguments ! - real(r8), intent(inout) :: CBMFX(IJSDIM,nctp) ! cloud base mass flux (kg/m2/s) + real(r8), intent(inout) :: CBMFX(:, :) ! cloud base mass flux (kg/m2/s) ! ! output arguments ! ! updraft, downdraft, and detrainment mass flux (kg/m2/s) - real(r8), intent(inout), dimension(IJSDIM,KMAX) :: ud_mf, dd_mf, dt_mf + real(r8), intent(inout), dimension(:, :) :: ud_mf, dd_mf, dt_mf real(r8), intent(out) :: rain1(IJSDIM) ! lwe thickness of deep convective precipitation amount (m) ! GJF* These variables are conditionally allocated depending on whether the @@ -348,14 +348,14 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & cnv_dqldt, clcn, cnv_fice, & cnv_ndrop, cnv_nice, cf_upi ! *GJF - integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise + integer, intent(inout) :: kcnv(:) ! zero if no deep convection and 1 otherwise character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !DDsigma - output added for AW sigma diagnostics ! interface sigma and vertical velocity by cloud type (1=sfc) ! real(r8), intent(out), dimension(IJSDIM,KMAX,nctp) :: sigmai, vverti - real(r8), intent(out), dimension(IJSDIM,KMAX) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) + real(r8), intent(out), dimension(:, :) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) ! sigma terms in eq 91 and 92 ! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm !DDsigma @@ -738,19 +738,19 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions logical, intent(in) :: otspt1(ntr), otspt2(ntr), lprnt ! ! [OUTPUT] - REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate + REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate REAL(r8), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q - REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u - REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v - REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux + REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u + REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v + REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux ! assuming there is no flux at the top of the atmospherea - Moorthi - REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux - REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux - REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux - REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux + REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux + REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux + REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux + REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux - REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) + REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) INTEGER , INTENT(OUT) :: KT (IJSDIM, NCTP ) ! cloud top ! ! [MODIFIED] @@ -774,14 +774,14 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions real(r8), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux ! ! [INPUT] - REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T + REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T REAL(r8), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag - REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u - REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v - REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T + REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u + REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v + REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T REAL(r8), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P REAL(r8), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) - REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude + REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude REAL(r8), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude REAL(r8), INTENT(IN) :: DELTA ! delta(t) (dynamics) REAL(r8), INTENT(IN) :: DELTI ! delta(t) (internal variable) diff --git a/physics/cs_conv_aw_adj.F90 b/physics/cs_conv_aw_adj.F90 index 756161d8c..74cac9184 100644 --- a/physics/cs_conv_aw_adj.F90 +++ b/physics/cs_conv_aw_adj.F90 @@ -40,15 +40,15 @@ subroutine cs_conv_aw_adj_run(im, levs, do_cscnv, do_aw, do_shoc, & logical, intent(in) :: do_cscnv, do_aw, do_shoc integer, intent(in) :: ntrac, ncld, ntcw, ntclamt, nncl real(kind_phys), intent(in) :: con_g - real(kind_phys), dimension(im,levs), intent(inout) :: sigmafrac - real(kind_phys), dimension(im,levs), intent(inout) :: gt0 - real(kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 - real(kind_phys), dimension(im,levs), intent(in) :: save_t - real(kind_phys), dimension(im,levs,ntrac), intent(in) :: save_q - real(kind_phys), dimension(im,levs+1), intent(in) :: prsi - real(kind_phys), dimension(im,levs), intent(inout) :: cldfrac - real(kind_phys), dimension(im,levs), intent(inout) :: subcldfrac - real(kind_phys), dimension(im), intent(inout) :: prcp + real(kind_phys), dimension(:,:), intent(inout) :: sigmafrac + real(kind_phys), dimension(:,:), intent(inout) :: gt0 + real(kind_phys), dimension(:,:,:), intent(inout) :: gq0 + real(kind_phys), dimension(:,:), intent(in) :: save_t + real(kind_phys), dimension(:,:,:), intent(in) :: save_q + real(kind_phys), dimension(:,:), intent(in) :: prsi + real(kind_phys), dimension(:,:), intent(inout) :: cldfrac + real(kind_phys), dimension(:,:), intent(inout) :: subcldfrac + real(kind_phys), dimension(:), intent(inout) :: prcp integer, intent(in ) :: imp_physics, imp_physics_mg character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 5c43709d1..4b9e423a6 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -101,42 +101,42 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & logical, intent(in ) :: flag_for_scnv_generic_tend,flag_for_dcnv_generic_tend logical, intent(in ) :: ldiag3d,qdiag3d - real(kind=kind_phys), dimension( im , km ), intent(in ) :: forcet,forceqv_spechum,w,phil - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: t,us,vs - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: qci_conv + real(kind=kind_phys), dimension( :, :), intent(in ) :: forcet,forceqv_spechum,w,phil + real(kind=kind_phys), dimension( :, : ), intent(inout ) :: t,us,vs + real(kind=kind_phys), dimension( :, : ), intent(inout ) :: qci_conv real(kind=kind_phys), dimension( im ) :: rand_mom,rand_vmas - real(kind=kind_phys), dimension( im,4 ) :: rand_clos + real(kind=kind_phys), dimension( im,4 ) :: rand_clos real(kind=kind_phys), dimension( im , km, 11 ) :: gdc,gdc2 - real(kind=kind_phys), dimension( im , km ), intent(out ) :: cnvw_moist,cnvc - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: cliw, clcw + real(kind=kind_phys), dimension( :, :), intent(out ) :: cnvw_moist,cnvc + real(kind=kind_phys), dimension( :, : ), intent(inout ) :: cliw, clcw real(kind=kind_phys), dimension( : , : ), intent(inout ) :: & du3dt_SCNV,dv3dt_SCNV,dt3dt_SCNV,dq3dt_SCNV, & du3dt_DCNV,dv3dt_DCNV,dt3dt_DCNV,dq3dt_DCNV - integer, dimension (im), intent(inout) :: hbot,htop,kcnv - integer, dimension (im), intent(in) :: xland - real(kind=kind_phys), dimension (im), intent(in) :: pbl + integer, dimension (:), intent(inout) :: hbot,htop,kcnv + integer, dimension (:), intent(in) :: xland + real(kind=kind_phys), dimension (:), intent(in) :: pbl integer, dimension (im) :: tropics ! ruc variable - real(kind=kind_phys), dimension (im) :: hfx2,qfx2,psuri - real(kind=kind_phys), dimension (im,km) :: ud_mf,dd_mf,dt_mf - real(kind=kind_phys), dimension (im), intent(inout) :: raincv,cld1d - real(kind=kind_phys), dimension (im,km) :: t2di,p2di + real(kind=kind_phys), dimension (:) :: hfx2,qfx2,psuri + real(kind=kind_phys), dimension (:,:) :: ud_mf,dd_mf,dt_mf + real(kind=kind_phys), dimension (:), intent(inout) :: raincv,cld1d + real(kind=kind_phys), dimension (:,:) :: t2di,p2di ! Specific humidity from FV3 - real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum - real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum + real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum + real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum ! Local water vapor mixing ratios and cloud water mixing ratios real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw ! - real(kind=kind_phys), dimension( im ),intent(in) :: garea + real(kind=kind_phys), dimension( : ),intent(in) :: garea real(kind=kind_phys), intent(in ) :: dt integer, intent(in ) :: imfshalcnv character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! define locally for now. - integer, dimension(im),intent(inout) :: cactiv + integer, dimension(:),intent(inout) :: cactiv integer, dimension(im) :: k22_shallow,kbcon_shallow,ktop_shallow real(kind=kind_phys), dimension(im) :: ht real(kind=kind_phys), dimension(im) :: dx diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 index a824c6af4..66ae9d056 100644 --- a/physics/cu_ntiedtke.F90 +++ b/physics/cu_ntiedtke.F90 @@ -159,16 +159,16 @@ subroutine cu_ntiedtke_run(pu,pv,pt,pqv,tdi,qvdi,pqvf,ptf,clw,poz,pzz,prsl,prsi, ! in&out variables integer, intent(in) :: lq, km, ktrac real(kind=kind_phys), intent(in ) :: dt - integer, dimension( lq ), intent(in) :: lmask - real(kind=kind_phys), dimension( lq ), intent(in ) :: evap, hfx, dx - real(kind=kind_phys), dimension( lq , km ), intent(inout) :: pu, pv, pt, pqv - real(kind=kind_phys), dimension( lq , km ), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf - real(kind=kind_phys), dimension( lq , km+1 ), intent(in ) :: pzz, prsi - real(kind=kind_phys), dimension( lq , km, ktrac ), intent(inout ) :: clw - - integer, dimension( lq ), intent(out) :: kbot, ktop, kcnv - real(kind=kind_phys), dimension( lq ), intent(out) :: zprecc - real(kind=kind_phys), dimension (lq,km), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc + integer, dimension( : ), intent(in) :: lmask + real(kind=kind_phys), dimension( : ), intent(in ) :: evap, hfx, dx + real(kind=kind_phys), dimension( :, : ), intent(inout) :: pu, pv, pt, pqv + real(kind=kind_phys), dimension( :, :), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf + real(kind=kind_phys), dimension( :, : ), intent(in ) :: pzz, prsi + real(kind=kind_phys), dimension( :, :, : ), intent(inout ) :: clw + + integer, dimension( : ), intent(out) :: kbot, ktop, kcnv + real(kind=kind_phys), dimension( : ), intent(out) :: zprecc + real(kind=kind_phys), dimension (:, :), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc ! error messages character(len=*), intent(out) :: errmsg diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 6dca65cf5..347639d96 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -216,36 +216,36 @@ subroutine dcyc2t3_run & ! integer, intent(in) :: ipr ! logical lprnt - logical, dimension(im), intent(in) :: dry, icy, wet + logical, dimension(:), intent(in) :: dry, icy, wet real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & & deltim, fhswr - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & & sfcdsw, sfcnsw - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tsfc_lnd, tsfc_ice, tsfc_wat, & & sfcemis_lnd, sfcemis_ice, sfcemis_wat - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sfcnirbmu, sfcnirdfu, sfcvisbmu, sfcvisdfu, & & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd - real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & + real(kind=kind_phys), dimension(:,:), intent(in) :: swh, hlw & &, swhc, hlwc ! --- input/output: - real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdt & &, dtdtc ! --- outputs: - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfcdsw, adjsfcnsw, adjsfcdlw, xmu, xcosz, & & adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat character(len=*), intent(out) :: errmsg diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 index 55ef9c268..050d63596 100644 --- a/physics/drag_suite.F90 +++ b/physics/drag_suite.F90 @@ -298,8 +298,8 @@ subroutine drag_suite_run( & integer, intent(in) :: im, km, imx, kdt, ipr, me, master integer, intent(in) :: gwd_opt logical, intent(in) :: lprnt - integer, intent(in) :: KPBL(im) - real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(2) + integer, intent(in) :: KPBL(:) + real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(:) integer :: kpblmax integer, parameter :: ims=1, kms=1, its=1, kts=1 @@ -308,29 +308,29 @@ subroutine drag_suite_run( & real(kind=kind_phys) :: g_inv real(kind=kind_phys), intent(inout) :: & - & dudt(im,km),dvdt(im,km), & - & dtdt(im,km) - real(kind=kind_phys), intent(out) :: rdxzb(im) + & dudt(:,:),dvdt(:,:), & + & dtdt(:,:) + real(kind=kind_phys), intent(out) :: rdxzb(:) real(kind=kind_phys), intent(in) :: & - & u1(im,km),v1(im,km), & - & t1(im,km),q1(im,km), & - & PHII(im,km+1),prsl(im,km), & - & prslk(im,km),PHIL(im,km) - real(kind=kind_phys), intent(in) :: prsi(im,km+1), & - & del(im,km) - real(kind=kind_phys), intent(in) :: var(im),oc1(im), & - & oa4(im,4),ol4(im,4), & - & dx(im) - real(kind=kind_phys), intent(in) :: varss(im),oc1ss(im), & - & oa4ss(im,4),ol4ss(im,4) - real(kind=kind_phys), intent(in) :: THETA(im),SIGMA(im), & - & GAMMA(im),ELVMAX(im) + & u1(:,:),v1(:,:), & + & t1(:,:),q1(:,:), & + & PHII(:,:),prsl(:,:), & + & prslk(:,:),PHIL(:,:) + real(kind=kind_phys), intent(in) :: prsi(:,:), & + & del(:,:) + real(kind=kind_phys), intent(in) :: var(:),oc1(:), & + & oa4(:,:),ol4(:,:), & + & dx(:) + real(kind=kind_phys), intent(in) :: varss(:),oc1ss(:), & + & oa4ss(:,:),ol4ss(:,:) + real(kind=kind_phys), intent(in) :: THETA(:),SIGMA(:), & + & GAMMA(:),ELVMAX(:) ! added for small-scale orographic wave drag real(kind=kind_phys), dimension(im,km) :: utendwave,vtendwave,thx,thvx - real(kind=kind_phys), intent(in) :: br1(im), & - & hpbl(im), & - & slmsk(im) + real(kind=kind_phys), intent(in) :: br1(:), & + & hpbl(:), & + & slmsk(:) real(kind=kind_phys), dimension(im) :: govrth,xland !real(kind=kind_phys), dimension(im,km) :: dz2 real(kind=kind_phys) :: tauwavex0,tauwavey0, & @@ -344,7 +344,7 @@ subroutine drag_suite_run( & !Output: real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im) + & dusfc(:), dvsfc(:) !Output (optional): real(kind=kind_phys), intent(out) :: & & dusfc_ls(:),dvsfc_ls(:), & diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index b882c7404..a1edf69b1 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -81,21 +81,21 @@ SUBROUTINE flake_driver_run ( & integer, intent(in) :: im, imon,yearlen ! integer, dimension(im), intent(in) :: islmsk - real (kind=kind_phys), dimension(im), intent(in) :: ps, wind, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, wind, & & t1, q1, dlwflx, dswsfc, zlvl, elev real (kind=kind_phys), intent(in) :: delt - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & xlat, weasd, lakedepth - real (kind=kind_phys),dimension(im),intent(inout) :: & + real (kind=kind_phys),dimension(:),intent(inout) :: & & snwdph, hice, tsurf, t_sfc, hflx, evap, fice, ustar, qsfc, & & ch, cm, chh, cmm real (kind=kind_phys), intent(in) :: julian - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(:), intent(in) :: flag_iter, wet, lake character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gcm_shoc.F90 b/physics/gcm_shoc.F90 index dd7791e18..3d98a5dfb 100644 --- a/physics/gcm_shoc.F90 +++ b/physics/gcm_shoc.F90 @@ -35,12 +35,12 @@ subroutine shoc_run (nx, nzm, tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_ real(kind=kind_phys), intent(in) :: tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_rv, con_rd, con_pi, con_fvirt, & dtp, supice, pcrit, cefac, cesfac, tkef1, dis_opt ! - real(kind=kind_phys), intent(in), dimension(nx) :: hflx, evap - real(kind=kind_phys), intent(in), dimension(nx,nzm) :: prsl, delp, phil, u, v, omega, rhc, prnum - real(kind=kind_phys), intent(in), dimension(nx,nzm+1) :: phii + real(kind=kind_phys), intent(in), dimension(:) :: hflx, evap + real(kind=kind_phys), intent(in), dimension(:,:) :: prsl, delp, phil, u, v, omega, rhc, prnum + real(kind=kind_phys), intent(in), dimension(:,:) :: phii ! - real(kind=kind_phys), intent(inout), dimension(nx,nzm) :: gt0, cld_sgs, tke, tkh, wthv_sec - real(kind=kind_phys), intent(inout), dimension(nx,nzm,ntrac) :: gq0 + real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, cld_sgs, tke, tkh, wthv_sec + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: gq0 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -1724,7 +1724,7 @@ end subroutine assumed_pdf real function esatw(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 6.11239921, 0.443987641, 0.142986287e-1, & @@ -1737,8 +1737,8 @@ end function esatw real function qsatw(t,p) ! implicit none - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) real esat ! esat = fpvs(t) esat = fpvsl(t) @@ -1749,7 +1749,7 @@ end function qsatw real function esati(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 6.11147274, 0.503160820, 0.188439774e-1, & @@ -1769,8 +1769,8 @@ real function esati(t) end function esati real function qsati(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) real esat !,esati ! esat = fpvs(t) esat = fpvsi(t) @@ -1780,7 +1780,7 @@ real function qsati(t,p) end function qsati real function dtesatw(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 0.443956472, 0.285976452e-1, 0.794747212e-3, & @@ -1792,14 +1792,14 @@ real function dtesatw(t) end function dtesatw real function dtqsatw(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) ! real dtesatw dtqsatw = 100.0*0.622*dtesatw(t)/p end function dtqsatw real function dtesati(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 0.503223089, 0.377174432e-1, 0.126710138e-2, & @@ -1820,8 +1820,8 @@ end function dtesati real function dtqsati(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) ! real dtesati dtqsati = 100.0*0.622*dtesati(t)/p end function dtqsati diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 index 352a61895..e520c3e0d 100644 --- a/physics/get_prs_fv3.F90 +++ b/physics/get_prs_fv3.F90 @@ -28,12 +28,12 @@ subroutine get_prs_fv3_run(ix, levs, phii, prsi, tgrs, qgrs1, del, del_gz, errms ! Interface variables integer, intent(in) :: ix, levs - real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: phii - real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: prsi - real(kind=kind_phys), dimension(ix,levs), intent(in) :: tgrs - real(kind=kind_phys), dimension(ix,levs), intent(in) :: qgrs1 - real(kind=kind_phys), dimension(ix,levs), intent(out) :: del - real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: del_gz + real(kind=kind_phys), dimension(:,:), intent(in) :: phii + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi + real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: qgrs1 + real(kind=kind_phys), dimension(:,:), intent(out) :: del + real(kind=kind_phys), dimension(:,:), intent(out) :: del_gz character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -97,11 +97,11 @@ subroutine get_phi_fv3_run(ix, levs, gt0, gq01, del_gz, phii, phil, errmsg, errf ! Interface variables integer, intent(in) :: ix, levs - real(kind=kind_phys), dimension(ix,levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(ix,levs), intent(in) :: gq01 - real(kind=kind_phys), dimension(ix,levs+1), intent(inout) :: del_gz - real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: phii - real(kind=kind_phys), dimension(ix,levs), intent(out) :: phil + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gq01 + real(kind=kind_phys), dimension(:,:), intent(inout) :: del_gz + real(kind=kind_phys), dimension(:,:), intent(out) :: phii + real(kind=kind_phys), dimension(:,:), intent(out) :: phil character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_cloud_microphys.F90 b/physics/gfdl_cloud_microphys.F90 index 1ccedb956..de1e0ef6f 100644 --- a/physics/gfdl_cloud_microphys.F90 +++ b/physics/gfdl_cloud_microphys.F90 @@ -135,29 +135,29 @@ subroutine gfdl_cloud_microphys_run( & ! interface variables integer, intent(in ) :: levs, im real(kind=kind_phys), intent(in ) :: con_g, con_fvirt, con_rd - real(kind=kind_phys), intent(in ), dimension(1:im) :: frland, garea - integer, intent(in ), dimension(1:im) :: islmsk - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & + real(kind=kind_phys), intent(in ), dimension(:) :: frland, garea + integer, intent(in ), dimension(:) :: islmsk + real(kind=kind_phys), intent(inout), dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & gq0_ntsw, gq0_ntgl, gq0_ntclamt - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gt0, gu0, gv0 - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs) :: vvl, prsl, del - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs+1) :: phii + real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(in ), dimension(:,:) :: vvl, prsl, del + real(kind=kind_phys), intent(in ), dimension(:,:) :: phii ! rain/snow/ice/graupel/precip amounts, fraction of frozen precip - real(kind_phys), intent(out ), dimension(1:im) :: rain0 - real(kind_phys), intent(out ), dimension(1:im) :: snow0 - real(kind_phys), intent(out ), dimension(1:im) :: ice0 - real(kind_phys), intent(out ), dimension(1:im) :: graupel0 - real(kind_phys), intent(out ), dimension(1:im) :: prcp0 - real(kind_phys), intent(out ), dimension(1:im) :: sr + real(kind_phys), intent(out ), dimension(:) :: rain0 + real(kind_phys), intent(out ), dimension(:) :: snow0 + real(kind_phys), intent(out ), dimension(:) :: ice0 + real(kind_phys), intent(out ), dimension(:) :: graupel0 + real(kind_phys), intent(out ), dimension(:) :: prcp0 + real(kind_phys), intent(out ), dimension(:) :: sr real(kind_phys), intent(in) :: dtp ! physics time step logical, intent (in) :: hydrostatic, phys_hydrostatic logical, intent (in) :: lradar - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: refl_10cm + real(kind=kind_phys), intent(inout), dimension(:,:) :: refl_10cm logical, intent (in) :: reset, effr_in - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: rew, rei, rer, res, reg + real(kind=kind_phys), intent(inout), dimension(:,:) :: rew, rei, rer, res, reg character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 index 816488f7a..5cc3c9136 100644 --- a/physics/gfdl_fv_sat_adj.F90 +++ b/physics/gfdl_fv_sat_adj.F90 @@ -128,8 +128,8 @@ subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & integer, intent(in ) :: kmp integer, intent(in ) :: nwat integer, intent(in ) :: ngas - real(kind_dyn), intent(in ) :: rilist(0:ngas) - real(kind_dyn), intent(in ) :: cpilist(0:ngas) + real(kind_dyn), intent(in ) :: rilist(:) + real(kind_dyn), intent(in ) :: cpilist(:) integer, intent(in ) :: mpirank integer, intent(in ) :: mpiroot character(len=*), intent( out) :: errmsg diff --git a/physics/gfdl_fv_sat_adj.F90_assumedsizes b/physics/gfdl_fv_sat_adj.F90_assumedsizes new file mode 100644 index 000000000..c48a5d2e8 --- /dev/null +++ b/physics/gfdl_fv_sat_adj.F90_assumedsizes @@ -0,0 +1,1431 @@ +!>\file gfdl_fv_sat_adj.F90 +!! This file contains the GFDL in-core fast saturation adjustment. +!! and it is an "intermediate physics" implemented in the remapping Lagrangian to +!! Eulerian loop of FV3 solver. +!*********************************************************************** +!* GNU Lesser General Public License +!* +!* This file is part of the GFDL Cloud Microphysics. +!* +!* The GFDL Cloud Microphysics is free software: you can +!8 redistribute it and/or modify it under the terms of the +!* GNU Lesser General Public License as published by the +!* Free Software Foundation, either version 3 of the License, or +!* (at your option) any later version. +!* +!* The GFDL Cloud Microphysics is distributed in the hope it will be +!* useful, but WITHOUT ANYWARRANTY; without even the implied warranty +!* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +!* See the GNU General Public License for more details. +!* +!* You should have received a copy of the GNU Lesser General Public +!* License along with the GFDL Cloud Microphysics. +!* If not, see . +!*********************************************************************** + +!> This module contains the GFDL in-core fast saturation adjustment +!! called in FV3 dynamics solver. +module fv_sat_adj +! Modules Included: +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +!
Module NameFunctions Included
constants_modrvgas, rdgas, grav, hlv, hlf, cp_air
fv_arrays_mod r_grid
fv_mp_modis_master
gfdl_cloud_microphys_modql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt, +! tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r, +! rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs
+ ! DH* TODO - MAKE THIS INPUT ARGUMENTS *DH + use physcons, only : rdgas => con_rd_dyn, & + rvgas => con_rv_dyn, & + grav => con_g_dyn, & + hlv => con_hvap_dyn, & + hlf => con_hfus_dyn, & + cp_air => con_cp_dyn + ! *DH + use machine, only: kind_grid, kind_dyn + use gfdl_cloud_microphys_mod, only: ql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt + use gfdl_cloud_microphys_mod, only: icloud_f, sat_adj0, t_sub, cld_min + use gfdl_cloud_microphys_mod, only: tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r + use gfdl_cloud_microphys_mod, only: rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs +#ifdef MULTI_GASES + use ccpp_multi_gases_mod, only: multi_gases_init, & + multi_gases_finalize, & + virq_qpz, vicpqd_qpz, & + vicvqd_qpz, num_gas +#endif + + implicit none + + private + + public fv_sat_adj_init, fv_sat_adj_run, fv_sat_adj_finalize + + logical :: is_initialized = .false. + + real(kind=kind_dyn), parameter :: rrg = -rdgas/grav + ! real, parameter :: cp_air = cp_air ! 1004.6, heat capacity of dry air at constant pressure, come from constants_mod + real(kind=kind_dyn), parameter :: cp_vap = 4.0 * rvgas !< 1846.0, heat capacity of water vapor at constant pressure + real(kind=kind_dyn), parameter :: cv_air = cp_air - rdgas !< 717.55, heat capacity of dry air at constant volume + real(kind=kind_dyn), parameter :: cv_vap = 3.0 * rvgas !< 1384.5, heat capacity of water vapor at constant volume + ! http: / / www.engineeringtoolbox.com / ice - thermal - properties - d_576.html + ! c_ice = 2050.0 at 0 deg c + ! c_ice = 1972.0 at - 15 deg c + ! c_ice = 1818.0 at - 40 deg c + ! http: / / www.engineeringtoolbox.com / water - thermal - properties - d_162.html + ! c_liq = 4205.0 at 4 deg c + ! c_liq = 4185.5 at 15 deg c + ! c_liq = 4178.0 at 30 deg c + ! real, parameter :: c_ice = 2106.0 ! ifs: heat capacity of ice at 0 deg c + ! real, parameter :: c_liq = 4218.0 ! ifs: heat capacity of liquid at 0 deg c + real(kind=kind_dyn), parameter :: c_ice = 1972.0 !< gfdl: heat capacity of ice at - 15 deg c + real(kind=kind_dyn), parameter :: c_liq = 4185.5 !< gfdl: heat capacity of liquid at 15 deg c + real(kind=kind_dyn), parameter :: dc_vap = cp_vap - c_liq !< - 2339.5, isobaric heating / cooling + real(kind=kind_dyn), parameter :: dc_ice = c_liq - c_ice !< 2213.5, isobaric heating / colling + real(kind=kind_dyn), parameter :: tice = 273.16 !< freezing temperature + real(kind=kind_dyn), parameter :: t_wfr = tice - 40. !< homogeneous freezing temperature + real(kind=kind_dyn), parameter :: lv0 = hlv - dc_vap * tice !< 3.13905782e6, evaporation latent heat coefficient at 0 deg k + real(kind=kind_dyn), parameter :: li00 = hlf - dc_ice * tice !< - 2.7105966e5, fusion latent heat coefficient at 0 deg k + ! real (kind_grid), parameter :: e00 = 610.71 ! gfdl: saturation vapor pressure at 0 deg c + real (kind_grid), parameter :: e00 = 611.21 !< ifs: saturation vapor pressure at 0 deg c + real (kind_grid), parameter :: d2ice = dc_vap + dc_ice !< - 126, isobaric heating / cooling + real (kind_grid), parameter :: li2 = lv0 + li00 !< 2.86799816e6, sublimation latent heat coefficient at 0 deg k + real(kind=kind_dyn), parameter :: lat2 = (hlv + hlf) ** 2 !< used in bigg mechanism + real(kind=kind_dyn) :: d0_vap !< the same as dc_vap, except that cp_vap can be cp_vap or cv_vap + real(kind=kind_dyn) :: lv00 !< the same as lv0, except that cp_vap can be cp_vap or cv_vap + real(kind=kind_dyn), allocatable :: table (:), table2 (:), tablew (:), des2 (:), desw (:) + +contains + +!>\brief The subroutine 'fv_sat_adj_init' initializes lookup tables for the saturation mixing ratio. +!! \section arg_table_fv_sat_adj_init Argument Table +!! \htmlinclude fv_sat_adj_init.html +!! +subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & + mpirank, mpiroot, errmsg, errflg) + + implicit none + + ! Interface variables + logical, intent(in ) :: do_sat_adj + integer, intent(in ) :: kmp + integer, intent(in ) :: nwat + integer, intent(in ) :: ngas + real(kind_dyn), intent(in ) :: rilist(:) + real(kind_dyn), intent(in ) :: cpilist(:) + integer, intent(in ) :: mpirank + integer, intent(in ) :: mpiroot + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg + + ! Local variables + integer, parameter :: length = 2621 + integer :: i + + ! Initialize the CCPP error handling variables + errmsg = '' + errflg = 0 + + ! If saturation adjustment is not used, return immediately + if (.not.do_sat_adj) then + write(errmsg,'(a)') 'Logic error: fv_sat_adj_init is called but do_sat_adj is set to false' + errflg = 1 + return + end if + + if (.not.nwat==6) then + write(errmsg,'(a)') 'Logic error: fv_sat_adj requires six water species (nwat=6)' + errflg = 1 + return + end if + + if (is_initialized) return + + ! generate es table (dt = 0.1 deg c) + + allocate (table (length)) + allocate (table2 (length)) + allocate (tablew (length)) + allocate (des2 (length)) + allocate (desw (length)) + + call qs_table (length) + call qs_table2 (length) + call qs_tablew (length) + + do i = 1, length - 1 + des2 (i) = max (0., table2 (i + 1) - table2 (i)) + desw (i) = max (0., tablew (i + 1) - tablew (i)) + enddo + des2 (length) = des2 (length - 1) + desw (length) = desw (length - 1) + +#ifdef MULTI_GASES + call multi_gases_init(ngas,nwat,rilist,cpilist,mpirank==mpiroot) +#endif + + is_initialized = .true. + +end subroutine fv_sat_adj_init + +!\ingroup fast_sat_adj +!>\brief The subroutine 'fv_sat_adj_finalize' deallocates lookup tables for the saturation mixing ratio. +!! \section arg_table_fv_sat_adj_finalize Argument Table +!! \htmlinclude fv_sat_adj_finalize.html +!! +subroutine fv_sat_adj_finalize (errmsg, errflg) + + implicit none + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Initialize the CCPP error handling variables + errmsg = '' + errflg = 0 + + if (.not.is_initialized) return + + if (allocated(table )) deallocate(table ) + if (allocated(table2)) deallocate(table2) + if (allocated(tablew)) deallocate(tablew) + if (allocated(des2 )) deallocate(des2 ) + if (allocated(desw )) deallocate(desw ) + +#ifdef MULTI_GASES + call multi_gases_finalize() +#endif + + is_initialized = .false. + +end subroutine fv_sat_adj_finalize + +!>\defgroup fast_sat_adj GFDL In-Core Fast Saturation Adjustment Module +!> @{ +!! The subroutine 'fv_sat_adj' implements the fast processes in the GFDL +!! Cloud MP. It is part of the GFDL Cloud MP. +!>\author Shian-Jiann Lin, Linjiong Zhou +!! +!>\brief The subroutine 'fv_sat_adj' performs the fast processes in the GFDL microphysics. +!>\details This is designed for single-moment 6-class cloud microphysics schemes. +!! It handles the heat release due to in situ phase changes. +!! +!! \section arg_table_fv_sat_adj_run Argument Table +!! \htmlinclude fv_sat_adj_run.html +!! +subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, jsd, jed, & + ng, hydrostatic, fast_mp_consv, te0_2d, te0, ngas, qvi, qv, ql, qi, qr, & + qs, qg, hs, peln, delz, delp, pt, pkz, q_con, akap, cappa, area, dtdt, & + out_dt, last_step, do_qa, qa, & + nthreads, errmsg, errflg) + + implicit none + + ! Interface variables + real(kind=kind_dyn), intent(in) :: mdt + real(kind=kind_dyn), intent(in) :: zvir + integer, intent(in) :: is + integer, intent(in) :: ie + integer, intent(in) :: isd + integer, intent(in) :: ied + integer, intent(in) :: kmp + integer, intent(in) :: km + integer, intent(in) :: kmdelz + integer, intent(in) :: js + integer, intent(in) :: je + integer, intent(in) :: jsd + integer, intent(in) :: jed + integer, intent(in) :: ng + logical, intent(in) :: hydrostatic + logical, intent(in) :: fast_mp_consv + real(kind=kind_dyn), intent(inout) :: te0_2d(:,:) + real(kind=kind_dyn), intent( out) :: te0(isd:ied, jsd:jed, 1:km) + ! If multi-gases physics are not used, ngas is one and qvi identical to qv + integer, intent(in) :: ngas + real(kind=kind_dyn), intent(inout) :: qvi(:,:,:, :) + real(kind=kind_dyn), intent(inout) :: qv(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: ql(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qi(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qr(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qs(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qg(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(in) :: hs(isd:ied, jsd:jed) + real(kind=kind_dyn), intent(in) :: peln(:,:,:) + ! For hydrostatic build, kmdelz=1, otherwise kmdelz=km (see fv_arrays.F90) + real(kind=kind_dyn), intent(in) :: delz(:,:,:) + real(kind=kind_dyn), intent(in) :: delp(:,:,:) + real(kind=kind_dyn), intent(inout) :: pt(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: pkz(:,:,:) +#ifdef USE_COND + real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) +#else + real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) +#endif + real(kind=kind_dyn), intent(in) :: akap +#ifdef MOIST_CAPPA + real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) +#else + real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) +#endif + ! DH* WARNING, allocation in fv_arrays.F90 is area(isd_2d:ied_2d, jsd_2d:jed_2d), + ! where normally isd_2d = isd etc, but for memory optimization, these can be set + ! to isd_2d=0, ied_2d=-1 etc. I don't believe this optimization is actually used, + ! as it would break a whole lot of code (including the one below)! + ! Assume thus that isd_2d = isd etc. + real(kind_grid), intent(in) :: area(:,:) + real(kind=kind_dyn), intent(inout) :: dtdt(is:ie, js:je, 1:km) + logical, intent(in) :: out_dt + logical, intent(in) :: last_step + logical, intent(in) :: do_qa + real(kind=kind_dyn), intent( out) :: qa(isd:ied, jsd:jed, 1:km) + integer, intent(in) :: nthreads + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg + + ! Local variables + real(kind=kind_dyn), dimension(is:ie,js:je) :: dpln + integer :: kdelz + integer :: k, j, i + + ! Initialize the CCPP error handling variables + errmsg = '' + errflg = 0 + +#ifndef FV3 +! Open parallel region if not already opened by host model +!$OMP parallel num_threads(nthreads) default(none) & +!$OMP shared(kmp,km,js,je,is,ie,peln,mdt, & +!$OMP isd,jsd,delz,q_con,cappa,qa, & +!$OMP do_qa,last_step,out_dt,dtdt, & +!$OMP area,delp,pt,hs,qg,qs,qr,qi, & +!$OMP ql,qv,te0,fast_mp_consv, & +!$OMP hydrostatic,ng,zvir,pkz, & +!$OMP akap,te0_2d,ngas,qvi) & +!$OMP private(k,j,i,kdelz,dpln) +#endif + +!$OMP do + do k=kmp,km + do j=js,je + do i=is,ie + dpln(i,j) = peln(i,k+1,j) - peln(i,k,j) + enddo + enddo + if (hydrostatic) then + kdelz = 1 + else + kdelz = k + end if + call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & + te0(isd,jsd,k), & +#ifdef MULTI_GASES + qvi(isd,jsd,k,1:ngas), & +#else + qv(isd,jsd,k), & +#endif + ql(isd,jsd,k), qi(isd,jsd,k), & + qr(isd,jsd,k), qs(isd,jsd,k), qg(isd,jsd,k), & + hs, dpln, delz(is:,js:,kdelz), pt(isd,jsd,k), delp(isd,jsd,k),& + q_con(isd:,jsd:,k), cappa(isd:,jsd:,k), area, dtdt(is,js,k), & + out_dt, last_step, do_qa, qa(isd,jsd,k)) + if ( .not. hydrostatic ) then + do j=js,je + do i=is,ie +#ifdef MOIST_CAPPA + pkz(i,j,k) = exp(cappa(i,j,k)*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) +#else +#ifdef MULTI_GASES + pkz(i,j,k) = exp(akap*(virqd(q(i,j,k,1:num_gas))/vicpqd(q(i,j,k,1:num_gas))*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) +#else + pkz(i,j,k) = exp(akap*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) +#endif +#endif + enddo + enddo + endif + enddo +!$OMP end do + + if ( fast_mp_consv ) then +!$OMP do + do j=js,je + do i=is,ie + do k=kmp,km + te0_2d(i,j) = te0_2d(i,j) + te0(i,j,k) + enddo + enddo + enddo +!$OMP end do + endif + +#ifndef FV3 +!$OMP end parallel +#endif + + return + +end subroutine fv_sat_adj_run + +!>\ingroup fast_sat_adj +!> This subroutine includes the entity of the fast saturation adjustment processes. +!>\section fast_gen GFDL Cloud Fast Physics General Algorithm +!> @{ +subroutine fv_sat_adj_work(mdt, zvir, is, ie, js, je, ng, hydrostatic, consv_te, te0, & +#ifdef MULTI_GASES + qvi, & +#else + qv, & +#endif + ql, qi, qr, qs, qg, hs, dpln, delz, pt, dp, q_con, cappa, & + area, dtdt, out_dt, last_step, do_qa, qa) + + implicit none + + ! Interface variables + integer, intent (in) :: is, ie, js, je, ng + logical, intent (in) :: hydrostatic, consv_te, out_dt, last_step, do_qa + real(kind=kind_dyn), intent (in) :: zvir, mdt ! remapping time step + real(kind=kind_dyn), intent (in), dimension (is - ng:ie + ng, js - ng:je + ng) :: dp, hs + real(kind=kind_dyn), intent (in), dimension (is:ie, js:je) :: dpln, delz + real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: pt +#ifdef MULTI_GASES + real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng, 1:1, 1:num_gas) :: qvi +#else + real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: qv +#endif + real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: ql, qi, qr, qs, qg + real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: q_con, cappa + real(kind=kind_dyn), intent (inout), dimension (is:ie, js:je) :: dtdt + real(kind=kind_dyn), intent (out), dimension (is - ng:ie + ng, js - ng:je + ng) :: qa, te0 + real (kind_grid), intent (in), dimension (is - ng:ie + ng, js - ng:je + ng) :: area + + ! Local variables +#ifdef MULTI_GASES + real, dimension (is - ng:ie + ng, js - ng:je + ng) :: qv +#endif + real(kind=kind_dyn), dimension (is:ie) :: wqsat, dq2dt, qpz, cvm, t0, pt1, qstar + real(kind=kind_dyn), dimension (is:ie) :: icp2, lcp2, tcp2, tcp3 + real(kind=kind_dyn), dimension (is:ie) :: den, q_liq, q_sol, q_cond, src, sink, hvar + real(kind=kind_dyn), dimension (is:ie) :: mc_air, lhl, lhi + real(kind=kind_dyn) :: qsw, rh + real(kind=kind_dyn) :: tc, qsi, dqsdt, dq, dq0, pidep, qi_crt, tmp, dtmp + real(kind=kind_dyn) :: tin, rqi, q_plus, q_minus + real(kind=kind_dyn) :: sdt, dt_bigg, adj_fac + real(kind=kind_dyn) :: fac_smlt, fac_r2g, fac_i2s, fac_imlt, fac_l2r, fac_v2l, fac_l2v + real(kind=kind_dyn) :: factor, qim, tice0, c_air, c_vap, dw + integer :: i, j + +#ifdef MULTI_GASES + qv(:,:) = qvi(:,:,1,1) +#endif + sdt = 0.5 * mdt ! half remapping time step + dt_bigg = mdt ! bigg mechinism time step + + tice0 = tice - 0.01 ! 273.15, standard freezing temperature + + ! ----------------------------------------------------------------------- + !> - Define conversion scalar / factor. + ! ----------------------------------------------------------------------- + + fac_i2s = 1. - exp (- mdt / tau_i2s) + fac_v2l = 1. - exp (- sdt / tau_v2l) + fac_r2g = 1. - exp (- mdt / tau_r2g) + fac_l2r = 1. - exp (- mdt / tau_l2r) + + fac_l2v = 1. - exp (- sdt / tau_l2v) + fac_l2v = min (sat_adj0, fac_l2v) + + fac_imlt = 1. - exp (- sdt / tau_imlt) + fac_smlt = 1. - exp (- mdt / tau_smlt) + + ! ----------------------------------------------------------------------- + !> - Define heat capacity of dry air and water vapor based on hydrostatical property. + ! ----------------------------------------------------------------------- + + if (hydrostatic) then + c_air = cp_air + c_vap = cp_vap + else + c_air = cv_air + c_vap = cv_vap + endif + d0_vap = c_vap - c_liq + lv00 = hlv - d0_vap * tice + ! dc_vap = cp_vap - c_liq ! - 2339.5 + ! d0_vap = cv_vap - c_liq ! - 2801.0 + + do j = js, je ! start j loop + + do i = is, ie + q_liq (i) = ql (i, j) + qr (i, j) + q_sol (i) = qi (i, j) + qs (i, j) + qg (i, j) + qpz (i) = q_liq (i) + q_sol (i) +#ifdef MULTI_GASES + pt1 (i) = pt (i, j) / virq_qpz(qvi(i,j,1,1:num_gas),qpz(i)) +#else +#ifdef USE_COND + pt1 (i) = pt (i, j) / ((1 + zvir * qv (i, j)) * (1 - qpz (i))) +#else + pt1 (i) = pt (i, j) / (1 + zvir * qv (i, j)) +#endif +#endif + t0 (i) = pt1 (i) ! true temperature + qpz (i) = qpz (i) + qv (i, j) ! total_wat conserved in this routine + enddo + + ! ----------------------------------------------------------------------- + !> - Define air density based on hydrostatical property. + ! ----------------------------------------------------------------------- + + if (hydrostatic) then + do i = is, ie + den (i) = dp (i, j) / (dpln (i, j) * rdgas * pt (i, j)) + enddo + else + do i = is, ie + den (i) = - dp (i, j) / (grav * delz (i, j)) ! moist_air density + enddo + endif + + ! ----------------------------------------------------------------------- + !> - Define heat capacity and latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie +#ifdef MULTI_GASES + if (hydrostatic) then + c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) + else + c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) + endif +#endif + mc_air (i) = (1. - qpz (i)) * c_air ! constant + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + lhi (i) = li00 + dc_ice * pt1 (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Fix energy conservation. + ! ----------------------------------------------------------------------- + + if (consv_te) then + if (hydrostatic) then + do i = is, ie +#ifdef MULTI_GASES + c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) +#endif + te0 (i, j) = - c_air * t0 (i) + enddo + else + do i = is, ie +#ifdef USE_COND + te0 (i, j) = - cvm (i) * t0 (i) +#else +#ifdef MULTI_GASES + c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) +#endif + te0 (i, j) = - c_air * t0 (i) +#endif + enddo + endif + endif + + ! ----------------------------------------------------------------------- + !> - Fix negative cloud ice with snow. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (qi (i, j) < 0.) then + qs (i, j) = qs (i, j) + qi (i, j) + qi (i, j) = 0. + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Melting of cloud ice to cloud water and rain. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (qi (i, j) > 1.e-8 .and. pt1 (i) > tice) then + sink (i) = min (qi (i, j), fac_imlt * (pt1 (i) - tice) / icp2 (i)) + qi (i, j) = qi (i, j) - sink (i) + ! sjl, may 17, 2017 + ! tmp = min (sink (i), dim (ql_mlt, ql (i, j))) ! max ql amount + ! ql (i, j) = ql (i, j) + tmp + ! qr (i, j) = qr (i, j) + sink (i) - tmp + ! sjl, may 17, 2017 + ql (i, j) = ql (i, j) + sink (i) + q_liq (i) = q_liq (i) + sink (i) + q_sol (i) = q_sol (i) - sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) - sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Fix negative snow with graupel or graupel with available snow. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (qs (i, j) < 0.) then + qg (i, j) = qg (i, j) + qs (i, j) + qs (i, j) = 0. + elseif (qg (i, j) < 0.) then + tmp = min (- qg (i, j), max (0., qs (i, j))) + qg (i, j) = qg (i, j) + tmp + qs (i, j) = qs (i, j) - tmp + endif + enddo + + ! after this point cloud ice & snow are positive definite + + ! ----------------------------------------------------------------------- + !> - Fix negative cloud water with rain or rain with available cloud water. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (ql (i, j) < 0.) then + tmp = min (- ql (i, j), max (0., qr (i, j))) + ql (i, j) = ql (i, j) + tmp + qr (i, j) = qr (i, j) - tmp + elseif (qr (i, j) < 0.) then + tmp = min (- qr (i, j), max (0., ql (i, j))) + ql (i, j) = ql (i, j) - tmp + qr (i, j) = qr (i, j) + tmp + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Enforce complete freezing of cloud water to cloud ice below - 48 c. + ! ----------------------------------------------------------------------- + + do i = is, ie + dtmp = tice - 48. - pt1 (i) + if (ql (i, j) > 0. .and. dtmp > 0.) then + sink (i) = min (ql (i, j), dtmp / icp2 (i)) + ql (i, j) = ql (i, j) - sink (i) + qi (i, j) = qi (i, j) + sink (i) + q_liq (i) = q_liq (i) - sink (i) + q_sol (i) = q_sol (i) + sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhl (i) = lv00 + d0_vap * pt1 (i) + lhi (i) = li00 + dc_ice * pt1 (i) + lcp2 (i) = lhl (i) / cvm (i) + icp2 (i) = lhi (i) / cvm (i) + tcp3 (i) = lcp2 (i) + icp2 (i) * min (1., dim (tice, pt1 (i)) /48.) + enddo + + ! ----------------------------------------------------------------------- + !> - Condensation/evaporation between water vapor and cloud water. + ! ----------------------------------------------------------------------- + + call wqs2_vect (is, ie, pt1, den, wqsat, dq2dt) + + adj_fac = sat_adj0 + do i = is, ie + dq0 = (qv (i, j) - wqsat (i)) / (1. + tcp3 (i) * dq2dt (i)) + if (dq0 > 0.) then ! whole grid - box saturated + src (i) = min (adj_fac * dq0, max (ql_gen - ql (i, j), fac_v2l * dq0)) + else ! evaporation of ql + ! sjl 20170703 added ql factor to prevent the situation of high ql and rh<1 + ! factor = - min (1., fac_l2v * sqrt (max (0., ql (i, j)) / 1.e-5) * 10. * (1. - qv (i, j) / wqsat (i))) + ! factor = - fac_l2v + ! factor = - 1 + factor = - min (1., fac_l2v * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% + src (i) = - min (ql (i, j), factor * dq0) + endif + qv (i, j) = qv (i, j) - src (i) +#ifdef MULTI_GASES + qvi(i,j,1,1) = qv (i, j) +#endif + ql (i, j) = ql (i, j) + src (i) + q_liq (i) = q_liq (i) + src (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + src (i) * lhl (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhl (i) = lv00 + d0_vap * pt1 (i) + lhi (i) = li00 + dc_ice * pt1 (i) + lcp2 (i) = lhl (i) / cvm (i) + icp2 (i) = lhi (i) / cvm (i) + tcp3 (i) = lcp2 (i) + icp2 (i) * min (1., dim (tice, pt1 (i)) / 48.) + enddo + + if (last_step) then + + ! ----------------------------------------------------------------------- + !> - condensation/evaporation between water vapor and cloud water, last time step + !! enforce upper (no super_sat) & lower (critical rh) bounds. + ! final iteration: + ! ----------------------------------------------------------------------- + + call wqs2_vect (is, ie, pt1, den, wqsat, dq2dt) + + do i = is, ie + dq0 = (qv (i, j) - wqsat (i)) / (1. + tcp3 (i) * dq2dt (i)) + if (dq0 > 0.) then ! remove super - saturation, prevent super saturation over water + src (i) = dq0 + else ! evaporation of ql + ! factor = - min (1., fac_l2v * sqrt (max (0., ql (i, j)) / 1.e-5) * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% + ! factor = - fac_l2v + ! factor = - 1 + factor = - min (1., fac_l2v * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% + src (i) = - min (ql (i, j), factor * dq0) + endif + adj_fac = 1. + qv (i, j) = qv (i, j) - src (i) +#ifdef MULTI_GASES + qvi(i,j,1,1) = qv(i,j) +#endif + ql (i, j) = ql (i, j) + src (i) + q_liq (i) = q_liq (i) + src (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + src (i) * lhl (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhl (i) = lv00 + d0_vap * pt1 (i) + lhi (i) = li00 + dc_ice * pt1 (i) + lcp2 (i) = lhl (i) / cvm (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + endif + + ! ----------------------------------------------------------------------- + !> - Homogeneous freezing of cloud water to cloud ice. + ! ----------------------------------------------------------------------- + + do i = is, ie + dtmp = t_wfr - pt1 (i) ! [ - 40, - 48] + if (ql (i, j) > 0. .and. dtmp > 0.) then + sink (i) = min (ql (i, j), ql (i, j) * dtmp * 0.125, dtmp / icp2 (i)) + ql (i, j) = ql (i, j) - sink (i) + qi (i, j) = qi (i, j) + sink (i) + q_liq (i) = q_liq (i) - sink (i) + q_sol (i) = q_sol (i) + sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - bigg mechanism (heterogeneous freezing of cloud water to cloud ice). + ! ----------------------------------------------------------------------- + + do i = is, ie + tc = tice0 - pt1 (i) + if (ql (i, j) > 0.0 .and. tc > 0.) then + sink (i) = 3.3333e-10 * dt_bigg * (exp (0.66 * tc) - 1.) * den (i) * ql (i, j) ** 2 + sink (i) = min (ql (i, j), tc / icp2 (i), sink (i)) + ql (i, j) = ql (i, j) - sink (i) + qi (i, j) = qi (i, j) + sink (i) + q_liq (i) = q_liq (i) - sink (i) + q_sol (i) = q_sol (i) + sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Freezing of rain to graupel. + ! ----------------------------------------------------------------------- + + do i = is, ie + dtmp = (tice - 0.1) - pt1 (i) + if (qr (i, j) > 1.e-7 .and. dtmp > 0.) then + tmp = min (1., (dtmp * 0.025) ** 2) * qr (i, j) ! no limit on freezing below - 40 deg c + sink (i) = min (tmp, fac_r2g * dtmp / icp2 (i)) + qr (i, j) = qr (i, j) - sink (i) + qg (i, j) = qg (i, j) + sink (i) + q_liq (i) = q_liq (i) - sink (i) + q_sol (i) = q_sol (i) + sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Melting of snow to rain or cloud water. + ! ----------------------------------------------------------------------- + + do i = is, ie + dtmp = pt1 (i) - (tice + 0.1) + if (qs (i, j) > 1.e-7 .and. dtmp > 0.) then + tmp = min (1., (dtmp * 0.1) ** 2) * qs (i, j) ! no limter on melting above 10 deg c + sink (i) = min (tmp, fac_smlt * dtmp / icp2 (i)) + tmp = min (sink (i), dim (qs_mlt, ql (i, j))) ! max ql due to snow melt + qs (i, j) = qs (i, j) - sink (i) + ql (i, j) = ql (i, j) + tmp + qr (i, j) = qr (i, j) + sink (i) - tmp + ! qr (i, j) = qr (i, j) + sink (i) + q_liq (i) = q_liq (i) + sink (i) + q_sol (i) = q_sol (i) - sink (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) - sink (i) * lhi (i) / cvm (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Autoconversion from cloud water to rain. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (ql (i, j) > ql0_max) then + sink (i) = fac_l2r * (ql (i, j) - ql0_max) + qr (i, j) = qr (i, j) + sink (i) + ql (i, j) = ql (i, j) - sink (i) + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + lhl (i) = lv00 + d0_vap * pt1 (i) + lcp2 (i) = lhl (i) / cvm (i) + icp2 (i) = lhi (i) / cvm (i) + tcp2 (i) = lcp2 (i) + icp2 (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Sublimation/deposition between water vapor and cloud ice. + ! ----------------------------------------------------------------------- + + do i = is, ie + src (i) = 0. + if (pt1 (i) < t_sub) then ! too cold to be accurate; freeze qv as a fix + src (i) = dim (qv (i, j), 1.e-6) + elseif (pt1 (i) < tice0) then + qsi = iqs2 (pt1 (i), den (i), dqsdt) + dq = qv (i, j) - qsi + sink (i) = adj_fac * dq / (1. + tcp2 (i) * dqsdt) + if (qi (i, j) > 1.e-8) then + pidep = sdt * dq * 349138.78 * exp (0.875 * log (qi (i, j) * den (i))) & + / (qsi * den (i) * lat2 / (0.0243 * rvgas * pt1 (i) ** 2) + 4.42478e4) + else + pidep = 0. + endif + if (dq > 0.) then ! vapor - > ice + tmp = tice - pt1 (i) + qi_crt = qi_gen * min (qi_lim, 0.1 * tmp) / den (i) + src (i) = min (sink (i), max (qi_crt - qi (i, j), pidep), tmp / tcp2 (i)) + else + pidep = pidep * min (1., dim (pt1 (i), t_sub) * 0.2) + src (i) = max (pidep, sink (i), - qi (i, j)) + endif + endif + qv (i, j) = qv (i, j) - src (i) +#ifdef MULTI_GASES + qvi(i,j,1,1) = qv(i,j) +#endif + qi (i, j) = qi (i, j) + src (i) + q_sol (i) = q_sol (i) + src (i) + cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice + pt1 (i) = pt1 (i) + src (i) * (lhl (i) + lhi (i)) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Virtual temperature updated. + ! ----------------------------------------------------------------------- + + do i = is, ie +#ifdef USE_COND + q_con (i, j) = q_liq (i) + q_sol (i) +#ifdef MULTI_GASES + pt (i, j) = pt1 (i) * virq_qpz(qvi(i,j,1,1:num_gas),q_con(i,j)) +#else + tmp = 1. + zvir * qv (i, j) + pt (i, j) = pt1 (i) * tmp * (1. - q_con (i, j)) +#endif + tmp = rdgas * tmp + cappa (i, j) = tmp / (tmp + cvm (i)) +#else +#ifdef MULTI_GASES + q_con (i, j) = q_liq (i) + q_sol (i) + pt (i, j) = pt1 (i) * virq_qpz(qvi(i,j,1,1:num_gas),q_con(i,j)) * (1. - q_con(i,j)) +#else + pt (i, j) = pt1 (i) * (1. + zvir * qv (i, j)) +#endif +#endif + enddo + + ! ----------------------------------------------------------------------- + !> - Fix negative graupel with available cloud ice. + ! ----------------------------------------------------------------------- + + do i = is, ie + if (qg (i, j) < 0.) then + tmp = min (- qg (i, j), max (0., qi (i, j))) + qg (i, j) = qg (i, j) + tmp + qi (i, j) = qi (i, j) - tmp + endif + enddo + + ! ----------------------------------------------------------------------- + !> - Autoconversion from cloud ice to snow. + ! ----------------------------------------------------------------------- + + do i = is, ie + qim = qi0_max / den (i) + if (qi (i, j) > qim) then + sink (i) = fac_i2s * (qi (i, j) - qim) + qi (i, j) = qi (i, j) - sink (i) + qs (i, j) = qs (i, j) + sink (i) + endif + enddo + + if (out_dt) then + do i = is, ie + dtdt (i, j) = dtdt (i, j) + pt1 (i) - t0 (i) + enddo + endif + + ! ----------------------------------------------------------------------- + !> - Fix energy conservation. + ! ----------------------------------------------------------------------- + + if (consv_te) then + do i = is, ie + if (hydrostatic) then +#ifdef MULTI_GASES + c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) +#endif + te0 (i, j) = dp (i, j) * (te0 (i, j) + c_air * pt1 (i)) + else +#ifdef USE_COND + te0 (i, j) = dp (i, j) * (te0 (i, j) + cvm (i) * pt1 (i)) +#else +#ifdef MULTI_GASES + c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) +#endif + te0 (i, j) = dp (i, j) * (te0 (i, j) + c_air * pt1 (i)) +#endif + endif + enddo + endif + + ! ----------------------------------------------------------------------- + !> - Update latend heat coefficient. + ! ----------------------------------------------------------------------- + + do i = is, ie + lhi (i) = li00 + dc_ice * pt1 (i) + lhl (i) = lv00 + d0_vap * pt1 (i) + cvm (i) = mc_air (i) + (qv (i, j) + q_liq (i) + q_sol (i)) * c_vap + lcp2 (i) = lhl (i) / cvm (i) + icp2 (i) = lhi (i) / cvm (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Compute cloud fraction. + ! ----------------------------------------------------------------------- + + if (do_qa .and. last_step) then + + ! ----------------------------------------------------------------------- + !> - If it is the last step, combine water species. + ! ----------------------------------------------------------------------- + + if (rad_snow) then + if (rad_graupel) then + do i = is, ie + q_sol (i) = qi (i, j) + qs (i, j) + qg (i, j) + enddo + else + do i = is, ie + q_sol (i) = qi (i, j) + qs (i, j) + enddo + endif + else + do i = is, ie + q_sol (i) = qi (i, j) + enddo + endif + if (rad_rain) then + do i = is, ie + q_liq (i) = ql (i, j) + qr (i, j) + enddo + else + do i = is, ie + q_liq (i) = ql (i, j) + enddo + endif + do i = is, ie + q_cond (i) = q_sol (i) + q_liq (i) + enddo + + ! ----------------------------------------------------------------------- + !> - Use the "liquid - frozen water temperature" (tin) to compute saturated specific humidity. + ! ----------------------------------------------------------------------- + + do i = is, ie + + if(tintqs) then + tin = pt1(i) + else + tin = pt1 (i) - (lcp2 (i) * q_cond (i) + icp2 (i) * q_sol (i)) ! minimum temperature + ! tin = pt1 (i) - ((lv00 + d0_vap * pt1 (i)) * q_cond (i) + & + ! (li00 + dc_ice * pt1 (i)) * q_sol (i)) / (mc_air (i) + qpz (i) * c_vap) + endif + + ! ----------------------------------------------------------------------- + ! determine saturated specific humidity + ! ----------------------------------------------------------------------- + + if (tin <= t_wfr) then + ! ice phase: + qstar (i) = iqs1 (tin, den (i)) + elseif (tin >= tice) then + ! liquid phase: + qstar (i) = wqs1 (tin, den (i)) + else + ! mixed phase: + qsi = iqs1 (tin, den (i)) + qsw = wqs1 (tin, den (i)) + if (q_cond (i) > 1.e-6) then + rqi = q_sol (i) / q_cond (i) + else + ! mostly liquid water clouds at initial cloud development stage + rqi = ((tice - tin) / (tice - t_wfr)) + endif + qstar (i) = rqi * qsi + (1. - rqi) * qsw + endif + !> - higher than 10 m is considered "land" and will have higher subgrid variability + dw = dw_ocean + (dw_land - dw_ocean) * min (1., abs (hs (i, j)) / (10. * grav)) + !> - "scale - aware" subgrid variability: 100 - km as the base + hvar (i) = min (0.2, max (0.01, dw * sqrt (sqrt (area (i, j)) / 100.e3))) + + ! ----------------------------------------------------------------------- + !> - calculate partial cloudiness by pdf; + !! assuming subgrid linear distribution in horizontal; this is effectively a smoother for the + !! binary cloud scheme; qa = 0.5 if qstar (i) == qpz + ! ----------------------------------------------------------------------- + + rh = qpz (i) / qstar (i) + + ! ----------------------------------------------------------------------- + ! icloud_f = 0: bug - fixed + ! icloud_f = 1: old fvgfs gfdl) mp implementation + ! icloud_f = 2: binary cloud scheme (0 / 1) + ! ----------------------------------------------------------------------- + + if (rh > 0.75 .and. qpz (i) > 1.e-8) then + dq = hvar (i) * qpz (i) + q_plus = qpz (i) + dq + q_minus = qpz (i) - dq + if (icloud_f == 2) then + if (qpz (i) > qstar (i)) then + qa (i, j) = 1. + elseif (qstar (i) < q_plus .and. q_cond (i) > 1.e-8) then + qa (i, j) = ((q_plus - qstar (i)) / dq) ** 2 + qa (i, j) = min (1., qa (i, j)) + else + qa (i, j) = 0. + endif + else + if (qstar (i) < q_minus) then + qa (i, j) = 1. + else + if (qstar (i) < q_plus) then + if (icloud_f == 0) then + qa (i, j) = (q_plus - qstar (i)) / (dq + dq) + else + qa (i, j) = (q_plus - qstar (i)) / (2. * dq * (1. - q_cond (i))) + endif + else + qa (i, j) = 0. + endif + ! impose minimum cloudiness if substantial q_cond (i) exist + if (q_cond (i) > 1.e-8) then + qa (i, j) = max (cld_min, qa (i, j)) + endif + qa (i, j) = min (1., qa (i, j)) + endif + endif + else + qa (i, j) = 0. + endif + + enddo + + endif + + enddo ! end j loop + +end subroutine fv_sat_adj_work +!> @} + +! ======================================================================= +!>\ingroup fast_sat_adj +!>\brief the function 'wqs1' computes the +!! saturated specific humidity for table ii. +! ======================================================================= +real(kind=kind_dyn) function wqs1 (ta, den) + + implicit none + + ! pure water phase; universal dry / moist formular using air density + ! input "den" can be either dry or moist air density + + real(kind=kind_dyn), intent (in) :: ta, den + + real(kind=kind_dyn) :: es, ap1, tmin + + integer :: it + + tmin = tice - 160. + ap1 = 10. * dim (ta, tmin) + 1. + ap1 = min (2621., ap1) + it = ap1 + es = tablew (it) + (ap1 - it) * desw (it) + wqs1 = es / (rvgas * ta * den) + +end function wqs1 + +! ======================================================================= +!>\ingroup fast_sat_adj +!>\brief the function 'wqs1' computes the saturated specific humidity +!! for table iii +! ======================================================================= +real(kind=kind_dyn) function iqs1 (ta, den) + + implicit none + + ! water - ice phase; universal dry / moist formular using air density + ! input "den" can be either dry or moist air density + + real(kind=kind_dyn), intent (in) :: ta, den + + real(kind=kind_dyn) :: es, ap1, tmin + + integer :: it + + tmin = tice - 160. + ap1 = 10. * dim (ta, tmin) + 1. + ap1 = min (2621., ap1) + it = ap1 + es = table2 (it) + (ap1 - it) * des2 (it) + iqs1 = es / (rvgas * ta * den) + +end function iqs1 + +! ======================================================================= +!>\ingroup fast_sat_adj +!>\brief The function 'wqs2'computes the gradient of saturated specific +!! humidity for table ii +! ======================================================================= +real(kind=kind_dyn) function wqs2 (ta, den, dqdt) + + implicit none + + ! pure water phase; universal dry / moist formular using air density + ! input "den" can be either dry or moist air density + + real(kind=kind_dyn), intent (in) :: ta, den + + real(kind=kind_dyn), intent (out) :: dqdt + + real(kind=kind_dyn) :: es, ap1, tmin + + integer :: it + + tmin = tice - 160. + ap1 = 10. * dim (ta, tmin) + 1. + ap1 = min (2621., ap1) + it = ap1 + es = tablew (it) + (ap1 - it) * desw (it) + wqs2 = es / (rvgas * ta * den) + it = ap1 - 0.5 + ! finite diff, del_t = 0.1: + dqdt = 10. * (desw (it) + (ap1 - it) * (desw (it + 1) - desw (it))) / (rvgas * ta * den) + +end function wqs2 + +! ======================================================================= +!>\ingroup fast_sat_adj +!>\brief The function wqs2_vect computes the gradient of saturated +!! specific humidity for table ii. +!! It is the same as "wqs2", but written as vector function. +! ======================================================================= +subroutine wqs2_vect (is, ie, ta, den, wqsat, dqdt) + + implicit none + + ! pure water phase; universal dry / moist formular using air density + ! input "den" can be either dry or moist air density + + integer, intent (in) :: is, ie + + real(kind=kind_dyn), intent (in), dimension (:) :: ta, den + + real(kind=kind_dyn), intent (out), dimension (:) :: wqsat, dqdt + + real(kind=kind_dyn) :: es, ap1, tmin + + integer :: i, it + + tmin = tice - 160. + + do i = is, ie + ap1 = 10. * dim (ta (i), tmin) + 1. + ap1 = min (2621., ap1) + it = ap1 + es = tablew (it) + (ap1 - it) * desw (it) + wqsat (i) = es / (rvgas * ta (i) * den (i)) + it = ap1 - 0.5 + ! finite diff, del_t = 0.1: + dqdt (i) = 10. * (desw (it) + (ap1 - it) * (desw (it + 1) - desw (it))) / (rvgas * ta (i) * den (i)) + enddo + +end subroutine wqs2_vect + +! ======================================================================= +!>\ingroup fast_sat_adj +!>\brief The function 'iqs2' computes the gradient of saturated specific +!! humidity for table iii. +! ======================================================================= +real(kind=kind_dyn) function iqs2 (ta, den, dqdt) + + implicit none + + ! water - ice phase; universal dry / moist formular using air density + ! input "den" can be either dry or moist air density + + real(kind=kind_dyn), intent (in) :: ta, den + + real(kind=kind_dyn), intent (out) :: dqdt + + real(kind=kind_dyn) :: es, ap1, tmin + + integer :: it + + tmin = tice - 160. + ap1 = 10. * dim (ta, tmin) + 1. + ap1 = min (2621., ap1) + it = ap1 + es = table2 (it) + (ap1 - it) * des2 (it) + iqs2 = es / (rvgas * ta * den) + it = ap1 - 0.5 + ! finite diff, del_t = 0.1: + dqdt = 10. * (des2 (it) + (ap1 - it) * (des2 (it + 1) - des2 (it))) / (rvgas * ta * den) + +end function iqs2 + +! ======================================================================= +!>\ingroup fast_sat_adj +!! saturation water vapor pressure table i +! 3 - phase table +! ======================================================================= + +subroutine qs_table (n) + + implicit none + + integer, intent (in) :: n + real (kind_grid) :: delt = 0.1 + real (kind_grid) :: tmin, tem, esh20 + real (kind_grid) :: wice, wh2o, fac0, fac1, fac2 + real (kind_grid) :: esupc (200) + integer :: i + + tmin = tice - 160. + + ! ----------------------------------------------------------------------- + ! compute es over ice between - 160 deg c and 0 deg c. + ! ----------------------------------------------------------------------- + + do i = 1, 1600 + tem = tmin + delt * real (i - 1) + fac0 = (tem - tice) / (tem * tice) + fac1 = fac0 * li2 + fac2 = (d2ice * log (tem / tice) + fac1) / rvgas + table (i) = e00 * exp (fac2) + enddo + + ! ----------------------------------------------------------------------- + ! compute es over water between - 20 deg c and 102 deg c. + ! ----------------------------------------------------------------------- + + do i = 1, 1221 + tem = 253.16 + delt * real (i - 1) + fac0 = (tem - tice) / (tem * tice) + fac1 = fac0 * lv0 + fac2 = (dc_vap * log (tem / tice) + fac1) / rvgas + esh20 = e00 * exp (fac2) + if (i <= 200) then + esupc (i) = esh20 + else + table (i + 1400) = esh20 + endif + enddo + + ! ----------------------------------------------------------------------- + ! derive blended es over ice and supercooled water between - 20 deg c and 0 deg c + ! ----------------------------------------------------------------------- + + do i = 1, 200 + tem = 253.16 + delt * real (i - 1) + wice = 0.05 * (tice - tem) + wh2o = 0.05 * (tem - 253.16) + table (i + 1400) = wice * table (i + 1400) + wh2o * esupc (i) + enddo + +end subroutine qs_table + +! ======================================================================= +!>\ingroup fast_sat_adj +!! saturation water vapor pressure table ii. +! 1 - phase table +! ======================================================================= + +subroutine qs_tablew (n) + + implicit none + + integer, intent (in) :: n + real (kind_grid) :: delt = 0.1 + real (kind_grid) :: tmin, tem, fac0, fac1, fac2 + integer :: i + + tmin = tice - 160. + + ! ----------------------------------------------------------------------- + ! compute es over water + ! ----------------------------------------------------------------------- + + do i = 1, n + tem = tmin + delt * real (i - 1) + fac0 = (tem - tice) / (tem * tice) + fac1 = fac0 * lv0 + fac2 = (dc_vap * log (tem / tice) + fac1) / rvgas + tablew (i) = e00 * exp (fac2) + enddo + +end subroutine qs_tablew + +! ======================================================================= +!>\ingroup fast_sat_adj +!! saturation water vapor pressure table iii. +! 2 - phase table +! ======================================================================= + +subroutine qs_table2 (n) + + implicit none + + integer, intent (in) :: n + real (kind_grid) :: delt = 0.1 + real (kind_grid) :: tmin, tem0, tem1, fac0, fac1, fac2 + integer :: i, i0, i1 + + tmin = tice - 160. + + do i = 1, n + tem0 = tmin + delt * real (i - 1) + fac0 = (tem0 - tice) / (tem0 * tice) + if (i <= 1600) then + ! ----------------------------------------------------------------------- + ! compute es over ice between - 160 deg c and 0 deg c. + ! ----------------------------------------------------------------------- + fac1 = fac0 * li2 + fac2 = (d2ice * log (tem0 / tice) + fac1) / rvgas + else + ! ----------------------------------------------------------------------- + ! compute es over water between 0 deg c and 102 deg c. + ! ----------------------------------------------------------------------- + fac1 = fac0 * lv0 + fac2 = (dc_vap * log (tem0 / tice) + fac1) / rvgas + endif + table2 (i) = e00 * exp (fac2) + enddo + + ! ----------------------------------------------------------------------- + ! smoother around 0 deg c + ! ----------------------------------------------------------------------- + + i0 = 1600 + i1 = 1601 + tem0 = 0.25 * (table2 (i0 - 1) + 2. * table (i0) + table2 (i0 + 1)) + tem1 = 0.25 * (table2 (i1 - 1) + 2. * table (i1) + table2 (i1 + 1)) + table2 (i0) = tem0 + table2 (i1) = tem1 + +end subroutine qs_table2 + +end module fv_sat_adj +!> @} diff --git a/physics/gitdiff b/physics/gitdiff new file mode 100644 index 000000000..cba1236f2 --- /dev/null +++ b/physics/gitdiff @@ -0,0 +1,4397 @@ +diff --git a/physics/GFS_DCNV_generic.F90 b/physics/GFS_DCNV_generic.F90 +index bfe97bc..def1e7f 100644 +--- a/physics/GFS_DCNV_generic.F90 ++++ b/physics/GFS_DCNV_generic.F90 +@@ -26,14 +26,14 @@ + + integer, intent(in) :: im, levs + logical, intent(in) :: ldiag3d, qdiag3d, do_cnvgwd, cplchm +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0 +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gv0 +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0 +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: gq0_water_vapor +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_v +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_t +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_qv ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gu0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gv0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: gq0_water_vapor ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_u ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_v ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_qv + ! dqdti only allocated if cplchm is .true. + real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti + character(len=*), intent(out) :: errmsg +@@ -107,18 +107,18 @@ + logical, intent(in) :: flag_for_dcnv_generic_tend + + real(kind=kind_phys), intent(in) :: frain, dtf +- real(kind=kind_phys), dimension(im), intent(in) :: rain1, cld1d +- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor +- real(kind=kind_phys), dimension(im,levs), intent(in) :: ud_mf, dd_mf, dt_mf ++ real(kind=kind_phys), dimension(:), intent(in) :: rain1, cld1d ++ real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t, save_qv ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0, gq0_water_vapor ++ real(kind=kind_phys), dimension(:,:), intent(in) :: ud_mf, dd_mf, dt_mf + real(kind=kind_phys), intent(in) :: con_g + integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d + +- real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cldwrk ++ real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cldwrk + ! dt3dt, dq3dt, du3dt, dv3dt upd_mf, dwn_mf, det_mf only allocated if ldiag3d == .true. + real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt, dq3dt, du3dt, dv3dt + real(kind=kind_phys), dimension(:,:), intent(inout) :: upd_mf, dwn_mf, det_mf +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: cnvw, cnvc ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: cnvw, cnvc + ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. + ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, + ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays +diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 +index 09c9691..a6c6dd4 100644 +--- a/physics/GFS_GWD_generic.F90 ++++ b/physics/GFS_GWD_generic.F90 +@@ -30,12 +30,12 @@ contains + real(kind=kind_phys), intent(in) :: mntvar(im,nmtvr) + + real(kind=kind_phys), intent(out) :: & +- & oc(im), oa4(im,4), clx(im,4), & ++ & oc(:), oa4(:,:), clx(:,:), & + & varss(:), ocss(:), oa4ss(:,:), clxss(:,:), & +- & theta(im), sigma(im), gamma(im), elvmax(im) ++ & theta(:), sigma(:), gamma(:), elvmax(:) + + logical, intent(in) :: lssav, ldiag3d, flag_for_gwd_generic_tend +- real(kind=kind_phys), intent(in) :: dtdt(im,levs), dudt(im,levs), dvdt(im,levs) ++ real(kind=kind_phys), intent(in) :: dtdt(:,:), dudt(:,:), dvdt(:,:) + ! dt3dt only allocated only if ldiag3d is .true. + real(kind=kind_phys), intent(inout) :: dt3dt(:,:), du3dt(:,:), dv3dt(:,:) + real(kind=kind_phys), intent(in) :: dtf +diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 +index 8810cc7..be19536 100644 +--- a/physics/GFS_MP_generic.F90 ++++ b/physics/GFS_MP_generic.F90 +@@ -23,11 +23,11 @@ + implicit none + integer, intent(in) :: im, levs, ntcw, nncl, ntrac + logical, intent(in) :: ldiag3d, qdiag3d, do_aw +- real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 + +- real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t, save_qv ++ real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -109,16 +109,16 @@ + logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm + + real(kind=kind_phys), intent(in) :: dtf, frain, con_g +- real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc +- real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc +- real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 +- real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, save_qv, del +- real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: gq0 +- +- real(kind=kind_phys), dimension(im), intent(in ) :: sr +- real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & ++ real(kind=kind_phys), dimension(:), intent(in) :: rain1, xlat, xlon, tsfc ++ real(kind=kind_phys), dimension(:), intent(inout) :: ice, snow, graupel, rainc ++ real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: rann ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0, prsl, save_t, save_qv, del ++ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 ++ ++ real(kind=kind_phys), dimension(:), intent(in ) :: sr ++ real(kind=kind_phys), dimension(:), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & + srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & + totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & + snow_cpl, pwat +@@ -128,23 +128,23 @@ + + ! Stochastic physics / surface perturbations + logical, intent(in) :: do_sppt, ca_global +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdtr +- real(kind=kind_phys), dimension(im,levs), intent(in) :: dtdtc +- real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl +- real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr ++ real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc ++ real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl ++ real(kind=kind_phys), dimension(:), intent(inout) :: dsnow_cpl + + ! Rainfall variables previous time step + integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp +- real(kind=kind_phys), dimension(im), intent(inout) :: raincprv +- real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv +- real(kind=kind_phys), dimension(im), intent(inout) :: iceprv +- real(kind=kind_phys), dimension(im), intent(inout) :: snowprv +- real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv +- real(kind=kind_phys), dimension(im), intent(inout) :: draincprv +- real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv +- real(kind=kind_phys), dimension(im), intent(inout) :: diceprv +- real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv +- real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: raincprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: iceprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: snowprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: draincprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: diceprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv ++ real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv + + real(kind=kind_phys), intent(in) :: dtp + +diff --git a/physics/GFS_PBL_generic.F90 b/physics/GFS_PBL_generic.F90 +index 357309b..95f6265 100644 +--- a/physics/GFS_PBL_generic.F90 ++++ b/physics/GFS_PBL_generic.F90 +@@ -101,11 +101,11 @@ + integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires + logical, intent(in) :: cplchm, ltaerosol, hybedmf, do_shoc, satmedmf + +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs +- real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs +- real(kind=kind_phys), dimension(im, levs, nvdiff), intent(inout) :: vdftra +- real(kind=kind_phys), dimension(im, levs), intent(out) :: save_u, save_v, save_t +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs ++ real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs ++ real(kind=kind_phys), dimension(:,:, :), intent(inout) :: vdftra ++ real(kind=kind_phys), dimension(:,:), intent(out) :: save_u, save_v, save_t ++ real(kind=kind_phys), dimension(:,:, :), intent(out) :: save_q + + ! CCPP error handling variables + character(len=*), intent(out) :: errmsg +@@ -336,8 +336,8 @@ + logical, dimension(:), intent(in) :: flag_cice + + logical, intent(in) :: flag_for_pbl_generic_tend +- real(kind=kind_phys), dimension(im, levs), intent(in) :: save_u, save_v, save_t +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: save_q ++ real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t ++ real(kind=kind_phys), dimension(:,:, :), intent(in) :: save_q + + real(kind=kind_phys), intent(in) :: dtf + real(kind=kind_phys), intent(in) :: rd, cp, fvirt, hvap +@@ -346,14 +346,14 @@ + real(kind=kind_phys), dimension(:), intent(in) :: dusfc_cice, dvsfc_cice, dtsfc_cice, dqsfc_cice, & + wind, stress_wat, hflx_wat, evap_wat, ugrs1, vgrs1 + +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs +- real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs ++ real(kind=kind_phys), dimension(:,:, :), intent(in) :: qgrs ++ real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs + +- real(kind=kind_phys), dimension(im, levs, nvdiff), intent(in) :: dvdftra +- real(kind=kind_phys), dimension(im), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu +- real(kind=kind_phys), dimension(im, levs), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw ++ real(kind=kind_phys), dimension(:,:, :), intent(in) :: dvdftra ++ real(kind=kind_phys), dimension(:), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu ++ real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw + +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: dqdt ++ real(kind=kind_phys), dimension(:,:, :), intent(inout) :: dqdt + + ! The following arrays may not be allocated, depending on certain flags (cplflx, ...). + ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, +@@ -370,7 +370,7 @@ + real(kind=kind_phys), dimension(:,:), intent(in) :: dkt + + ! From canopy heat storage - reduction factors in latent/sensible heat flux due to surface roughness +- real(kind=kind_phys), dimension(im), intent(in) :: hffac, hefac ++ real(kind=kind_phys), dimension(:), intent(in) :: hffac, hefac + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 +index ae8fac5..450f0e5 100644 +--- a/physics/GFS_SCNV_generic.F90 ++++ b/physics/GFS_SCNV_generic.F90 +@@ -23,9 +23,9 @@ + + integer, intent(in) :: im, levs + logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor ++ real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor + +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t, save_qv ++ real(kind=kind_phys), dimension(:, :), intent(inout) :: save_u, save_v, save_t, save_qv + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +@@ -84,20 +84,20 @@ + integer, intent(in) :: im, levs, nn + logical, intent(in) :: lssav, ldiag3d, qdiag3d, cplchm, flag_for_scnv_generic_tend + real(kind=kind_phys), intent(in) :: frain +- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor +- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv ++ real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor ++ real(kind=kind_phys), dimension(:, :), intent(in) :: save_u, save_v, save_t, save_qv + + ! dqdti, dt3dt, dq3dt, only allocated if ldiag3d == .true. + real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti + real(kind=kind_phys), dimension(:,:), intent(inout) :: du3dt, dv3dt, dt3dt, dq3dt +- real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw ++ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw + + ! Post code for SAS/SAMF + integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d + logical, intent(in) :: shcnvcw +- real(kind=kind_phys), dimension(im), intent(in) :: rain1 +- real(kind=kind_phys), dimension(im,levs), intent(in) :: cnvw, cnvc +- real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cnvprcp, cnvprcpb ++ real(kind=kind_phys), dimension(:), intent(in) :: rain1 ++ real(kind=kind_phys), dimension(:, :), intent(in) :: cnvw, cnvc ++ real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cnvprcp, cnvprcpb + ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. + ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, + ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays +diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 +index c62cc68..f5d09cd 100644 +--- a/physics/GFS_cloud_diagnostics.F90 ++++ b/physics/GFS_cloud_diagnostics.F90 +@@ -53,15 +53,15 @@ contains + lslwr ! Call LW radiation + real(kind_phys), intent(in) :: & + con_pi ! Physical constant: pi +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lat, & ! Latitude + de_lgth ! Decorrelation length +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lay, & ! Pressure at model-layer + cld_frac ! Total cloud fraction +- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lev ! Pressure at model interfaces +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + deltaZ, & ! Layer thickness (km) + cloud_overlap_param, & ! Cloud-overlap parameter + precip_overlap_param ! Precipitation overlap parameter +@@ -71,10 +71,10 @@ contains + errmsg ! Error message + integer, intent(out) :: & + errflg ! Error flag +- integer,dimension(ncol,3),intent(out) :: & ++ integer,dimension(:,:),intent(out) :: & + mbota, & ! Vertical indices for cloud tops + mtopa ! Vertical indices for cloud bases +- real(kind_phys), dimension(ncol,5), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + cldsa ! Fraction of clouds for low, middle, high, total and BL + + ! Local variables +@@ -136,7 +136,7 @@ contains + integer, intent(in) :: & + nLev, & ! Number of vertical-layers + mpi_rank +- real(kind_phys), dimension(nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + sigmainit + ! Outputs + integer, intent(out) :: & +diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 +index 0562324..3c358a2 100644 +--- a/physics/GFS_debug.F90 ++++ b/physics/GFS_debug.F90 +@@ -970,29 +970,29 @@ + integer, intent(in ) :: im + integer, intent(in ) :: kdt + integer, intent(in ) :: iter +- logical, intent(in ) :: flag_iter(im) +- logical, intent(in ) :: flag_guess(im) ++ logical, intent(in ) :: flag_iter(:) ++ logical, intent(in ) :: flag_guess(:) + logical, intent(in ) :: flag_init + logical, intent(in ) :: flag_restart + logical, intent(in ) :: frac_grid + integer, intent(in ) :: isot + integer, intent(in ) :: ivegsrc +- real(kind_phys), intent(in ) :: stype(im) +- real(kind_phys), intent(in ) :: vtype(im) +- real(kind_phys), intent(in ) :: slope(im) +- integer, intent(in ) :: soiltyp(im) +- integer, intent(in ) :: vegtype(im) +- integer, intent(in ) :: slopetyp(im) +- logical, intent(in ) :: dry(im) +- logical, intent(in ) :: icy(im) +- logical, intent(in ) :: wet(im) +- logical, intent(in ) :: lake(im) +- logical, intent(in ) :: ocean(im) +- real(kind_phys), intent(in ) :: oceanfrac(im) +- real(kind_phys), intent(in ) :: landfrac(im) +- real(kind_phys), intent(in ) :: lakefrac(im) +- real(kind_phys), intent(in ) :: slmsk(im) +- integer, intent(in ) :: islmsk(im) ++ real(kind_phys), intent(in ) :: stype(:) ++ real(kind_phys), intent(in ) :: vtype(:) ++ real(kind_phys), intent(in ) :: slope(:) ++ integer, intent(in ) :: soiltyp(:) ++ integer, intent(in ) :: vegtype(:) ++ integer, intent(in ) :: slopetyp(:) ++ logical, intent(in ) :: dry(:) ++ logical, intent(in ) :: icy(:) ++ logical, intent(in ) :: wet(:) ++ logical, intent(in ) :: lake(:) ++ logical, intent(in ) :: ocean(:) ++ real(kind_phys), intent(in ) :: oceanfrac(:) ++ real(kind_phys), intent(in ) :: landfrac(:) ++ real(kind_phys), intent(in ) :: lakefrac(:) ++ real(kind_phys), intent(in ) :: slmsk(:) ++ integer, intent(in ) :: islmsk(:) + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg + +diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 +index 7f80ca4..82cc4c8 100644 +--- a/physics/GFS_rrtmg_post.F90 ++++ b/physics/GFS_rrtmg_post.F90 +@@ -39,17 +39,17 @@ + type(GFS_coupling_type), intent(inout) :: Coupling + type(GFS_radtend_type), intent(in) :: Radtend + type(GFS_diag_type), intent(inout) :: Diag +- type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(in) :: scmpsw ++ type(cmpfsw_type), dimension(:), intent(in) :: scmpsw + + integer, intent(in) :: im, lm, ltp, kt, kb, kd, nday + real(kind=kind_phys), intent(in) :: raddt + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(in) :: aerodp +- real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(in) :: cldsa +- integer, dimension(size(Grid%xlon,1),3), intent(in) :: mbota, mtopa +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: clouds1 +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtausw +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtaulw ++ real(kind=kind_phys), dimension(:,:), intent(in) :: aerodp ++ real(kind=kind_phys), dimension(:,:), intent(in) :: cldsa ++ integer, dimension(:,:), intent(in) :: mbota, mtopa ++ real(kind=kind_phys), dimension(:,:), intent(in) :: clouds1 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: cldtausw ++ real(kind=kind_phys), dimension(:,:), intent(in) :: cldtaulw + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 +index ca76955..514ea87 100644 +--- a/physics/GFS_rrtmg_pre.F90 ++++ b/physics/GFS_rrtmg_pre.F90 +@@ -95,39 +95,39 @@ + integer, intent(out) :: kd, kt, kb + + ! F-A mp scheme only +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: f_ice, & ++ real(kind=kind_phys), dimension(:, :), intent(in) :: f_ice, & + f_rain, f_rimef +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: cwm +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: flgmin ++ real(kind=kind_phys), dimension(:, :), intent(out) :: cwm ++ real(kind=kind_phys), dimension(:), intent(in) :: flgmin + real(kind=kind_phys), intent(out) :: raddt + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: delp, & ++ real(kind=kind_phys), dimension(:, :), intent(out) :: delp, & + dz, plyr, tlyr, qlyr, olyr + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+1+LTP), intent(out) :: plvl, tlvl ++ real(kind=kind_phys), dimension(:, :), intent(out) :: plvl, tlvl + +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: tsfg, tsfa ++ real(kind=kind_phys), dimension(:), intent(out) :: tsfg, tsfa + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: gasvmr_co2, & ++ real(kind=kind_phys), dimension(:, :), intent(out) :: gasvmr_co2, & + gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & + gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4, gasvmr_cfc113 + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDSW), intent(out) :: faersw1, & ++ real(kind=kind_phys), dimension(:,:,:), intent(out) :: faersw1, & + faersw2, faersw3 + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDLW), intent(out) :: faerlw1, & ++ real(kind=kind_phys), dimension(:,:,:), intent(out) :: faerlw1, & + faerlw2, faerlw3 + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(out) :: aerodp ++ real(kind=kind_phys), dimension(:,:), intent(out) :: aerodp + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(inout) :: clouds1, & ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: clouds1, & + clouds2, clouds3, clouds4, clouds5 +- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: clouds6, & ++ real(kind=kind_phys), dimension(:,:), intent(out) :: clouds6, & + clouds7, clouds8, clouds9 + +- real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(out) :: cldsa +- integer, dimension(size(Grid%xlon,1),3), intent(out) :: mbota, mtopa +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: de_lgth, alb1d ++ real(kind=kind_phys), dimension(:,:), intent(out) :: cldsa ++ integer, dimension(:,:), intent(out) :: mbota, mtopa ++ real(kind=kind_phys), dimension(:), intent(out) :: de_lgth, alb1d + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 +index b67b22d..a11f03c 100644 +--- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 ++++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 +@@ -62,24 +62,24 @@ contains + con_g, & ! Physical constant: gravitational constant + con_rd, & ! Physical constant: gas-constant for dry air + con_epsq ! Physical constant(?): Minimum value for specific humidity +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lat ! Latitude +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + tv_lay, & ! Virtual temperature (K) + p_lay, & ! Pressure at model-layers (Pa) + effrin_cldliq, & ! Effective radius for liquid cloud-particles (microns) + effrin_cldice, & ! Effective radius for ice cloud-particles (microns) + effrin_cldrain, & ! Effective radius for rain cloud-particles (microns) + effrin_cldsnow ! Effective radius for snow cloud-particles (microns) +- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + p_lev ! Pressure at model-level interfaces (Pa) +- real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & ++ real(kind_phys), dimension(:, :, :),intent(in) :: & + tracer ! Cloud condensate amount in layer by type () + + ! Outputs +- real(kind_phys), dimension(nCol),intent(out) :: & ++ real(kind_phys), dimension(:),intent(out) :: & + de_lgth ! Decorrelation length +- real(kind_phys), dimension(nCol,nLev),intent(out) :: & ++ real(kind_phys), dimension(:, :),intent(out) :: & + cld_frac, & ! Total cloud fraction + cld_lwp, & ! Cloud liquid water path + cld_reliq, & ! Cloud liquid effective radius +diff --git a/physics/GFS_rrtmgp_lw_post.F90 b/physics/GFS_rrtmgp_lw_post.F90 +index a6b37ac..b508996 100644 +--- a/physics/GFS_rrtmgp_lw_post.F90 ++++ b/physics/GFS_rrtmgp_lw_post.F90 +@@ -39,11 +39,11 @@ contains + save_diag ! Output radiation diagnostics? + real(kind_phys), intent(in) :: & + fhlwr ! Frequency for SW radiation +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + tsfa ! Lowest model layer air temperature for radiation (K) +- real(kind_phys), dimension(nCol, nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + t_lay ! Temperature @ model layer centers (K) +- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + p_lev, & ! Pressure @ model layer-interfaces (Pa) + fluxlwUP_allsky, & ! RRTMGP longwave all-sky flux (W/m2) + fluxlwDOWN_allsky, & ! RRTMGP longwave all-sky flux (W/m2) +@@ -51,26 +51,26 @@ contains + fluxlwDOWN_clrsky ! RRTMGP longwave clear-sky flux (W/m2) + real(kind_phys), intent(in) :: & + raddt ! Radiation time step +- real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + aerodp ! Vertical integrated optical depth for various aerosol species +- real(kind_phys), dimension(nCol,5), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + cldsa ! Fraction of clouds for low, middle, high, total and BL +- integer, dimension(nCol,3), intent(in) ::& ++ integer, dimension(:, :), intent(in) ::& + mbota, & ! vertical indices for low, middle and high cloud tops + mtopa ! vertical indices for low, middle and high cloud bases +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + cld_frac, & ! Total cloud fraction in each layer + cldtaulw ! approx 10.mu band layer cloud optical depth + + ! Outputs (mandatory) +- real(kind_phys), dimension(nCol), intent(out) :: & ++ real(kind_phys), dimension(:), intent(out) :: & + sfcdlw, & ! Total sky sfc downward lw flux (W/m2) + tsflw ! surface air temp during lw calculation (K) +- type(sfcflw_type), dimension(nCol), intent(out) :: & ++ type(sfcflw_type), dimension(:), intent(out) :: & + sfcflw ! LW radiation fluxes at sfc +- real(kind_phys), dimension(nCol,nLev), intent(out) :: & ++ real(kind_phys), dimension(:, :), intent(out) :: & + htrlw ! LW all-sky heating rate +- type(topflw_type), dimension(nCol), intent(out) :: & ++ type(topflw_type), dimension(:), intent(out) :: & + topflw ! lw_fluxes_top_atmosphere + character(len=*), intent(out) :: & + errmsg +@@ -78,13 +78,13 @@ contains + errflg + + ! Outputs (optional) +- type(proflw_type), dimension(nCol, nLev+1), optional, intent(out) :: & ++ type(proflw_type), dimension(:, :), optional, intent(out) :: & + flxprf_lw ! 2D radiative fluxes, components: + ! upfxc - total sky upward flux (W/m2) + ! dnfxc - total sky dnward flux (W/m2) + ! upfx0 - clear sky upward flux (W/m2) + ! dnfx0 - clear sky dnward flux (W/m2) +- real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & ++ real(kind_phys),dimension(:, :),intent(out),optional :: & + htrlwc ! Longwave clear-sky heating-rate (K/sec) + + ! Local variables +diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 +index 0e5d65f..7d66339 100644 +--- a/physics/GFS_rrtmgp_pre.F90 ++++ b/physics/GFS_rrtmgp_pre.F90 +@@ -52,7 +52,7 @@ contains + character(len=*), intent(in) :: & + active_gases ! List of active gases from namelist. + ! Outputs +- character(len=*),dimension(nGases), intent(out) :: & ++ character(len=*),dimension(:), intent(out) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + character(len=*), intent(out) :: & + errmsg ! Error message +@@ -159,7 +159,7 @@ contains + logical, intent(in) :: & + lsswr, & ! Call SW radiation? + lslwr ! Call LW radiation +- character(len=*),dimension(nGases), intent(in) :: & ++ character(len=*),dimension(:), intent(in) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + real(kind_phys), intent(in) :: & + fhswr, & ! Frequency of SW radiation call. +@@ -169,11 +169,11 @@ contains + con_epsm1, & ! Physical constant: Epsilon (Rd/Rv) minus one + con_fvirt, & ! Physical constant: Inverse of epsilon minus one + con_epsqs ! Physical constant: Minimum saturation mixing-ratio (kg/kg) +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + xlon, & ! Longitude + xlat, & ! Latitude + tsfc ! Surface skin temperature (K) +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + prsl, & ! Pressure at model-layer centers (Pa) + tgrs, & ! Temperature at model-layer centers (K) + prslk ! Exner function at model layer centers (1) +@@ -189,18 +189,18 @@ contains + errflg ! Error flag + real(kind_phys), intent(out) :: & + raddt ! Radiation time-step +- real(kind_phys), dimension(ncol), intent(out) :: & ++ real(kind_phys), dimension(:), intent(out) :: & + tsfg, & ! Ground temperature + tsfa ! Skin temperature +- real(kind_phys), dimension(nCol,nLev), intent(out) :: & ++ real(kind_phys), dimension(:, :), intent(out) :: & + p_lay, & ! Pressure at model-layer + t_lay, & ! Temperature at model layer + tv_lay, & ! Virtual temperature at model-layers + relhum ! Relative-humidity at model-layers +- real(kind_phys), dimension(nCol,nLev+1), intent(out) :: & ++ real(kind_phys), dimension(:, :), intent(out) :: & + p_lev, & ! Pressure at model-interface + t_lev ! Temperature at model-interface +- real(kind_phys), dimension(nCol, nLev, nTracers),intent(out) :: & ++ real(kind_phys), dimension(:, :,:),intent(out) :: & + tracer ! Array containing trace gases + type(ty_gas_concs),intent(out) :: & + gas_concentrations ! RRTMGP DDT: gas volumne mixing ratios +diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 +index 9b503e3..acc3024 100644 +--- a/physics/GFS_rrtmgp_setup.F90 ++++ b/physics/GFS_rrtmgp_setup.F90 +@@ -54,14 +54,14 @@ module GFS_rrtmgp_setup + imp_physics_zhao_carr, & ! Flag for zhao-carr scheme + imp_physics_zhao_carr_pdf, & ! Flag for zhao-carr+PDF scheme + imp_physics_mg ! Flag for MG scheme +- real(kind_phys), dimension(levr+1), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + si + integer, intent(in) :: levr, ictm, isol, ico2, iaer, ialb, iems, & + ntcw, num_p3d, ntoz, iovr_sw, iovr_lw, isubc_sw, isubc_lw, & + icliq_sw, iflip, me + logical, intent(in) :: & + crick_proof, ccnorm, norad_precip +- integer, intent(in), dimension(4) :: & ++ integer, intent(in), dimension(:) :: & + idate + ! Outputs + character(len=*), intent(out) :: errmsg +diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 +index 0d3991f..8fdf3fa 100644 +--- a/physics/GFS_rrtmgp_sw_post.F90 ++++ b/physics/GFS_rrtmgp_sw_post.F90 +@@ -37,7 +37,7 @@ contains + nCol, & ! Horizontal loop extent + nLev, & ! Number of vertical layers + nDay ! Number of daylit columns +- integer, intent(in), dimension(nday) :: & ++ integer, intent(in), dimension(:) :: & + idxday ! Index array for daytime points + logical, intent(in) :: & + lsswr, & ! Call SW radiation? +@@ -47,37 +47,37 @@ contains + sw_gas_props ! DDT containing SW spectral information + real(kind_phys), intent(in) :: & + fhswr ! Frequency for SW radiation +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(ncol), intent(in) :: & + t_lay, & ! Temperature at model layer centers (K) + coszen, & ! Cosine(SZA) + coszdg ! Cosine(SZA), daytime +- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + p_lev ! Pressure @ model layer-interfaces (Pa) +- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + sfc_alb_nir_dir, & ! Surface albedo (direct) + sfc_alb_nir_dif, & ! Surface albedo (diffuse) + sfc_alb_uvvis_dir, & ! Surface albedo (direct) + sfc_alb_uvvis_dif ! Surface albedo (diffuse) +- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + fluxswUP_allsky, & ! SW All-sky flux (W/m2) + fluxswDOWN_allsky, & ! SW All-sky flux (W/m2) + fluxswUP_clrsky, & ! SW Clear-sky flux (W/m2) + fluxswDOWN_clrsky ! SW All-sky flux (W/m2) + real(kind_phys), intent(in) :: & + raddt ! Radiation time step +- real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + aerodp ! Vertical integrated optical depth for various aerosol species +- real(kind_phys), dimension(nCol,5), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + cldsa ! Fraction of clouds for low, middle, high, total and BL +- integer, dimension(nCol,3), intent(in) ::& ++ integer, dimension(:, :), intent(in) ::& + mbota, & ! vertical indices for low, middle and high cloud tops + mtopa ! vertical indices for low, middle and high cloud bases +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + cld_frac, & ! Total cloud fraction in each layer + cldtausw ! approx .55mu band layer cloud optical depth + + ! Inputs (optional) +- type(cmpfsw_type), dimension(nCol), intent(in), optional :: & ++ type(cmpfsw_type), dimension(:), intent(in), optional :: & + scmpsw ! 2D surface fluxes, components: + ! uvbfc - total sky downward uv-b flux at (W/m2) + ! uvbf0 - clear sky downward uv-b flux at (W/m2) +@@ -87,7 +87,7 @@ contains + ! visdf - downward uv+vis diffused flux (W/m2) + + ! Outputs (mandatory) +- real(kind_phys), dimension(nCol), intent(out) :: & ++ real(kind_phys), dimension(:), intent(out) :: & + nirbmdi, & ! sfc nir beam sw downward flux (W/m2) + nirdfdi, & ! sfc nir diff sw downward flux (W/m2) + visbmdi, & ! sfc uv+vis beam sw downward flux (W/m2) +@@ -98,11 +98,11 @@ contains + visdfui, & ! sfc uv+vis diff sw upward flux (W/m2) + sfcnsw, & ! total sky sfc netsw flx into ground + sfcdsw ! +- real(kind_phys), dimension(nCol,nLev), intent(out) :: & ++ real(kind_phys), dimension(:, :), intent(out) :: & + htrsw ! SW all-sky heating rate +- type(sfcfsw_type), dimension(nCol), intent(out) :: & ++ type(sfcfsw_type), dimension(:), intent(out) :: & + sfcfsw ! sw radiation fluxes at sfc +- type(topfsw_type), dimension(nCol), intent(out) :: & ++ type(topfsw_type), dimension(:), intent(out) :: & + topfsw ! sw_fluxes_top_atmosphere + character(len=*), intent(out) :: & + errmsg +@@ -110,13 +110,13 @@ contains + errflg + + ! Outputs (optional) +- type(profsw_type), dimension(nCol, nLev), intent(out), optional :: & ++ type(profsw_type), dimension(:, :), intent(out), optional :: & + flxprf_sw ! 2D radiative fluxes, components: + ! upfxc - total sky upward flux (W/m2) + ! dnfxc - total sky dnward flux (W/m2) + ! upfx0 - clear sky upward flux (W/m2) + ! dnfx0 - clear sky dnward flux (W/m2) +- real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & ++ real(kind_phys),dimension(:, :),intent(out),optional :: & + htrswc ! Clear-sky heating rate (K/s) + + ! Local variables +diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 +index c4208d8..5c741a7 100644 +--- a/physics/GFS_rrtmgp_sw_pre.F90 ++++ b/physics/GFS_rrtmgp_sw_pre.F90 +@@ -45,9 +45,9 @@ contains + do_sfcperts + real(kind_phys), intent(in) :: & + solhr ! Time in hours after 00z at the current timestep +- real(kind_phys), dimension(5), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + pertalb ! Magnitude of surface albedo perturbation (frac) +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lsmask, & ! Landmask: sea/land/ice=0/1/2 + lon, & ! Longitude + coslat, & ! Cosine(latitude) +@@ -66,13 +66,13 @@ contains + facwf, & ! Fractional coverage with weak cosz dependency (frac) + fice, & ! Ice fraction over open water (frac) + tisfc ! Sea ice surface skin temperature (K) +- real(kind_phys), dimension(nCol,nsfcpert), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + sfc_wts ! Weights for stochastic surface physics perturbation () +- real(kind_phys), dimension(nCol,nLev),intent(in) :: & ++ real(kind_phys), dimension(:, :),intent(in) :: & + p_lay, & ! Layer pressure + tv_lay, & ! Layer virtual-temperature + relhum ! Layer relative-humidity +- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & ++ real(kind_phys), dimension(:, :),intent(in) :: & + p_lev ! Pressure @ layer interfaces (Pa) + type(ty_gas_optics_rrtmgp),intent(in) :: & + sw_gas_props ! RRTMGP DDT: spectral information for SW calculation +@@ -80,14 +80,14 @@ contains + ! Outputs + integer, intent(out) :: & + nday ! Number of daylit points +- integer, dimension(ncol), intent(out) :: & ++ integer, dimension(:), intent(out) :: & + idxday ! Indices for daylit points +- real(kind_phys), dimension(ncol), intent(out) :: & ++ real(kind_phys), dimension(:), intent(out) :: & + alb1d, & ! Surface albedo pertubation + coszen, & ! Cosine of SZA + coszdg, & ! Cosine of SZA, daytime + sfc_alb_dif ! Mean surface diffused (nIR+uvvis) sw albedo +- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(out) :: & ++ real(kind_phys), dimension(:, :), intent(out) :: & + sfc_alb_nir_dir, & ! Surface albedo (direct) + sfc_alb_nir_dif, & ! Surface albedo (diffuse) + sfc_alb_uvvis_dir, & ! Surface albedo (direct) +diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 +index ac9fb74..0be3be7 100644 +--- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 ++++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 +@@ -59,10 +59,10 @@ contains + con_ttp, & ! Triple point temperature of water (K) + con_rd, & ! Ideal gas constant for dry air (J/kg/K) + con_pi ! Pi +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lsmask, & ! Land/Sea mask + lat ! Latitude +- real(kind_phys), dimension(nCol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + tv_lay, & ! Virtual temperature (K) + p_lay, & ! Pressure at model-layers (Pa) + t_lay, & ! Temperature at model-layers (K) +@@ -73,15 +73,15 @@ contains + effrin_cldsnow, & ! Effective radius for snow cloud-particles (microns) + shoc_sgs_cldfrac, & ! Subgrid-scale cloud fraction from the SHOC scheme + cncvw ! Convective cloud water mixing ratio (kg/kg) +- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:, :), intent(in) :: & + p_lev ! Pressure at model-level interfaces (Pa) +- real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & ++ real(kind_phys), dimension(:, :, :),intent(in) :: & + tracer ! Cloud condensate amount in layer by type () + + ! Outputs +- real(kind_phys), dimension(nCol),intent(out) :: & ++ real(kind_phys), dimension(:),intent(out) :: & + de_lgth ! Decorrelation length +- real(kind_phys), dimension(nCol,nLev),intent(out) :: & ++ real(kind_phys), dimension(:, :),intent(out) :: & + cld_frac, & ! Total cloud fraction + cld_lwp, & ! Cloud liquid water path + cld_reliq, & ! Cloud liquid effective radius +diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 +index 9b4533c..ce3060c 100644 +--- a/physics/GFS_stochastics.F90 ++++ b/physics/GFS_stochastics.F90 +@@ -50,7 +50,7 @@ + logical, intent(in) :: use_zmtnblck + logical, intent(in) :: do_shum + logical, intent(in) :: do_skeb +- real(kind_phys), dimension(1:im), intent(in) :: zmtnblck ++ real(kind_phys), dimension(:), intent(in) :: zmtnblck + ! sppt_wts only allocated if do_sppt == .true. + real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts + ! skebu_wts, skebv_wts only allocated if do_skeb == .true. +@@ -59,28 +59,28 @@ + ! shum_wts only allocated if do_shum == .true. + real(kind_phys), dimension(:,:), intent(in) :: shum_wts + ! inverse/flipped weights are always allocated +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: sppt_wts_inv +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebu_wts_inv +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebv_wts_inv +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: shum_wts_inv +- real(kind_phys), dimension(1:im,1:km), intent(in) :: diss_est +- real(kind_phys), dimension(1:im,1:km), intent(in) :: ugrs +- real(kind_phys), dimension(1:im,1:km), intent(in) :: vgrs +- real(kind_phys), dimension(1:im,1:km), intent(in) :: tgrs +- real(kind_phys), dimension(1:im,1:km), intent(in) :: qgrs +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gu0 +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gv0 +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gt0 +- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gq0 ++ real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts_inv ++ real(kind_phys), dimension(:,:), intent(inout) :: skebu_wts_inv ++ real(kind_phys), dimension(:,:), intent(inout) :: skebv_wts_inv ++ real(kind_phys), dimension(:,:), intent(inout) :: shum_wts_inv ++ real(kind_phys), dimension(:,:), intent(in) :: diss_est ++ real(kind_phys), dimension(:,:), intent(in) :: ugrs ++ real(kind_phys), dimension(:,:), intent(in) :: vgrs ++ real(kind_phys), dimension(:,:), intent(in) :: tgrs ++ real(kind_phys), dimension(:,:), intent(in) :: qgrs ++ real(kind_phys), dimension(:,:), intent(inout) :: gu0 ++ real(kind_phys), dimension(:,:), intent(inout) :: gv0 ++ real(kind_phys), dimension(:,:), intent(inout) :: gt0 ++ real(kind_phys), dimension(:,:), intent(inout) :: gq0 + ! dtdtr only allocated if do_sppt == .true. + real(kind_phys), dimension(:,:), intent(in) :: dtdtr +- real(kind_phys), dimension(1:im), intent(in) :: rain +- real(kind_phys), dimension(1:im), intent(in) :: rainc +- real(kind_phys), dimension(1:im), intent(inout) :: tprcp +- real(kind_phys), dimension(1:im), intent(inout) :: totprcp +- real(kind_phys), dimension(1:im), intent(inout) :: cnvprcp +- real(kind_phys), dimension(1:im), intent(inout) :: totprcpb +- real(kind_phys), dimension(1:im), intent(inout) :: cnvprcpb ++ real(kind_phys), dimension(:), intent(in) :: rain ++ real(kind_phys), dimension(:), intent(in) :: rainc ++ real(kind_phys), dimension(:), intent(inout) :: tprcp ++ real(kind_phys), dimension(:), intent(inout) :: totprcp ++ real(kind_phys), dimension(:), intent(inout) :: cnvprcp ++ real(kind_phys), dimension(:), intent(inout) :: totprcpb ++ real(kind_phys), dimension(:), intent(inout) :: cnvprcpb + logical, intent(in) :: cplflx + ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. + real(kind_phys), dimension(:), intent(inout) :: rain_cpl +@@ -88,9 +88,9 @@ + ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. + real(kind_phys), dimension(:), intent(in) :: drain_cpl + real(kind_phys), dimension(:), intent(in) :: dsnow_cpl +- real(kind_phys), dimension(1:km), intent(in) :: si +- real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca +- real(kind_phys), dimension(1:im), intent(in) :: ca1 ++ real(kind_phys), dimension(:), intent(in) :: si ++ real(kind_phys), dimension(:), intent(inout) :: vfact_ca ++ real(kind_phys), dimension(:), intent(in) :: ca1 + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 +index 263e316..4214dbf 100644 +--- a/physics/GFS_suite_interstitial.F90 ++++ b/physics/GFS_suite_interstitial.F90 +@@ -94,12 +94,12 @@ + ! interface variables + integer, intent(in) :: im, levs, ntrac + real(kind=kind_phys), intent(in) :: dtf, dtp, dxmin, dxinv +- real(kind=kind_phys), intent(in), dimension(im) :: slmsk, area, pgr ++ real(kind=kind_phys), intent(in), dimension(:) :: slmsk, area, pgr + +- integer, intent(out), dimension(im) :: islmsk +- real(kind=kind_phys), intent(out), dimension(im) :: work1, work2, psurf +- real(kind=kind_phys), intent(out), dimension(im,levs) :: dudt, dvdt, dtdt, dtdtc +- real(kind=kind_phys), intent(out), dimension(im,levs,ntrac) :: dqdt ++ integer, intent(out), dimension(:) :: islmsk ++ real(kind=kind_phys), intent(out), dimension(:) :: work1, work2, psurf ++ real(kind=kind_phys), intent(out), dimension(:,:) :: dudt, dvdt, dtdt, dtdtc ++ real(kind=kind_phys), intent(out), dimension(:,:,:) :: dqdt + real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -173,34 +173,34 @@ + logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid + real(kind=kind_phys), intent(in ) :: dtf, cp, hvap + +- logical, intent(in ), dimension(im) :: flag_cice +- real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm +- real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 +- real(kind=kind_phys), intent(in ), dimension(im) :: cice +- real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk +- real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi +- real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd +- integer, intent(inout), dimension(im) :: kinver +- real(kind=kind_phys), intent(inout), dimension(im) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r +- real(kind=kind_phys), intent(in ), dimension(im) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat +- real(kind=kind_phys), intent( out), dimension(im) :: adjsfculw ++ logical, intent(in ), dimension(:) :: flag_cice ++ real(kind=kind_phys), intent(in ), dimension(:) :: ctei_rm ++ real(kind=kind_phys), intent(in ), dimension(:) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 ++ real(kind=kind_phys), intent(in ), dimension(:) :: cice ++ real(kind=kind_phys), intent(in ), dimension(:, :) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk ++ real(kind=kind_phys), intent(in ), dimension(:, :) :: prsi ++ real(kind=kind_phys), intent(in ), dimension(:, :, :) :: lwhd ++ integer, intent(inout), dimension(:) :: kinver ++ real(kind=kind_phys), intent(inout), dimension(:) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r ++ real(kind=kind_phys), intent(in ), dimension(:) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat ++ real(kind=kind_phys), intent( out), dimension(:) :: adjsfculw + + ! RRTMGP + logical, intent(in ) :: & + use_GP_jacobian ! Use RRTMGP LW Jacobian of upwelling to adjust the surface flux? +- real(kind=kind_phys), intent(in ), dimension(im) :: & ++ real(kind=kind_phys), intent(in ), dimension(:) :: & + skt ! Skin temperature +- real(kind=kind_phys), intent(inout), dimension(im) :: & ++ real(kind=kind_phys), intent(inout), dimension(:) :: & + sktp1r ! Skin temperature at previous timestep +- real(kind=kind_phys), intent(in ), dimension(im,levs+1), optional :: & ++ real(kind=kind_phys), intent(in ), dimension(:,:), optional :: & + fluxlwUP, & ! Upwelling LW flux (W/m2) + fluxlwUP_jac ! Jacobian of upwelling LW flux (W/m2/K) + + ! These arrays are only allocated if ldiag3d is .true. + real(kind=kind_phys), intent(inout), dimension(:,:) :: dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp + +- logical, intent(in ), dimension(im) :: dry, icy, wet +- real(kind=kind_phys), intent(in ), dimension(im) :: frland ++ logical, intent(in ), dimension(:) :: dry, icy, wet ++ real(kind=kind_phys), intent(in ), dimension(:) :: frland + real(kind=kind_phys), intent(in ) :: huge + + character(len=*), intent(out) :: errmsg +@@ -402,10 +402,10 @@ + integer, intent(in) :: im + integer, intent(in) :: levs + integer, intent(in) :: ntrac +- real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs +- real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs ++ real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 ++ real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -451,12 +451,12 @@ + integer, intent(in) :: ntrac + real(kind=kind_phys), intent(in) :: dtp + +- real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs +- real(kind=kind_phys), dimension(im,levs), intent(in) :: dudt, dvdt, dtdt +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: dqdt +- real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs ++ real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: dqdt ++ real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 ++ real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -509,22 +509,22 @@ + integer, intent(in) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, & + ntsw, ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & + imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6,imp_physics_fer_hires, me +- integer, dimension(im), intent(in) :: islmsk, kpbl, kinver ++ integer, dimension(:), intent(in) :: islmsk, kpbl, kinver + logical, intent(in) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras + + real(kind=kind_phys), intent(in) :: rhcbot, rhcmax, rhcpbl, rhctop +- real(kind=kind_phys), dimension(im), intent(in) :: work1, work2 +- real(kind=kind_phys), dimension(im, levs), intent(in) :: prsl, prslk +- real(kind=kind_phys), dimension(im, levs+1), intent(in) :: prsi +- real(kind=kind_phys), dimension(im), intent(in) :: xlon, xlat +- real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 +- +- real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc ++ real(kind=kind_phys), dimension(:), intent(in) :: work1, work2 ++ real(kind=kind_phys), dimension(:, :), intent(in) :: prsl, prslk ++ real(kind=kind_phys), dimension(:, :), intent(in) :: prsi ++ real(kind=kind_phys), dimension(:), intent(in) :: xlon, xlat ++ real(kind=kind_phys), dimension(:, :), intent(in) :: gt0 ++ real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 ++ ++ real(kind=kind_phys), dimension(:, :), intent(inout) :: rhc, save_qc + ! save_qi is not allocated for Zhao-Carr MP + real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi + real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp ! ONLY ALLOCATE FOR THOMPSON! TODO +- real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw ++ real(kind=kind_phys), dimension(:, :, :), intent(inout) :: clw + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -679,16 +679,16 @@ + logical, intent(in) :: ltaerosol, cplchm + + real(kind=kind_phys), intent(in) :: con_pi, dtf +- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_qc ++ real(kind=kind_phys), dimension(:, :), intent(in) :: save_qc + ! save_qi is not allocated for Zhao-Carr MP + real(kind=kind_phys), dimension(:, :), intent(in) :: save_qi + +- real(kind=kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 +- real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw +- real(kind=kind_phys), dimension(im,levs), intent(in) :: prsl ++ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: gq0 ++ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw ++ real(kind=kind_phys), dimension(:, :), intent(in) :: prsl + real(kind=kind_phys), intent(in) :: con_rd + real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp +- real(kind=kind_phys), dimension(im,levs), intent(in) :: spechum ++ real(kind=kind_phys), dimension(:, :), intent(in) :: spechum + + ! dqdti may not be allocated + real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti +@@ -828,9 +828,9 @@ + ! interface variables + integer, intent(in) :: im, levs, ntrac, ntcw, ntiw, nn + +- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 ++ real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 + +- real(kind=kind_phys), dimension(im, levs, nn), intent(out) :: clw ++ real(kind=kind_phys), dimension(:, :, :), intent(out) :: clw + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 +index b3000b0..ff513a1 100644 +--- a/physics/GFS_surface_composites.F90 ++++ b/physics/GFS_surface_composites.F90 +@@ -40,24 +40,24 @@ contains + ! Interface variables + integer, intent(in ) :: im, lkm + logical, intent(in ) :: frac_grid, cplflx, cplwav2atm +- logical, dimension(im), intent(inout) :: flag_cice +- logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet ++ logical, dimension(:), intent(inout) :: flag_cice ++ logical, dimension(:), intent(inout) :: dry, icy, lake, ocean, wet + real(kind=kind_phys), intent(in ) :: cimin +- real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac +- real(kind=kind_phys), dimension(im), intent(inout) :: cice +- real(kind=kind_phys), dimension(im), intent( out) :: frland +- real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx ++ real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac ++ real(kind=kind_phys), dimension(:), intent(inout) :: cice ++ real(kind=kind_phys), dimension(:), intent( out) :: frland ++ real(kind=kind_phys), dimension(:), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + +- real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf +- real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & ++ real(kind=kind_phys), dimension(:), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf ++ real(kind=kind_phys), dimension(:), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & + tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & + tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & + qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice +- real(kind=kind_phys), dimension(im), intent( out) :: tice ++ real(kind=kind_phys), dimension(:), intent( out) :: tice + real(kind=kind_phys), intent(in ) :: tgice +- integer, dimension(im), intent(inout) :: islmsk +- real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad +- real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice ++ integer, dimension(:), intent(inout) :: islmsk ++ real(kind=kind_phys), dimension(:), intent(in ) :: semis_rad ++ real(kind=kind_phys), dimension(:), intent(inout) :: semis_wat, semis_lnd, semis_ice + real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice + + ! CCPP error handling +@@ -252,11 +252,11 @@ contains + + ! Interface variables + integer, intent(in ) :: im +- logical, dimension(im), intent(in ) :: dry, icy, wet +- real(kind=kind_phys), dimension(im), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & ++ logical, dimension(:), intent(in ) :: dry, icy, wet ++ real(kind=kind_phys), dimension(:), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & + adjsfcdsw, adjsfcnsw +- real(kind=kind_phys), dimension(im), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat +- real(kind=kind_phys), dimension(im), intent(out) :: adjsfcusw ++ real(kind=kind_phys), dimension(:), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat ++ real(kind=kind_phys), dimension(:), intent(out) :: adjsfcusw + + ! CCPP error handling + character(len=*), intent(out) :: errmsg +@@ -339,9 +339,9 @@ contains + + integer, intent(in) :: im, kice, km + logical, intent(in) :: cplflx, frac_grid, cplwav2atm +- logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy +- integer, dimension(im), intent(in) :: islmsk +- real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & ++ logical, dimension(:), intent(in) :: flag_cice, dry, wet, icy ++ integer, dimension(:), intent(in) :: islmsk ++ real(kind=kind_phys), dimension(:), intent(in) :: landfrac, lakefrac, oceanfrac, & + zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & + stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & + fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & +@@ -349,15 +349,15 @@ contains + snowd_wat, snowd_lnd, snowd_ice,tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & + hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, tsfc_lnd, tsfc_ice + +- real(kind=kind_phys), dimension(im), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & ++ real(kind=kind_phys), dimension(:), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & + fh2, tsurf, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc + +- real(kind=kind_phys), dimension(im), intent(in ) :: tice ! interstitial sea ice temperature +- real(kind=kind_phys), dimension(im), intent(inout) :: hice, cice ++ real(kind=kind_phys), dimension(:), intent(in ) :: tice ! interstitial sea ice temperature ++ real(kind=kind_phys), dimension(:), intent(inout) :: hice, cice + real(kind=kind_phys), intent(in ) :: min_seaice + +- real(kind=kind_phys), dimension(im, kice), intent(in ) :: tiice +- real(kind=kind_phys), dimension(im, km), intent(inout) :: stc ++ real(kind=kind_phys), dimension(:, :), intent(in ) :: tiice ++ real(kind=kind_phys), dimension(:, :), intent(inout) :: stc + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 +index 337e4c5..d65f4ad 100644 +--- a/physics/GFS_surface_generic.F90 ++++ b/physics/GFS_surface_generic.F90 +@@ -38,51 +38,51 @@ + + ! Interface variables + integer, intent(in) :: im, levs, isot, ivegsrc +- integer, dimension(im), intent(in) :: islmsk +- integer, dimension(im), intent(inout) :: soiltyp, vegtype, slopetyp ++ integer, dimension(:), intent(in) :: islmsk ++ integer, dimension(:), intent(inout) :: soiltyp, vegtype, slopetyp + + real(kind=kind_phys), intent(in) :: con_g +- real(kind=kind_phys), dimension(im), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 ++ real(kind=kind_phys), dimension(:), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 + +- real(kind=kind_phys), dimension(im), intent(inout) :: tsfc +- real(kind=kind_phys), dimension(im,levs), intent(in) :: phil ++ real(kind=kind_phys), dimension(:), intent(inout) :: tsfc ++ real(kind=kind_phys), dimension(:,:), intent(in) :: phil + +- real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl ++ real(kind=kind_phys), dimension(:), intent(inout) :: sigmaf, work3, tsurf, zlvl + + ! Stochastic physics / surface perturbations + logical, intent(in) :: do_sppt, ca_global +- real(kind=kind_phys), dimension(im,levs), intent(out) :: dtdtr +- real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl +- real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl +- real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl +- real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl ++ real(kind=kind_phys), dimension(:,:), intent(out) :: dtdtr ++ real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl ++ real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl ++ real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl ++ real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl + logical, intent(in) :: do_sfcperts + integer, intent(in) :: nsfcpert +- real(kind=kind_phys), dimension(im,nsfcpert), intent(in) :: sfc_wts ++ real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts + real(kind=kind_phys), dimension(:), intent(in) :: pertz0 + real(kind=kind_phys), dimension(:), intent(in) :: pertzt + real(kind=kind_phys), dimension(:), intent(in) :: pertshc + real(kind=kind_phys), dimension(:), intent(in) :: pertlai + real(kind=kind_phys), dimension(:), intent(in) :: pertvegf +- real(kind=kind_phys), dimension(im), intent(out) :: z01d +- real(kind=kind_phys), dimension(im), intent(out) :: zt1d +- real(kind=kind_phys), dimension(im), intent(out) :: bexp1d +- real(kind=kind_phys), dimension(im), intent(out) :: xlai1d +- real(kind=kind_phys), dimension(im), intent(out) :: vegf1d ++ real(kind=kind_phys), dimension(:), intent(out) :: z01d ++ real(kind=kind_phys), dimension(:), intent(out) :: zt1d ++ real(kind=kind_phys), dimension(:), intent(out) :: bexp1d ++ real(kind=kind_phys), dimension(:), intent(out) :: xlai1d ++ real(kind=kind_phys), dimension(:), intent(out) :: vegf1d + + logical, intent(in) :: cplflx +- real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl +- logical, dimension(im), intent(inout) :: flag_cice +- integer, dimension(im), intent(out) :: islmsk_cice +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl ++ logical, dimension(:), intent(inout) :: flag_cice ++ integer, dimension(:), intent(out) :: islmsk_cice ++ real(kind=kind_phys), dimension(:), intent(in) :: & + tisfc, tsfco, fice, hice + +- real(kind=kind_phys), dimension(im), intent(out) :: wind +- real(kind=kind_phys), dimension(im), intent(in ) :: u1, v1 ++ real(kind=kind_phys), dimension(:), intent(out) :: wind ++ real(kind=kind_phys), dimension(:), intent(in ) :: u1, v1 + ! surface wind enhancement due to convection +- real(kind=kind_phys), dimension(im), intent(inout ) :: cnvwind ++ real(kind=kind_phys), dimension(:), intent(inout ) :: cnvwind + ! +- real(kind=kind_phys), dimension(im), intent(out) :: smcwlt2, smcref2 ++ real(kind=kind_phys), dimension(:), intent(out) :: smcwlt2, smcref2 + + ! CCPP error handling + character(len=*), intent(out) :: errmsg +@@ -227,29 +227,29 @@ + + integer, intent(in) :: im + logical, intent(in) :: cplflx, cplwav, lssav +- logical, dimension(im), intent(in) :: icy, wet ++ logical, dimension(:), intent(in) :: icy, wet + real(kind=kind_phys), intent(in) :: dtf + +- real(kind=kind_phys), dimension(im), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & ++ real(kind=kind_phys), dimension(:), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & + adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & + t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf + +- real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & ++ real(kind=kind_phys), dimension(:), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & + dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & + nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & + nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & + evcwa, transa, sbsnoa, snowca, snohfa, ep + +- real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff +- real(kind=kind_phys), dimension(im), intent(in) :: drain, runof ++ real(kind=kind_phys), dimension(:), intent(inout) :: runoff, srunoff ++ real(kind=kind_phys), dimension(:), intent(in) :: drain, runof + + ! For canopy heat storage + logical, intent(in) :: lheatstrg + real(kind=kind_phys), intent(in) :: z0fac, e0fac +- real(kind=kind_phys), dimension(im), intent(in) :: zorl +- real(kind=kind_phys), dimension(im), intent(in) :: hflx, evap +- real(kind=kind_phys), dimension(im), intent(out) :: hflxq, evapq +- real(kind=kind_phys), dimension(im), intent(out) :: hffac, hefac ++ real(kind=kind_phys), dimension(:), intent(in) :: zorl ++ real(kind=kind_phys), dimension(:), intent(in) :: hflx, evap ++ real(kind=kind_phys), dimension(:), intent(out) :: hflxq, evapq ++ real(kind=kind_phys), dimension(:), intent(out) :: hffac, hefac + + ! CCPP error handling variables + character(len=*), intent(out) :: errmsg +diff --git a/physics/GFS_surface_loop_control.F90 b/physics/GFS_surface_loop_control.F90 +index c7f727d..afa3413 100644 +--- a/physics/GFS_surface_loop_control.F90 ++++ b/physics/GFS_surface_loop_control.F90 +@@ -90,10 +90,10 @@ + ! Interface variables + integer, intent(in) :: im + integer, intent(in) :: iter +- real(kind=kind_phys), dimension(im), intent(in) :: wind +- logical, dimension(im), intent(inout) :: flag_guess +- logical, dimension(im), intent(inout) :: flag_iter +- logical, dimension(im), intent(in) :: dry, wet, icy ++ real(kind=kind_phys), dimension(:), intent(in) :: wind ++ logical, dimension(:), intent(inout) :: flag_guess ++ logical, dimension(:), intent(inout) :: flag_iter ++ logical, dimension(:), intent(in) :: dry, wet, icy + integer, intent(in) :: nstf_name1 + + character(len=*), intent(out) :: errmsg +diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 +index dc9332b..66c9173 100644 +--- a/physics/GFS_time_vary_pre.fv3.F90 ++++ b/physics/GFS_time_vary_pre.fv3.F90 +@@ -74,7 +74,7 @@ + implicit none + + integer, intent(in) :: idate(4) +- integer, intent(in) :: jdat(1:8), idat(1:8) ++ integer, intent(in) :: jdat(:), idat(:) + integer, intent(in) :: lkm, lsm, lsm_noahmp, & + nsswr, nslwr, me, & + master, nscyc, nhfrad +diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 +index 2fa3527..842423d 100644 +--- a/physics/GFS_time_vary_pre.scm.F90 ++++ b/physics/GFS_time_vary_pre.scm.F90 +@@ -74,7 +74,7 @@ + implicit none + + integer, intent(in) :: idate(4) +- integer, intent(in) :: jdat(1:8), idat(1:8) ++ integer, intent(in) :: jdat(:), idat(:) + integer, intent(in) :: lsm, lsm_noahmp, & + nsswr, nslwr, me, & + master, nscyc +diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 +index df0116c..018cf6a 100644 +--- a/physics/cires_ugwp.F90 ++++ b/physics/cires_ugwp.F90 +@@ -54,7 +54,7 @@ contains + integer, intent (in) :: latr + real(kind=kind_phys), intent (in) :: ak(:), bk(:) + real(kind=kind_phys), intent (in) :: dtp +- real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes ++ real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes + real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in + real(kind=kind_phys), intent (in) :: con_p0 + logical, intent (in) :: do_ugwp +@@ -163,24 +163,24 @@ contains + + ! interface variables + integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr +- integer, intent(in), dimension(im) :: kpbl +- real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma ++ integer, intent(in), dimension(:) :: kpbl ++ real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma + logical, intent(in) :: flag_for_gwd_generic_tend + ! elvmax is intent(in) for CIRES UGWP, but intent(inout) for GFS GWDPS +- real(kind=kind_phys), intent(inout), dimension(im) :: elvmax +- real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 +- real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area +- real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil +- real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii +- real(kind=kind_phys), intent(in), dimension(im, levs, ntrac):: qgrs +- real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(4) ++ real(kind=kind_phys), intent(inout), dimension(:) :: elvmax ++ real(kind=kind_phys), intent(in), dimension(:, :) :: clx, oa4 ++ real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area ++ real(kind=kind_phys), intent(in), dimension(:, :) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil ++ real(kind=kind_phys), intent(in), dimension(:, :) :: prsi, phii ++ real(kind=kind_phys), intent(in), dimension(:,:,:):: qgrs ++ real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(:) + logical, intent(in) :: do_ugwp, do_tofd, ldiag_ugwp + +- real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg +- real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb +- real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw +- real(kind=kind_phys), intent(out), dimension(im, levs):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis +- real(kind=kind_phys), intent(out), dimension(im, levs):: dudt_mtb, dudt_ogw, dudt_tms ++ real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg ++ real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb ++ real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw ++ real(kind=kind_phys), intent(out), dimension(:, :):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis ++ real(kind=kind_phys), intent(out), dimension(:, :):: dudt_mtb, dudt_ogw, dudt_tms + + ! These arrays are only allocated if ldiag=.true. + real(kind=kind_phys), intent(inout), dimension(:,:) :: ldu3dt_ogw, ldv3dt_ogw, ldt3dt_ogw +@@ -190,11 +190,11 @@ contains + ! These arrays only allocated if ldiag_ugwp = .true. + real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms + +- real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt ++ real(kind=kind_phys), intent(inout), dimension(:, :):: dudt, dvdt, dtdt + + real(kind=kind_phys), intent(in) :: con_g, con_pi, con_cp, con_rd, con_rv, con_fvirt + +- real(kind=kind_phys), intent(in), dimension(im) :: rain ++ real(kind=kind_phys), intent(in), dimension(:) :: rain + + integer, intent(in) :: ntke + real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke +diff --git a/physics/cnvc90.f b/physics/cnvc90.f +index 9bef0eb..6a49158 100644 +--- a/physics/cnvc90.f ++++ b/physics/cnvc90.f +@@ -30,16 +30,16 @@ + ! Interface variables + real(kind=kind_phys), intent(in) :: clstp + integer, intent(in) :: im, km +- real(kind=kind_phys), intent(in) :: RN(IM) +- integer, intent(in) :: KBOT(IM) +- integer, intent(in) :: KTOP(IM) +- real(kind=kind_phys), intent(in) :: prsi(IM,km+1) +- real(kind=kind_phys), intent(inout) :: ACV(IM) +- real(kind=kind_phys), intent(inout) :: ACVB(IM) +- real(kind=kind_phys), intent(inout) :: ACVT(IM) +- real(kind=kind_phys), intent(inout) :: CV(IM) +- real(kind=kind_phys), intent(inout) :: CVB(IM) +- real(kind=kind_phys), intent(inout) :: CVT(IM) ++ real(kind=kind_phys), intent(in) :: RN(:) ++ integer, intent(in) :: KBOT(:) ++ integer, intent(in) :: KTOP(:) ++ real(kind=kind_phys), intent(in) :: prsi(:,:) ++ real(kind=kind_phys), intent(inout) :: ACV(:) ++ real(kind=kind_phys), intent(inout) :: ACVB(:) ++ real(kind=kind_phys), intent(inout) :: ACVT(:) ++ real(kind=kind_phys), intent(inout) :: CV(:) ++ real(kind=kind_phys), intent(inout) :: CVB(:) ++ real(kind=kind_phys), intent(inout) :: CVT(:) + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 +index 3863494..f1d138e 100644 +--- a/physics/cs_conv.F90 ++++ b/physics/cs_conv.F90 +@@ -31,15 +31,15 @@ module cs_conv_pre + + ! --- inputs + integer, intent(in) :: im, levs, ntrac, ncld +- real(r8), dimension(im,levs), intent(in) :: q +- real(r8), dimension(im,levs), intent(in) :: clw1,clw2 +- real(r8), dimension(im), intent(in) :: work1, work2 ++ real(r8), dimension(:, :), intent(in) :: q ++ real(r8), dimension(:, :), intent(in) :: clw1,clw2 ++ real(r8), dimension(:), intent(in) :: work1, work2 + real(r8), intent(in) :: cs_parm1, cs_parm2 + + ! --- input/output +- real(r8), dimension(ntrac-ncld+2), intent(out) :: fswtr, fscav +- real(r8), dimension(im), intent(out) :: wcbmax +- real(r8), dimension(im,levs), intent(out) :: save_q1,save_q2 ++ real(r8), dimension(:), intent(out) :: fswtr, fscav ++ real(r8), dimension(:), intent(out) :: wcbmax ++ real(r8), dimension(:, :), intent(out) :: save_q1,save_q2 + ! save_q3 is not allocated for Zhao-Carr MP + real(r8), dimension(:,:), intent(out) :: save_q3 + +@@ -101,10 +101,10 @@ module cs_conv_post + ! --- inputs + integer, intent(in) :: im, kmax + logical, intent(in) :: do_aw +- real(r8), dimension(im,kmax), intent(in) :: sigmatot ++ real(r8), dimension(:, :), intent(in) :: sigmatot + + ! --- input/output +- real(r8), dimension(im,kmax), intent(out) :: sigmafrac ++ real(r8), dimension(:, :), intent(out) :: sigmafrac + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -309,23 +309,23 @@ module cs_conv + ! input arguments + ! + INTEGER, INTENT(IN) :: IJSDIM, KMAX, ntracp1, nn, NTR, mype, nctp, mp_phys, kdt, lat !! DD, for GFS, pass in +- logical, intent(in) :: otspt(1:ntracp1,1:2)! otspt(:,1) - on/off switch for tracer transport by updraft and ++ logical, intent(in) :: otspt(:, :)! otspt(:,1) - on/off switch for tracer transport by updraft and + ! downdraft. should not include subgrid PDF and turbulence + ! otspt(:,2) - on/off switch for tracer transport by subsidence + ! should include subgrid PDF and turbulence + +- real(r8), intent(inout) :: t(IJSDIM,KMAX) ! temperature at mid-layer (K) +- real(r8), intent(inout) :: q(IJSDIM,KMAX) ! water vapor array including moisture (kg/kg) +- real(r8), intent(inout) :: clw(IJSDIM,KMAX,nn) ! tracer array including cloud condensate (kg/kg) +- real(r8), intent(in) :: pap(IJSDIM,KMAX) ! pressure at mid-layer (Pa) +- real(r8), intent(in) :: paph(IJSDIM,KMAX+1) ! pressure at boundaries (Pa) +- real(r8), intent(in) :: zm(IJSDIM,KMAX) ! geopotential at mid-layer (m) +- real(r8), intent(in) :: zi(IJSDIM,KMAX+1) ! geopotential at boundaries (m) +- real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) ++ real(r8), intent(inout) :: t(:, :) ! temperature at mid-layer (K) ++ real(r8), intent(inout) :: q(:, :) ! water vapor array including moisture (kg/kg) ++ real(r8), intent(inout) :: clw(:, :, :) ! tracer array including cloud condensate (kg/kg) ++ real(r8), intent(in) :: pap(:, :) ! pressure at mid-layer (Pa) ++ real(r8), intent(in) :: paph(:, :) ! pressure at boundaries (Pa) ++ real(r8), intent(in) :: zm(:, :) ! geopotential at mid-layer (m) ++ real(r8), intent(in) :: zi(:, :) ! geopotential at boundaries (m) ++ real(r8), intent(in) :: fscav(:), fswtr(:), wcbmaxm(:) + real(r8), intent(in) :: precz0in, preczhin, clmdin + ! added for cs_convr +- real(r8), intent(inout) :: u(IJSDIM,KMAX) ! zonal wind at mid-layer (m/s) +- real(r8), intent(inout) :: v(IJSDIM,KMAX) ! meridional wind at mid-layer (m/s) ++ real(r8), intent(inout) :: u(:, :) ! zonal wind at mid-layer (m/s) ++ real(r8), intent(inout) :: v(:, :) ! meridional wind at mid-layer (m/s) + + real(r8), intent(in) :: DELTA ! physics time step + real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) +@@ -333,12 +333,12 @@ module cs_conv + ! + ! modified arguments + ! +- real(r8), intent(inout) :: CBMFX(IJSDIM,nctp) ! cloud base mass flux (kg/m2/s) ++ real(r8), intent(inout) :: CBMFX(:, :) ! cloud base mass flux (kg/m2/s) + ! + ! output arguments + ! + ! updraft, downdraft, and detrainment mass flux (kg/m2/s) +- real(r8), intent(inout), dimension(IJSDIM,KMAX) :: ud_mf, dd_mf, dt_mf ++ real(r8), intent(inout), dimension(:, :) :: ud_mf, dd_mf, dt_mf + + real(r8), intent(out) :: rain1(IJSDIM) ! lwe thickness of deep convective precipitation amount (m) + ! GJF* These variables are conditionally allocated depending on whether the +@@ -348,14 +348,14 @@ module cs_conv + cnv_dqldt, clcn, cnv_fice, & + cnv_ndrop, cnv_nice, cf_upi + ! *GJF +- integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise ++ integer, intent(inout) :: kcnv(:) ! zero if no deep convection and 1 otherwise + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + !DDsigma - output added for AW sigma diagnostics + ! interface sigma and vertical velocity by cloud type (1=sfc) + ! real(r8), intent(out), dimension(IJSDIM,KMAX,nctp) :: sigmai, vverti +- real(r8), intent(out), dimension(IJSDIM,KMAX) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) ++ real(r8), intent(out), dimension(:, :) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) + ! sigma terms in eq 91 and 92 + ! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm + !DDsigma +@@ -738,19 +738,19 @@ module cs_conv + logical, intent(in) :: otspt1(ntr), otspt2(ntr), lprnt + ! + ! [OUTPUT] +- REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate ++ REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate + REAL(r8), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q +- REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u +- REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v +- REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux ++ REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u ++ REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v ++ REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux + + ! assuming there is no flux at the top of the atmospherea - Moorthi +- REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux +- REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux +- REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux +- REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux ++ REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux ++ REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux ++ REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux ++ REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux + +- REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) ++ REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) + INTEGER , INTENT(OUT) :: KT (IJSDIM, NCTP ) ! cloud top + ! + ! [MODIFIED] +@@ -774,14 +774,14 @@ module cs_conv + real(r8), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux + ! + ! [INPUT] +- REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T ++ REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T + REAL(r8), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag +- REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u +- REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v +- REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T ++ REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u ++ REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v ++ REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T + REAL(r8), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P + REAL(r8), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) +- REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude ++ REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude + REAL(r8), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude + REAL(r8), INTENT(IN) :: DELTA ! delta(t) (dynamics) + REAL(r8), INTENT(IN) :: DELTI ! delta(t) (internal variable) +diff --git a/physics/cs_conv_aw_adj.F90 b/physics/cs_conv_aw_adj.F90 +index 756161d..74cac91 100644 +--- a/physics/cs_conv_aw_adj.F90 ++++ b/physics/cs_conv_aw_adj.F90 +@@ -40,15 +40,15 @@ module cs_conv_aw_adj + logical, intent(in) :: do_cscnv, do_aw, do_shoc + integer, intent(in) :: ntrac, ncld, ntcw, ntclamt, nncl + real(kind_phys), intent(in) :: con_g +- real(kind_phys), dimension(im,levs), intent(inout) :: sigmafrac +- real(kind_phys), dimension(im,levs), intent(inout) :: gt0 +- real(kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 +- real(kind_phys), dimension(im,levs), intent(in) :: save_t +- real(kind_phys), dimension(im,levs,ntrac), intent(in) :: save_q +- real(kind_phys), dimension(im,levs+1), intent(in) :: prsi +- real(kind_phys), dimension(im,levs), intent(inout) :: cldfrac +- real(kind_phys), dimension(im,levs), intent(inout) :: subcldfrac +- real(kind_phys), dimension(im), intent(inout) :: prcp ++ real(kind_phys), dimension(:,:), intent(inout) :: sigmafrac ++ real(kind_phys), dimension(:,:), intent(inout) :: gt0 ++ real(kind_phys), dimension(:,:,:), intent(inout) :: gq0 ++ real(kind_phys), dimension(:,:), intent(in) :: save_t ++ real(kind_phys), dimension(:,:,:), intent(in) :: save_q ++ real(kind_phys), dimension(:,:), intent(in) :: prsi ++ real(kind_phys), dimension(:,:), intent(inout) :: cldfrac ++ real(kind_phys), dimension(:,:), intent(inout) :: subcldfrac ++ real(kind_phys), dimension(:), intent(inout) :: prcp + integer, intent(in ) :: imp_physics, imp_physics_mg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg +diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 +index 5c43709..4b9e423 100644 +--- a/physics/cu_gf_driver.F90 ++++ b/physics/cu_gf_driver.F90 +@@ -101,42 +101,42 @@ contains + logical, intent(in ) :: flag_for_scnv_generic_tend,flag_for_dcnv_generic_tend + logical, intent(in ) :: ldiag3d,qdiag3d + +- real(kind=kind_phys), dimension( im , km ), intent(in ) :: forcet,forceqv_spechum,w,phil +- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: t,us,vs +- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: qci_conv ++ real(kind=kind_phys), dimension( :, :), intent(in ) :: forcet,forceqv_spechum,w,phil ++ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: t,us,vs ++ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: qci_conv + real(kind=kind_phys), dimension( im ) :: rand_mom,rand_vmas +- real(kind=kind_phys), dimension( im,4 ) :: rand_clos ++ real(kind=kind_phys), dimension( im,4 ) :: rand_clos + real(kind=kind_phys), dimension( im , km, 11 ) :: gdc,gdc2 +- real(kind=kind_phys), dimension( im , km ), intent(out ) :: cnvw_moist,cnvc +- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: cliw, clcw ++ real(kind=kind_phys), dimension( :, :), intent(out ) :: cnvw_moist,cnvc ++ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: cliw, clcw + + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: & + du3dt_SCNV,dv3dt_SCNV,dt3dt_SCNV,dq3dt_SCNV, & + du3dt_DCNV,dv3dt_DCNV,dt3dt_DCNV,dq3dt_DCNV + +- integer, dimension (im), intent(inout) :: hbot,htop,kcnv +- integer, dimension (im), intent(in) :: xland +- real(kind=kind_phys), dimension (im), intent(in) :: pbl ++ integer, dimension (:), intent(inout) :: hbot,htop,kcnv ++ integer, dimension (:), intent(in) :: xland ++ real(kind=kind_phys), dimension (:), intent(in) :: pbl + integer, dimension (im) :: tropics + ! ruc variable +- real(kind=kind_phys), dimension (im) :: hfx2,qfx2,psuri +- real(kind=kind_phys), dimension (im,km) :: ud_mf,dd_mf,dt_mf +- real(kind=kind_phys), dimension (im), intent(inout) :: raincv,cld1d +- real(kind=kind_phys), dimension (im,km) :: t2di,p2di ++ real(kind=kind_phys), dimension (:) :: hfx2,qfx2,psuri ++ real(kind=kind_phys), dimension (:,:) :: ud_mf,dd_mf,dt_mf ++ real(kind=kind_phys), dimension (:), intent(inout) :: raincv,cld1d ++ real(kind=kind_phys), dimension (:,:) :: t2di,p2di + ! Specific humidity from FV3 +- real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum +- real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum ++ real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum ++ real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum + ! Local water vapor mixing ratios and cloud water mixing ratios + real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw + ! +- real(kind=kind_phys), dimension( im ),intent(in) :: garea ++ real(kind=kind_phys), dimension( : ),intent(in) :: garea + real(kind=kind_phys), intent(in ) :: dt + + integer, intent(in ) :: imfshalcnv + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! define locally for now. +- integer, dimension(im),intent(inout) :: cactiv ++ integer, dimension(:),intent(inout) :: cactiv + integer, dimension(im) :: k22_shallow,kbcon_shallow,ktop_shallow + real(kind=kind_phys), dimension(im) :: ht + real(kind=kind_phys), dimension(im) :: dx +diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 +index a824c6a..66ae9d0 100644 +--- a/physics/cu_ntiedtke.F90 ++++ b/physics/cu_ntiedtke.F90 +@@ -159,16 +159,16 @@ contains + ! in&out variables + integer, intent(in) :: lq, km, ktrac + real(kind=kind_phys), intent(in ) :: dt +- integer, dimension( lq ), intent(in) :: lmask +- real(kind=kind_phys), dimension( lq ), intent(in ) :: evap, hfx, dx +- real(kind=kind_phys), dimension( lq , km ), intent(inout) :: pu, pv, pt, pqv +- real(kind=kind_phys), dimension( lq , km ), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf +- real(kind=kind_phys), dimension( lq , km+1 ), intent(in ) :: pzz, prsi +- real(kind=kind_phys), dimension( lq , km, ktrac ), intent(inout ) :: clw +- +- integer, dimension( lq ), intent(out) :: kbot, ktop, kcnv +- real(kind=kind_phys), dimension( lq ), intent(out) :: zprecc +- real(kind=kind_phys), dimension (lq,km), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc ++ integer, dimension( : ), intent(in) :: lmask ++ real(kind=kind_phys), dimension( : ), intent(in ) :: evap, hfx, dx ++ real(kind=kind_phys), dimension( :, : ), intent(inout) :: pu, pv, pt, pqv ++ real(kind=kind_phys), dimension( :, :), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf ++ real(kind=kind_phys), dimension( :, : ), intent(in ) :: pzz, prsi ++ real(kind=kind_phys), dimension( :, :, : ), intent(inout ) :: clw ++ ++ integer, dimension( : ), intent(out) :: kbot, ktop, kcnv ++ real(kind=kind_phys), dimension( : ), intent(out) :: zprecc ++ real(kind=kind_phys), dimension (:, :), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc + + ! error messages + character(len=*), intent(out) :: errmsg +diff --git a/physics/dcyc2.f b/physics/dcyc2.f +index 6dca65c..347639d 100644 +--- a/physics/dcyc2.f ++++ b/physics/dcyc2.f +@@ -216,36 +216,36 @@ + + ! integer, intent(in) :: ipr + ! logical lprnt +- logical, dimension(im), intent(in) :: dry, icy, wet ++ logical, dimension(:), intent(in) :: dry, icy, wet + real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & + & deltim, fhswr + +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & + & sfcdsw, sfcnsw + +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & tsfc_lnd, tsfc_ice, tsfc_wat, & + & sfcemis_lnd, sfcemis_ice, sfcemis_wat + +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & sfcnirbmu, sfcnirdfu, sfcvisbmu, sfcvisdfu, & + & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd + +- real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & ++ real(kind=kind_phys), dimension(:,:), intent(in) :: swh, hlw & + &, swhc, hlwc + + ! --- input/output: +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdt & + &, dtdtc + + ! --- outputs: +- real(kind=kind_phys), dimension(im), intent(out) :: & ++ real(kind=kind_phys), dimension(:), intent(out) :: & + & adjsfcdsw, adjsfcnsw, adjsfcdlw, xmu, xcosz, & + & adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & + & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd + +- real(kind=kind_phys), dimension(im), intent(out) :: & ++ real(kind=kind_phys), dimension(:), intent(out) :: & + & adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat + + character(len=*), intent(out) :: errmsg +diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 +index 55ef9c2..050d635 100644 +--- a/physics/drag_suite.F90 ++++ b/physics/drag_suite.F90 +@@ -298,8 +298,8 @@ + integer, intent(in) :: im, km, imx, kdt, ipr, me, master + integer, intent(in) :: gwd_opt + logical, intent(in) :: lprnt +- integer, intent(in) :: KPBL(im) +- real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(2) ++ integer, intent(in) :: KPBL(:) ++ real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(:) + + integer :: kpblmax + integer, parameter :: ims=1, kms=1, its=1, kts=1 +@@ -308,29 +308,29 @@ + real(kind=kind_phys) :: g_inv + + real(kind=kind_phys), intent(inout) :: & +- & dudt(im,km),dvdt(im,km), & +- & dtdt(im,km) +- real(kind=kind_phys), intent(out) :: rdxzb(im) ++ & dudt(:,:),dvdt(:,:), & ++ & dtdt(:,:) ++ real(kind=kind_phys), intent(out) :: rdxzb(:) + real(kind=kind_phys), intent(in) :: & +- & u1(im,km),v1(im,km), & +- & t1(im,km),q1(im,km), & +- & PHII(im,km+1),prsl(im,km), & +- & prslk(im,km),PHIL(im,km) +- real(kind=kind_phys), intent(in) :: prsi(im,km+1), & +- & del(im,km) +- real(kind=kind_phys), intent(in) :: var(im),oc1(im), & +- & oa4(im,4),ol4(im,4), & +- & dx(im) +- real(kind=kind_phys), intent(in) :: varss(im),oc1ss(im), & +- & oa4ss(im,4),ol4ss(im,4) +- real(kind=kind_phys), intent(in) :: THETA(im),SIGMA(im), & +- & GAMMA(im),ELVMAX(im) ++ & u1(:,:),v1(:,:), & ++ & t1(:,:),q1(:,:), & ++ & PHII(:,:),prsl(:,:), & ++ & prslk(:,:),PHIL(:,:) ++ real(kind=kind_phys), intent(in) :: prsi(:,:), & ++ & del(:,:) ++ real(kind=kind_phys), intent(in) :: var(:),oc1(:), & ++ & oa4(:,:),ol4(:,:), & ++ & dx(:) ++ real(kind=kind_phys), intent(in) :: varss(:),oc1ss(:), & ++ & oa4ss(:,:),ol4ss(:,:) ++ real(kind=kind_phys), intent(in) :: THETA(:),SIGMA(:), & ++ & GAMMA(:),ELVMAX(:) + + ! added for small-scale orographic wave drag + real(kind=kind_phys), dimension(im,km) :: utendwave,vtendwave,thx,thvx +- real(kind=kind_phys), intent(in) :: br1(im), & +- & hpbl(im), & +- & slmsk(im) ++ real(kind=kind_phys), intent(in) :: br1(:), & ++ & hpbl(:), & ++ & slmsk(:) + real(kind=kind_phys), dimension(im) :: govrth,xland + !real(kind=kind_phys), dimension(im,km) :: dz2 + real(kind=kind_phys) :: tauwavex0,tauwavey0, & +@@ -344,7 +344,7 @@ + + !Output: + real(kind=kind_phys), intent(out) :: & +- & dusfc(im), dvsfc(im) ++ & dusfc(:), dvsfc(:) + !Output (optional): + real(kind=kind_phys), intent(out) :: & + & dusfc_ls(:),dvsfc_ls(:), & +diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 +index b882c74..a1edf69 100644 +--- a/physics/flake_driver.F90 ++++ b/physics/flake_driver.F90 +@@ -81,21 +81,21 @@ IMPLICIT NONE + integer, intent(in) :: im, imon,yearlen + ! integer, dimension(im), intent(in) :: islmsk + +- real (kind=kind_phys), dimension(im), intent(in) :: ps, wind, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, wind, & + & t1, q1, dlwflx, dswsfc, zlvl, elev + + real (kind=kind_phys), intent(in) :: delt + +- real (kind=kind_phys), dimension(im), intent(in) :: & ++ real (kind=kind_phys), dimension(:), intent(in) :: & + & xlat, weasd, lakedepth + +- real (kind=kind_phys),dimension(im),intent(inout) :: & ++ real (kind=kind_phys),dimension(:),intent(inout) :: & + & snwdph, hice, tsurf, t_sfc, hflx, evap, fice, ustar, qsfc, & + & ch, cm, chh, cmm + + real (kind=kind_phys), intent(in) :: julian + +- logical, dimension(im), intent(in) :: flag_iter, wet, lake ++ logical, dimension(:), intent(in) :: flag_iter, wet, lake + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/gcm_shoc.F90 b/physics/gcm_shoc.F90 +index dd7791e..3d98a5d 100644 +--- a/physics/gcm_shoc.F90 ++++ b/physics/gcm_shoc.F90 +@@ -35,12 +35,12 @@ subroutine shoc_run (nx, nzm, tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_ + real(kind=kind_phys), intent(in) :: tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_rv, con_rd, con_pi, con_fvirt, & + dtp, supice, pcrit, cefac, cesfac, tkef1, dis_opt + ! +- real(kind=kind_phys), intent(in), dimension(nx) :: hflx, evap +- real(kind=kind_phys), intent(in), dimension(nx,nzm) :: prsl, delp, phil, u, v, omega, rhc, prnum +- real(kind=kind_phys), intent(in), dimension(nx,nzm+1) :: phii ++ real(kind=kind_phys), intent(in), dimension(:) :: hflx, evap ++ real(kind=kind_phys), intent(in), dimension(:,:) :: prsl, delp, phil, u, v, omega, rhc, prnum ++ real(kind=kind_phys), intent(in), dimension(:,:) :: phii + ! +- real(kind=kind_phys), intent(inout), dimension(nx,nzm) :: gt0, cld_sgs, tke, tkh, wthv_sec +- real(kind=kind_phys), intent(inout), dimension(nx,nzm,ntrac) :: gq0 ++ real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, cld_sgs, tke, tkh, wthv_sec ++ real(kind=kind_phys), intent(inout), dimension(:,:,:) :: gq0 + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -1724,7 +1724,7 @@ contains + + + real function esatw(t) +- real t ! temperature (K) ++ real t ! temperature (K) + real a0,a1,a2,a3,a4,a5,a6,a7,a8 + data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & + 6.11239921, 0.443987641, 0.142986287e-1, & +@@ -1737,8 +1737,8 @@ contains + + real function qsatw(t,p) + ! implicit none +- real t ! temperature (K) +- real p ! pressure (Pa) ++ real t ! temperature (K) ++ real p ! pressure (Pa) + real esat + ! esat = fpvs(t) + esat = fpvsl(t) +@@ -1749,7 +1749,7 @@ contains + + + real function esati(t) +- real t ! temperature (K) ++ real t ! temperature (K) + real a0,a1,a2,a3,a4,a5,a6,a7,a8 + data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & + 6.11147274, 0.503160820, 0.188439774e-1, & +@@ -1769,8 +1769,8 @@ contains + end function esati + + real function qsati(t,p) +- real t ! temperature (K) +- real p ! pressure (Pa) ++ real t ! temperature (K) ++ real p ! pressure (Pa) + real esat !,esati + ! esat = fpvs(t) + esat = fpvsi(t) +@@ -1780,7 +1780,7 @@ contains + end function qsati + + real function dtesatw(t) +- real t ! temperature (K) ++ real t ! temperature (K) + real a0,a1,a2,a3,a4,a5,a6,a7,a8 + data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & + 0.443956472, 0.285976452e-1, 0.794747212e-3, & +@@ -1792,14 +1792,14 @@ contains + end function dtesatw + + real function dtqsatw(t,p) +- real t ! temperature (K) +- real p ! pressure (Pa) ++ real t ! temperature (K) ++ real p ! pressure (Pa) + ! real dtesatw + dtqsatw = 100.0*0.622*dtesatw(t)/p + end function dtqsatw + + real function dtesati(t) +- real t ! temperature (K) ++ real t ! temperature (K) + real a0,a1,a2,a3,a4,a5,a6,a7,a8 + data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & + 0.503223089, 0.377174432e-1, 0.126710138e-2, & +@@ -1820,8 +1820,8 @@ contains + + + real function dtqsati(t,p) +- real t ! temperature (K) +- real p ! pressure (Pa) ++ real t ! temperature (K) ++ real p ! pressure (Pa) + ! real dtesati + dtqsati = 100.0*0.622*dtesati(t)/p + end function dtqsati +diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 +index 352a618..e520c3e 100644 +--- a/physics/get_prs_fv3.F90 ++++ b/physics/get_prs_fv3.F90 +@@ -28,12 +28,12 @@ contains + + ! Interface variables + integer, intent(in) :: ix, levs +- real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: phii +- real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: prsi +- real(kind=kind_phys), dimension(ix,levs), intent(in) :: tgrs +- real(kind=kind_phys), dimension(ix,levs), intent(in) :: qgrs1 +- real(kind=kind_phys), dimension(ix,levs), intent(out) :: del +- real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: del_gz ++ real(kind=kind_phys), dimension(:,:), intent(in) :: phii ++ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi ++ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs ++ real(kind=kind_phys), dimension(:,:), intent(in) :: qgrs1 ++ real(kind=kind_phys), dimension(:,:), intent(out) :: del ++ real(kind=kind_phys), dimension(:,:), intent(out) :: del_gz + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +@@ -97,11 +97,11 @@ contains + + ! Interface variables + integer, intent(in) :: ix, levs +- real(kind=kind_phys), dimension(ix,levs), intent(in) :: gt0 +- real(kind=kind_phys), dimension(ix,levs), intent(in) :: gq01 +- real(kind=kind_phys), dimension(ix,levs+1), intent(inout) :: del_gz +- real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: phii +- real(kind=kind_phys), dimension(ix,levs), intent(out) :: phil ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: gq01 ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: del_gz ++ real(kind=kind_phys), dimension(:,:), intent(out) :: phii ++ real(kind=kind_phys), dimension(:,:), intent(out) :: phil + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +diff --git a/physics/gfdl_cloud_microphys.F90 b/physics/gfdl_cloud_microphys.F90 +index 1ccedb9..de1e0ef 100644 +--- a/physics/gfdl_cloud_microphys.F90 ++++ b/physics/gfdl_cloud_microphys.F90 +@@ -135,29 +135,29 @@ contains + ! interface variables + integer, intent(in ) :: levs, im + real(kind=kind_phys), intent(in ) :: con_g, con_fvirt, con_rd +- real(kind=kind_phys), intent(in ), dimension(1:im) :: frland, garea +- integer, intent(in ), dimension(1:im) :: islmsk +- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & ++ real(kind=kind_phys), intent(in ), dimension(:) :: frland, garea ++ integer, intent(in ), dimension(:) :: islmsk ++ real(kind=kind_phys), intent(inout), dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & + gq0_ntsw, gq0_ntgl, gq0_ntclamt +- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gt0, gu0, gv0 +- real(kind=kind_phys), intent(in ), dimension(1:im,1:levs) :: vvl, prsl, del +- real(kind=kind_phys), intent(in ), dimension(1:im,1:levs+1) :: phii ++ real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, gu0, gv0 ++ real(kind=kind_phys), intent(in ), dimension(:,:) :: vvl, prsl, del ++ real(kind=kind_phys), intent(in ), dimension(:,:) :: phii + + ! rain/snow/ice/graupel/precip amounts, fraction of frozen precip +- real(kind_phys), intent(out ), dimension(1:im) :: rain0 +- real(kind_phys), intent(out ), dimension(1:im) :: snow0 +- real(kind_phys), intent(out ), dimension(1:im) :: ice0 +- real(kind_phys), intent(out ), dimension(1:im) :: graupel0 +- real(kind_phys), intent(out ), dimension(1:im) :: prcp0 +- real(kind_phys), intent(out ), dimension(1:im) :: sr ++ real(kind_phys), intent(out ), dimension(:) :: rain0 ++ real(kind_phys), intent(out ), dimension(:) :: snow0 ++ real(kind_phys), intent(out ), dimension(:) :: ice0 ++ real(kind_phys), intent(out ), dimension(:) :: graupel0 ++ real(kind_phys), intent(out ), dimension(:) :: prcp0 ++ real(kind_phys), intent(out ), dimension(:) :: sr + + real(kind_phys), intent(in) :: dtp ! physics time step + logical, intent (in) :: hydrostatic, phys_hydrostatic + + logical, intent (in) :: lradar +- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: refl_10cm ++ real(kind=kind_phys), intent(inout), dimension(:,:) :: refl_10cm + logical, intent (in) :: reset, effr_in +- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: rew, rei, rer, res, reg ++ real(kind=kind_phys), intent(inout), dimension(:,:) :: rew, rei, rer, res, reg + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 +index 816488f..5cc3c91 100644 +--- a/physics/gfdl_fv_sat_adj.F90 ++++ b/physics/gfdl_fv_sat_adj.F90 +@@ -128,8 +128,8 @@ subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & + integer, intent(in ) :: kmp + integer, intent(in ) :: nwat + integer, intent(in ) :: ngas +- real(kind_dyn), intent(in ) :: rilist(0:ngas) +- real(kind_dyn), intent(in ) :: cpilist(0:ngas) ++ real(kind_dyn), intent(in ) :: rilist(:) ++ real(kind_dyn), intent(in ) :: cpilist(:) + integer, intent(in ) :: mpirank + integer, intent(in ) :: mpiroot + character(len=*), intent( out) :: errmsg +diff --git a/physics/gscond.f b/physics/gscond.f +index 28f2476..7144ba2 100644 +--- a/physics/gscond.f ++++ b/physics/gscond.f +@@ -73,14 +73,14 @@ + ! Interface variables + integer, intent(in) :: im, km, ipr + real(kind=kind_phys), intent(in) :: dt, dtf +- real(kind=kind_phys), intent(in) :: prsl(im,km), ps(im) +- real(kind=kind_phys), intent(inout) :: q(im,km) +- real(kind=kind_phys), intent(in) :: clw1(im,km), clw2(im,km) +- real(kind=kind_phys), intent(out) :: cwm(im,km) +- real(kind=kind_phys), intent(inout) :: t(im,km) & +- &, tp(im,km), qp(im,km), psp(im) & +- &, tp1(im,km), qp1(im,km), psp1(im) +- real(kind=kind_phys), intent(in) :: u(im,km) ++ real(kind=kind_phys), intent(in) :: prsl(:,:), ps(:) ++ real(kind=kind_phys), intent(inout) :: q(:,:) ++ real(kind=kind_phys), intent(in) :: clw1(:,:), clw2(:,:) ++ real(kind=kind_phys), intent(out) :: cwm(:,:) ++ real(kind=kind_phys), intent(inout) :: t(:,:) & ++ &, tp(:,:), qp(:,:), psp(:) & ++ &, tp1(:,:), qp1(:,:), psp1(:) ++ real(kind=kind_phys), intent(in) :: u(:,:) + logical, intent(in) :: lprnt + ! + character(len=*), intent(out) :: errmsg +diff --git a/physics/gwdc.f b/physics/gwdc.f +index 5c6f8ec..0978a95 100644 +--- a/physics/gwdc.f ++++ b/physics/gwdc.f +@@ -187,15 +187,15 @@ + !----------------------------------------------------------------------- + + integer, intent(in) :: im, km, lat, ipr +- integer, intent(in) :: ktop(im),kbot(im),kcnv(im) ++ integer, intent(in) :: ktop(:),kbot(:),kcnv(:) + real(kind=kind_phys), intent(in) :: grav,cp,rd,fv,fhour,deltim,pi +- real(kind=kind_phys), dimension(im), intent(in) :: qmax +- real(kind=kind_phys), dimension(im), intent(out) :: tauctx,taucty +- real(kind=kind_phys), dimension(im), intent(in) :: cldf,dlength +- real(kind=kind_phys), dimension(im,km), intent(in) :: u1,v1,t1, & ++ real(kind=kind_phys), dimension(:), intent(in) :: qmax ++ real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty ++ real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength ++ real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & + & q1,pmid1,dpmid1 +- real(kind=kind_phys), dimension(im,km), intent(out) :: utgwc,vtgwc +- real(kind=kind_phys), dimension(im,km+1), intent(in) :: pint1 ++ real(kind=kind_phys), dimension(:,:), intent(out) :: utgwc,vtgwc ++ real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 + ! + logical, intent(in) :: lprnt + ! +diff --git a/physics/gwdps.f b/physics/gwdps.f +index b09413f..486aa66 100644 +--- a/physics/gwdps.f ++++ b/physics/gwdps.f +@@ -1315,4 +1315,4 @@ + subroutine gwdps_finalize() + end subroutine gwdps_finalize + +- end module gwdps ++ end module gwdps +\ No newline at end of file +diff --git a/physics/h2ophys.f b/physics/h2ophys.f +index b3bdd27..ccbce7c 100644 +--- a/physics/h2ophys.f ++++ b/physics/h2ophys.f +@@ -41,10 +41,10 @@ + ! interface variables + integer, intent(in) :: im, levs, kh2o, h2o_coeff, me + real(kind=kind_phys), intent(in) :: dt +- real(kind=kind_phys), intent(inout) :: h2o(im,levs) +- real(kind=kind_phys), intent(in) :: ph2o(kh2o) +- real(kind=kind_phys), intent(in) :: prsl(im,levs) +- real(kind=kind_phys), intent(in) :: h2opltc(im,kh2o,h2o_coeff) ++ real(kind=kind_phys), intent(inout) :: h2o(:,:) ++ real(kind=kind_phys), intent(in) :: ph2o(:) ++ real(kind=kind_phys), intent(in) :: prsl(:,:) ++ real(kind=kind_phys), intent(in) :: h2opltc(:,:,:) + logical , intent(in) :: ldiag3d + !real(kind=kind_phys), intent(inout) :: h2op(im,levs,h2o_coeff) + character(len=*), intent(out) :: errmsg +diff --git a/physics/lsm_ruc_sfc_sice_interstitial.F90 b/physics/lsm_ruc_sfc_sice_interstitial.F90 +index 27033fc..54c514a 100644 +--- a/physics/lsm_ruc_sfc_sice_interstitial.F90 ++++ b/physics/lsm_ruc_sfc_sice_interstitial.F90 +@@ -27,12 +27,12 @@ contains + + ! Interface variables + integer, intent(in) :: im, lsoil_ruc, lsoil, kice +- logical, dimension(im), intent(in) :: land, icy ++ logical, dimension(:), intent(in) :: land, icy + ! --- on Noah levels +- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: stc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: stc + ! --- on RUC levels +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(in) :: tslb +- real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice ++ real (kind=kind_phys), dimension(:,:), intent(in) :: tslb ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +@@ -89,12 +89,12 @@ contains + + ! Interface variables + integer, intent(in) :: im, lsoil_ruc, lsoil, kice +- logical, dimension(im), intent(in) :: land, icy ++ logical, dimension(:), intent(in) :: land, icy + ! --- on Noah levels +- real (kind=kind_phys), dimension(im,lsoil), intent(in) :: stc +- real (kind=kind_phys), dimension(im,kice), intent(in) :: tiice ++ real (kind=kind_phys), dimension(:,:), intent(in) :: stc ++ real (kind=kind_phys), dimension(:,:), intent(in) :: tiice + ! --- on RUC levels +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 +index 69690d5..67706ca 100644 +--- a/physics/m_micro.F90 ++++ b/physics/m_micro.F90 +@@ -181,10 +181,10 @@ end subroutine m_micro_init + logical,intent(in) :: flipv, skip_macro + real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(2) + +- real (kind=kind_phys), dimension(im,lm),intent(in) :: & ++ real (kind=kind_phys), dimension(:,:),intent(in) :: & + & prsl_i,u_i,v_i,phil, omega_i, QLLS_i,QILS_i, & + & lwheat_i,swheat_i +- real (kind=kind_phys), dimension(im,0:lm),intent(in):: prsi_i, & ++ real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, & + & phii + ! GJF* These variables are conditionally allocated depending on whether the + ! Morrison-Gettelman microphysics is used, so they must be declared +@@ -194,26 +194,26 @@ end subroutine m_micro_init + & CNV_MFD_i, cf_upi, CNV_FICE_i, CNV_NDROP_i, & + & CNV_NICE_i, w_upi + ! *GJF +- real (kind=kind_phys), dimension(im,lm),intent(in) :: & ++ real (kind=kind_phys), dimension(:,:),intent(in) :: & + & rhc_i, naai_i, npccn_i +- real (kind=kind_phys), dimension(im,lm,ntrcaer),intent(in) :: & ++ real (kind=kind_phys), dimension(:,:,:),intent(in) :: & + & aerfld_i +- real (kind=kind_phys),dimension(im),intent(in):: TAUGWX, & ++ real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & + & TAUGWY, TAUOROX, TAUOROY, FRLAND,ZPBL,xlat,xlon + ! & TAUGWY, TAUX, TAUY, TAUOROX, TAUOROY,ps_i,FRLAND,ZPBL + ! & CNVPRCP + + ! output +- real (kind=kind_phys),dimension(im,lm), intent(out) :: lwm_o, qi_o, & ++ real (kind=kind_phys),dimension(:,:), intent(out) :: lwm_o, qi_o, & + cldreffl, cldreffi, cldreffr, cldreffs, cldreffg +- real (kind=kind_phys),dimension(im), intent(out) :: rn_o, sr_o ++ real (kind=kind_phys),dimension(:), intent(out) :: rn_o, sr_o + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! input and output + ! Anning Cheng 10/24/2016 twat for total water, diagnostic purpose +- integer, dimension(IM), intent(inout):: KCBL +- real (kind=kind_phys),dimension(im,lm),intent(inout):: q_io, t_io, & ++ integer, dimension(:), intent(inout):: KCBL ++ real (kind=kind_phys),dimension(:,:),intent(inout):: q_io, t_io, & + & ncpl_io,ncpi_io,CLLS_io + ! GJF* These variables are conditionally allocated depending on whether the + ! Morrison-Gettelman microphysics is used, so they must be declared +diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 +index 930b32b..00e6f8e 100644 +--- a/physics/m_micro_interstitial.F90 ++++ b/physics/m_micro_interstitial.F90 +@@ -183,22 +183,22 @@ + integer, intent(in) :: im, levs, fprcp + logical, intent(in) :: mg3_as_mg2 + +- real(kind=kind_phys), intent(in ) :: ncpr(1:im,1:levs) +- real(kind=kind_phys), intent(in ) :: ncps(1:im,1:levs) +- real(kind=kind_phys), intent(in ) :: ncgl(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_rain(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_snow(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_graupel(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_rain_nc(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_snow_nc(1:im,1:levs) +- real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(1:im,1:levs) +- real(kind=kind_phys), intent( out) :: ice(1:im) +- real(kind=kind_phys), intent( out) :: snow(1:im) +- real(kind=kind_phys), intent( out) :: graupel(1:im) ++ real(kind=kind_phys), intent(in ) :: ncpr(:,:) ++ real(kind=kind_phys), intent(in ) :: ncps(:,:) ++ real(kind=kind_phys), intent(in ) :: ncgl(:,:) ++ real(kind=kind_phys), intent(inout) :: qrn(:,:) ++ real(kind=kind_phys), intent(inout) :: qsnw(:,:) ++ real(kind=kind_phys), intent(inout) :: qgl(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_ice(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_rain(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_snow(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_graupel(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_rain_nc(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_snow_nc(:,:) ++ real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(:,:) ++ real(kind=kind_phys), intent( out) :: ice(:) ++ real(kind=kind_phys), intent( out) :: snow(:) ++ real(kind=kind_phys), intent( out) :: graupel(:) + real(kind=kind_phys), intent(in ) :: dtp + + character(len=*), intent(out) :: errmsg +diff --git a/physics/maximum_hourly_diagnostics.F90 b/physics/maximum_hourly_diagnostics.F90 +index 174e0c9..615c49b 100644 +--- a/physics/maximum_hourly_diagnostics.F90 ++++ b/physics/maximum_hourly_diagnostics.F90 +@@ -37,23 +37,23 @@ contains + logical, intent(in) :: reset, lradar + integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_fer_hires + real(kind_phys), intent(in ) :: con_g +- real(kind_phys), intent(in ) :: phil(im,levs) +- real(kind_phys), intent(in ) :: gt0(im,levs) +- real(kind_phys), intent(in ) :: refl_10cm(im,levs) +- real(kind_phys), intent(inout) :: refdmax(im) +- real(kind_phys), intent(inout) :: refdmax263k(im) +- real(kind_phys), intent(in ) :: u10m(im) +- real(kind_phys), intent(in ) :: v10m(im) +- real(kind_phys), intent(inout) :: u10max(im) +- real(kind_phys), intent(inout) :: v10max(im) +- real(kind_phys), intent(inout) :: spd10max(im) +- real(kind_phys), intent(in ) :: pgr(im) +- real(kind_phys), intent(in ) :: t2m(im) +- real(kind_phys), intent(in ) :: q2m(im) +- real(kind_phys), intent(inout) :: t02max(im) +- real(kind_phys), intent(inout) :: t02min(im) +- real(kind_phys), intent(inout) :: rh02max(im) +- real(kind_phys), intent(inout) :: rh02min(im) ++ real(kind_phys), intent(in ) :: phil(:,:) ++ real(kind_phys), intent(in ) :: gt0(:,:) ++ real(kind_phys), intent(in ) :: refl_10cm(:,:) ++ real(kind_phys), intent(inout) :: refdmax(:) ++ real(kind_phys), intent(inout) :: refdmax263k(:) ++ real(kind_phys), intent(in ) :: u10m(:) ++ real(kind_phys), intent(in ) :: v10m(:) ++ real(kind_phys), intent(inout) :: u10max(:) ++ real(kind_phys), intent(inout) :: v10max(:) ++ real(kind_phys), intent(inout) :: spd10max(:) ++ real(kind_phys), intent(in ) :: pgr(:) ++ real(kind_phys), intent(in ) :: t2m(:) ++ real(kind_phys), intent(in ) :: q2m(:) ++ real(kind_phys), intent(inout) :: t02max(:) ++ real(kind_phys), intent(inout) :: t02min(:) ++ real(kind_phys), intent(inout) :: rh02max(:) ++ real(kind_phys), intent(inout) :: rh02min(:) + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +@@ -126,12 +126,12 @@ contains + subroutine max_fields(phil,ref3D,grav,im,levs,refd,tk,refd263k) + integer, intent(in) :: im,levs + real (kind=kind_phys), intent(in) :: grav +- real (kind=kind_phys), intent(in),dimension(im,levs) :: phil,ref3D,tk ++ real (kind=kind_phys), intent(in),dimension(:,:) :: phil,ref3D,tk + integer :: i,k,ll,ipt,kpt + real :: dbz1avg,zmidp1,zmidloc,refl,fact + real, dimension(im,levs) :: z + real, dimension(im) :: zintsfc +- real, dimension(im), intent(inout) :: refd,refd263k ++ real, dimension(:), intent(inout) :: refd,refd263k + REAL :: dbz1(2),dbzk,dbzk1 + logical :: counter + do i=1,im +diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 +index e3dcf41..90c50ce 100644 +--- a/physics/module_MYJSFC_wrapper.F90 ++++ b/physics/module_MYJSFC_wrapper.F90 +@@ -91,22 +91,22 @@ + real(kind=kind_phys),intent(in) :: con_cp, con_g, con_rd + + !MYJ-2D +- logical,dimension(im),intent(in) :: flag_iter +- real(kind=kind_phys),dimension(im),intent(in) :: & ++ logical,dimension(:),intent(in) :: flag_iter ++ real(kind=kind_phys),dimension(:),intent(in) :: & + & prsik_1, prslk_1, tsfc, qsfc, slmsk +- real(kind=kind_phys),dimension(im),intent(inout) :: & ++ real(kind=kind_phys),dimension(:),intent(inout) :: & + & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & + & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & + & phy_myj_akhs, phy_myj_akms, & + & phy_myj_chkqlm, phy_myj_elflx, & + & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q +- real(kind=kind_phys),dimension(im),intent(inout) :: & ++ real(kind=kind_phys),dimension(:),intent(inout) :: & + & pblh, zorl, ustar, rib +- real(kind=kind_phys),dimension(im),intent(out) :: & ++ real(kind=kind_phys),dimension(:),intent(out) :: & + & cm, ch, stress, ffm, ffh, fm10, fh2 +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & landfrac, lakefrac, oceanfrac, fice +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & z0rl_wat, z0rl_lnd, z0rl_ice, & + & ustar_wat, ustar_lnd, ustar_ice, & + & cm_wat, cm_lnd, cm_ice, & +@@ -121,12 +121,12 @@ + + + !MYJ-3D +- real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & ++ real(kind=kind_phys),dimension(:,:),intent(in) :: & + phii, prsi +- real(kind=kind_phys),dimension(im,levs),intent(in) :: & ++ real(kind=kind_phys),dimension(:,:),intent(in) :: & + & ugrs, vgrs, tgrs, prsl + !MYJ-4D +- real(kind=kind_phys),dimension(im,levs,ntrac),intent(in) :: & ++ real(kind=kind_phys),dimension(:,:,:),intent(in) :: & + & qgrs + + !LOCAL +diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 +index 8fd7271..2d673e4 100644 +--- a/physics/module_MYNNPBL_wrapper.F90 ++++ b/physics/module_MYNNPBL_wrapper.F90 +@@ -234,13 +234,13 @@ SUBROUTINE mynnedmf_wrapper_run( & + REAL(kind=kind_phys) :: tem + + !MYNN-3D +- real(kind=kind_phys), dimension(im,levs+1), intent(in) :: phii +- real(kind=kind_phys), dimension(im,levs ), intent(inout) :: & ++ real(kind=kind_phys), dimension(:,:), intent(in) :: phii ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: & + & dtdt, dudt, dvdt, & + & dqdt_water_vapor, dqdt_liquid_cloud, dqdt_ice_cloud, & + & dqdt_cloud_droplet_num_conc, dqdt_ice_num_conc, & + & dqdt_ozone, dqdt_water_aer_num_conc, dqdt_ice_aer_num_conc +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: & ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: & + & qke, qke_adv, EL_PBL, Sh3D, & + & qc_bl, qi_bl, cldfra_bl + !These 10 arrays are only allocated when bl_mynn_output > 0 +@@ -248,7 +248,7 @@ SUBROUTINE mynnedmf_wrapper_run( & + & edmf_a,edmf_w,edmf_qt, & + & edmf_thl,edmf_ent,edmf_qc, & + & sub_thl,sub_sqv,det_thl,det_sqv +- real(kind=kind_phys), dimension(im,levs), intent(in) :: & ++ real(kind=kind_phys), dimension(:,:), intent(in) :: & + & u,v,omega,t3d, & + & exner,prsl, & + & qgrs_water_vapor, & +@@ -259,13 +259,13 @@ SUBROUTINE mynnedmf_wrapper_run( & + & qgrs_ozone, & + & qgrs_water_aer_num_conc, & + & qgrs_ice_aer_num_conc +- real(kind=kind_phys), dimension(im,levs), intent(out) :: & ++ real(kind=kind_phys), dimension(:,:), intent(out) :: & + & Tsq, Qsq, Cov, exch_h, exch_m + real(kind=kind_phys), dimension(:,:), intent(inout) :: & + & du3dt_PBL, du3dt_OGWD, dv3dt_PBL, dv3dt_OGWD, & + & do3dt_PBL, dq3dt_PBL, dt3dt_PBL +- real(kind=kind_phys), dimension(im), intent(in) :: xmu +- real(kind=kind_phys), dimension(im, levs), intent(in) :: htrsw, htrlw ++ real(kind=kind_phys), dimension(:), intent(in) :: xmu ++ real(kind=kind_phys), dimension(:,:), intent(in) :: htrsw, htrlw + !LOCAL + real(kind=kind_phys), dimension(im,levs) :: & + & sqv,sqc,sqi,qnc,qni,ozone,qnwfa,qnifa, & +@@ -284,26 +284,26 @@ SUBROUTINE mynnedmf_wrapper_run( & + REAL(kind=kind_phys), DIMENSION( ndvel ) :: vd1 + + !MYNN-2D +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & dx,zorl,slmsk,tsurf,qsfc,ps, & + & hflx,qflx,ust,wspd,rb,recmol + +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & + & stress_ocn,hflx_ocn,qflx_ocn, & + & oceanfrac,fice + +- logical, dimension(im), intent(in) :: & ++ logical, dimension(:), intent(in) :: & + & wet, dry, icy + +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & pblh +- real(kind=kind_phys), dimension(im), intent(out) :: & ++ real(kind=kind_phys), dimension(:), intent(out) :: & + & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & + & dtsfci_diag,dqsfci_diag,dtsfc_diag,dqsfc_diag, & + & dusfci_diag,dvsfci_diag,dusfc_diag,dvsfc_diag, & + & maxMF +- integer, dimension(im), intent(inout) :: & ++ integer, dimension(:), intent(inout) :: & + & kpbl,nupdraft,ktop_plume + + real(kind=kind_phys), dimension(:), intent(inout) :: & +diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 +index 496db75..4bfb91c 100644 +--- a/physics/module_MYNNSFC_wrapper.F90 ++++ b/physics/module_MYNNSFC_wrapper.F90 +@@ -111,8 +111,8 @@ SUBROUTINE mynnsfc_wrapper_run( & + logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) + + !Input data +- integer, dimension(im), intent(in) :: vegtype +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ integer, dimension(:), intent(in) :: vegtype ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & sigmaf,shdmax,z0pert,ztpert + + !MYNN-1D +@@ -124,23 +124,23 @@ SUBROUTINE mynnsfc_wrapper_run( & + & IMS,IME,JMS,JME,KMS,KME, & + & ITS,ITE,JTS,JTE,KTS,KTE + +- real(kind=kind_phys), dimension(im,levs+1), & ++ real(kind=kind_phys), dimension(:,:), & + & intent(in) :: phii +- real(kind=kind_phys), dimension(im,levs), & ++ real(kind=kind_phys), dimension(:,:), & + & intent(in) :: exner, PRSL, & + & u, v, t3d, qvsh, qc + + real(kind=kind_phys), dimension(im,levs) :: & + & pattern_spp_pbl, dz, th, qv + +- logical, dimension(im), intent(in) :: wet, dry, icy ++ logical, dimension(:), intent(in) :: wet, dry, icy + +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & tskin_ocn, tskin_lnd, tskin_ice, & + & tsurf_ocn, tsurf_lnd, tsurf_ice, & + & snowh_ocn, snowh_lnd, snowh_ice + +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & znt_ocn, znt_lnd, znt_ice, & + & ust_ocn, ust_lnd, ust_ice, & + & cm_ocn, cm_lnd, cm_ice, & +@@ -156,10 +156,10 @@ SUBROUTINE mynnsfc_wrapper_run( & + & qsfc_ocn, qsfc_lnd, qsfc_ice + + !MYNN-2D +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & dx, pblh, slmsk, ps + +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & ustm, hflx, qflx, wspd, qsfc, qsfc_ruc, & + & FLHC, FLQC, U10, V10, TH2, T2, Q2, & + & CHS2, CQS2, rmol, zol, mol, ch, & +diff --git a/physics/module_SGSCloud_RadPost.F90 b/physics/module_SGSCloud_RadPost.F90 +index bedb660..ea26259 100644 +--- a/physics/module_SGSCloud_RadPost.F90 ++++ b/physics/module_SGSCloud_RadPost.F90 +@@ -34,8 +34,8 @@ + + integer, intent(in) :: im, levs + logical, intent(in) :: flag_init, flag_restart +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi +- real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_save, qi_save ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi ++ real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! Local variable +diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 +index 5a1a274..3380f8f 100644 +--- a/physics/module_SGSCloud_RadPre.F90 ++++ b/physics/module_SGSCloud_RadPre.F90 +@@ -67,20 +67,20 @@ + integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & + & nlay, imp_physics, imp_physics_gfdl + logical, intent(in) :: flag_init, flag_restart, do_mynnedmf +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qr, qs, qg ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: qr, qs, qg + ! qci_conv only allocated if GF is used + real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv +- real(kind=kind_phys), dimension(im,levs), intent(in) :: T3D,delp, & ++ real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp, & + & qv,P3D +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: & ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: & + & clouds1,clouds2,clouds3,clouds4,clouds5 +- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc_save, qi_save +- real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_bl, qi_bl, cldfra_bl +- real(kind=kind_phys), dimension(im), intent(in) :: slmsk, xlat, de_lgth +- real(kind=kind_phys), dimension(im,nlay), intent(in) :: plyr, dz +- real(kind=kind_phys), dimension(im,5), intent(inout) :: cldsa +- integer, dimension(im,3), intent(inout) :: mbota, mtopa ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save ++ real(kind=kind_phys), dimension(:,:), intent(in) :: qc_bl, qi_bl, cldfra_bl ++ real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth ++ real(kind=kind_phys), dimension(:,:), intent(in) :: plyr, dz ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa ++ integer, dimension(:,:), intent(inout) :: mbota, mtopa + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! Local variables +diff --git a/physics/moninedmf.f b/physics/moninedmf.f +index 63edc34..9a6e4a6 100644 +--- a/physics/moninedmf.f ++++ b/physics/moninedmf.f +@@ -79,38 +79,38 @@ + logical, intent(in) :: lprnt,lssav,ldiag3d,qdiag3d,lsidea + logical, intent(in) :: flag_for_pbl_generic_tend + integer, intent(in) :: ipr +- integer, intent(in) :: im, km, ntrac, ntcw, kinver(im), ntoz +- integer, intent(out) :: kpbl(im) ++ integer, intent(in) :: im, km, ntrac, ntcw, kinver(:), ntoz ++ integer, intent(out) :: kpbl(:) + + ! + real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s + real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac +- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & +- & tau(im,km), rtg(im,km,ntrac) ++ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & ++ & tau(:,:), rtg(:,:,:) + ! Only allocated if ldiag3d or qdiag3d are true + real(kind=kind_phys), intent(inout), dimension(:,:) :: & + & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL + real(kind=kind_phys), intent(in) :: & +- & u1(im,km), v1(im,km), & +- & t1(im,km), q1(im,km,ntrac), & +- & swh(im,km), hlw(im,km), & +- & xmu(im), psk(im), & +- & rbsoil(im), zorl(im), & +- & u10m(im), v10m(im), & +- & fm(im), fh(im), & +- & tsea(im), & +- & heat(im), evap(im), & +- & stress(im), spd1(im) ++ & u1(:,:), v1(:,:), & ++ & t1(:,:), q1(:,:,:), & ++ & swh(:,:), hlw(:,:), & ++ & xmu(:), psk(:), & ++ & rbsoil(:), zorl(:), & ++ & u10m(:), v10m(:), & ++ & fm(:), fh(:), & ++ & tsea(:), & ++ & heat(:), evap(:), & ++ & stress(:), spd1(:) + real(kind=kind_phys), intent(in) :: & +- & prsi(im,km+1), del(im,km), & +- & prsl(im,km), prslk(im,km), & +- & phii(im,km+1), phil(im,km) ++ & prsi(:,:), del(:,:), & ++ & prsl(:,:), prslk(:,:), & ++ & phii(:,:), phil(:,:) + real(kind=kind_phys), intent(out) :: & +- & dusfc(im), dvsfc(im), & +- & dtsfc(im), dqsfc(im), & +- & hpbl(im), dkt(im,km-1) ++ & dusfc(:), dvsfc(:), & ++ & dtsfc(:), dqsfc(:), & ++ & hpbl(:), dkt(:,:) + real(kind=kind_phys), intent(inout) :: & +- & hgamt(im), hgamq(im) ++ & hgamt(:), hgamq(:) + ! + logical, intent(in) :: dspheat + ! flag for tke dissipative heating +diff --git a/physics/moninedmf_hafs.f b/physics/moninedmf_hafs.f +index 00a8dbd..5b16a63 100644 +--- a/physics/moninedmf_hafs.f ++++ b/physics/moninedmf_hafs.f +@@ -76,37 +76,37 @@ + ! + logical, intent(in) :: lprnt + integer, intent(in) :: ipr +- integer, intent(in) :: im, km, ntrac, ntcw, kinver(im) +- integer, intent(in) :: islimsk(1:im) +- integer, intent(out) :: kpbl(im) ++ integer, intent(in) :: im, km, ntrac, ntcw, kinver(:) ++ integer, intent(in) :: islimsk(:) ++ integer, intent(out) :: kpbl(:) + + ! + real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s + real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac +- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & +- & tau(im,km), rtg(im,km,ntrac) ++ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & ++ & tau(:,:), rtg(:,:,:) + real(kind=kind_phys), intent(in) :: & +- & u1(im,km), v1(im,km), & +- & t1(im,km), q1(im,km,ntrac), & +- & swh(im,km), hlw(im,km), & +- & xmu(im), psk(im), & +- & rbsoil(im), zorl(im), & +- & u10m(im), v10m(im), & +- & fm(im), fh(im), & +- & tsea(im), & +- & heat(im), evap(im), & +- & stress(im), spd1(im) ++ & u1(:,:), v1(:,:), & ++ & t1(:,:), q1(:,:,:), & ++ & swh(:,:), hlw(:,:), & ++ & xmu(:), psk(:), & ++ & rbsoil(:), zorl(:), & ++ & u10m(:), v10m(:), & ++ & fm(:), fh(:), & ++ & tsea(:), & ++ & heat(:), evap(:), & ++ & stress(:), spd1(:) + real(kind=kind_phys), intent(in) :: & +- & prsi(im,km+1), del(im,km), & +- & prsl(im,km), prslk(im,km), & +- & phii(im,km+1), phil(im,km) ++ & prsi(:,:), del(:,:), & ++ & prsl(:,:), prslk(:,:), & ++ & phii(:,:), phil(:,:) + real(kind=kind_phys), intent(out) :: & +- & dusfc(im), dvsfc(im), & +- & dtsfc(im), dqsfc(im), & +- & hpbl(im), dkt(im,km-1) ++ & dusfc(:), dvsfc(:), & ++ & dtsfc(:), dqsfc(:), & ++ & hpbl(:), dkt(:,:) + + real(kind=kind_phys), intent(inout) :: & +- & hgamt(im), hgamq(im) ++ & hgamt(:), hgamq(:) + ! + logical, intent(in) :: dspheat + ! flag for tke dissipative heating +diff --git a/physics/moninshoc.f b/physics/moninshoc.f +index 275d979..da5c102 100644 +--- a/physics/moninshoc.f ++++ b/physics/moninshoc.f +@@ -43,28 +43,28 @@ + ! + integer, intent(in) :: im, + & km, ntrac, ntcw, ncnd, ntke +- integer, dimension(im), intent(in) :: kinver ++ integer, dimension(:), intent(in) :: kinver + + real(kind=kind_phys), intent(in) :: delt, + & xkzm_m, xkzm_h, xkzm_s, xkzminv + real(kind=kind_phys), intent(in) :: grav, + & rd, cp, hvap, fv +- real(kind=kind_phys), dimension(im), intent(in) :: psk, ++ real(kind=kind_phys), dimension(:), intent(in) :: psk, + & rbsoil, zorl, u10m, v10m, fm, fh, tsea, heat, evap, stress, spd1 +- real(kind=kind_phys), dimension(im,km), intent(in) :: u1, v1, ++ real(kind=kind_phys), dimension(:,:), intent(in) :: u1, v1, + & t1, tkh, del, prsl, phil, prslk +- real(kind=kind_phys), dimension(im,km+1), intent(in) :: prsi, phii +- real(kind=kind_phys), dimension(im,km,ntrac), intent(in) :: q1 ++ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii ++ real(kind=kind_phys), dimension(:,:,:), intent(in) :: q1 + +- real(kind=kind_phys), dimension(im,km), intent(inout) :: du, dv, ++ real(kind=kind_phys), dimension(:,:), intent(inout) :: du, dv, + & tau +- real(kind=kind_phys), dimension(im,km,ntrac), intent(inout) :: rtg ++ real(kind=kind_phys), dimension(:,:,:), intent(inout) :: rtg + +- integer, dimension(im), intent(out) :: kpbl +- real(kind=kind_phys), dimension(im), intent(out) :: dusfc, ++ integer, dimension(:), intent(out) :: kpbl ++ real(kind=kind_phys), dimension(:), intent(out) :: dusfc, + & dvsfc, dtsfc, dqsfc, hpbl +- real(kind=kind_phys), dimension(im,km), intent(out) :: prnum +- real(kind=kind_phys), dimension(im,km-1), intent(out) :: dkt ++ real(kind=kind_phys), dimension(:,:), intent(out) :: prnum ++ real(kind=kind_phys), dimension(:,:), intent(out) :: dkt + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 +index 95e5211..a6907be 100644 +--- a/physics/mp_fer_hires.F90 ++++ b/physics/mp_fer_hires.F90 +@@ -53,9 +53,9 @@ module mp_fer_hires + logical, intent(in) :: restart + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +- real(kind_phys), intent(out), optional :: f_ice(1:ncol,1:nlev) +- real(kind_phys), intent(out), optional :: f_rain(1:ncol,1:nlev) +- real(kind_phys), intent(out), optional :: f_rimef(1:ncol,1:nlev) ++ real(kind_phys), intent(out), optional :: f_ice(:,:) ++ real(kind_phys), intent(out), optional :: f_rain(:,:) ++ real(kind_phys), intent(out), optional :: f_rimef(:,:) + + + ! Local variables +@@ -153,28 +153,28 @@ module mp_fer_hires + logical, intent(in ) :: spec_adv + integer, intent(in ) :: mpirank + integer, intent(in ) :: mpiroot +- real(kind_phys), intent(in ) :: slmsk(1:ncol) +- real(kind_phys), intent(in ) :: prsi(1:ncol,1:nlev+1) +- real(kind_phys), intent(in ) :: p_phy(1:ncol,1:nlev) ++ real(kind_phys), intent(in ) :: slmsk(:) ++ real(kind_phys), intent(in ) :: prsi(:,:) ++ real(kind_phys), intent(in ) :: p_phy(:,:) + real(kind_phys), intent(in ) :: epsq,r_d,p608,cp,g +- real(kind_phys), intent(inout) :: t(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: q(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) +- real(kind_phys), intent(out ) :: sr(1:ncol) +- real(kind_phys), intent(inout) :: f_ice(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: f_rain(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: f_rimef(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) ! QRIMEF +- +- real(kind_phys), intent(inout) :: prec(1:ncol) ++ real(kind_phys), intent(inout) :: t(:,:) ++ real(kind_phys), intent(inout) :: q(:,:) ++ real(kind_phys), intent(inout) :: cwm(:,:) ++ real(kind_phys), intent(inout) :: train(:,:) ++ real(kind_phys), intent(out ) :: sr(:) ++ real(kind_phys), intent(inout) :: f_ice(:,:) ++ real(kind_phys), intent(inout) :: f_rain(:,:) ++ real(kind_phys), intent(inout) :: f_rimef(:,:) ++ real(kind_phys), intent(inout) :: qc(:,:) ++ real(kind_phys), intent(inout) :: qr(:,:) ++ real(kind_phys), intent(inout) :: qi(:,:) ++ real(kind_phys), intent(inout) :: qg(:,:) ! QRIMEF ++ ++ real(kind_phys), intent(inout) :: prec(:) + ! real(kind_phys) :: acprec(1:ncol) !MZ: change to local +- real(kind_phys), intent(inout) :: refl_10cm(1:ncol,1:nlev) ++ real(kind_phys), intent(inout) :: refl_10cm(:,:) + real(kind_phys), intent(in ) :: rhgrd +- real(kind_phys), intent(in ) :: dx(1:ncol) ++ real(kind_phys), intent(in ) :: dx(:) + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! +diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 +index ec19945..ef4748c 100644 +--- a/physics/mp_thompson.F90 ++++ b/physics/mp_thompson.F90 +@@ -380,14 +380,14 @@ module mp_thompson + real(kind_phys), intent(in ) :: con_g + real(kind_phys), intent(in ) :: con_rd + ! Hydrometeors +- real(kind_phys), intent(inout) :: spechum(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qs(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: ni(1:ncol,1:nlev) +- real(kind_phys), intent(inout) :: nr(1:ncol,1:nlev) ++ real(kind_phys), intent(inout) :: spechum(:,:) ++ real(kind_phys), intent(inout) :: qc(:,:) ++ real(kind_phys), intent(inout) :: qr(:,:) ++ real(kind_phys), intent(inout) :: qi(:,:) ++ real(kind_phys), intent(inout) :: qs(:,:) ++ real(kind_phys), intent(inout) :: qg(:,:) ++ real(kind_phys), intent(inout) :: ni(:,:) ++ real(kind_phys), intent(inout) :: nr(:,:) + ! Aerosols + logical, intent(in) :: is_aerosol_aware, reset + ! The following arrays are not allocated if is_aerosol_aware is false +@@ -397,25 +397,25 @@ module mp_thompson + real(kind_phys), optional, intent(in ) :: nwfa2d(:) + real(kind_phys), optional, intent(in ) :: nifa2d(:) + ! State variables and timestep information +- real(kind_phys), intent(inout) :: tgrs(1:ncol,1:nlev) +- real(kind_phys), intent(in ) :: prsl(1:ncol,1:nlev) +- real(kind_phys), intent(in ) :: phii(1:ncol,1:nlev+1) +- real(kind_phys), intent(in ) :: omega(1:ncol,1:nlev) ++ real(kind_phys), intent(inout) :: tgrs(:,:) ++ real(kind_phys), intent(in ) :: prsl(:,:) ++ real(kind_phys), intent(in ) :: phii(:,:) ++ real(kind_phys), intent(in ) :: omega(:,:) + real(kind_phys), intent(in ) :: dtp + ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip +- real(kind_phys), intent( out) :: prcp(1:ncol) +- real(kind_phys), intent( out) :: rain(1:ncol) +- real(kind_phys), intent( out) :: graupel(1:ncol) +- real(kind_phys), intent( out) :: ice(1:ncol) +- real(kind_phys), intent( out) :: snow(1:ncol) +- real(kind_phys), intent( out) :: sr(1:ncol) ++ real(kind_phys), intent( out) :: prcp(:) ++ real(kind_phys), intent( out) :: rain(:) ++ real(kind_phys), intent( out) :: graupel(:) ++ real(kind_phys), intent( out) :: ice(:) ++ real(kind_phys), intent( out) :: snow(:) ++ real(kind_phys), intent( out) :: sr(:) + ! Radar reflectivity +- real(kind_phys), intent( out) :: refl_10cm(1:ncol,1:nlev) ++ real(kind_phys), intent( out) :: refl_10cm(:,:) + logical, optional, intent(in ) :: do_radar_ref + ! Cloud effective radii +- real(kind_phys), optional, intent( out) :: re_cloud(1:ncol,1:nlev) +- real(kind_phys), optional, intent( out) :: re_ice(1:ncol,1:nlev) +- real(kind_phys), optional, intent( out) :: re_snow(1:ncol,1:nlev) ++ real(kind_phys), optional, intent( out) :: re_cloud(:,:) ++ real(kind_phys), optional, intent( out) :: re_ice(:,:) ++ real(kind_phys), optional, intent( out) :: re_snow(:,:) + ! MPI information + integer, intent(in) :: mpicomm + integer, intent(in) :: mpirank +diff --git a/physics/mp_thompson_post.F90 b/physics/mp_thompson_post.F90 +index cca7495..36e3093 100644 +--- a/physics/mp_thompson_post.F90 ++++ b/physics/mp_thompson_post.F90 +@@ -59,9 +59,9 @@ contains + ! Interface variables + integer, intent(in) :: ncol + integer, intent(in) :: nlev +- real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: tgrs_save +- real(kind_phys), dimension(1:ncol,1:nlev), intent(inout) :: tgrs +- real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: prslk ++ real(kind_phys), dimension(:,:), intent(in) :: tgrs_save ++ real(kind_phys), dimension(:,:), intent(inout) :: tgrs ++ real(kind_phys), dimension(:,:), intent(in) :: prslk + real(kind_phys), intent(in) :: dtp + real(kind_phys), intent(in) :: ttendlim + integer, intent(in) :: kdt +diff --git a/physics/mp_thompson_pre.F90 b/physics/mp_thompson_pre.F90 +index 4087ac8..957c1f1 100644 +--- a/physics/mp_thompson_pre.F90 ++++ b/physics/mp_thompson_pre.F90 +@@ -28,8 +28,8 @@ module mp_thompson_pre + ! Interface variables + integer, intent(in ) :: ncol + integer, intent(in ) :: nlev +- real(kind_phys), intent(in ) :: tgrs(1:ncol,1:nlev) +- real(kind_phys), intent( out) :: tgrs_save(1:ncol,1:nlev) ++ real(kind_phys), intent(in ) :: tgrs(:,:) ++ real(kind_phys), intent( out) :: tgrs_save(:,:) + + ! CCPP error handling + character(len=*), intent( out) :: errmsg +diff --git a/physics/ozphys.f b/physics/ozphys.f +index f8da587..ba6cb45 100644 +--- a/physics/ozphys.f ++++ b/physics/ozphys.f +@@ -68,8 +68,8 @@ + real(kind=kind_phys), intent(inout) :: & + & ozp1(:,:), ozp2(:,:), ozp3(:,:), ozp4(:,:) + real(kind=kind_phys), intent(in) :: & +- & dt, po3(ko3), prdout(im,ko3,oz_coeff), & +- & prsl(im,levs), tin(im,levs), delp(im,levs), & ++ & dt, po3(:), prdout(:,:,:), & ++ & prsl(:,:), tin(:,:), delp(:,:), & + & con_g + real :: gravi + logical, intent(in) :: ldiag3d, qdiag3d +diff --git a/physics/ozphys_2015.f b/physics/ozphys_2015.f +index 238a8fb..113dc03 100644 +--- a/physics/ozphys_2015.f ++++ b/physics/ozphys_2015.f +@@ -67,14 +67,14 @@ + real(kind=kind_phys),intent(in) :: con_g + real :: gravi + integer, intent(in) :: im, levs, ko3, pl_coeff,me +- real(kind=kind_phys), intent(in) :: po3(ko3), & +- & prsl(im,levs), tin(im,levs), & +- & delp(im,levs), & +- & prdout(im,ko3,pl_coeff), dt ++ real(kind=kind_phys), intent(in) :: po3(:), & ++ & prsl(:,:), tin(:,:), & ++ & delp(:,:), & ++ & prdout(:,:,:), dt + ! These arrays may not be allocated and need assumed array sizes + real(kind=kind_phys), intent(inout) :: & + & ozp1(:,:), ozp2(:,:), ozp3(:,:),ozp4(:,:) +- real(kind=kind_phys), intent(inout) :: oz(im,levs) ++ real(kind=kind_phys), intent(inout) :: oz(:,:) + + + character(len=*), intent(out) :: errmsg +diff --git a/physics/precpd.f b/physics/precpd.f +index 0e33055..8d58a38 100644 +--- a/physics/precpd.f ++++ b/physics/precpd.f +@@ -102,13 +102,13 @@ + ! Interface variables + integer, intent(in) :: im, km, jpr + real (kind=kind_phys), intent(in) :: dt +- real (kind=kind_phys), intent(in) :: del(im,km), prsl(im,km) +- real (kind=kind_phys), intent(inout) :: q(im,km), t(im,km), & +- & cwm(im,km) +- real (kind=kind_phys), intent(out) :: rn(im), sr(im), rainp(im,km) +- real (kind=kind_phys), intent(in) :: u00k(im,km) +- real (kind=kind_phys), intent(in) :: psautco(2), prautco(2), & +- & evpco, wminco(2), wk1(im) ++ real (kind=kind_phys), intent(in) :: del(:,:), prsl(:,:) ++ real (kind=kind_phys), intent(inout) :: q(:,:), t(:,:), & ++ & cwm(:,:) ++ real (kind=kind_phys), intent(out) :: rn(:), sr(:), rainp(:,:) ++ real (kind=kind_phys), intent(in) :: u00k(:,:) ++ real (kind=kind_phys), intent(in) :: psautco(:), prautco(:), & ++ & evpco, wminco(:), wk1(:) + logical, intent(in) :: lprnt + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/radlw_main.f b/physics/radlw_main.f +index 7b029f8..e45e556 100644 +--- a/physics/radlw_main.f ++++ b/physics/radlw_main.f +@@ -572,44 +572,44 @@ + + logical, intent(in) :: lprnt + +- real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: plvl, & ++ real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, & + & tlvl +- real (kind=kind_phys), dimension(npts,nlay), intent(in) :: plyr, & ++ real (kind=kind_phys), dimension(:,:), intent(in) :: plyr, & + & tlyr, qlyr, olyr, dzlyr, delpin + +- real (kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2,& ++ real (kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2, & + & gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & + & gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4 + +- real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf +- real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & ++ real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf ++ real (kind=kind_phys), dimension(:,:),intent(in),optional:: & + & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & + & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & + & cld_od + +- real (kind=kind_phys), dimension(npts), intent(in) :: sfemis, & ++ real (kind=kind_phys), dimension(:), intent(in) :: sfemis, & + & sfgtmp, de_lgth + +- real (kind=kind_phys), dimension(npts,nlay,nbands),intent(in):: & ++ real (kind=kind_phys), dimension(:,:,:),intent(in):: & + & aeraod, aerssa + + ! --- outputs: +- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hlwc +- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: hlwc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: & + & cldtau + +- type (topflw_type), dimension(npts), intent(inout) :: topflx +- type (sfcflw_type), dimension(npts), intent(inout) :: sfcflx ++ type (topflw_type), dimension(:), intent(inout) :: topflx ++ type (sfcflw_type), dimension(:), intent(inout) :: sfcflx + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + !! --- optional outputs: +- real (kind=kind_phys), dimension(npts,nlay,nbands),optional, & ++ real (kind=kind_phys), dimension(:,:,:),optional, & + & intent(inout) :: hlwb +- real (kind=kind_phys), dimension(npts,nlay), optional, & ++ real (kind=kind_phys), dimension(:,:), optional, & + & intent(inout) :: hlw0 +- type (proflw_type), dimension(npts,nlp1), optional, & ++ type (proflw_type), dimension(:,:), optional, & + & intent(inout) :: flxprf + logical, intent(in) :: lslwr + +diff --git a/physics/radsw_main.f b/physics/radsw_main.f +index b10541f..7f41cca 100644 +--- a/physics/radsw_main.f ++++ b/physics/radsw_main.f +@@ -659,59 +659,59 @@ + + logical, intent(in) :: lprnt, lsswr + +- real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: & ++ real (kind=kind_phys), dimension(:,:), intent(in) :: & + & plvl, tlvl +- real (kind=kind_phys), dimension(npts,nlay), intent(in) :: & ++ real (kind=kind_phys), dimension(:,:), intent(in) :: & + & plyr, tlyr, qlyr, olyr, dzlyr, delpin + +- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir +- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif +- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dir +- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dif +- +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_n2o +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ch4 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_o2 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc11 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc12 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc22 +- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ccl4 +- +- real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf +- real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & ++ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dir ++ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dif ++ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dir ++ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dif ++ ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_n2o ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ch4 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_o2 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc11 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc12 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc22 ++ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ccl4 ++ ++ real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf ++ real (kind=kind_phys), dimension(:,:),intent(in),optional:: & + & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & + & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & + & cld_od, cld_ssa, cld_asy + +- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aeraod +- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerssa +- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerasy ++ real(kind=kind_phys),dimension(:,:,:),intent(in)::aeraod ++ real(kind=kind_phys),dimension(:,:,:),intent(in)::aerssa ++ real(kind=kind_phys),dimension(:,:,:),intent(in)::aerasy + + real (kind=kind_phys), intent(in) :: cosz(npts), solcon, & + & de_lgth(npts) + + ! --- outputs: +- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hswc +- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: hswc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: & + & cldtau + +- type (topfsw_type), dimension(npts), intent(inout) :: topflx +- type (sfcfsw_type), dimension(npts), intent(inout) :: sfcflx ++ type (topfsw_type), dimension(:), intent(inout) :: topflx ++ type (sfcfsw_type), dimension(:), intent(inout) :: sfcflx + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + !! --- optional outputs: +- real (kind=kind_phys), dimension(npts,nlay,nbdsw), optional, & ++ real (kind=kind_phys), dimension(:,:,:), optional, & + & intent(inout) :: hswb + +- real (kind=kind_phys), dimension(npts,nlay), optional, & ++ real (kind=kind_phys), dimension(:,:), optional, & + & intent(inout) :: hsw0 +- type (profsw_type), dimension(npts,nlp1), optional, & ++ type (profsw_type), dimension(:,:), optional, & + & intent(inout) :: flxprf +- type (cmpfsw_type), dimension(npts), optional, & ++ type (cmpfsw_type), dimension(:), optional, & + & intent(inout) :: fdncmp + + ! --- locals: +diff --git a/physics/rayleigh_damp.f b/physics/rayleigh_damp.f +index a56a85e..579370c 100644 +--- a/physics/rayleigh_damp.f ++++ b/physics/rayleigh_damp.f +@@ -71,9 +71,9 @@ + logical,intent(in) :: lsidea,ldiag3d + integer,intent(in) :: im, km,levr + real(kind=kind_phys),intent(in) :: DT, CP, PRSLRD0, ral_ts +- real(kind=kind_phys),intent(in) :: pgr(im), PRSL(IM,KM) +- real(kind=kind_phys),intent(in) :: U1(IM,KM), V1(IM,KM) +- real(kind=kind_phys),intent(inout) :: A(IM,KM), B(IM,KM), C(IM,KM) ++ real(kind=kind_phys),intent(in) :: pgr(:), PRSL(:,:) ++ real(kind=kind_phys),intent(in) :: U1(:,:), V1(:,:) ++ real(kind=kind_phys),intent(inout) :: A(:,:), B(:,:), C(:,:) + real(kind=kind_phys),intent(inout) :: du3dt(:,:) + real(kind=kind_phys),intent(inout) :: dv3dt(:,:) + real(kind=kind_phys),intent(inout) :: dt3dt(:,:) +diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 +index af83c5c..7715ed7 100644 +--- a/physics/rrtmg_lw_post.F90 ++++ b/physics/rrtmg_lw_post.F90 +@@ -30,8 +30,8 @@ + type(GFS_grid_type), intent(in) :: Grid + type(GFS_radtend_type), intent(inout) :: Radtend + integer, intent(in) :: im, ltp, LM, kd +- real(kind=kind_phys), dimension(size(Grid%xlon,1), lm+LTP), intent(in) :: htlwc, htlw0 +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa ++ real(kind=kind_phys), dimension(:,:), intent(in) :: htlwc, htlw0 ++ real(kind=kind_phys), dimension(:), intent(in) :: tsfa + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! local variables +diff --git a/physics/rrtmg_lw_pre.F90 b/physics/rrtmg_lw_pre.F90 +index 7de02ee..1e46717 100644 +--- a/physics/rrtmg_lw_pre.F90 ++++ b/physics/rrtmg_lw_pre.F90 +@@ -30,7 +30,7 @@ + type(GFS_sfcprop_type), intent(in) :: Sfcprop + type(GFS_grid_type), intent(in) :: Grid + integer, intent(in) :: im +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg ++ real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + +diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 +index b0ab311..b9534e0 100644 +--- a/physics/rrtmg_sw_post.F90 ++++ b/physics/rrtmg_sw_post.F90 +@@ -35,9 +35,9 @@ + type(GFS_grid_type), intent(in) :: Grid + type(GFS_diag_type), intent(inout) :: Diag + integer, intent(in) :: im, lm, kd, nday, ltp +- type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(inout) :: scmpsw +- real(kind=kind_phys), dimension(Size(Grid%xlon,1), lm+LTP), intent(in) :: htswc, htsw0 +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 ++ type(cmpfsw_type), dimension(:), intent(inout) :: scmpsw ++ real(kind=kind_phys), dimension(:,:), intent(in) :: htswc, htsw0 ++ real(kind=kind_phys), dimension(:), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! Local variables +diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 +index 05e8d4c..3ef89c8 100644 +--- a/physics/rrtmg_sw_pre.F90 ++++ b/physics/rrtmg_sw_pre.F90 +@@ -34,10 +34,10 @@ + type(GFS_grid_type), intent(in) :: Grid + integer, intent(in) :: im + integer, intent(out) :: nday +- integer, dimension(size(Grid%xlon,1)), intent(out) :: idxday +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 +- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: alb1d ++ integer, dimension(:), intent(out) :: idxday ++ real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg ++ real(kind=kind_phys), dimension(:), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 ++ real(kind=kind_phys), dimension(:), intent(in) :: alb1d + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + ! Local variables +diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 +index 2047dea..0b4339b 100644 +--- a/physics/rrtmgp_lw_aerosol_optics.F90 ++++ b/physics/rrtmgp_lw_aerosol_optics.F90 +@@ -40,20 +40,20 @@ contains + nLev, & ! Number of vertical layers + nTracer, & ! Number of tracers + nTracerAer ! Number of aerosol tracers +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lon, & ! Longitude + lat, & ! Latitude + lsmask ! Land/sea/sea-ice mask +- real(kind_phys), dimension(nCol,Nlev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + p_lay, & ! Pressure @ layer-centers (Pa) + tv_lay, & ! Virtual-temperature @ layer-centers (K) + relhum, & ! Relative-humidity @ layer-centers + p_lk ! Exner function @ layer-centers (1) +- real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & ++ real(kind_phys), dimension(:,:, :),intent(in) :: & + tracer ! trace gas concentrations +- real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & ++ real(kind_phys), dimension(:,:, :),intent(in) :: & + aerfld ! aerosol input concentrations +- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + p_lev ! Pressure @ layer-interfaces (Pa) + type(ty_gas_optics_rrtmgp),intent(in) :: & + sw_gas_props ! RRTMGP DDT: spectral information for SW calculation +@@ -61,7 +61,7 @@ contains + lw_gas_props ! RRTMGP DDT: spectral information for LW calculation + + ! Outputs +- real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & ++ real(kind_phys), dimension(:,:), intent(inout) :: & + aerodp ! Vertical integrated optical depth for various aerosol species + type(ty_optical_props_1scl),intent(out) :: & + lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) +diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 +index 93e3899..f679154 100644 +--- a/physics/rrtmgp_lw_cloud_optics.F90 ++++ b/physics/rrtmgp_lw_cloud_optics.F90 +@@ -286,10 +286,10 @@ contains + nCol, & ! Number of horizontal gridpoints + nLev, & ! Number of vertical levels + nrghice ! Number of ice-roughness categories +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lon, & ! Longitude + lat ! Latitude +- real(kind_phys), dimension(ncol,nLev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + p_lay, & ! Layer pressure (Pa) + cld_frac, & ! Total cloud fraction by layer + cld_lwp, & ! Cloud liquid water path +@@ -314,7 +314,7 @@ contains + type(ty_optical_props_1scl),intent(out) :: & + lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) + lw_optical_props_precipByBand ! RRTMGP DDT: Longwave optical properties in each band (precipitation) +- real(kind_phys), dimension(ncol,nLev), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + cldtaulw ! Approx 10.mu band layer cloud optical depth + + ! Local variables +diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 +index 1d6cc06..c5de7b5 100644 +--- a/physics/rrtmgp_lw_cloud_sampling.F90 ++++ b/physics/rrtmgp_lw_cloud_sampling.F90 +@@ -57,15 +57,15 @@ contains + nCol, & ! Number of horizontal gridpoints + nLev, & ! Number of vertical layers + ipsdlw0 ! Initial permutation seed for McICA +- integer,intent(in),dimension(ncol) :: & ++ integer,intent(in),dimension(:) :: & + icseed_lw ! auxiliary special cloud related array when module + ! variable isubclw=2, it provides permutation seed + ! for each column profile that are used for generating + ! random numbers. when isubclw /=2, it will not be used. +- real(kind_phys), dimension(ncol,nLev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + cld_frac, & ! Total cloud fraction by layer + precip_frac ! Precipitation fraction by layer +- real(kind_phys), dimension(ncol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + cloud_overlap_param, & ! Cloud overlap parameter + precip_overlap_param ! Precipitation overlap parameter + type(ty_gas_optics_rrtmgp),intent(in) :: & +diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 +index 787db6b..deea465 100644 +--- a/physics/rrtmgp_lw_gas_optics.F90 ++++ b/physics/rrtmgp_lw_gas_optics.F90 +@@ -28,7 +28,7 @@ contains + rrtmgp_lw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties + integer, intent(in) :: & + rrtmgp_nGases ! Number of trace gases active in RRTMGP +- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & ++ character(len=*),dimension(:), intent(in) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + integer,intent(in) :: & + mpicomm, & ! MPI communicator +@@ -292,13 +292,13 @@ contains + nLev ! Number of vertical levels + type(ty_gas_optics_rrtmgp),intent(in) :: & + lw_gas_props ! RRTMGP DDT: +- real(kind_phys), dimension(ncol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lay, & ! Pressure @ model layer-centers (hPa) + t_lay ! Temperature (K) +- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lev, & ! Pressure @ model layer-interfaces (hPa) + t_lev ! Temperature @ model levels +- real(kind_phys), dimension(ncol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + skt ! Surface(skin) temperature (K) + type(ty_gas_concs),intent(in) :: & + gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) +diff --git a/physics/rrtmgp_lw_pre.F90 b/physics/rrtmgp_lw_pre.F90 +index 1148c67..8bede8c 100644 +--- a/physics/rrtmgp_lw_pre.F90 ++++ b/physics/rrtmgp_lw_pre.F90 +@@ -39,7 +39,7 @@ contains + doLWrad ! Logical flag for longwave radiation call + integer, intent(in) :: & + nCol ! Number of horizontal grid points +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + xlon, & ! Longitude + xlat, & ! Latitude + slmsk, & ! Land/sea/sea-ice mask +@@ -52,13 +52,13 @@ contains + lw_gas_props ! RRTMGP DDT: spectral information for LW calculation + + ! Outputs +- real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + sfc_emiss_byband ! Surface emissivity in each band + character(len=*), intent(out) :: & + errmsg ! Error message + integer, intent(out) :: & + errflg ! Error flag +- real(kind_phys), dimension(nCol), intent(out) :: & ++ real(kind_phys), dimension(:), intent(out) :: & + semis + + ! Local variables +diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 +index dc49260..137512c 100644 +--- a/physics/rrtmgp_lw_rte.F90 ++++ b/physics/rrtmgp_lw_rte.F90 +@@ -43,16 +43,16 @@ contains + nCol, & ! Number of horizontal gridpoints + nLev, & ! Number of vertical levels + nGauss_angles ! Number of angles used in Gaussian quadrature +- real(kind_phys), dimension(ncol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lay, & ! Pressure @ model layer-centers (hPa) + t_lay ! Temperature (K) +- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lev ! Pressure @ model layer-interfaces (hPa) +- real(kind_phys), dimension(ncol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + skt ! Surface(skin) temperature (K) + type(ty_gas_optics_rrtmgp),intent(in) :: & + lw_gas_props ! RRTMGP DDT: longwave spectral information +- real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + sfc_emiss_byband ! Surface emissivity in each band + type(ty_source_func_lw),intent(in) :: & + sources ! RRTMGP DDT: longwave source functions +@@ -62,7 +62,7 @@ contains + lw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties + lw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties + ! Outputs +- real(kind_phys), dimension(ncol,nLev+1), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + fluxlwUP_allsky, & ! All-sky flux (W/m2) + fluxlwDOWN_allsky, & ! All-sky flux (W/m2) + fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) +@@ -72,7 +72,7 @@ contains + integer, intent(out) :: & + errflg ! CCPP error flag + ! Outputs (optional) +- real(kind_phys), dimension(ncol,nLev+1), intent(out), optional :: & ++ real(kind_phys), dimension(:,:), intent(out), optional :: & + fluxlwUP_jac, & ! Jacobian of upward LW flux (W/m2/K) + fluxlwDOWN_jac ! Jacobian of downward LW flux (W/m2/K) + +diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 +index 4bb0342..b689550 100644 +--- a/physics/rrtmgp_sw_aerosol_optics.F90 ++++ b/physics/rrtmgp_sw_aerosol_optics.F90 +@@ -41,22 +41,22 @@ contains + nLev, & ! Number of vertical layers + nTracer, & ! Number of tracers + nTracerAer ! Number of aerosol tracers +- integer,intent(in),dimension(nCol) :: & ++ integer,intent(in),dimension(:) :: & + idxday ! Indices for daylit points. +- real(kind_phys), dimension(nCol), intent(in) :: & ++ real(kind_phys), dimension(:), intent(in) :: & + lon, & ! Longitude + lat, & ! Latitude + lsmask ! Land/sea/sea-ice mask +- real(kind_phys), dimension(nCol,Nlev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + p_lay, & ! Pressure @ layer-centers (Pa) + tv_lay, & ! Virtual-temperature @ layer-centers (K) + relhum, & ! Relative-humidity @ layer-centers + p_lk ! Exner function @ layer-centers (1) +- real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & ++ real(kind_phys), dimension(:, :,:),intent(in) :: & + tracer ! trace gas concentrations +- real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & ++ real(kind_phys), dimension(:, :,:),intent(in) :: & + aerfld ! aerosol input concentrations +- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + p_lev ! Pressure @ layer-interfaces (Pa) + type(ty_gas_optics_rrtmgp),intent(in) :: & + sw_gas_props ! RRTMGP DDT: spectral information for SW calculation +@@ -64,7 +64,7 @@ contains + lw_gas_props ! RRTMGP DDT: spectral information for LW calculation + + ! Outputs +- real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & ++ real(kind_phys), dimension(:,:), intent(inout) :: & + aerodp ! Vertical integrated optical depth for various aerosol species + type(ty_optical_props_2str),intent(out) :: & + sw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) +diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 +index 7ab3c27..7907751 100644 +--- a/physics/rrtmgp_sw_cloud_optics.F90 ++++ b/physics/rrtmgp_sw_cloud_optics.F90 +@@ -304,9 +304,9 @@ contains + nLev, & ! Number of vertical levels + nday, & ! Number of daylit points. + nrghice ! Number of ice-roughness categories +- integer,intent(in),dimension(ncol) :: & ++ integer,intent(in),dimension(:) :: & + idxday ! Indices for daylit points. +- real(kind_phys), dimension(ncol,nLev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + cld_frac, & ! Total cloud fraction by layer + cld_lwp, & ! Cloud liquid water path + cld_reliq, & ! Cloud liquid effective radius +@@ -330,7 +330,7 @@ contains + type(ty_optical_props_2str),intent(out) :: & + sw_optical_props_cloudsByBand, & ! RRTMGP DDT: Shortwave optical properties in each band (clouds) + sw_optical_props_precipByBand ! RRTMGP DDT: Shortwave optical properties in each band (cloud precipitation) +- real(kind_phys), dimension(ncol,NLev), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + cldtausw ! Approx 10.mu band layer cloud optical depth + + ! Local variables +diff --git a/physics/rrtmgp_sw_cloud_sampling.F90 b/physics/rrtmgp_sw_cloud_sampling.F90 +index 0a0511b..617bbfc 100644 +--- a/physics/rrtmgp_sw_cloud_sampling.F90 ++++ b/physics/rrtmgp_sw_cloud_sampling.F90 +@@ -58,17 +58,17 @@ contains + nDay, & ! Number of daylit points. + nLev, & ! Number of vertical layers + ipsdsw0 ! Initial permutation seed for McICA +- integer,intent(in),dimension(ncol) :: & ++ integer,intent(in),dimension(:) :: & + idxday ! Indices for daylit points. +- integer,intent(in),dimension(ncol) :: & ++ integer,intent(in),dimension(:) :: & + icseed_sw ! auxiliary special cloud related array when module + ! variable isubcsw=2, it provides permutation seed + ! for each column profile that are used for generating + ! random numbers. when isubcsw /=2, it will not be used. +- real(kind_phys), dimension(ncol,nLev),intent(in) :: & ++ real(kind_phys), dimension(:,:),intent(in) :: & + cld_frac, & ! Total cloud fraction by layer + precip_frac ! Precipitation fraction by layer +- real(kind_phys), dimension(ncol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + cloud_overlap_param, & ! Cloud overlap parameter + precip_overlap_param ! Precipitation overlap parameter + type(ty_gas_optics_rrtmgp),intent(in) :: & +diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 +index efe611e..fb14a57 100644 +--- a/physics/rrtmgp_sw_gas_optics.F90 ++++ b/physics/rrtmgp_sw_gas_optics.F90 +@@ -28,7 +28,7 @@ contains + rrtmgp_sw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties + integer, intent(in) :: & + rrtmgp_nGases ! Number of trace gases active in RRTMGP +- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & ++ character(len=*),dimension(:), intent(in) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + integer,intent(in) :: & + mpicomm, & ! MPI communicator +@@ -302,14 +302,14 @@ contains + nDay, & ! Number of daylit points. + nCol, & ! Number of horizontal points + nLev ! Number of vertical levels +- integer,intent(in),dimension(ncol) :: & ++ integer,intent(in),dimension(:) :: & + idxday ! Indices for daylit points. + type(ty_gas_optics_rrtmgp),intent(in) :: & + sw_gas_props ! RRTMGP DDT: spectral information for RRTMGP SW radiation scheme +- real(kind_phys), dimension(ncol,nLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lay, & ! Pressure @ model layer-centers (hPa) + t_lay ! Temperature (K) +- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lev, & ! Pressure @ model layer-interfaces (hPa) + t_lev ! Temperature @ model levels + type(ty_gas_concs),intent(in) :: & +@@ -318,7 +318,7 @@ contains + solcon ! Solar constant + integer, intent(in) :: & + rrtmgp_nGases ! Number of trace gases active in RRTMGP +- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & ++ character(len=*),dimension(:), intent(in) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + + ! Output +@@ -328,7 +328,7 @@ contains + errflg ! CCPP error code + type(ty_optical_props_2str),intent(out) :: & + sw_optical_props_clrsky ! RRTMGP DDT: clear-sky shortwave optical properties, spectral (tau,ssa,g) +- real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(out) :: & ++ real(kind_phys), dimension(:,:), intent(out) :: & + toa_src_sw ! TOA incident spectral flux (W/m2) + + ! Local variables +diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 +index 9719c6e..2bcfe4f 100644 +--- a/physics/rrtmgp_sw_rte.F90 ++++ b/physics/rrtmgp_sw_rte.F90 +@@ -42,14 +42,14 @@ contains + nCol, & ! Number of horizontal gridpoints + nday, & ! Number of daytime points + nLev ! Number of vertical levels +- integer, intent(in), dimension(ncol) :: & ++ integer, intent(in), dimension(:) :: & + idxday ! Index array for daytime points +- real(kind_phys),intent(in), dimension(ncol) :: & ++ real(kind_phys),intent(in), dimension(:) :: & + coszen ! Cosize of SZA +- real(kind_phys), dimension(ncol,NLev), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lay, & ! Pressure @ model layer-centers (Pa) + t_lay ! Temperature (K) +- real(kind_phys), dimension(ncol,NLev+1), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + p_lev ! Pressure @ model layer-interfaces (Pa) + type(ty_gas_optics_rrtmgp),intent(in) :: & + sw_gas_props ! RRTMGP DDT: SW spectral information +@@ -58,16 +58,16 @@ contains + type(ty_optical_props_2str),intent(in) :: & + sw_optical_props_clouds, & ! RRTMGP DDT: shortwave cloud radiative properties + sw_optical_props_aerosol ! RRTMGP DDT: shortwave aerosol radiative properties +- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + sfc_alb_nir_dir, & ! Surface albedo (direct) + sfc_alb_nir_dif, & ! Surface albedo (diffuse) + sfc_alb_uvvis_dir, & ! Surface albedo (direct) + sfc_alb_uvvis_dif ! Surface albedo (diffuse) +- real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(in) :: & ++ real(kind_phys), dimension(:,:), intent(in) :: & + toa_src_sw ! TOA incident spectral flux (W/m2) + integer, intent(in) :: & + rrtmgp_nGases ! Number of trace gases active in RRTMGP +- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & ++ character(len=*),dimension(:), intent(in) :: & + active_gases_array ! Character array containing trace gases to include in RRTMGP + + ! Outputs +@@ -75,14 +75,14 @@ contains + errmsg ! CCPP error message + integer, intent(out) :: & + errflg ! CCPP error flag +- real(kind_phys), dimension(ncol,NLev+1), intent(inout) :: & ++ real(kind_phys), dimension(:,:), intent(inout) :: & + fluxswUP_allsky, & ! RRTMGP upward all-sky flux profiles (W/m2) + fluxswDOWN_allsky, & ! RRTMGP downward all-sky flux profiles (W/m2) + fluxswUP_clrsky, & ! RRTMGP upward clear-sky flux profiles (W/m2) + fluxswDOWN_clrsky ! RRTMGP downward clear-sky flux profiles (W/m2) + + ! Outputs (optional) +- type(cmpfsw_type), dimension(ncol), intent(inout),optional :: & ++ type(cmpfsw_type), dimension(:), intent(inout),optional :: & + scmpsw ! 2D surface fluxes, components: + ! uvbfc - total sky downward uv-b flux (W/m2) + ! uvbf0 - clear sky downward uv-b flux (W/m2) +diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f +index 67576af..d67ebb7 100644 +--- a/physics/samfdeepcnv.f ++++ b/physics/samfdeepcnv.f +@@ -87,29 +87,29 @@ + implicit none + ! + integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud +- integer, intent(in) :: islimsk(im) ++ integer, intent(in) :: islimsk(:) + real(kind=kind_phys), intent(in) :: cliq, cp, cvap, eps, epsm1, & + & fv, grav, hvap, rd, rv, t0c + real(kind=kind_phys), intent(in) :: delt +- real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & +- & prslp(im,km), garea(im), dot(im,km), phil(im,km) ++ real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & ++ & prslp(:,:), garea(:), dot(:,:), phil(:,:) + real(kind=kind_phys), dimension(:), intent(in) :: fscav + logical, intent(in) :: hwrf_samfdeep + real(kind=kind_phys), intent(in) :: nthresh +- real(kind=kind_phys), intent(in) :: ca_deep(im) +- real(kind=kind_phys), intent(out) :: rainevap(im) ++ real(kind=kind_phys), intent(in) :: ca_deep(:) ++ real(kind=kind_phys), intent(out) :: rainevap(:) + logical, intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger + +- integer, intent(inout) :: kcnv(im) ++ integer, intent(inout) :: kcnv(:) + ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH +- real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & +- & q1(im,km), t1(im,km), u1(im,km), v1(im,km), & +- & cnvw(im,km), cnvc(im,km) ++ real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & ++ & q1(:,:), t1(:,:), u1(:,:), v1(:,:), & ++ & cnvw(:,:), cnvc(:,:) + +- integer, intent(out) :: kbot(im), ktop(im) +- real(kind=kind_phys), intent(out) :: cldwrk(im), & +- & rn(im), & +- & ud_mf(im,km),dd_mf(im,km), dt_mf(im,km) ++ integer, intent(out) :: kbot(:), ktop(:) ++ real(kind=kind_phys), intent(out) :: cldwrk(:), & ++ & rn(:), & ++ & ud_mf(:,:),dd_mf(:,:), dt_mf(:,:) + + ! GJF* These variables are conditionally allocated depending on whether the + ! Morrison-Gettelman microphysics is used, so they must be declared +diff --git a/physics/samfshalcnv.f b/physics/samfshalcnv.f +index e489628..9571b55 100644 +--- a/physics/samfshalcnv.f ++++ b/physics/samfshalcnv.f +@@ -63,22 +63,22 @@ + implicit none + ! + integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud +- integer, intent(in) :: islimsk(im) ++ integer, intent(in) :: islimsk(:) + real(kind=kind_phys), intent(in) :: cliq, cp, cvap, & + & eps, epsm1, fv, grav, hvap, rd, rv, t0c + real(kind=kind_phys), intent(in) :: delt +- real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & +- & prslp(im,km), garea(im), hpbl(im), dot(im,km), phil(im,km) ++ real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & ++ & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:) + ! + real(kind=kind_phys), dimension(:), intent(in) :: fscav +- integer, intent(inout) :: kcnv(im) ++ integer, intent(inout) :: kcnv(:) + ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH +- real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & +- & q1(im,km), t1(im,km), u1(im,km), v1(im,km) ++ real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & ++ & q1(:,:), t1(:,:), u1(:,:), v1(:,:) + ! +- integer, intent(out) :: kbot(im), ktop(im) +- real(kind=kind_phys), intent(out) :: rn(im), & +- & cnvw(im,km), cnvc(im,km), ud_mf(im,km), dt_mf(im,km) ++ integer, intent(out) :: kbot(:), ktop(:) ++ real(kind=kind_phys), intent(out) :: rn(:), & ++ & cnvw(:,:), cnvc(:,:), ud_mf(:,:), dt_mf(:,:) + ! + real(kind=kind_phys), intent(in) :: clam, c0s, c1, & + & asolfac, pgcon +diff --git a/physics/satmedmfvdif.F b/physics/satmedmfvdif.F +index f00fb37..69c0bb5 100644 +--- a/physics/satmedmfvdif.F ++++ b/physics/satmedmfvdif.F +@@ -71,8 +71,8 @@ + ! + !---------------------------------------------------------------------- + integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke +- integer, intent(in) :: kinver(im) +- integer, intent(out) :: kpbl(im) ++ integer, intent(in) :: kinver(:) ++ integer, intent(out) :: kpbl(:) + ! + logical, intent(in) :: ldiag3d, qdiag3d + real(kind=kind_phys), intent(inout), dimension(:,:) :: & +@@ -81,26 +81,26 @@ + real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & + & eps,epsm1 + real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s +- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & +- & tdt(im,km), rtg(im,km,ntrac) ++ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & ++ & tdt(:,:), rtg(:,:,:) + real(kind=kind_phys), intent(in) :: & +- & u1(im,km), v1(im,km), & +- & t1(im,km), q1(im,km,ntrac), & +- & swh(im,km), hlw(im,km), & +- & xmu(im), garea(im), & +- & psk(im), rbsoil(im), & +- & zorl(im), tsea(im), & +- & u10m(im), v10m(im), & +- & fm(im), fh(im), & +- & evap(im), heat(im), & +- & stress(im), spd1(im), & +- & prsi(im,km+1), del(im,km), & +- & prsl(im,km), prslk(im,km), & +- & phii(im,km+1), phil(im,km) ++ & u1(:,:), v1(:,:), & ++ & t1(:,:), q1(:,:,:), & ++ & swh(:,:), hlw(:,:), & ++ & xmu(:), garea(:), & ++ & psk(:), rbsoil(:), & ++ & zorl(:), tsea(:), & ++ & u10m(:), v10m(:), & ++ & fm(:), fh(:), & ++ & evap(:), heat(:), & ++ & stress(:), spd1(:), & ++ & prsi(:,:), del(:,:), & ++ & prsl(:,:), prslk(:,:), & ++ & phii(:,:), phil(:,:) + real(kind=kind_phys), intent(out) :: & +- & dusfc(im), dvsfc(im), & +- & dtsfc(im), dqsfc(im), & +- & hpbl(im) ++ & dusfc(:), dvsfc(:), & ++ & dtsfc(:), dqsfc(:), & ++ & hpbl(:) + ! + logical, intent(in) :: dspheat + character(len=*), intent(out) :: errmsg +diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F +index f192788..0773137 100644 +--- a/physics/satmedmfvdifq.F ++++ b/physics/satmedmfvdifq.F +@@ -75,40 +75,40 @@ + ! + !---------------------------------------------------------------------- + integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke, ntoz +- integer, intent(in) :: kinver(im) +- integer, intent(in) :: islimsk(im) +- integer, intent(out) :: kpbl(im) ++ integer, intent(in) :: kinver(:) ++ integer, intent(in) :: islimsk(:) ++ integer, intent(out) :: kpbl(:) + logical, intent(in) :: ldiag3d,qdiag3d + ! + real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & + & eps,epsm1 + real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s + real(kind=kind_phys), intent(in) :: dspfac, bl_upfr, bl_dnfr +- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & +- & tdt(im,km), rtg(im,km,ntrac) ++ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & ++ & tdt(:,:), rtg(:,:,:) + real(kind=kind_phys), intent(in) :: & +- & u1(im,km), v1(im,km), & +- & t1(im,km), q1(im,km,ntrac), & +- & swh(im,km), hlw(im,km), & +- & xmu(im), garea(im), & +- & snwdph_lnd(im), & +- & psk(im), rbsoil(im), & +- & zorl(im), tsea(im), & +- & u10m(im), v10m(im), & +- & fm(im), fh(im), & +- & evap(im), heat(im), & +- & stress(im), spd1(im), & +- & prsi(im,km+1), del(im,km), & +- & prsl(im,km), prslk(im,km), & +- & phii(im,km+1), phil(im,km) ++ & u1(:,:), v1(:,:), & ++ & t1(:,:), q1(:,:,:), & ++ & swh(:,:), hlw(:,:), & ++ & xmu(:), garea(:), & ++ & snwdph_lnd(:), & ++ & psk(:), rbsoil(:), & ++ & zorl(:), tsea(:), & ++ & u10m(:), v10m(:), & ++ & fm(:), fh(:), & ++ & evap(:), heat(:), & ++ & stress(:), spd1(:), & ++ & prsi(:,:), del(:,:), & ++ & prsl(:,:), prslk(:,:), & ++ & phii(:,:), phil(:,:) + real(kind=kind_phys), intent(inout), dimension(:,:) :: & + & du3dt(:,:), dv3dt(:,:), & + & dt3dt(:,:), dq3dt(:,:), & + & do3dt(:,:) + real(kind=kind_phys), intent(out) :: & +- & dusfc(im), dvsfc(im), & +- & dtsfc(im), dqsfc(im), & +- & hpbl(im) ++ & dusfc(:), dvsfc(:), & ++ & dtsfc(:), dqsfc(:), & ++ & hpbl(:) + ! + logical, intent(in) :: dspheat + character(len=*), intent(out) :: errmsg +diff --git a/physics/sfc_cice.f b/physics/sfc_cice.f +index f845f60..44b3ee2 100644 +--- a/physics/sfc_cice.f ++++ b/physics/sfc_cice.f +@@ -107,14 +107,14 @@ + logical, intent(in) :: cplflx + + ! real (kind=kind_phys), dimension(im), intent(in) :: u1, v1, & +- real (kind=kind_phys), dimension(im), intent(in) :: & ++ real (kind=kind_phys), dimension(:), intent(in) :: & + & t1, q1, cm, ch, prsl1, wind, dqsfc, dtsfc, dusfc, dvsfc + &, snowd + + logical, intent(in) :: flag_cice(im), flag_iter(im) + + ! --- outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & + & cmm, chh, evap, hflx, stress + &, weasd, snwdph, ep + ! +diff --git a/physics/sfc_diag.f b/physics/sfc_diag.f +index b78c9b2..e91bd0e 100644 +--- a/physics/sfc_diag.f ++++ b/physics/sfc_diag.f +@@ -33,10 +33,10 @@ + ! + integer, intent(in) :: im + real(kind=kind_phys), intent(in) :: grav,cp,eps,epsm1 +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & ps, u1, v1, t1, q1, tskin, & + & qsurf, prslki, evap, fm, fh, fm10, fh2 +- real(kind=kind_phys), dimension(im), intent(out) :: & ++ real(kind=kind_phys), dimension(:), intent(out) :: & + & f10m, u10m, v10m, t2m, q2m + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/sfc_diag_post.F90 b/physics/sfc_diag_post.F90 +index 767e98d..1bf3e7e 100644 +--- a/physics/sfc_diag_post.F90 ++++ b/physics/sfc_diag_post.F90 +@@ -26,11 +26,11 @@ + integer, intent(in) :: im, lsm, lsm_noahmp + logical, intent(in) :: lssav + real(kind=kind_phys), intent(in) :: dtf, con_eps, con_epsm1 +- logical , dimension(im), intent(in) :: dry +- real(kind=kind_phys), dimension(im), intent(in) :: pgr, u10m, v10m ++ logical , dimension(:), intent(in) :: dry ++ real(kind=kind_phys), dimension(:), intent(in) :: pgr, u10m, v10m + real(kind=kind_phys), dimension(:) , intent(in) :: t2mmp, q2mp +- real(kind=kind_phys), dimension(im), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax +- real(kind=kind_phys), dimension(im), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m ++ real(kind=kind_phys), dimension(:), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax ++ real(kind=kind_phys), dimension(:), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg +diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f +index b7ef1ea..93102e4 100644 +--- a/physics/sfc_diff.f ++++ b/physics/sfc_diff.f +@@ -90,24 +90,24 @@ + integer, intent(in) :: im, ivegsrc + integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean + +- integer, dimension(im), intent(in) :: vegtype ++ integer, dimension(:), intent(in) :: vegtype + + logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) +- logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy ++ logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy + +- real(kind=kind_phys), dimension(im), intent(in) :: u10m,v10m ++ real(kind=kind_phys), dimension(:), intent(in) :: u10m,v10m + real(kind=kind_phys), intent(in) :: rvrdm1, eps, epsm1, grav +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & ps,t1,q1,z1,prsl1,prslki,prsik1,prslk1, & + & wind,sigmaf,shdmax, & + & z0pert,ztpert ! mg, sfc-perts +- real(kind=kind_phys), dimension(im), intent(in) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: & + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snwdph_wat,snwdph_lnd,snwdph_ice + +- real(kind=kind_phys), dimension(im), intent(in) :: z0rl_wav +- real(kind=kind_phys), dimension(im), intent(inout) :: & ++ real(kind=kind_phys), dimension(:), intent(in) :: z0rl_wav ++ real(kind=kind_phys), dimension(:), intent(inout) :: & + & z0rl_wat, z0rl_lnd, z0rl_ice, & + & ustar_wat, ustar_lnd, ustar_ice, & + & cm_wat, cm_lnd, cm_ice, & +diff --git a/physics/sfc_drv.f b/physics/sfc_drv.f +index 5d8e196..878f08a 100644 +--- a/physics/sfc_drv.f ++++ b/physics/sfc_drv.f +@@ -211,11 +211,11 @@ + integer, intent(in) :: im, km, isot, ivegsrc + real (kind=kind_phys), intent(in) :: grav, cp, hvap, rd, eps, & + & epsm1, rvrdm1 +- real (kind=kind_phys), dimension(5), intent(in) :: pertvegf ++ real (kind=kind_phys), dimension(:), intent(in) :: pertvegf + +- integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp ++ integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp + +- real (kind=kind_phys), dimension(im), intent(in) :: ps, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, & + & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & + & ch, prsl1, prslki, wind, shdmin, shdmax, & + & snoalb, sfalb, zf, & +@@ -223,19 +223,19 @@ + + real (kind=kind_phys), intent(in) :: delt + +- logical, dimension(im), intent(in) :: flag_iter, flag_guess, land ++ logical, dimension(:), intent(in) :: flag_iter, flag_guess, land + + logical, intent(in) :: lheatstrg + + ! --- in/out: +- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & + & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl + +- real (kind=kind_phys), dimension(im,km), intent(inout) :: & ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: & + & smc, stc, slc + + ! --- output: +- real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & + & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & + & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, & + & wet1 +diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 +index 65935ef..ff72777 100644 +--- a/physics/sfc_drv_ruc.F90 ++++ b/physics/sfc_drv_ruc.F90 +@@ -168,9 +168,9 @@ module lsm_ruc + integer, intent(in) :: lsm_ruc, lsm + integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson + +- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: smc,stc,slc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: smc,stc,slc + +- real (kind=kind_phys), dimension(im), intent(in) :: & ++ real (kind=kind_phys), dimension(:), intent(in) :: & + & t1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & + & ch, prsl1, wind, shdmin, shdmax, & + & snoalb, alvwf, alnwf, zf, qc, q1 +@@ -182,30 +182,30 @@ module lsm_ruc + con_pi, con_rd, & + con_hvap, con_fvirt + +- logical, dimension(im), intent(in) :: flag_iter, flag_guess, land +- integer, dimension(im), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) ++ logical, dimension(:), intent(in) :: flag_iter, flag_guess, land ++ integer, dimension(:), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) + logical, intent(in) :: do_mynnsfclay + + logical, intent(in) :: rdlai + + ! --- in/out: +- integer, dimension(im), intent(inout) :: soiltyp, vegtype ++ integer, dimension(:), intent(inout) :: soiltyp, vegtype + real (kind=kind_phys), dimension(lsoil_ruc) :: dzs +- real (kind=kind_phys), dimension(lsoil_ruc), intent(inout ) :: zs +- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & ++ real (kind=kind_phys), dimension(:), intent(inout ) :: zs ++ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & + & snwdph, tskin, tskin_wat, & + & srflag, canopy, trans, tsurf, zorl, tsnow, & + & sfcqc, sfcqv, sfcdew, fice, tice, sfalb, smcwlt2, smcref2 + ! --- in +- real (kind=kind_phys), dimension(im), intent(in) :: & ++ real (kind=kind_phys), dimension(:), intent(in) :: & + & rainnc, rainc, ice, snow, graupel + ! --- in/out: + ! --- on RUC levels +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: & + & smois, tslb, sh2o, keepfr, smfrkeep + + ! --- output: +- real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & + & qsurf , gflux , evap , runof , drain , & + & runoff, srunoff, hflx, cmm, chh, & + & rhosnf, evbs, evcw, sbsno, stm, wetness, & +@@ -1053,25 +1053,25 @@ module lsm_ruc + integer, intent(in ) :: im, nlev + integer, intent(in ) :: lsoil_ruc + integer, intent(in ) :: lsoil +- logical, dimension(im), intent(in ) :: land +- real (kind=kind_phys), dimension(im), intent(in ) :: tsurf, tsurf_wat +- real (kind=kind_phys), dimension(im), intent(inout) :: smcref2 +- real (kind=kind_phys), dimension(im), intent(inout) :: smcwlt2 +- real (kind=kind_phys), dimension(im), intent(in ) :: tg3 +- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: smc ! Noah +- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: stc ! Noah +- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: slc ! Noah +- +- integer, dimension(im), intent(inout) :: soiltyp +- integer, dimension(im), intent(inout) :: vegtype +- real (kind=kind_phys), dimension(im), intent(inout) :: wetness +- real (kind=kind_phys), dimension(im), intent(inout) :: fice +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smois! ruc +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb ! ruc +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: sh2o ! ruc +- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smfrkeep ! ruc +- +- real (kind=kind_phys), dimension(1:lsoil_ruc), intent (out) :: zs ++ logical, dimension(:), intent(in ) :: land ++ real (kind=kind_phys), dimension(:), intent(in ) :: tsurf, tsurf_wat ++ real (kind=kind_phys), dimension(:), intent(inout) :: smcref2 ++ real (kind=kind_phys), dimension(:), intent(inout) :: smcwlt2 ++ real (kind=kind_phys), dimension(:), intent(in ) :: tg3 ++ real (kind=kind_phys), dimension(:,:), intent(in ) :: smc ! Noah ++ real (kind=kind_phys), dimension(:,:), intent(in ) :: stc ! Noah ++ real (kind=kind_phys), dimension(:,:), intent(in ) :: slc ! Noah ++ ++ integer, dimension(:), intent(inout) :: soiltyp ++ integer, dimension(:), intent(inout) :: vegtype ++ real (kind=kind_phys), dimension(:), intent(inout) :: wetness ++ real (kind=kind_phys), dimension(:), intent(inout) :: fice ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: smois! ruc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb ! ruc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: sh2o ! ruc ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: smfrkeep ! ruc ++ ++ real (kind=kind_phys), dimension(:), intent (out) :: zs + + integer, intent(in ) :: me + integer, intent(in ) :: master +diff --git a/physics/sfc_noahmp_drv.f b/physics/sfc_noahmp_drv.f +index bdba632..f2c5809 100644 +--- a/physics/sfc_noahmp_drv.f ++++ b/physics/sfc_noahmp_drv.f +@@ -142,17 +142,17 @@ + + integer, intent(in) :: im, km, itime + +- integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp ++ integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp + +- real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & + & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & + & ch, prsl1, prslki, wind, shdmin, shdmax, & + & snoalb, sfalb, zf, & + & rainn_mp,rainc_mp,snow_mp,graupel_mp,ice_mp + +- logical, dimension(im), intent(in) :: dry ++ logical, dimension(:), intent(in) :: dry + +- real (kind=kind_phys),dimension(im),intent(in) :: xlatin,xcoszin ++ real (kind=kind_phys),dimension(:),intent(in) :: xlatin,xcoszin + + integer, intent(in) :: idveg, iopt_crs,iopt_btr,iopt_run, & + & iopt_sfc,iopt_frz,iopt_inf,iopt_rad, & +@@ -170,24 +170,24 @@ + & con_rd, con_hfus + + ! --- in/out: +- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & + & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl + +- real (kind=kind_phys), dimension(im,km), intent(inout) :: & ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: & + & smc, stc, slc + +- real (kind=kind_phys), dimension(im), intent(inout) :: snowxy, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: snowxy, & + & tvxy,tgxy,canicexy,canliqxy,eahxy,tahxy, & + & cmxy,chxy,fwetxy,sneqvoxy,alboldxy,qsnowxy, & + & wslakexy,zwtxy,waxy,wtxy,lfmassxy,rtmassxy, & + & stmassxy,woodxy,stblcpxy,fastcpxy,xlaixy, & + & xsaixy,taussxy,smcwtdxy,deeprechxy,rechxy + +- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: tsnoxy +- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snicexy +- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snliqxy +- real (kind=kind_phys),dimension(im,1:4), intent(inout) :: smoiseq +- real (kind=kind_phys),dimension(im,-2:4),intent(inout) :: zsnsoxy ++ real (kind=kind_phys),dimension(:,:),intent(inout) :: tsnoxy ++ real (kind=kind_phys),dimension(:,:),intent(inout) :: snicexy ++ real (kind=kind_phys),dimension(:,:),intent(inout) :: snliqxy ++ real (kind=kind_phys),dimension(:,:), intent(inout) :: smoiseq ++ real (kind=kind_phys),dimension(:,:),intent(inout) :: zsnsoxy + + integer, dimension(im) :: jsnowxy + real (kind=kind_phys),dimension(im) :: snodep +@@ -195,7 +195,7 @@ + + ! --- output: + +- real (kind=kind_phys), dimension(im), intent(out) :: sncovr1, & ++ real (kind=kind_phys), dimension(:), intent(out) :: sncovr1, & + & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & + & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, wet1 + real (kind=kind_phys), dimension(:), intent(out) :: t2mmp, q2mp +diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f +index 5920f37..0e6872c 100644 +--- a/physics/sfc_nst.f ++++ b/physics/sfc_nst.f +@@ -190,25 +190,25 @@ + & nstf_name5 + real (kind=kind_phys), intent(in) :: hvap, cp, hfus, jcal, eps, & + & epsm1, rvrdm1, rd, rhw0, sbc, pi +- real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & + & t1, q1, tref, cm, ch, prsl1, prslki, prsik1, prslk1, & + & xlon,xcosz, & + & sinlat, stress, sfcemis, dlwflx, sfcnsw, rain, wind + real (kind=kind_phys), intent(in) :: timestep + real (kind=kind_phys), intent(in) :: solhr + +- logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet ++ logical, dimension(:), intent(in) :: flag_iter, flag_guess, wet + ! &, icy + logical, intent(in) :: lprnt + + ! --- input/outputs: + ! control variables of dtl system (5+2) and sl (2) and coefficients for d(tz)/d(ts) calculation +- real (kind=kind_phys), dimension(im), intent(inout) :: tskin, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: tskin, & + & tsurf, xt, xs, xu, xv, xz, zm, xtts, xzts, dt_cool, & + & z_c, c_0, c_d, w_0, w_d, d_conv, ifd, qrain + + ! --- outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: & ++ real (kind=kind_phys), dimension(:), intent(inout) :: & + & qsurf, gflux, cmm, chh, evap, hflx, ep + + character(len=*), intent(out) :: errmsg +@@ -687,13 +687,13 @@ cc + + ! --- inputs: + integer, intent(in) :: im, nthreads +- logical, dimension(im), intent(in) :: wet +- real (kind=kind_phys), dimension(im), intent(in) :: ++ logical, dimension(:), intent(in) :: wet ++ real (kind=kind_phys), dimension(:), intent(in) :: + & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + logical, intent(in) :: cplflx + + ! --- input/outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: ++ real (kind=kind_phys), dimension(:), intent(inout) :: + & tsurf_wat, tseal, tref + + ! --- outputs: +diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F +index 20c8cdf..f6e511a 100644 +--- a/physics/sfc_ocean.F ++++ b/physics/sfc_ocean.F +@@ -103,13 +103,13 @@ + integer, intent(in) :: im + real (kind=kind_phys), intent(in) :: rd, eps, epsm1, rvrdm1 + +- real (kind=kind_phys), dimension(im), intent(in) :: ps, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, & + & t1, q1, tskin, cm, ch, prsl1, prslki, wind + +- logical, dimension(im), intent(in) :: flag_iter, wet, lake ++ logical, dimension(:), intent(in) :: flag_iter, wet, lake + + ! --- outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & + & cmm, chh, gflux, evap, hflx, ep + + character(len=*), intent(out) :: errmsg +diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f +index ab67f84..c18fd9d 100644 +--- a/physics/sfc_sice.f ++++ b/physics/sfc_sice.f +@@ -157,25 +157,25 @@ + real (kind=kind_phys), intent(in) :: sbc, hvap, tgice, cp, eps, & + & epsm1, grav, rvrdm1, t0c, rd + +- real (kind=kind_phys), dimension(im), intent(in) :: ps, & ++ real (kind=kind_phys), dimension(:), intent(in) :: ps, & + & t1, q1, sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, cm, ch, & + & prsl1, prslki, prsik1, prslk1, wind, oceanfrac + + ! integer, dimension(im), intent(in) :: islimsk +- integer, dimension(im), intent(in) :: islmsk_cice ++ integer, dimension(:), intent(in) :: islmsk_cice + real (kind=kind_phys), intent(in) :: delt, min_seaice, & + & min_lakeice + +- logical, dimension(im), intent(in) :: flag_iter, icy ++ logical, dimension(:), intent(in) :: flag_iter, icy + + ! --- input/outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: hice, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: hice, & + & fice, tice, weasd, tskin, tprcp, ep + +- real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice ++ real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice + + ! --- outputs: +- real (kind=kind_phys), dimension(im), intent(inout) :: snwdph, & ++ real (kind=kind_phys), dimension(:), intent(inout) :: snwdph, & + & qsurf, snowmt, gflux, cmm, chh, evap, hflx + + character(len=*), intent(out) :: errmsg +diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 +index 83270a0..da9c089 100644 +--- a/physics/shinhongvdif.F90 ++++ b/physics/shinhongvdif.F90 +@@ -107,7 +107,7 @@ + integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw + real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt + ! 3D in +- real(kind=kind_phys), dimension(im, km) , & ++ real(kind=kind_phys), dimension(:,:) , & + intent(in ) :: phil, & + pi2d, & + p2d, & +@@ -117,21 +117,21 @@ + real(kind=kind_phys), dimension( im, km, ntrac ) , & + intent(in ) :: qx + +- real(kind=kind_phys), dimension( im, km+1 ) , & ++ real(kind=kind_phys), dimension( :,: ) , & + intent(in ) :: p2di, & + phii + ! 3D in&out +- real(kind=kind_phys), dimension(im, km) , & ++ real(kind=kind_phys), dimension(:,:) , & + intent(inout) :: utnp, & + vtnp, & + ttnp +- real(kind=kind_phys), dimension(im, km, ntrac ) , & ++ real(kind=kind_phys), dimension(:,:, : ) , & + intent(inout) :: qtnp + ! 2D in +- integer, dimension(im) , & ++ integer, dimension(:) , & + intent(in ) :: landmask + +- real(kind=kind_phys), dimension(im) , & ++ real(kind=kind_phys), dimension(:) , & + intent(in ) :: heat, & + evap, & + br, & +@@ -145,10 +145,10 @@ + v10, & + dx + ! 2D: out +- integer, dimension(im) , & ++ integer, dimension(:) , & + intent(out ) :: kpbl1d + +- real(kind=kind_phys), dimension(im) , & ++ real(kind=kind_phys), dimension(:) , & + intent(out ) :: hpbl, & + dusfc, & + dvsfc, & +@@ -1435,13 +1435,13 @@ + ! + real(kind=kind_phys), dimension( its:ite, kts:kte ) , & + intent(in ) :: cm +- real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & ++ real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & + intent(in ) :: r2 + ! + real(kind=kind_phys), dimension( its:ite, kts:kte ) , & + intent(inout) :: au, & + cu +- real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & ++ real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & + intent(inout) :: f2 + ! + real(kind=kind_phys) :: fk +@@ -1582,7 +1582,7 @@ + qol2st,qol2un,qdzl,rdz,sq,srel,szq,tem,thm,vkrmz,rlambda, & + rlb,rln,f + real(kind=kind_phys) :: ckp +- real(kind=kind_phys), dimension( kts:kte ) :: q1, & ++ real(kind=kind_phys), dimension( kts:kte ) :: q1, & + en2 + real(kind=kind_phys), dimension( kts+1:kte ) :: dth, & + elm, & +@@ -1748,12 +1748,12 @@ + ! + logical, intent(in ) :: pblflg + ! +- real(kind=kind_phys), dimension( kts:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: uxk, & + vxk, & + thxk, & + thvxk +- real(kind=kind_phys), dimension( kts+1:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: s2, & + ri, & + akm, & +@@ -1764,10 +1764,10 @@ + vfxpbl, & + qfxpbl + ! +- real(kind=kind_phys), dimension( kts:kte+1 ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: z + ! +- real(kind=kind_phys), dimension( kts:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(inout) :: q2 + ! + ! local vars +@@ -1855,16 +1855,16 @@ + ! + logical, intent(in ) :: pblflg + ! +- real(kind=kind_phys), dimension( kts:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: hgame, & + ptke1 +- real(kind=kind_phys), dimension( kts+1:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: el, & + akhk +- real(kind=kind_phys), dimension( kts:kte+1 ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in ) :: z + ! +- real(kind=kind_phys), dimension( kts:kte ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(inout) :: q2 + ! + ! local vars +diff --git a/physics/ysuvdif.F90 b/physics/ysuvdif.F90 +index 51ed599..420dfb7 100644 +--- a/physics/ysuvdif.F90 ++++ b/physics/ysuvdif.F90 +@@ -62,33 +62,33 @@ + integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw + real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt + +- real(kind=kind_phys), dimension( im,km ), & ++ real(kind=kind_phys), dimension( :,: ), & + intent(in) :: pi2d,p2d,phil,ux,vx,swh,hlw,tx + +- real(kind=kind_phys), dimension( im,km,ntrac ) , & ++ real(kind=kind_phys), dimension( :,:,: ) , & + intent(in ) :: qx + +- real(kind=kind_phys), dimension( im, km+1 ) , & ++ real(kind=kind_phys), dimension( :,: ) , & + intent(in ) :: p2di,phii + +- real(kind=kind_phys), dimension( im ) , & ++ real(kind=kind_phys), dimension( : ) , & + intent(in) :: stress,zorl,heat,evap,wspd,br,psim,psih,psfcpa, & + u10,v10,xmu +- integer, dimension(im) ,& ++ integer, dimension(:) ,& + intent(in ) :: landmask + ! + !---------------------------------------------------------------------------------- + ! input/output variables + ! +- real(kind=kind_phys), dimension( im,km ) , & ++ real(kind=kind_phys), dimension( :,: ) , & + intent(inout) :: utnp,vtnp,ttnp +- real(kind=kind_phys), dimension( im,km,ntrac ) , & ++ real(kind=kind_phys), dimension( :,:,: ) , & + intent(inout) :: qtnp + ! + !--------------------------------------------------------------------------------- + ! output variables +- integer, dimension( im ), intent(out ) :: kpbl1d +- real(kind=kind_phys), dimension( im ), & ++ integer, dimension( : ), intent(out ) :: kpbl1d ++ real(kind=kind_phys), dimension( : ), & + intent(out) :: hpbl + + ! error messages diff --git a/physics/gscond.f b/physics/gscond.f index 28f24763c..7144ba2cf 100644 --- a/physics/gscond.f +++ b/physics/gscond.f @@ -73,14 +73,14 @@ subroutine zhaocarr_gscond_run (im,km,dt,dtf,prsl,ps,q,clw1 & ! Interface variables integer, intent(in) :: im, km, ipr real(kind=kind_phys), intent(in) :: dt, dtf - real(kind=kind_phys), intent(in) :: prsl(im,km), ps(im) - real(kind=kind_phys), intent(inout) :: q(im,km) - real(kind=kind_phys), intent(in) :: clw1(im,km), clw2(im,km) - real(kind=kind_phys), intent(out) :: cwm(im,km) - real(kind=kind_phys), intent(inout) :: t(im,km) & - &, tp(im,km), qp(im,km), psp(im) & - &, tp1(im,km), qp1(im,km), psp1(im) - real(kind=kind_phys), intent(in) :: u(im,km) + real(kind=kind_phys), intent(in) :: prsl(:,:), ps(:) + real(kind=kind_phys), intent(inout) :: q(:,:) + real(kind=kind_phys), intent(in) :: clw1(:,:), clw2(:,:) + real(kind=kind_phys), intent(out) :: cwm(:,:) + real(kind=kind_phys), intent(inout) :: t(:,:) & + &, tp(:,:), qp(:,:), psp(:) & + &, tp1(:,:), qp1(:,:), psp1(:) + real(kind=kind_phys), intent(in) :: u(:,:) logical, intent(in) :: lprnt ! character(len=*), intent(out) :: errmsg diff --git a/physics/gwdc.f b/physics/gwdc.f index 5c6f8ecd7..0978a956a 100644 --- a/physics/gwdc.f +++ b/physics/gwdc.f @@ -187,15 +187,15 @@ subroutine gwdc_run (im,km,lat,u1,v1,t1,q1,deltim, & !----------------------------------------------------------------------- integer, intent(in) :: im, km, lat, ipr - integer, intent(in) :: ktop(im),kbot(im),kcnv(im) + integer, intent(in) :: ktop(:),kbot(:),kcnv(:) real(kind=kind_phys), intent(in) :: grav,cp,rd,fv,fhour,deltim,pi - real(kind=kind_phys), dimension(im), intent(in) :: qmax - real(kind=kind_phys), dimension(im), intent(out) :: tauctx,taucty - real(kind=kind_phys), dimension(im), intent(in) :: cldf,dlength - real(kind=kind_phys), dimension(im,km), intent(in) :: u1,v1,t1, & + real(kind=kind_phys), dimension(:), intent(in) :: qmax + real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty + real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength + real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & & q1,pmid1,dpmid1 - real(kind=kind_phys), dimension(im,km), intent(out) :: utgwc,vtgwc - real(kind=kind_phys), dimension(im,km+1), intent(in) :: pint1 + real(kind=kind_phys), dimension(:,:), intent(out) :: utgwc,vtgwc + real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 ! logical, intent(in) :: lprnt ! diff --git a/physics/gwdps.f b/physics/gwdps.f index b09413f02..486aa6670 100644 --- a/physics/gwdps.f +++ b/physics/gwdps.f @@ -1315,4 +1315,4 @@ end subroutine gwdps_run subroutine gwdps_finalize() end subroutine gwdps_finalize - end module gwdps + end module gwdps \ No newline at end of file diff --git a/physics/h2ophys.f b/physics/h2ophys.f index b3bdd279f..ccbce7cda 100644 --- a/physics/h2ophys.f +++ b/physics/h2ophys.f @@ -41,10 +41,10 @@ subroutine h2ophys_run(im, levs, kh2o, dt, h2o, ph2o, prsl, & ! interface variables integer, intent(in) :: im, levs, kh2o, h2o_coeff, me real(kind=kind_phys), intent(in) :: dt - real(kind=kind_phys), intent(inout) :: h2o(im,levs) - real(kind=kind_phys), intent(in) :: ph2o(kh2o) - real(kind=kind_phys), intent(in) :: prsl(im,levs) - real(kind=kind_phys), intent(in) :: h2opltc(im,kh2o,h2o_coeff) + real(kind=kind_phys), intent(inout) :: h2o(:,:) + real(kind=kind_phys), intent(in) :: ph2o(:) + real(kind=kind_phys), intent(in) :: prsl(:,:) + real(kind=kind_phys), intent(in) :: h2opltc(:,:,:) logical , intent(in) :: ldiag3d !real(kind=kind_phys), intent(inout) :: h2op(im,levs,h2o_coeff) character(len=*), intent(out) :: errmsg diff --git a/physics/lsm_ruc_sfc_sice_interstitial.F90 b/physics/lsm_ruc_sfc_sice_interstitial.F90 index 27033fcc8..54c514aff 100644 --- a/physics/lsm_ruc_sfc_sice_interstitial.F90 +++ b/physics/lsm_ruc_sfc_sice_interstitial.F90 @@ -27,12 +27,12 @@ subroutine lsm_ruc_sfc_sice_pre_run(im, lsoil_ruc, lsoil, kice, land, icy, stc, ! Interface variables integer, intent(in) :: im, lsoil_ruc, lsoil, kice - logical, dimension(im), intent(in) :: land, icy + logical, dimension(:), intent(in) :: land, icy ! --- on Noah levels - real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: stc + real (kind=kind_phys), dimension(:,:), intent(inout) :: stc ! --- on RUC levels - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(in) :: tslb - real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice + real (kind=kind_phys), dimension(:,:), intent(in) :: tslb + real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -89,12 +89,12 @@ subroutine lsm_ruc_sfc_sice_post_run(im, lsoil_ruc, lsoil, kice, land, icy, stc, ! Interface variables integer, intent(in) :: im, lsoil_ruc, lsoil, kice - logical, dimension(im), intent(in) :: land, icy + logical, dimension(:), intent(in) :: land, icy ! --- on Noah levels - real (kind=kind_phys), dimension(im,lsoil), intent(in) :: stc - real (kind=kind_phys), dimension(im,kice), intent(in) :: tiice + real (kind=kind_phys), dimension(:,:), intent(in) :: stc + real (kind=kind_phys), dimension(:,:), intent(in) :: tiice ! --- on RUC levels - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb + real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 index 69690d52e..67706ca42 100644 --- a/physics/m_micro.F90 +++ b/physics/m_micro.F90 @@ -181,10 +181,10 @@ subroutine m_micro_run( im, lm, flipv, dt_i & logical,intent(in) :: flipv, skip_macro real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(2) - real (kind=kind_phys), dimension(im,lm),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & prsl_i,u_i,v_i,phil, omega_i, QLLS_i,QILS_i, & & lwheat_i,swheat_i - real (kind=kind_phys), dimension(im,0:lm),intent(in):: prsi_i, & + real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, & & phii ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared @@ -194,26 +194,26 @@ subroutine m_micro_run( im, lm, flipv, dt_i & & CNV_MFD_i, cf_upi, CNV_FICE_i, CNV_NDROP_i, & & CNV_NICE_i, w_upi ! *GJF - real (kind=kind_phys), dimension(im,lm),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & rhc_i, naai_i, npccn_i - real (kind=kind_phys), dimension(im,lm,ntrcaer),intent(in) :: & + real (kind=kind_phys), dimension(:,:,:),intent(in) :: & & aerfld_i - real (kind=kind_phys),dimension(im),intent(in):: TAUGWX, & + real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & & TAUGWY, TAUOROX, TAUOROY, FRLAND,ZPBL,xlat,xlon ! & TAUGWY, TAUX, TAUY, TAUOROX, TAUOROY,ps_i,FRLAND,ZPBL ! & CNVPRCP ! output - real (kind=kind_phys),dimension(im,lm), intent(out) :: lwm_o, qi_o, & + real (kind=kind_phys),dimension(:,:), intent(out) :: lwm_o, qi_o, & cldreffl, cldreffi, cldreffr, cldreffs, cldreffg - real (kind=kind_phys),dimension(im), intent(out) :: rn_o, sr_o + real (kind=kind_phys),dimension(:), intent(out) :: rn_o, sr_o character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! input and output ! Anning Cheng 10/24/2016 twat for total water, diagnostic purpose - integer, dimension(IM), intent(inout):: KCBL - real (kind=kind_phys),dimension(im,lm),intent(inout):: q_io, t_io, & + integer, dimension(:), intent(inout):: KCBL + real (kind=kind_phys),dimension(:,:),intent(inout):: q_io, t_io, & & ncpl_io,ncpi_io,CLLS_io ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 index 930b32b3d..00e6f8e46 100644 --- a/physics/m_micro_interstitial.F90 +++ b/physics/m_micro_interstitial.F90 @@ -183,22 +183,22 @@ subroutine m_micro_post_run( & integer, intent(in) :: im, levs, fprcp logical, intent(in) :: mg3_as_mg2 - real(kind=kind_phys), intent(in ) :: ncpr(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncps(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(1:im,1:levs) - real(kind=kind_phys), intent( out) :: ice(1:im) - real(kind=kind_phys), intent( out) :: snow(1:im) - real(kind=kind_phys), intent( out) :: graupel(1:im) + real(kind=kind_phys), intent(in ) :: ncpr(:,:) + real(kind=kind_phys), intent(in ) :: ncps(:,:) + real(kind=kind_phys), intent(in ) :: ncgl(:,:) + real(kind=kind_phys), intent(inout) :: qrn(:,:) + real(kind=kind_phys), intent(inout) :: qsnw(:,:) + real(kind=kind_phys), intent(inout) :: qgl(:,:) + real(kind=kind_phys), intent(inout) :: gq0_ice(:,:) + real(kind=kind_phys), intent(inout) :: gq0_rain(:,:) + real(kind=kind_phys), intent(inout) :: gq0_snow(:,:) + real(kind=kind_phys), intent(inout) :: gq0_graupel(:,:) + real(kind=kind_phys), intent(inout) :: gq0_rain_nc(:,:) + real(kind=kind_phys), intent(inout) :: gq0_snow_nc(:,:) + real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(:,:) + real(kind=kind_phys), intent( out) :: ice(:) + real(kind=kind_phys), intent( out) :: snow(:) + real(kind=kind_phys), intent( out) :: graupel(:) real(kind=kind_phys), intent(in ) :: dtp character(len=*), intent(out) :: errmsg diff --git a/physics/maximum_hourly_diagnostics.F90 b/physics/maximum_hourly_diagnostics.F90 index 174e0c95c..615c49bed 100644 --- a/physics/maximum_hourly_diagnostics.F90 +++ b/physics/maximum_hourly_diagnostics.F90 @@ -37,23 +37,23 @@ subroutine maximum_hourly_diagnostics_run(im, levs, reset, lradar, imp_physics, logical, intent(in) :: reset, lradar integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_fer_hires real(kind_phys), intent(in ) :: con_g - real(kind_phys), intent(in ) :: phil(im,levs) - real(kind_phys), intent(in ) :: gt0(im,levs) - real(kind_phys), intent(in ) :: refl_10cm(im,levs) - real(kind_phys), intent(inout) :: refdmax(im) - real(kind_phys), intent(inout) :: refdmax263k(im) - real(kind_phys), intent(in ) :: u10m(im) - real(kind_phys), intent(in ) :: v10m(im) - real(kind_phys), intent(inout) :: u10max(im) - real(kind_phys), intent(inout) :: v10max(im) - real(kind_phys), intent(inout) :: spd10max(im) - real(kind_phys), intent(in ) :: pgr(im) - real(kind_phys), intent(in ) :: t2m(im) - real(kind_phys), intent(in ) :: q2m(im) - real(kind_phys), intent(inout) :: t02max(im) - real(kind_phys), intent(inout) :: t02min(im) - real(kind_phys), intent(inout) :: rh02max(im) - real(kind_phys), intent(inout) :: rh02min(im) + real(kind_phys), intent(in ) :: phil(:,:) + real(kind_phys), intent(in ) :: gt0(:,:) + real(kind_phys), intent(in ) :: refl_10cm(:,:) + real(kind_phys), intent(inout) :: refdmax(:) + real(kind_phys), intent(inout) :: refdmax263k(:) + real(kind_phys), intent(in ) :: u10m(:) + real(kind_phys), intent(in ) :: v10m(:) + real(kind_phys), intent(inout) :: u10max(:) + real(kind_phys), intent(inout) :: v10max(:) + real(kind_phys), intent(inout) :: spd10max(:) + real(kind_phys), intent(in ) :: pgr(:) + real(kind_phys), intent(in ) :: t2m(:) + real(kind_phys), intent(in ) :: q2m(:) + real(kind_phys), intent(inout) :: t02max(:) + real(kind_phys), intent(inout) :: t02min(:) + real(kind_phys), intent(inout) :: rh02max(:) + real(kind_phys), intent(inout) :: rh02min(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -126,12 +126,12 @@ end subroutine maximum_hourly_diagnostics_run subroutine max_fields(phil,ref3D,grav,im,levs,refd,tk,refd263k) integer, intent(in) :: im,levs real (kind=kind_phys), intent(in) :: grav - real (kind=kind_phys), intent(in),dimension(im,levs) :: phil,ref3D,tk + real (kind=kind_phys), intent(in),dimension(:,:) :: phil,ref3D,tk integer :: i,k,ll,ipt,kpt real :: dbz1avg,zmidp1,zmidloc,refl,fact real, dimension(im,levs) :: z real, dimension(im) :: zintsfc - real, dimension(im), intent(inout) :: refd,refd263k + real, dimension(:), intent(inout) :: refd,refd263k REAL :: dbz1(2),dbzk,dbzk1 logical :: counter do i=1,im diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 index e3dcf4111..90c50cee9 100644 --- a/physics/module_MYJSFC_wrapper.F90 +++ b/physics/module_MYJSFC_wrapper.F90 @@ -91,22 +91,22 @@ SUBROUTINE myjsfc_wrapper_run( & real(kind=kind_phys),intent(in) :: con_cp, con_g, con_rd !MYJ-2D - logical,dimension(im),intent(in) :: flag_iter - real(kind=kind_phys),dimension(im),intent(in) :: & + logical,dimension(:),intent(in) :: flag_iter + real(kind=kind_phys),dimension(:),intent(in) :: & & prsik_1, prslk_1, tsfc, qsfc, slmsk - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & & phy_myj_akhs, phy_myj_akms, & & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & pblh, zorl, ustar, rib - real(kind=kind_phys),dimension(im),intent(out) :: & + real(kind=kind_phys),dimension(:),intent(out) :: & & cm, ch, stress, ffm, ffh, fm10, fh2 - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & landfrac, lakefrac, oceanfrac, fice - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & z0rl_wat, z0rl_lnd, z0rl_ice, & & ustar_wat, ustar_lnd, ustar_ice, & & cm_wat, cm_lnd, cm_ice, & @@ -121,12 +121,12 @@ SUBROUTINE myjsfc_wrapper_run( & !MYJ-3D - real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & phii, prsi - real(kind=kind_phys),dimension(im,levs),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl !MYJ-4D - real(kind=kind_phys),dimension(im,levs,ntrac),intent(in) :: & + real(kind=kind_phys),dimension(:,:,:),intent(in) :: & & qgrs !LOCAL diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 8fd727148..2d673e431 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -234,13 +234,13 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys) :: tem !MYNN-3D - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: phii - real(kind=kind_phys), dimension(im,levs ), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: phii + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & dtdt, dudt, dvdt, & & dqdt_water_vapor, dqdt_liquid_cloud, dqdt_ice_cloud, & & dqdt_cloud_droplet_num_conc, dqdt_ice_num_conc, & & dqdt_ozone, dqdt_water_aer_num_conc, dqdt_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & qke, qke_adv, EL_PBL, Sh3D, & & qc_bl, qi_bl, cldfra_bl !These 10 arrays are only allocated when bl_mynn_output > 0 @@ -248,7 +248,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & edmf_a,edmf_w,edmf_qt, & & edmf_thl,edmf_ent,edmf_qc, & & sub_thl,sub_sqv,det_thl,det_sqv - real(kind=kind_phys), dimension(im,levs), intent(in) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: & & u,v,omega,t3d, & & exner,prsl, & & qgrs_water_vapor, & @@ -259,13 +259,13 @@ SUBROUTINE mynnedmf_wrapper_run( & & qgrs_ozone, & & qgrs_water_aer_num_conc, & & qgrs_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(out) :: & + real(kind=kind_phys), dimension(:,:), intent(out) :: & & Tsq, Qsq, Cov, exch_h, exch_m real(kind=kind_phys), dimension(:,:), intent(inout) :: & & du3dt_PBL, du3dt_OGWD, dv3dt_PBL, dv3dt_OGWD, & & do3dt_PBL, dq3dt_PBL, dt3dt_PBL - real(kind=kind_phys), dimension(im), intent(in) :: xmu - real(kind=kind_phys), dimension(im, levs), intent(in) :: htrsw, htrlw + real(kind=kind_phys), dimension(:), intent(in) :: xmu + real(kind=kind_phys), dimension(:,:), intent(in) :: htrsw, htrlw !LOCAL real(kind=kind_phys), dimension(im,levs) :: & & sqv,sqc,sqi,qnc,qni,ozone,qnwfa,qnifa, & @@ -284,26 +284,26 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys), DIMENSION( ndvel ) :: vd1 !MYNN-2D - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dx,zorl,slmsk,tsurf,qsfc,ps, & & hflx,qflx,ust,wspd,rb,recmol - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & & stress_ocn,hflx_ocn,qflx_ocn, & & oceanfrac,fice - logical, dimension(im), intent(in) :: & + logical, dimension(:), intent(in) :: & & wet, dry, icy - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & pblh - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & & dtsfci_diag,dqsfci_diag,dtsfc_diag,dqsfc_diag, & & dusfci_diag,dvsfci_diag,dusfc_diag,dvsfc_diag, & & maxMF - integer, dimension(im), intent(inout) :: & + integer, dimension(:), intent(inout) :: & & kpbl,nupdraft,ktop_plume real(kind=kind_phys), dimension(:), intent(inout) :: & diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index 496db7580..4bfb91c26 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -111,8 +111,8 @@ SUBROUTINE mynnsfc_wrapper_run( & logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) !Input data - integer, dimension(im), intent(in) :: vegtype - real(kind=kind_phys), dimension(im), intent(in) :: & + integer, dimension(:), intent(in) :: vegtype + real(kind=kind_phys), dimension(:), intent(in) :: & & sigmaf,shdmax,z0pert,ztpert !MYNN-1D @@ -124,23 +124,23 @@ SUBROUTINE mynnsfc_wrapper_run( & & IMS,IME,JMS,JME,KMS,KME, & & ITS,ITE,JTS,JTE,KTS,KTE - real(kind=kind_phys), dimension(im,levs+1), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: phii - real(kind=kind_phys), dimension(im,levs), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: exner, PRSL, & & u, v, t3d, qvsh, qc real(kind=kind_phys), dimension(im,levs) :: & & pattern_spp_pbl, dz, th, qv - logical, dimension(im), intent(in) :: wet, dry, icy + logical, dimension(:), intent(in) :: wet, dry, icy - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tskin_ocn, tskin_lnd, tskin_ice, & & tsurf_ocn, tsurf_lnd, tsurf_ice, & & snowh_ocn, snowh_lnd, snowh_ice - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & znt_ocn, znt_lnd, znt_ice, & & ust_ocn, ust_lnd, ust_ice, & & cm_ocn, cm_lnd, cm_ice, & @@ -156,10 +156,10 @@ SUBROUTINE mynnsfc_wrapper_run( & & qsfc_ocn, qsfc_lnd, qsfc_ice !MYNN-2D - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dx, pblh, slmsk, ps - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & ustm, hflx, qflx, wspd, qsfc, qsfc_ruc, & & FLHC, FLQC, U10, V10, TH2, T2, Q2, & & CHS2, CQS2, rmol, zol, mol, ch, & diff --git a/physics/module_SGSCloud_RadPost.F90 b/physics/module_SGSCloud_RadPost.F90 index bedb660a6..ea262596f 100644 --- a/physics/module_SGSCloud_RadPost.F90 +++ b/physics/module_SGSCloud_RadPost.F90 @@ -34,8 +34,8 @@ subroutine sgscloud_radpost_run( & integer, intent(in) :: im, levs logical, intent(in) :: flag_init, flag_restart - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi - real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi + real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variable diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 5a1a2744f..3380f8f1a 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -67,20 +67,20 @@ subroutine sgscloud_radpre_run( & integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & & nlay, imp_physics, imp_physics_gfdl logical, intent(in) :: flag_init, flag_restart, do_mynnedmf - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qr, qs, qg + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi + real(kind=kind_phys), dimension(:,:), intent(inout) :: qr, qs, qg ! qci_conv only allocated if GF is used real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv - real(kind=kind_phys), dimension(im,levs), intent(in) :: T3D,delp, & + real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp, & & qv,P3D - real(kind=kind_phys), dimension(im,levs), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & clouds1,clouds2,clouds3,clouds4,clouds5 - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc_save, qi_save - real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_bl, qi_bl, cldfra_bl - real(kind=kind_phys), dimension(im), intent(in) :: slmsk, xlat, de_lgth - real(kind=kind_phys), dimension(im,nlay), intent(in) :: plyr, dz - real(kind=kind_phys), dimension(im,5), intent(inout) :: cldsa - integer, dimension(im,3), intent(inout) :: mbota, mtopa + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(in) :: qc_bl, qi_bl, cldfra_bl + real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth + real(kind=kind_phys), dimension(:,:), intent(in) :: plyr, dz + real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa + integer, dimension(:,:), intent(inout) :: mbota, mtopa character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables diff --git a/physics/moninedmf.f b/physics/moninedmf.f index 63edc3486..9a6e4a6dd 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -79,38 +79,38 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & logical, intent(in) :: lprnt,lssav,ldiag3d,qdiag3d,lsidea logical, intent(in) :: flag_for_pbl_generic_tend integer, intent(in) :: ipr - integer, intent(in) :: im, km, ntrac, ntcw, kinver(im), ntoz - integer, intent(out) :: kpbl(im) + integer, intent(in) :: im, km, ntrac, ntcw, kinver(:), ntoz + integer, intent(out) :: kpbl(:) ! real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tau(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tau(:,:), rtg(:,:,:) ! Only allocated if ldiag3d or qdiag3d are true real(kind=kind_phys), intent(inout), dimension(:,:) :: & & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), psk(im), & - & rbsoil(im), zorl(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & tsea(im), & - & heat(im), evap(im), & - & stress(im), spd1(im) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), psk(:), & + & rbsoil(:), zorl(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & tsea(:), & + & heat(:), evap(:), & + & stress(:), spd1(:) real(kind=kind_phys), intent(in) :: & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im), dkt(im,km-1) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:), dkt(:,:) real(kind=kind_phys), intent(inout) :: & - & hgamt(im), hgamq(im) + & hgamt(:), hgamq(:) ! logical, intent(in) :: dspheat ! flag for tke dissipative heating diff --git a/physics/moninedmf_hafs.f b/physics/moninedmf_hafs.f index 00a8dbd0b..5b16a63c3 100644 --- a/physics/moninedmf_hafs.f +++ b/physics/moninedmf_hafs.f @@ -76,37 +76,37 @@ subroutine hedmf_hafs_run(im,km,ntrac,ntcw,dv,du,tau,rtg, & ! logical, intent(in) :: lprnt integer, intent(in) :: ipr - integer, intent(in) :: im, km, ntrac, ntcw, kinver(im) - integer, intent(in) :: islimsk(1:im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: im, km, ntrac, ntcw, kinver(:) + integer, intent(in) :: islimsk(:) + integer, intent(out) :: kpbl(:) ! real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tau(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tau(:,:), rtg(:,:,:) real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), psk(im), & - & rbsoil(im), zorl(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & tsea(im), & - & heat(im), evap(im), & - & stress(im), spd1(im) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), psk(:), & + & rbsoil(:), zorl(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & tsea(:), & + & heat(:), evap(:), & + & stress(:), spd1(:) real(kind=kind_phys), intent(in) :: & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im), dkt(im,km-1) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:), dkt(:,:) real(kind=kind_phys), intent(inout) :: & - & hgamt(im), hgamq(im) + & hgamt(:), hgamq(:) ! logical, intent(in) :: dspheat ! flag for tke dissipative heating diff --git a/physics/moninshoc.f b/physics/moninshoc.f index 275d979fe..da5c102a2 100644 --- a/physics/moninshoc.f +++ b/physics/moninshoc.f @@ -43,28 +43,28 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, ! integer, intent(in) :: im, & km, ntrac, ntcw, ncnd, ntke - integer, dimension(im), intent(in) :: kinver + integer, dimension(:), intent(in) :: kinver real(kind=kind_phys), intent(in) :: delt, & xkzm_m, xkzm_h, xkzm_s, xkzminv real(kind=kind_phys), intent(in) :: grav, & rd, cp, hvap, fv - real(kind=kind_phys), dimension(im), intent(in) :: psk, + real(kind=kind_phys), dimension(:), intent(in) :: psk, & rbsoil, zorl, u10m, v10m, fm, fh, tsea, heat, evap, stress, spd1 - real(kind=kind_phys), dimension(im,km), intent(in) :: u1, v1, + real(kind=kind_phys), dimension(:,:), intent(in) :: u1, v1, & t1, tkh, del, prsl, phil, prslk - real(kind=kind_phys), dimension(im,km+1), intent(in) :: prsi, phii - real(kind=kind_phys), dimension(im,km,ntrac), intent(in) :: q1 + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii + real(kind=kind_phys), dimension(:,:,:), intent(in) :: q1 - real(kind=kind_phys), dimension(im,km), intent(inout) :: du, dv, + real(kind=kind_phys), dimension(:,:), intent(inout) :: du, dv, & tau - real(kind=kind_phys), dimension(im,km,ntrac), intent(inout) :: rtg + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: rtg - integer, dimension(im), intent(out) :: kpbl - real(kind=kind_phys), dimension(im), intent(out) :: dusfc, + integer, dimension(:), intent(out) :: kpbl + real(kind=kind_phys), dimension(:), intent(out) :: dusfc, & dvsfc, dtsfc, dqsfc, hpbl - real(kind=kind_phys), dimension(im,km), intent(out) :: prnum - real(kind=kind_phys), dimension(im,km-1), intent(out) :: dkt + real(kind=kind_phys), dimension(:,:), intent(out) :: prnum + real(kind=kind_phys), dimension(:,:), intent(out) :: dkt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 index 95e521141..a6907bed1 100644 --- a/physics/mp_fer_hires.F90 +++ b/physics/mp_fer_hires.F90 @@ -53,9 +53,9 @@ subroutine mp_fer_hires_init(ncol, nlev, dtp, imp_physics, & logical, intent(in) :: restart character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - real(kind_phys), intent(out), optional :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rimef(1:ncol,1:nlev) + real(kind_phys), intent(out), optional :: f_ice(:,:) + real(kind_phys), intent(out), optional :: f_rain(:,:) + real(kind_phys), intent(out), optional :: f_rimef(:,:) ! Local variables @@ -153,28 +153,28 @@ SUBROUTINE mp_fer_hires_run(NCOL, NLEV, DT ,SPEC_ADV & logical, intent(in ) :: spec_adv integer, intent(in ) :: mpirank integer, intent(in ) :: mpiroot - real(kind_phys), intent(in ) :: slmsk(1:ncol) - real(kind_phys), intent(in ) :: prsi(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: p_phy(1:ncol,1:nlev) + real(kind_phys), intent(in ) :: slmsk(:) + real(kind_phys), intent(in ) :: prsi(:,:) + real(kind_phys), intent(in ) :: p_phy(:,:) real(kind_phys), intent(in ) :: epsq,r_d,p608,cp,g - real(kind_phys), intent(inout) :: t(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: q(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) - real(kind_phys), intent(out ) :: sr(1:ncol) - real(kind_phys), intent(inout) :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rimef(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) ! QRIMEF - - real(kind_phys), intent(inout) :: prec(1:ncol) + real(kind_phys), intent(inout) :: t(:,:) + real(kind_phys), intent(inout) :: q(:,:) + real(kind_phys), intent(inout) :: cwm(:,:) + real(kind_phys), intent(inout) :: train(:,:) + real(kind_phys), intent(out ) :: sr(:) + real(kind_phys), intent(inout) :: f_ice(:,:) + real(kind_phys), intent(inout) :: f_rain(:,:) + real(kind_phys), intent(inout) :: f_rimef(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qg(:,:) ! QRIMEF + + real(kind_phys), intent(inout) :: prec(:) ! real(kind_phys) :: acprec(1:ncol) !MZ: change to local - real(kind_phys), intent(inout) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: refl_10cm(:,:) real(kind_phys), intent(in ) :: rhgrd - real(kind_phys), intent(in ) :: dx(1:ncol) + real(kind_phys), intent(in ) :: dx(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index ec19945b0..ef4748c32 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -380,14 +380,14 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(in ) :: con_g real(kind_phys), intent(in ) :: con_rd ! Hydrometeors - real(kind_phys), intent(inout) :: spechum(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qs(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: ni(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: nr(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: spechum(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qs(:,:) + real(kind_phys), intent(inout) :: qg(:,:) + real(kind_phys), intent(inout) :: ni(:,:) + real(kind_phys), intent(inout) :: nr(:,:) ! Aerosols logical, intent(in) :: is_aerosol_aware, reset ! The following arrays are not allocated if is_aerosol_aware is false @@ -397,25 +397,25 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), optional, intent(in ) :: nwfa2d(:) real(kind_phys), optional, intent(in ) :: nifa2d(:) ! State variables and timestep information - real(kind_phys), intent(inout) :: tgrs(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: prsl(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: phii(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: omega(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: tgrs(:,:) + real(kind_phys), intent(in ) :: prsl(:,:) + real(kind_phys), intent(in ) :: phii(:,:) + real(kind_phys), intent(in ) :: omega(:,:) real(kind_phys), intent(in ) :: dtp ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip - real(kind_phys), intent( out) :: prcp(1:ncol) - real(kind_phys), intent( out) :: rain(1:ncol) - real(kind_phys), intent( out) :: graupel(1:ncol) - real(kind_phys), intent( out) :: ice(1:ncol) - real(kind_phys), intent( out) :: snow(1:ncol) - real(kind_phys), intent( out) :: sr(1:ncol) + real(kind_phys), intent( out) :: prcp(:) + real(kind_phys), intent( out) :: rain(:) + real(kind_phys), intent( out) :: graupel(:) + real(kind_phys), intent( out) :: ice(:) + real(kind_phys), intent( out) :: snow(:) + real(kind_phys), intent( out) :: sr(:) ! Radar reflectivity - real(kind_phys), intent( out) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent( out) :: refl_10cm(:,:) logical, optional, intent(in ) :: do_radar_ref ! Cloud effective radii - real(kind_phys), optional, intent( out) :: re_cloud(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_ice(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_snow(1:ncol,1:nlev) + real(kind_phys), optional, intent( out) :: re_cloud(:,:) + real(kind_phys), optional, intent( out) :: re_ice(:,:) + real(kind_phys), optional, intent( out) :: re_snow(:,:) ! MPI information integer, intent(in) :: mpicomm integer, intent(in) :: mpirank diff --git a/physics/mp_thompson_post.F90 b/physics/mp_thompson_post.F90 index cca74951d..36e309387 100644 --- a/physics/mp_thompson_post.F90 +++ b/physics/mp_thompson_post.F90 @@ -59,9 +59,9 @@ subroutine mp_thompson_post_run(ncol, nlev, tgrs_save, tgrs, prslk, dtp, ttendli ! Interface variables integer, intent(in) :: ncol integer, intent(in) :: nlev - real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: tgrs_save - real(kind_phys), dimension(1:ncol,1:nlev), intent(inout) :: tgrs - real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: prslk + real(kind_phys), dimension(:,:), intent(in) :: tgrs_save + real(kind_phys), dimension(:,:), intent(inout) :: tgrs + real(kind_phys), dimension(:,:), intent(in) :: prslk real(kind_phys), intent(in) :: dtp real(kind_phys), intent(in) :: ttendlim integer, intent(in) :: kdt diff --git a/physics/mp_thompson_pre.F90 b/physics/mp_thompson_pre.F90 index 4087ac815..957c1f118 100644 --- a/physics/mp_thompson_pre.F90 +++ b/physics/mp_thompson_pre.F90 @@ -28,8 +28,8 @@ subroutine mp_thompson_pre_run(ncol, nlev, tgrs, tgrs_save, errmsg, errflg) ! Interface variables integer, intent(in ) :: ncol integer, intent(in ) :: nlev - real(kind_phys), intent(in ) :: tgrs(1:ncol,1:nlev) - real(kind_phys), intent( out) :: tgrs_save(1:ncol,1:nlev) + real(kind_phys), intent(in ) :: tgrs(:,:) + real(kind_phys), intent( out) :: tgrs_save(:,:) ! CCPP error handling character(len=*), intent( out) :: errmsg diff --git a/physics/ozphys.f b/physics/ozphys.f index f8da58760..ba6cb45eb 100644 --- a/physics/ozphys.f +++ b/physics/ozphys.f @@ -68,8 +68,8 @@ subroutine ozphys_run ( & real(kind=kind_phys), intent(inout) :: & & ozp1(:,:), ozp2(:,:), ozp3(:,:), ozp4(:,:) real(kind=kind_phys), intent(in) :: & - & dt, po3(ko3), prdout(im,ko3,oz_coeff), & - & prsl(im,levs), tin(im,levs), delp(im,levs), & + & dt, po3(:), prdout(:,:,:), & + & prsl(:,:), tin(:,:), delp(:,:), & & con_g real :: gravi logical, intent(in) :: ldiag3d, qdiag3d diff --git a/physics/ozphys_2015.f b/physics/ozphys_2015.f index 238a8fb21..113dc03f3 100644 --- a/physics/ozphys_2015.f +++ b/physics/ozphys_2015.f @@ -67,14 +67,14 @@ subroutine ozphys_2015_run ( & real(kind=kind_phys),intent(in) :: con_g real :: gravi integer, intent(in) :: im, levs, ko3, pl_coeff,me - real(kind=kind_phys), intent(in) :: po3(ko3), & - & prsl(im,levs), tin(im,levs), & - & delp(im,levs), & - & prdout(im,ko3,pl_coeff), dt + real(kind=kind_phys), intent(in) :: po3(:), & + & prsl(:,:), tin(:,:), & + & delp(:,:), & + & prdout(:,:,:), dt ! These arrays may not be allocated and need assumed array sizes real(kind=kind_phys), intent(inout) :: & & ozp1(:,:), ozp2(:,:), ozp3(:,:),ozp4(:,:) - real(kind=kind_phys), intent(inout) :: oz(im,levs) + real(kind=kind_phys), intent(inout) :: oz(:,:) character(len=*), intent(out) :: errmsg diff --git a/physics/precpd.f b/physics/precpd.f index 0e330558b..8d58a38b1 100644 --- a/physics/precpd.f +++ b/physics/precpd.f @@ -102,13 +102,13 @@ subroutine zhaocarr_precpd_run (im,km,dt,del,prsl,q,cwm,t,rn & ! Interface variables integer, intent(in) :: im, km, jpr real (kind=kind_phys), intent(in) :: dt - real (kind=kind_phys), intent(in) :: del(im,km), prsl(im,km) - real (kind=kind_phys), intent(inout) :: q(im,km), t(im,km), & - & cwm(im,km) - real (kind=kind_phys), intent(out) :: rn(im), sr(im), rainp(im,km) - real (kind=kind_phys), intent(in) :: u00k(im,km) - real (kind=kind_phys), intent(in) :: psautco(2), prautco(2), & - & evpco, wminco(2), wk1(im) + real (kind=kind_phys), intent(in) :: del(:,:), prsl(:,:) + real (kind=kind_phys), intent(inout) :: q(:,:), t(:,:), & + & cwm(:,:) + real (kind=kind_phys), intent(out) :: rn(:), sr(:), rainp(:,:) + real (kind=kind_phys), intent(in) :: u00k(:,:) + real (kind=kind_phys), intent(in) :: psautco(:), prautco(:), & + & evpco, wminco(:), wk1(:) logical, intent(in) :: lprnt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/radlw_main.f b/physics/radlw_main.f index 7b029f8b0..e45e556a7 100644 --- a/physics/radlw_main.f +++ b/physics/radlw_main.f @@ -572,44 +572,44 @@ subroutine rrtmg_lw_run & logical, intent(in) :: lprnt - real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: plvl, & + real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, & & tlvl - real (kind=kind_phys), dimension(npts,nlay), intent(in) :: plyr, & + real (kind=kind_phys), dimension(:,:), intent(in) :: plyr, & & tlyr, qlyr, olyr, dzlyr, delpin - real (kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2,& + real (kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2, & & gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & & gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4 - real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf - real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & + real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf + real (kind=kind_phys), dimension(:,:),intent(in),optional:: & & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & & cld_od - real (kind=kind_phys), dimension(npts), intent(in) :: sfemis, & + real (kind=kind_phys), dimension(:), intent(in) :: sfemis, & & sfgtmp, de_lgth - real (kind=kind_phys), dimension(npts,nlay,nbands),intent(in):: & + real (kind=kind_phys), dimension(:,:,:),intent(in):: & & aeraod, aerssa ! --- outputs: - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hlwc - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: hlwc + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & cldtau - type (topflw_type), dimension(npts), intent(inout) :: topflx - type (sfcflw_type), dimension(npts), intent(inout) :: sfcflx + type (topflw_type), dimension(:), intent(inout) :: topflx + type (sfcflw_type), dimension(:), intent(inout) :: sfcflx character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !! --- optional outputs: - real (kind=kind_phys), dimension(npts,nlay,nbands),optional, & + real (kind=kind_phys), dimension(:,:,:),optional, & & intent(inout) :: hlwb - real (kind=kind_phys), dimension(npts,nlay), optional, & + real (kind=kind_phys), dimension(:,:), optional, & & intent(inout) :: hlw0 - type (proflw_type), dimension(npts,nlp1), optional, & + type (proflw_type), dimension(:,:), optional, & & intent(inout) :: flxprf logical, intent(in) :: lslwr diff --git a/physics/radsw_main.f b/physics/radsw_main.f index b10541fb7..7f41cca20 100644 --- a/physics/radsw_main.f +++ b/physics/radsw_main.f @@ -659,59 +659,59 @@ subroutine rrtmg_sw_run & logical, intent(in) :: lprnt, lsswr - real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: & + real (kind=kind_phys), dimension(:,:), intent(in) :: & & plvl, tlvl - real (kind=kind_phys), dimension(npts,nlay), intent(in) :: & + real (kind=kind_phys), dimension(:,:), intent(in) :: & & plyr, tlyr, qlyr, olyr, dzlyr, delpin - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dir - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dif - - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_n2o - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ch4 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_o2 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc11 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc12 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc22 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ccl4 - - real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf - real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dir + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dif + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dir + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dif + + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_n2o + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ch4 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_o2 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc11 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc12 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc22 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ccl4 + + real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf + real (kind=kind_phys), dimension(:,:),intent(in),optional:: & & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & & cld_od, cld_ssa, cld_asy - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aeraod - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerssa - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerasy + real(kind=kind_phys),dimension(:,:,:),intent(in)::aeraod + real(kind=kind_phys),dimension(:,:,:),intent(in)::aerssa + real(kind=kind_phys),dimension(:,:,:),intent(in)::aerasy real (kind=kind_phys), intent(in) :: cosz(npts), solcon, & & de_lgth(npts) ! --- outputs: - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hswc - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: hswc + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & cldtau - type (topfsw_type), dimension(npts), intent(inout) :: topflx - type (sfcfsw_type), dimension(npts), intent(inout) :: sfcflx + type (topfsw_type), dimension(:), intent(inout) :: topflx + type (sfcfsw_type), dimension(:), intent(inout) :: sfcflx character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !! --- optional outputs: - real (kind=kind_phys), dimension(npts,nlay,nbdsw), optional, & + real (kind=kind_phys), dimension(:,:,:), optional, & & intent(inout) :: hswb - real (kind=kind_phys), dimension(npts,nlay), optional, & + real (kind=kind_phys), dimension(:,:), optional, & & intent(inout) :: hsw0 - type (profsw_type), dimension(npts,nlp1), optional, & + type (profsw_type), dimension(:,:), optional, & & intent(inout) :: flxprf - type (cmpfsw_type), dimension(npts), optional, & + type (cmpfsw_type), dimension(:), optional, & & intent(inout) :: fdncmp ! --- locals: diff --git a/physics/rayleigh_damp.f b/physics/rayleigh_damp.f index a56a85e8c..579370cb2 100644 --- a/physics/rayleigh_damp.f +++ b/physics/rayleigh_damp.f @@ -71,9 +71,9 @@ subroutine rayleigh_damp_run ( & logical,intent(in) :: lsidea,ldiag3d integer,intent(in) :: im, km,levr real(kind=kind_phys),intent(in) :: DT, CP, PRSLRD0, ral_ts - real(kind=kind_phys),intent(in) :: pgr(im), PRSL(IM,KM) - real(kind=kind_phys),intent(in) :: U1(IM,KM), V1(IM,KM) - real(kind=kind_phys),intent(inout) :: A(IM,KM), B(IM,KM), C(IM,KM) + real(kind=kind_phys),intent(in) :: pgr(:), PRSL(:,:) + real(kind=kind_phys),intent(in) :: U1(:,:), V1(:,:) + real(kind=kind_phys),intent(inout) :: A(:,:), B(:,:), C(:,:) real(kind=kind_phys),intent(inout) :: du3dt(:,:) real(kind=kind_phys),intent(inout) :: dv3dt(:,:) real(kind=kind_phys),intent(inout) :: dt3dt(:,:) diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 index af83c5cc7..7715ed7b8 100644 --- a/physics/rrtmg_lw_post.F90 +++ b/physics/rrtmg_lw_post.F90 @@ -30,8 +30,8 @@ subroutine rrtmg_lw_post_run (Model, Grid, Radtend, Coupling, & type(GFS_grid_type), intent(in) :: Grid type(GFS_radtend_type), intent(inout) :: Radtend integer, intent(in) :: im, ltp, LM, kd - real(kind=kind_phys), dimension(size(Grid%xlon,1), lm+LTP), intent(in) :: htlwc, htlw0 - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa + real(kind=kind_phys), dimension(:,:), intent(in) :: htlwc, htlw0 + real(kind=kind_phys), dimension(:), intent(in) :: tsfa character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! local variables diff --git a/physics/rrtmg_lw_pre.F90 b/physics/rrtmg_lw_pre.F90 index 7de02eed1..1e4671783 100644 --- a/physics/rrtmg_lw_pre.F90 +++ b/physics/rrtmg_lw_pre.F90 @@ -30,7 +30,7 @@ subroutine rrtmg_lw_pre_run (Model, Grid, Sfcprop, Radtend, im, tsfg, tsfa, errm type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_grid_type), intent(in) :: Grid integer, intent(in) :: im - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg + real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 index b0ab31129..b9534e0b4 100644 --- a/physics/rrtmg_sw_post.F90 +++ b/physics/rrtmg_sw_post.F90 @@ -35,9 +35,9 @@ subroutine rrtmg_sw_post_run (Model, Grid, Diag, Radtend, Coupling, & type(GFS_grid_type), intent(in) :: Grid type(GFS_diag_type), intent(inout) :: Diag integer, intent(in) :: im, lm, kd, nday, ltp - type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(inout) :: scmpsw - real(kind=kind_phys), dimension(Size(Grid%xlon,1), lm+LTP), intent(in) :: htswc, htsw0 - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 + type(cmpfsw_type), dimension(:), intent(inout) :: scmpsw + real(kind=kind_phys), dimension(:,:), intent(in) :: htswc, htsw0 + real(kind=kind_phys), dimension(:), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 index 05e8d4c7b..3ef89c86c 100644 --- a/physics/rrtmg_sw_pre.F90 +++ b/physics/rrtmg_sw_pre.F90 @@ -34,10 +34,10 @@ subroutine rrtmg_sw_pre_run (Model, Grid, Sfcprop, Radtend, im, & type(GFS_grid_type), intent(in) :: Grid integer, intent(in) :: im integer, intent(out) :: nday - integer, dimension(size(Grid%xlon,1)), intent(out) :: idxday - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 - real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: alb1d + integer, dimension(:), intent(out) :: idxday + real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg + real(kind=kind_phys), dimension(:), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 + real(kind=kind_phys), dimension(:), intent(in) :: alb1d character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index 2047deaf4..0b4339bda 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -40,20 +40,20 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer nLev, & ! Number of vertical layers nTracer, & ! Number of tracers nTracerAer ! Number of aerosol tracers - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lon, & ! Longitude lat, & ! Latitude lsmask ! Land/sea/sea-ice mask - real(kind_phys), dimension(nCol,Nlev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Pressure @ layer-centers (Pa) tv_lay, & ! Virtual-temperature @ layer-centers (K) relhum, & ! Relative-humidity @ layer-centers p_lk ! Exner function @ layer-centers (1) - real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & + real(kind_phys), dimension(:,:, :),intent(in) :: & tracer ! trace gas concentrations - real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & + real(kind_phys), dimension(:,:, :),intent(in) :: & aerfld ! aerosol input concentrations - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer-interfaces (Pa) type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! RRTMGP DDT: spectral information for SW calculation @@ -61,7 +61,7 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer lw_gas_props ! RRTMGP DDT: spectral information for LW calculation ! Outputs - real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & aerodp ! Vertical integrated optical depth for various aerosol species type(ty_optical_props_1scl),intent(out) :: & lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index 93e38994b..f67915483 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -286,10 +286,10 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, doGP_cldoptics_PAD nCol, & ! Number of horizontal gridpoints nLev, & ! Number of vertical levels nrghice ! Number of ice-roughness categories - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lon, & ! Longitude lat ! Latitude - real(kind_phys), dimension(ncol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Layer pressure (Pa) cld_frac, & ! Total cloud fraction by layer cld_lwp, & ! Cloud liquid water path @@ -314,7 +314,7 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, doGP_cldoptics_PAD type(ty_optical_props_1scl),intent(out) :: & lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) lw_optical_props_precipByBand ! RRTMGP DDT: Longwave optical properties in each band (precipitation) - real(kind_phys), dimension(ncol,nLev), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & cldtaulw ! Approx 10.mu band layer cloud optical depth ! Local variables diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 index 1d6cc06a1..c5de7b5ec 100644 --- a/physics/rrtmgp_lw_cloud_sampling.F90 +++ b/physics/rrtmgp_lw_cloud_sampling.F90 @@ -57,15 +57,15 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, nCol, & ! Number of horizontal gridpoints nLev, & ! Number of vertical layers ipsdlw0 ! Initial permutation seed for McICA - integer,intent(in),dimension(ncol) :: & + integer,intent(in),dimension(:) :: & icseed_lw ! auxiliary special cloud related array when module ! variable isubclw=2, it provides permutation seed ! for each column profile that are used for generating ! random numbers. when isubclw /=2, it will not be used. - real(kind_phys), dimension(ncol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & cld_frac, & ! Total cloud fraction by layer precip_frac ! Precipitation fraction by layer - real(kind_phys), dimension(ncol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & cloud_overlap_param, & ! Cloud overlap parameter precip_overlap_param ! Precipitation overlap parameter type(ty_gas_optics_rrtmgp),intent(in) :: & diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index 787db6bb4..deea46578 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -28,7 +28,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp rrtmgp_lw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties integer, intent(in) :: & rrtmgp_nGases ! Number of trace gases active in RRTMGP - character(len=*),dimension(rrtmgp_nGases), intent(in) :: & + character(len=*),dimension(:), intent(in) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP integer,intent(in) :: & mpicomm, & ! MPI communicator @@ -292,13 +292,13 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, lw_gas_props, p_lay, p_ nLev ! Number of vertical levels type(ty_gas_optics_rrtmgp),intent(in) :: & lw_gas_props ! RRTMGP DDT: - real(kind_phys), dimension(ncol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure @ model layer-centers (hPa) t_lay ! Temperature (K) - real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev, & ! Pressure @ model layer-interfaces (hPa) t_lev ! Temperature @ model levels - real(kind_phys), dimension(ncol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & skt ! Surface(skin) temperature (K) type(ty_gas_concs),intent(in) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) diff --git a/physics/rrtmgp_lw_pre.F90 b/physics/rrtmgp_lw_pre.F90 index 1148c6705..8bede8c0e 100644 --- a/physics/rrtmgp_lw_pre.F90 +++ b/physics/rrtmgp_lw_pre.F90 @@ -39,7 +39,7 @@ subroutine rrtmgp_lw_pre_run (doLWrad, nCol, xlon, xlat, slmsk, zorl, snowd, snc doLWrad ! Logical flag for longwave radiation call integer, intent(in) :: & nCol ! Number of horizontal grid points - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & xlon, & ! Longitude xlat, & ! Latitude slmsk, & ! Land/sea/sea-ice mask @@ -52,13 +52,13 @@ subroutine rrtmgp_lw_pre_run (doLWrad, nCol, xlon, xlat, slmsk, zorl, snowd, snc lw_gas_props ! RRTMGP DDT: spectral information for LW calculation ! Outputs - real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & sfc_emiss_byband ! Surface emissivity in each band character(len=*), intent(out) :: & errmsg ! Error message integer, intent(out) :: & errflg ! Error flag - real(kind_phys), dimension(nCol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & semis ! Local variables diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index dc49260f6..137512cf6 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -43,16 +43,16 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, nCol, nLev, p nCol, & ! Number of horizontal gridpoints nLev, & ! Number of vertical levels nGauss_angles ! Number of angles used in Gaussian quadrature - real(kind_phys), dimension(ncol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure @ model layer-centers (hPa) t_lay ! Temperature (K) - real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure @ model layer-interfaces (hPa) - real(kind_phys), dimension(ncol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & skt ! Surface(skin) temperature (K) type(ty_gas_optics_rrtmgp),intent(in) :: & lw_gas_props ! RRTMGP DDT: longwave spectral information - real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & sfc_emiss_byband ! Surface emissivity in each band type(ty_source_func_lw),intent(in) :: & sources ! RRTMGP DDT: longwave source functions @@ -62,7 +62,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, nCol, nLev, p lw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties lw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties ! Outputs - real(kind_phys), dimension(ncol,nLev+1), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & fluxlwUP_allsky, & ! All-sky flux (W/m2) fluxlwDOWN_allsky, & ! All-sky flux (W/m2) fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) @@ -72,7 +72,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, nCol, nLev, p integer, intent(out) :: & errflg ! CCPP error flag ! Outputs (optional) - real(kind_phys), dimension(ncol,nLev+1), intent(out), optional :: & + real(kind_phys), dimension(:,:), intent(out), optional :: & fluxlwUP_jac, & ! Jacobian of upward LW flux (W/m2/K) fluxlwDOWN_jac ! Jacobian of downward LW flux (W/m2/K) diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 index 4bb034279..b6895501a 100644 --- a/physics/rrtmgp_sw_aerosol_optics.F90 +++ b/physics/rrtmgp_sw_aerosol_optics.F90 @@ -41,22 +41,22 @@ subroutine rrtmgp_sw_aerosol_optics_run(doSWrad, nCol, nLev, nTracer, nTracerAer nLev, & ! Number of vertical layers nTracer, & ! Number of tracers nTracerAer ! Number of aerosol tracers - integer,intent(in),dimension(nCol) :: & + integer,intent(in),dimension(:) :: & idxday ! Indices for daylit points. - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lon, & ! Longitude lat, & ! Latitude lsmask ! Land/sea/sea-ice mask - real(kind_phys), dimension(nCol,Nlev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Pressure @ layer-centers (Pa) tv_lay, & ! Virtual-temperature @ layer-centers (K) relhum, & ! Relative-humidity @ layer-centers p_lk ! Exner function @ layer-centers (1) - real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & + real(kind_phys), dimension(:, :,:),intent(in) :: & tracer ! trace gas concentrations - real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & + real(kind_phys), dimension(:, :,:),intent(in) :: & aerfld ! aerosol input concentrations - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer-interfaces (Pa) type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! RRTMGP DDT: spectral information for SW calculation @@ -64,7 +64,7 @@ subroutine rrtmgp_sw_aerosol_optics_run(doSWrad, nCol, nLev, nTracer, nTracerAer lw_gas_props ! RRTMGP DDT: spectral information for LW calculation ! Outputs - real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & aerodp ! Vertical integrated optical depth for various aerosol species type(ty_optical_props_2str),intent(out) :: & sw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 index 7ab3c27e3..79077518c 100644 --- a/physics/rrtmgp_sw_cloud_optics.F90 +++ b/physics/rrtmgp_sw_cloud_optics.F90 @@ -304,9 +304,9 @@ subroutine rrtmgp_sw_cloud_optics_run(doSWrad, doG_cldoptics, doGP_cldoptics_PAD nLev, & ! Number of vertical levels nday, & ! Number of daylit points. nrghice ! Number of ice-roughness categories - integer,intent(in),dimension(ncol) :: & + integer,intent(in),dimension(:) :: & idxday ! Indices for daylit points. - real(kind_phys), dimension(ncol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & cld_frac, & ! Total cloud fraction by layer cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius @@ -330,7 +330,7 @@ subroutine rrtmgp_sw_cloud_optics_run(doSWrad, doG_cldoptics, doGP_cldoptics_PAD type(ty_optical_props_2str),intent(out) :: & sw_optical_props_cloudsByBand, & ! RRTMGP DDT: Shortwave optical properties in each band (clouds) sw_optical_props_precipByBand ! RRTMGP DDT: Shortwave optical properties in each band (cloud precipitation) - real(kind_phys), dimension(ncol,NLev), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & cldtausw ! Approx 10.mu band layer cloud optical depth ! Local variables diff --git a/physics/rrtmgp_sw_cloud_sampling.F90 b/physics/rrtmgp_sw_cloud_sampling.F90 index 0a0511bc2..617bbfcb1 100644 --- a/physics/rrtmgp_sw_cloud_sampling.F90 +++ b/physics/rrtmgp_sw_cloud_sampling.F90 @@ -58,17 +58,17 @@ subroutine rrtmgp_sw_cloud_sampling_run(doSWrad, nCol, nDay, nLev, ipsdsw0, idxd nDay, & ! Number of daylit points. nLev, & ! Number of vertical layers ipsdsw0 ! Initial permutation seed for McICA - integer,intent(in),dimension(ncol) :: & + integer,intent(in),dimension(:) :: & idxday ! Indices for daylit points. - integer,intent(in),dimension(ncol) :: & + integer,intent(in),dimension(:) :: & icseed_sw ! auxiliary special cloud related array when module ! variable isubcsw=2, it provides permutation seed ! for each column profile that are used for generating ! random numbers. when isubcsw /=2, it will not be used. - real(kind_phys), dimension(ncol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & cld_frac, & ! Total cloud fraction by layer precip_frac ! Precipitation fraction by layer - real(kind_phys), dimension(ncol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & cloud_overlap_param, & ! Cloud overlap parameter precip_overlap_param ! Precipitation overlap parameter type(ty_gas_optics_rrtmgp),intent(in) :: & diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index efe611e0c..fb14a57ed 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -28,7 +28,7 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp rrtmgp_sw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties integer, intent(in) :: & rrtmgp_nGases ! Number of trace gases active in RRTMGP - character(len=*),dimension(rrtmgp_nGases), intent(in) :: & + character(len=*),dimension(:), intent(in) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP integer,intent(in) :: & mpicomm, & ! MPI communicator @@ -302,14 +302,14 @@ subroutine rrtmgp_sw_gas_optics_run(doSWrad, nCol, nLev, nday, idxday, sw_gas_pr nDay, & ! Number of daylit points. nCol, & ! Number of horizontal points nLev ! Number of vertical levels - integer,intent(in),dimension(ncol) :: & + integer,intent(in),dimension(:) :: & idxday ! Indices for daylit points. type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! RRTMGP DDT: spectral information for RRTMGP SW radiation scheme - real(kind_phys), dimension(ncol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure @ model layer-centers (hPa) t_lay ! Temperature (K) - real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev, & ! Pressure @ model layer-interfaces (hPa) t_lev ! Temperature @ model levels type(ty_gas_concs),intent(in) :: & @@ -318,7 +318,7 @@ subroutine rrtmgp_sw_gas_optics_run(doSWrad, nCol, nLev, nday, idxday, sw_gas_pr solcon ! Solar constant integer, intent(in) :: & rrtmgp_nGases ! Number of trace gases active in RRTMGP - character(len=*),dimension(rrtmgp_nGases), intent(in) :: & + character(len=*),dimension(:), intent(in) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP ! Output @@ -328,7 +328,7 @@ subroutine rrtmgp_sw_gas_optics_run(doSWrad, nCol, nLev, nday, idxday, sw_gas_pr errflg ! CCPP error code type(ty_optical_props_2str),intent(out) :: & sw_optical_props_clrsky ! RRTMGP DDT: clear-sky shortwave optical properties, spectral (tau,ssa,g) - real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & toa_src_sw ! TOA incident spectral flux (W/m2) ! Local variables diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 index 9719c6e86..2bcfe4fd0 100644 --- a/physics/rrtmgp_sw_rte.F90 +++ b/physics/rrtmgp_sw_rte.F90 @@ -42,14 +42,14 @@ subroutine rrtmgp_sw_rte_run(doSWrad, doSWclrsky, nCol, nLev, nDay, idxday, cosz nCol, & ! Number of horizontal gridpoints nday, & ! Number of daytime points nLev ! Number of vertical levels - integer, intent(in), dimension(ncol) :: & + integer, intent(in), dimension(:) :: & idxday ! Index array for daytime points - real(kind_phys),intent(in), dimension(ncol) :: & + real(kind_phys),intent(in), dimension(:) :: & coszen ! Cosize of SZA - real(kind_phys), dimension(ncol,NLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure @ model layer-centers (Pa) t_lay ! Temperature (K) - real(kind_phys), dimension(ncol,NLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure @ model layer-interfaces (Pa) type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! RRTMGP DDT: SW spectral information @@ -58,16 +58,16 @@ subroutine rrtmgp_sw_rte_run(doSWrad, doSWclrsky, nCol, nLev, nDay, idxday, cosz type(ty_optical_props_2str),intent(in) :: & sw_optical_props_clouds, & ! RRTMGP DDT: shortwave cloud radiative properties sw_optical_props_aerosol ! RRTMGP DDT: shortwave aerosol radiative properties - real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & sfc_alb_nir_dir, & ! Surface albedo (direct) sfc_alb_nir_dif, & ! Surface albedo (diffuse) sfc_alb_uvvis_dir, & ! Surface albedo (direct) sfc_alb_uvvis_dif ! Surface albedo (diffuse) - real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & toa_src_sw ! TOA incident spectral flux (W/m2) integer, intent(in) :: & rrtmgp_nGases ! Number of trace gases active in RRTMGP - character(len=*),dimension(rrtmgp_nGases), intent(in) :: & + character(len=*),dimension(:), intent(in) :: & active_gases_array ! Character array containing trace gases to include in RRTMGP ! Outputs @@ -75,14 +75,14 @@ subroutine rrtmgp_sw_rte_run(doSWrad, doSWclrsky, nCol, nLev, nDay, idxday, cosz errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error flag - real(kind_phys), dimension(ncol,NLev+1), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & fluxswUP_allsky, & ! RRTMGP upward all-sky flux profiles (W/m2) fluxswDOWN_allsky, & ! RRTMGP downward all-sky flux profiles (W/m2) fluxswUP_clrsky, & ! RRTMGP upward clear-sky flux profiles (W/m2) fluxswDOWN_clrsky ! RRTMGP downward clear-sky flux profiles (W/m2) ! Outputs (optional) - type(cmpfsw_type), dimension(ncol), intent(inout),optional :: & + type(cmpfsw_type), dimension(:), intent(inout),optional :: & scmpsw ! 2D surface fluxes, components: ! uvbfc - total sky downward uv-b flux (W/m2) ! uvbf0 - clear sky downward uv-b flux (W/m2) diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index 67576af15..d67ebb718 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -87,29 +87,29 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & implicit none ! integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud - integer, intent(in) :: islimsk(im) + integer, intent(in) :: islimsk(:) real(kind=kind_phys), intent(in) :: cliq, cp, cvap, eps, epsm1, & & fv, grav, hvap, rd, rv, t0c real(kind=kind_phys), intent(in) :: delt - real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & - & prslp(im,km), garea(im), dot(im,km), phil(im,km) + real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & + & prslp(:,:), garea(:), dot(:,:), phil(:,:) real(kind=kind_phys), dimension(:), intent(in) :: fscav logical, intent(in) :: hwrf_samfdeep real(kind=kind_phys), intent(in) :: nthresh - real(kind=kind_phys), intent(in) :: ca_deep(im) - real(kind=kind_phys), intent(out) :: rainevap(im) + real(kind=kind_phys), intent(in) :: ca_deep(:) + real(kind=kind_phys), intent(out) :: rainevap(:) logical, intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger - integer, intent(inout) :: kcnv(im) + integer, intent(inout) :: kcnv(:) ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH - real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & - & q1(im,km), t1(im,km), u1(im,km), v1(im,km), & - & cnvw(im,km), cnvc(im,km) + real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & + & q1(:,:), t1(:,:), u1(:,:), v1(:,:), & + & cnvw(:,:), cnvc(:,:) - integer, intent(out) :: kbot(im), ktop(im) - real(kind=kind_phys), intent(out) :: cldwrk(im), & - & rn(im), & - & ud_mf(im,km),dd_mf(im,km), dt_mf(im,km) + integer, intent(out) :: kbot(:), ktop(:) + real(kind=kind_phys), intent(out) :: cldwrk(:), & + & rn(:), & + & ud_mf(:,:),dd_mf(:,:), dt_mf(:,:) ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared diff --git a/physics/samfshalcnv.f b/physics/samfshalcnv.f index e48962822..9571b55d3 100644 --- a/physics/samfshalcnv.f +++ b/physics/samfshalcnv.f @@ -63,22 +63,22 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & implicit none ! integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud - integer, intent(in) :: islimsk(im) + integer, intent(in) :: islimsk(:) real(kind=kind_phys), intent(in) :: cliq, cp, cvap, & & eps, epsm1, fv, grav, hvap, rd, rv, t0c real(kind=kind_phys), intent(in) :: delt - real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & - & prslp(im,km), garea(im), hpbl(im), dot(im,km), phil(im,km) + real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & + & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:) ! real(kind=kind_phys), dimension(:), intent(in) :: fscav - integer, intent(inout) :: kcnv(im) + integer, intent(inout) :: kcnv(:) ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH - real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & - & q1(im,km), t1(im,km), u1(im,km), v1(im,km) + real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & + & q1(:,:), t1(:,:), u1(:,:), v1(:,:) ! - integer, intent(out) :: kbot(im), ktop(im) - real(kind=kind_phys), intent(out) :: rn(im), & - & cnvw(im,km), cnvc(im,km), ud_mf(im,km), dt_mf(im,km) + integer, intent(out) :: kbot(:), ktop(:) + real(kind=kind_phys), intent(out) :: rn(:), & + & cnvw(:,:), cnvc(:,:), ud_mf(:,:), dt_mf(:,:) ! real(kind=kind_phys), intent(in) :: clam, c0s, c1, & & asolfac, pgcon diff --git a/physics/satmedmfvdif.F b/physics/satmedmfvdif.F index f00fb3776..69c0bb537 100644 --- a/physics/satmedmfvdif.F +++ b/physics/satmedmfvdif.F @@ -71,8 +71,8 @@ subroutine satmedmfvdif_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !---------------------------------------------------------------------- integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke - integer, intent(in) :: kinver(im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: kinver(:) + integer, intent(out) :: kpbl(:) ! logical, intent(in) :: ldiag3d, qdiag3d real(kind=kind_phys), intent(inout), dimension(:,:) :: & @@ -81,26 +81,26 @@ subroutine satmedmfvdif_run(im,km,ntrac,ntcw,ntiw,ntke, & real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & & eps,epsm1 real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tdt(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tdt(:,:), rtg(:,:,:) real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), garea(im), & - & psk(im), rbsoil(im), & - & zorl(im), tsea(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & evap(im), heat(im), & - & stress(im), spd1(im), & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), garea(:), & + & psk(:), rbsoil(:), & + & zorl(:), tsea(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & evap(:), heat(:), & + & stress(:), spd1(:), & + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index f192788fe..077313761 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -75,40 +75,40 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !---------------------------------------------------------------------- integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke, ntoz - integer, intent(in) :: kinver(im) - integer, intent(in) :: islimsk(im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: kinver(:) + integer, intent(in) :: islimsk(:) + integer, intent(out) :: kpbl(:) logical, intent(in) :: ldiag3d,qdiag3d ! real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & & eps,epsm1 real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: dspfac, bl_upfr, bl_dnfr - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tdt(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tdt(:,:), rtg(:,:,:) real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), garea(im), & - & snwdph_lnd(im), & - & psk(im), rbsoil(im), & - & zorl(im), tsea(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & evap(im), heat(im), & - & stress(im), spd1(im), & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), garea(:), & + & snwdph_lnd(:), & + & psk(:), rbsoil(:), & + & zorl(:), tsea(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & evap(:), heat(:), & + & stress(:), spd1(:), & + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(inout), dimension(:,:) :: & & du3dt(:,:), dv3dt(:,:), & & dt3dt(:,:), dq3dt(:,:), & & do3dt(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg diff --git a/physics/sfc_cice.f b/physics/sfc_cice.f index f845f6091..44b3ee2e8 100644 --- a/physics/sfc_cice.f +++ b/physics/sfc_cice.f @@ -107,14 +107,14 @@ subroutine sfc_cice_run & logical, intent(in) :: cplflx ! real (kind=kind_phys), dimension(im), intent(in) :: u1, v1, & - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & t1, q1, cm, ch, prsl1, wind, dqsfc, dtsfc, dusfc, dvsfc &, snowd logical, intent(in) :: flag_cice(im), flag_iter(im) ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & + real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & & cmm, chh, evap, hflx, stress &, weasd, snwdph, ep ! diff --git a/physics/sfc_diag.f b/physics/sfc_diag.f index b78c9b2f7..e91bd0e14 100644 --- a/physics/sfc_diag.f +++ b/physics/sfc_diag.f @@ -33,10 +33,10 @@ subroutine sfc_diag_run & ! integer, intent(in) :: im real(kind=kind_phys), intent(in) :: grav,cp,eps,epsm1 - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & ps, u1, v1, t1, q1, tskin, & & qsurf, prslki, evap, fm, fh, fm10, fh2 - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & f10m, u10m, v10m, t2m, q2m character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_diag_post.F90 b/physics/sfc_diag_post.F90 index 767e98db5..1bf3e7e67 100644 --- a/physics/sfc_diag_post.F90 +++ b/physics/sfc_diag_post.F90 @@ -26,11 +26,11 @@ subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, dry, lssav, dtf, con_eps, con integer, intent(in) :: im, lsm, lsm_noahmp logical, intent(in) :: lssav real(kind=kind_phys), intent(in) :: dtf, con_eps, con_epsm1 - logical , dimension(im), intent(in) :: dry - real(kind=kind_phys), dimension(im), intent(in) :: pgr, u10m, v10m + logical , dimension(:), intent(in) :: dry + real(kind=kind_phys), dimension(:), intent(in) :: pgr, u10m, v10m real(kind=kind_phys), dimension(:) , intent(in) :: t2mmp, q2mp - real(kind=kind_phys), dimension(im), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax - real(kind=kind_phys), dimension(im), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m + real(kind=kind_phys), dimension(:), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax + real(kind=kind_phys), dimension(:), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f index b7ef1ea68..93102e467 100644 --- a/physics/sfc_diff.f +++ b/physics/sfc_diff.f @@ -90,24 +90,24 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) integer, intent(in) :: im, ivegsrc integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean - integer, dimension(im), intent(in) :: vegtype + integer, dimension(:), intent(in) :: vegtype logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) - logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy + logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy - real(kind=kind_phys), dimension(im), intent(in) :: u10m,v10m + real(kind=kind_phys), dimension(:), intent(in) :: u10m,v10m real(kind=kind_phys), intent(in) :: rvrdm1, eps, epsm1, grav - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & ps,t1,q1,z1,prsl1,prslki,prsik1,prslk1, & & wind,sigmaf,shdmax, & & z0pert,ztpert ! mg, sfc-perts - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tskin_wat, tskin_lnd, tskin_ice, & & tsurf_wat, tsurf_lnd, tsurf_ice, & & snwdph_wat,snwdph_lnd,snwdph_ice - real(kind=kind_phys), dimension(im), intent(in) :: z0rl_wav - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(in) :: z0rl_wav + real(kind=kind_phys), dimension(:), intent(inout) :: & & z0rl_wat, z0rl_lnd, z0rl_ice, & & ustar_wat, ustar_lnd, ustar_ice, & & cm_wat, cm_lnd, cm_ice, & diff --git a/physics/sfc_drv.f b/physics/sfc_drv.f index 5d8e19643..878f08a09 100644 --- a/physics/sfc_drv.f +++ b/physics/sfc_drv.f @@ -211,11 +211,11 @@ subroutine lsm_noah_run & integer, intent(in) :: im, km, isot, ivegsrc real (kind=kind_phys), intent(in) :: grav, cp, hvap, rd, eps, & & epsm1, rvrdm1 - real (kind=kind_phys), dimension(5), intent(in) :: pertvegf + real (kind=kind_phys), dimension(:), intent(in) :: pertvegf - integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & & ch, prsl1, prslki, wind, shdmin, shdmax, & & snoalb, sfalb, zf, & @@ -223,19 +223,19 @@ subroutine lsm_noah_run & real (kind=kind_phys), intent(in) :: delt - logical, dimension(im), intent(in) :: flag_iter, flag_guess, land + logical, dimension(:), intent(in) :: flag_iter, flag_guess, land logical, intent(in) :: lheatstrg ! --- in/out: - real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & + real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl - real (kind=kind_phys), dimension(im,km), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smc, stc, slc ! --- output: - real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & + real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, & & wet1 diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 index 65935ef1c..ff727773c 100644 --- a/physics/sfc_drv_ruc.F90 +++ b/physics/sfc_drv_ruc.F90 @@ -168,9 +168,9 @@ subroutine lsm_ruc_run & ! inputs integer, intent(in) :: lsm_ruc, lsm integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson - real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: smc,stc,slc + real (kind=kind_phys), dimension(:,:), intent(inout) :: smc,stc,slc - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & t1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & & ch, prsl1, wind, shdmin, shdmax, & & snoalb, alvwf, alnwf, zf, qc, q1 @@ -182,30 +182,30 @@ subroutine lsm_ruc_run & ! inputs con_pi, con_rd, & con_hvap, con_fvirt - logical, dimension(im), intent(in) :: flag_iter, flag_guess, land - integer, dimension(im), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) + logical, dimension(:), intent(in) :: flag_iter, flag_guess, land + integer, dimension(:), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) logical, intent(in) :: do_mynnsfclay logical, intent(in) :: rdlai ! --- in/out: - integer, dimension(im), intent(inout) :: soiltyp, vegtype + integer, dimension(:), intent(inout) :: soiltyp, vegtype real (kind=kind_phys), dimension(lsoil_ruc) :: dzs - real (kind=kind_phys), dimension(lsoil_ruc), intent(inout ) :: zs - real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & + real (kind=kind_phys), dimension(:), intent(inout ) :: zs + real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & & snwdph, tskin, tskin_wat, & & srflag, canopy, trans, tsurf, zorl, tsnow, & & sfcqc, sfcqv, sfcdew, fice, tice, sfalb, smcwlt2, smcref2 ! --- in - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & rainnc, rainc, ice, snow, graupel ! --- in/out: ! --- on RUC levels - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smois, tslb, sh2o, keepfr, smfrkeep ! --- output: - real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & + real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & & qsurf , gflux , evap , runof , drain , & & runoff, srunoff, hflx, cmm, chh, & & rhosnf, evbs, evcw, sbsno, stm, wetness, & @@ -1053,25 +1053,25 @@ subroutine rucinit (restart, im, lsoil_ruc, lsoil, nlev, & ! in integer, intent(in ) :: im, nlev integer, intent(in ) :: lsoil_ruc integer, intent(in ) :: lsoil - logical, dimension(im), intent(in ) :: land - real (kind=kind_phys), dimension(im), intent(in ) :: tsurf, tsurf_wat - real (kind=kind_phys), dimension(im), intent(inout) :: smcref2 - real (kind=kind_phys), dimension(im), intent(inout) :: smcwlt2 - real (kind=kind_phys), dimension(im), intent(in ) :: tg3 - real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: smc ! Noah - real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: stc ! Noah - real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: slc ! Noah - - integer, dimension(im), intent(inout) :: soiltyp - integer, dimension(im), intent(inout) :: vegtype - real (kind=kind_phys), dimension(im), intent(inout) :: wetness - real (kind=kind_phys), dimension(im), intent(inout) :: fice - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smois! ruc - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb ! ruc - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: sh2o ! ruc - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smfrkeep ! ruc - - real (kind=kind_phys), dimension(1:lsoil_ruc), intent (out) :: zs + logical, dimension(:), intent(in ) :: land + real (kind=kind_phys), dimension(:), intent(in ) :: tsurf, tsurf_wat + real (kind=kind_phys), dimension(:), intent(inout) :: smcref2 + real (kind=kind_phys), dimension(:), intent(inout) :: smcwlt2 + real (kind=kind_phys), dimension(:), intent(in ) :: tg3 + real (kind=kind_phys), dimension(:,:), intent(in ) :: smc ! Noah + real (kind=kind_phys), dimension(:,:), intent(in ) :: stc ! Noah + real (kind=kind_phys), dimension(:,:), intent(in ) :: slc ! Noah + + integer, dimension(:), intent(inout) :: soiltyp + integer, dimension(:), intent(inout) :: vegtype + real (kind=kind_phys), dimension(:), intent(inout) :: wetness + real (kind=kind_phys), dimension(:), intent(inout) :: fice + real (kind=kind_phys), dimension(:,:), intent(inout) :: smois! ruc + real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb ! ruc + real (kind=kind_phys), dimension(:,:), intent(inout) :: sh2o ! ruc + real (kind=kind_phys), dimension(:,:), intent(inout) :: smfrkeep ! ruc + + real (kind=kind_phys), dimension(:), intent (out) :: zs integer, intent(in ) :: me integer, intent(in ) :: master diff --git a/physics/sfc_noahmp_drv.f b/physics/sfc_noahmp_drv.f index bdba632bf..f2c580909 100644 --- a/physics/sfc_noahmp_drv.f +++ b/physics/sfc_noahmp_drv.f @@ -142,17 +142,17 @@ subroutine noahmpdrv_run & integer, intent(in) :: im, km, itime - integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp - real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & & ch, prsl1, prslki, wind, shdmin, shdmax, & & snoalb, sfalb, zf, & & rainn_mp,rainc_mp,snow_mp,graupel_mp,ice_mp - logical, dimension(im), intent(in) :: dry + logical, dimension(:), intent(in) :: dry - real (kind=kind_phys),dimension(im),intent(in) :: xlatin,xcoszin + real (kind=kind_phys),dimension(:),intent(in) :: xlatin,xcoszin integer, intent(in) :: idveg, iopt_crs,iopt_btr,iopt_run, & & iopt_sfc,iopt_frz,iopt_inf,iopt_rad, & @@ -170,24 +170,24 @@ subroutine noahmpdrv_run & & con_rd, con_hfus ! --- in/out: - real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & + real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl - real (kind=kind_phys), dimension(im,km), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smc, stc, slc - real (kind=kind_phys), dimension(im), intent(inout) :: snowxy, & + real (kind=kind_phys), dimension(:), intent(inout) :: snowxy, & & tvxy,tgxy,canicexy,canliqxy,eahxy,tahxy, & & cmxy,chxy,fwetxy,sneqvoxy,alboldxy,qsnowxy, & & wslakexy,zwtxy,waxy,wtxy,lfmassxy,rtmassxy, & & stmassxy,woodxy,stblcpxy,fastcpxy,xlaixy, & & xsaixy,taussxy,smcwtdxy,deeprechxy,rechxy - real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: tsnoxy - real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snicexy - real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snliqxy - real (kind=kind_phys),dimension(im,1:4), intent(inout) :: smoiseq - real (kind=kind_phys),dimension(im,-2:4),intent(inout) :: zsnsoxy + real (kind=kind_phys),dimension(:,:),intent(inout) :: tsnoxy + real (kind=kind_phys),dimension(:,:),intent(inout) :: snicexy + real (kind=kind_phys),dimension(:,:),intent(inout) :: snliqxy + real (kind=kind_phys),dimension(:,:), intent(inout) :: smoiseq + real (kind=kind_phys),dimension(:,:),intent(inout) :: zsnsoxy integer, dimension(im) :: jsnowxy real (kind=kind_phys),dimension(im) :: snodep @@ -195,7 +195,7 @@ subroutine noahmpdrv_run & ! --- output: - real (kind=kind_phys), dimension(im), intent(out) :: sncovr1, & + real (kind=kind_phys), dimension(:), intent(out) :: sncovr1, & & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, wet1 real (kind=kind_phys), dimension(:), intent(out) :: t2mmp, q2mp diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 5920f375c..0e6872cc0 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -190,25 +190,25 @@ subroutine sfc_nst_run & & nstf_name5 real (kind=kind_phys), intent(in) :: hvap, cp, hfus, jcal, eps, & & epsm1, rvrdm1, rd, rhw0, sbc, pi - real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & & t1, q1, tref, cm, ch, prsl1, prslki, prsik1, prslk1, & & xlon,xcosz, & & sinlat, stress, sfcemis, dlwflx, sfcnsw, rain, wind real (kind=kind_phys), intent(in) :: timestep real (kind=kind_phys), intent(in) :: solhr - logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet + logical, dimension(:), intent(in) :: flag_iter, flag_guess, wet ! &, icy logical, intent(in) :: lprnt ! --- input/outputs: ! control variables of dtl system (5+2) and sl (2) and coefficients for d(tz)/d(ts) calculation - real (kind=kind_phys), dimension(im), intent(inout) :: tskin, & + real (kind=kind_phys), dimension(:), intent(inout) :: tskin, & & tsurf, xt, xs, xu, xv, xz, zm, xtts, xzts, dt_cool, & & z_c, c_0, c_d, w_0, w_d, d_conv, ifd, qrain ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: & + real (kind=kind_phys), dimension(:), intent(inout) :: & & qsurf, gflux, cmm, chh, evap, hflx, ep character(len=*), intent(out) :: errmsg @@ -687,13 +687,13 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet - real (kind=kind_phys), dimension(im), intent(in) :: + logical, dimension(:), intent(in) :: wet + real (kind=kind_phys), dimension(:), intent(in) :: & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac logical, intent(in) :: cplflx ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: + real (kind=kind_phys), dimension(:), intent(inout) :: & tsurf_wat, tseal, tref ! --- outputs: diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F index 20c8cdf02..f6e511a89 100644 --- a/physics/sfc_ocean.F +++ b/physics/sfc_ocean.F @@ -103,13 +103,13 @@ subroutine sfc_ocean_run & integer, intent(in) :: im real (kind=kind_phys), intent(in) :: rd, eps, epsm1, rvrdm1 - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, tskin, cm, ch, prsl1, prslki, wind - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(:), intent(in) :: flag_iter, wet, lake ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & + real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & & cmm, chh, gflux, evap, hflx, ep character(len=*), intent(out) :: errmsg diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f index ab67f849e..c18fd9d01 100644 --- a/physics/sfc_sice.f +++ b/physics/sfc_sice.f @@ -157,25 +157,25 @@ subroutine sfc_sice_run & real (kind=kind_phys), intent(in) :: sbc, hvap, tgice, cp, eps, & & epsm1, grav, rvrdm1, t0c, rd - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, cm, ch, & & prsl1, prslki, prsik1, prslk1, wind, oceanfrac ! integer, dimension(im), intent(in) :: islimsk - integer, dimension(im), intent(in) :: islmsk_cice + integer, dimension(:), intent(in) :: islmsk_cice real (kind=kind_phys), intent(in) :: delt, min_seaice, & & min_lakeice - logical, dimension(im), intent(in) :: flag_iter, icy + logical, dimension(:), intent(in) :: flag_iter, icy ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: hice, & + real (kind=kind_phys), dimension(:), intent(inout) :: hice, & & fice, tice, weasd, tskin, tprcp, ep - real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice + real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: snwdph, & + real (kind=kind_phys), dimension(:), intent(inout) :: snwdph, & & qsurf, snowmt, gflux, cmm, chh, evap, hflx character(len=*), intent(out) :: errmsg diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 index 83270a08d..da9c0892f 100644 --- a/physics/shinhongvdif.F90 +++ b/physics/shinhongvdif.F90 @@ -107,7 +107,7 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt ! 3D in - real(kind=kind_phys), dimension(im, km) , & + real(kind=kind_phys), dimension(:,:) , & intent(in ) :: phil, & pi2d, & p2d, & @@ -117,21 +117,21 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & real(kind=kind_phys), dimension( im, km, ntrac ) , & intent(in ) :: qx - real(kind=kind_phys), dimension( im, km+1 ) , & + real(kind=kind_phys), dimension( :,: ) , & intent(in ) :: p2di, & phii ! 3D in&out - real(kind=kind_phys), dimension(im, km) , & + real(kind=kind_phys), dimension(:,:) , & intent(inout) :: utnp, & vtnp, & ttnp - real(kind=kind_phys), dimension(im, km, ntrac ) , & + real(kind=kind_phys), dimension(:,:, : ) , & intent(inout) :: qtnp ! 2D in - integer, dimension(im) , & + integer, dimension(:) , & intent(in ) :: landmask - real(kind=kind_phys), dimension(im) , & + real(kind=kind_phys), dimension(:) , & intent(in ) :: heat, & evap, & br, & @@ -145,10 +145,10 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & v10, & dx ! 2D: out - integer, dimension(im) , & + integer, dimension(:) , & intent(out ) :: kpbl1d - real(kind=kind_phys), dimension(im) , & + real(kind=kind_phys), dimension(:) , & intent(out ) :: hpbl, & dusfc, & dvsfc, & @@ -1435,13 +1435,13 @@ subroutine tridin_ysu(cl,cm,cu,r2,au,f2,its,ite,kts,kte,nt) ! real(kind=kind_phys), dimension( its:ite, kts:kte ) , & intent(in ) :: cm - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & + real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & intent(in ) :: r2 ! real(kind=kind_phys), dimension( its:ite, kts:kte ) , & intent(inout) :: au, & cu - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & + real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & intent(inout) :: f2 ! real(kind=kind_phys) :: fk @@ -1582,7 +1582,7 @@ subroutine mixlen(lmh,u,v,t,the,q,cwm,q2,z,ustar,corf,epshol, & qol2st,qol2un,qdzl,rdz,sq,srel,szq,tem,thm,vkrmz,rlambda, & rlb,rln,f real(kind=kind_phys) :: ckp - real(kind=kind_phys), dimension( kts:kte ) :: q1, & + real(kind=kind_phys), dimension( kts:kte ) :: q1, & en2 real(kind=kind_phys), dimension( kts+1:kte ) :: dth, & elm, & @@ -1748,12 +1748,12 @@ subroutine prodq2(lmh,dtturbl,ustar,s2,ri,q2,el,z,akm,akh, & ! logical, intent(in ) :: pblflg ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: uxk, & vxk, & thxk, & thvxk - real(kind=kind_phys), dimension( kts+1:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: s2, & ri, & akm, & @@ -1764,10 +1764,10 @@ subroutine prodq2(lmh,dtturbl,ustar,s2,ri,q2,el,z,akm,akh, & vfxpbl, & qfxpbl ! - real(kind=kind_phys), dimension( kts:kte+1 ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: z ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(inout) :: q2 ! ! local vars @@ -1855,16 +1855,16 @@ subroutine vdifq(lmh,dtdif,q2,el,z, & ! logical, intent(in ) :: pblflg ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: hgame, & ptke1 - real(kind=kind_phys), dimension( kts+1:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: el, & akhk - real(kind=kind_phys), dimension( kts:kte+1 ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: z ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(inout) :: q2 ! ! local vars diff --git a/physics/ysuvdif.F90 b/physics/ysuvdif.F90 index 51ed599f0..420dfb7f4 100644 --- a/physics/ysuvdif.F90 +++ b/physics/ysuvdif.F90 @@ -62,33 +62,33 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt - real(kind=kind_phys), dimension( im,km ), & + real(kind=kind_phys), dimension( :,: ), & intent(in) :: pi2d,p2d,phil,ux,vx,swh,hlw,tx - real(kind=kind_phys), dimension( im,km,ntrac ) , & + real(kind=kind_phys), dimension( :,:,: ) , & intent(in ) :: qx - real(kind=kind_phys), dimension( im, km+1 ) , & + real(kind=kind_phys), dimension( :,: ) , & intent(in ) :: p2di,phii - real(kind=kind_phys), dimension( im ) , & + real(kind=kind_phys), dimension( : ) , & intent(in) :: stress,zorl,heat,evap,wspd,br,psim,psih,psfcpa, & u10,v10,xmu - integer, dimension(im) ,& + integer, dimension(:) ,& intent(in ) :: landmask ! !---------------------------------------------------------------------------------- ! input/output variables ! - real(kind=kind_phys), dimension( im,km ) , & + real(kind=kind_phys), dimension( :,: ) , & intent(inout) :: utnp,vtnp,ttnp - real(kind=kind_phys), dimension( im,km,ntrac ) , & + real(kind=kind_phys), dimension( :,:,: ) , & intent(inout) :: qtnp ! !--------------------------------------------------------------------------------- ! output variables - integer, dimension( im ), intent(out ) :: kpbl1d - real(kind=kind_phys), dimension( im ), & + integer, dimension( : ), intent(out ) :: kpbl1d + real(kind=kind_phys), dimension( : ), & intent(out) :: hpbl ! error messages From 18701332738ea452354eb2d25ab4ffefbb7d5d90 Mon Sep 17 00:00:00 2001 From: XiaSun-NOAA Date: Mon, 24 Aug 2020 21:56:28 +0000 Subject: [PATCH 006/119] delete personal experimental files --- physics/gfdl_fv_sat_adj.F90_assumedsizes | 1431 ------- physics/gitdiff | 4397 ---------------------- 2 files changed, 5828 deletions(-) delete mode 100644 physics/gfdl_fv_sat_adj.F90_assumedsizes delete mode 100644 physics/gitdiff diff --git a/physics/gfdl_fv_sat_adj.F90_assumedsizes b/physics/gfdl_fv_sat_adj.F90_assumedsizes deleted file mode 100644 index c48a5d2e8..000000000 --- a/physics/gfdl_fv_sat_adj.F90_assumedsizes +++ /dev/null @@ -1,1431 +0,0 @@ -!>\file gfdl_fv_sat_adj.F90 -!! This file contains the GFDL in-core fast saturation adjustment. -!! and it is an "intermediate physics" implemented in the remapping Lagrangian to -!! Eulerian loop of FV3 solver. -!*********************************************************************** -!* GNU Lesser General Public License -!* -!* This file is part of the GFDL Cloud Microphysics. -!* -!* The GFDL Cloud Microphysics is free software: you can -!8 redistribute it and/or modify it under the terms of the -!* GNU Lesser General Public License as published by the -!* Free Software Foundation, either version 3 of the License, or -!* (at your option) any later version. -!* -!* The GFDL Cloud Microphysics is distributed in the hope it will be -!* useful, but WITHOUT ANYWARRANTY; without even the implied warranty -!* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -!* See the GNU General Public License for more details. -!* -!* You should have received a copy of the GNU Lesser General Public -!* License along with the GFDL Cloud Microphysics. -!* If not, see . -!*********************************************************************** - -!> This module contains the GFDL in-core fast saturation adjustment -!! called in FV3 dynamics solver. -module fv_sat_adj -! Modules Included: -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -! -!
Module NameFunctions Included
constants_modrvgas, rdgas, grav, hlv, hlf, cp_air
fv_arrays_mod r_grid
fv_mp_modis_master
gfdl_cloud_microphys_modql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt, -! tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r, -! rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs
- ! DH* TODO - MAKE THIS INPUT ARGUMENTS *DH - use physcons, only : rdgas => con_rd_dyn, & - rvgas => con_rv_dyn, & - grav => con_g_dyn, & - hlv => con_hvap_dyn, & - hlf => con_hfus_dyn, & - cp_air => con_cp_dyn - ! *DH - use machine, only: kind_grid, kind_dyn - use gfdl_cloud_microphys_mod, only: ql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt - use gfdl_cloud_microphys_mod, only: icloud_f, sat_adj0, t_sub, cld_min - use gfdl_cloud_microphys_mod, only: tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r - use gfdl_cloud_microphys_mod, only: rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs -#ifdef MULTI_GASES - use ccpp_multi_gases_mod, only: multi_gases_init, & - multi_gases_finalize, & - virq_qpz, vicpqd_qpz, & - vicvqd_qpz, num_gas -#endif - - implicit none - - private - - public fv_sat_adj_init, fv_sat_adj_run, fv_sat_adj_finalize - - logical :: is_initialized = .false. - - real(kind=kind_dyn), parameter :: rrg = -rdgas/grav - ! real, parameter :: cp_air = cp_air ! 1004.6, heat capacity of dry air at constant pressure, come from constants_mod - real(kind=kind_dyn), parameter :: cp_vap = 4.0 * rvgas !< 1846.0, heat capacity of water vapor at constant pressure - real(kind=kind_dyn), parameter :: cv_air = cp_air - rdgas !< 717.55, heat capacity of dry air at constant volume - real(kind=kind_dyn), parameter :: cv_vap = 3.0 * rvgas !< 1384.5, heat capacity of water vapor at constant volume - ! http: / / www.engineeringtoolbox.com / ice - thermal - properties - d_576.html - ! c_ice = 2050.0 at 0 deg c - ! c_ice = 1972.0 at - 15 deg c - ! c_ice = 1818.0 at - 40 deg c - ! http: / / www.engineeringtoolbox.com / water - thermal - properties - d_162.html - ! c_liq = 4205.0 at 4 deg c - ! c_liq = 4185.5 at 15 deg c - ! c_liq = 4178.0 at 30 deg c - ! real, parameter :: c_ice = 2106.0 ! ifs: heat capacity of ice at 0 deg c - ! real, parameter :: c_liq = 4218.0 ! ifs: heat capacity of liquid at 0 deg c - real(kind=kind_dyn), parameter :: c_ice = 1972.0 !< gfdl: heat capacity of ice at - 15 deg c - real(kind=kind_dyn), parameter :: c_liq = 4185.5 !< gfdl: heat capacity of liquid at 15 deg c - real(kind=kind_dyn), parameter :: dc_vap = cp_vap - c_liq !< - 2339.5, isobaric heating / cooling - real(kind=kind_dyn), parameter :: dc_ice = c_liq - c_ice !< 2213.5, isobaric heating / colling - real(kind=kind_dyn), parameter :: tice = 273.16 !< freezing temperature - real(kind=kind_dyn), parameter :: t_wfr = tice - 40. !< homogeneous freezing temperature - real(kind=kind_dyn), parameter :: lv0 = hlv - dc_vap * tice !< 3.13905782e6, evaporation latent heat coefficient at 0 deg k - real(kind=kind_dyn), parameter :: li00 = hlf - dc_ice * tice !< - 2.7105966e5, fusion latent heat coefficient at 0 deg k - ! real (kind_grid), parameter :: e00 = 610.71 ! gfdl: saturation vapor pressure at 0 deg c - real (kind_grid), parameter :: e00 = 611.21 !< ifs: saturation vapor pressure at 0 deg c - real (kind_grid), parameter :: d2ice = dc_vap + dc_ice !< - 126, isobaric heating / cooling - real (kind_grid), parameter :: li2 = lv0 + li00 !< 2.86799816e6, sublimation latent heat coefficient at 0 deg k - real(kind=kind_dyn), parameter :: lat2 = (hlv + hlf) ** 2 !< used in bigg mechanism - real(kind=kind_dyn) :: d0_vap !< the same as dc_vap, except that cp_vap can be cp_vap or cv_vap - real(kind=kind_dyn) :: lv00 !< the same as lv0, except that cp_vap can be cp_vap or cv_vap - real(kind=kind_dyn), allocatable :: table (:), table2 (:), tablew (:), des2 (:), desw (:) - -contains - -!>\brief The subroutine 'fv_sat_adj_init' initializes lookup tables for the saturation mixing ratio. -!! \section arg_table_fv_sat_adj_init Argument Table -!! \htmlinclude fv_sat_adj_init.html -!! -subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & - mpirank, mpiroot, errmsg, errflg) - - implicit none - - ! Interface variables - logical, intent(in ) :: do_sat_adj - integer, intent(in ) :: kmp - integer, intent(in ) :: nwat - integer, intent(in ) :: ngas - real(kind_dyn), intent(in ) :: rilist(:) - real(kind_dyn), intent(in ) :: cpilist(:) - integer, intent(in ) :: mpirank - integer, intent(in ) :: mpiroot - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg - - ! Local variables - integer, parameter :: length = 2621 - integer :: i - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - - ! If saturation adjustment is not used, return immediately - if (.not.do_sat_adj) then - write(errmsg,'(a)') 'Logic error: fv_sat_adj_init is called but do_sat_adj is set to false' - errflg = 1 - return - end if - - if (.not.nwat==6) then - write(errmsg,'(a)') 'Logic error: fv_sat_adj requires six water species (nwat=6)' - errflg = 1 - return - end if - - if (is_initialized) return - - ! generate es table (dt = 0.1 deg c) - - allocate (table (length)) - allocate (table2 (length)) - allocate (tablew (length)) - allocate (des2 (length)) - allocate (desw (length)) - - call qs_table (length) - call qs_table2 (length) - call qs_tablew (length) - - do i = 1, length - 1 - des2 (i) = max (0., table2 (i + 1) - table2 (i)) - desw (i) = max (0., tablew (i + 1) - tablew (i)) - enddo - des2 (length) = des2 (length - 1) - desw (length) = desw (length - 1) - -#ifdef MULTI_GASES - call multi_gases_init(ngas,nwat,rilist,cpilist,mpirank==mpiroot) -#endif - - is_initialized = .true. - -end subroutine fv_sat_adj_init - -!\ingroup fast_sat_adj -!>\brief The subroutine 'fv_sat_adj_finalize' deallocates lookup tables for the saturation mixing ratio. -!! \section arg_table_fv_sat_adj_finalize Argument Table -!! \htmlinclude fv_sat_adj_finalize.html -!! -subroutine fv_sat_adj_finalize (errmsg, errflg) - - implicit none - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - - if (.not.is_initialized) return - - if (allocated(table )) deallocate(table ) - if (allocated(table2)) deallocate(table2) - if (allocated(tablew)) deallocate(tablew) - if (allocated(des2 )) deallocate(des2 ) - if (allocated(desw )) deallocate(desw ) - -#ifdef MULTI_GASES - call multi_gases_finalize() -#endif - - is_initialized = .false. - -end subroutine fv_sat_adj_finalize - -!>\defgroup fast_sat_adj GFDL In-Core Fast Saturation Adjustment Module -!> @{ -!! The subroutine 'fv_sat_adj' implements the fast processes in the GFDL -!! Cloud MP. It is part of the GFDL Cloud MP. -!>\author Shian-Jiann Lin, Linjiong Zhou -!! -!>\brief The subroutine 'fv_sat_adj' performs the fast processes in the GFDL microphysics. -!>\details This is designed for single-moment 6-class cloud microphysics schemes. -!! It handles the heat release due to in situ phase changes. -!! -!! \section arg_table_fv_sat_adj_run Argument Table -!! \htmlinclude fv_sat_adj_run.html -!! -subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, jsd, jed, & - ng, hydrostatic, fast_mp_consv, te0_2d, te0, ngas, qvi, qv, ql, qi, qr, & - qs, qg, hs, peln, delz, delp, pt, pkz, q_con, akap, cappa, area, dtdt, & - out_dt, last_step, do_qa, qa, & - nthreads, errmsg, errflg) - - implicit none - - ! Interface variables - real(kind=kind_dyn), intent(in) :: mdt - real(kind=kind_dyn), intent(in) :: zvir - integer, intent(in) :: is - integer, intent(in) :: ie - integer, intent(in) :: isd - integer, intent(in) :: ied - integer, intent(in) :: kmp - integer, intent(in) :: km - integer, intent(in) :: kmdelz - integer, intent(in) :: js - integer, intent(in) :: je - integer, intent(in) :: jsd - integer, intent(in) :: jed - integer, intent(in) :: ng - logical, intent(in) :: hydrostatic - logical, intent(in) :: fast_mp_consv - real(kind=kind_dyn), intent(inout) :: te0_2d(:,:) - real(kind=kind_dyn), intent( out) :: te0(isd:ied, jsd:jed, 1:km) - ! If multi-gases physics are not used, ngas is one and qvi identical to qv - integer, intent(in) :: ngas - real(kind=kind_dyn), intent(inout) :: qvi(:,:,:, :) - real(kind=kind_dyn), intent(inout) :: qv(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: ql(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qi(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qr(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qs(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qg(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(in) :: hs(isd:ied, jsd:jed) - real(kind=kind_dyn), intent(in) :: peln(:,:,:) - ! For hydrostatic build, kmdelz=1, otherwise kmdelz=km (see fv_arrays.F90) - real(kind=kind_dyn), intent(in) :: delz(:,:,:) - real(kind=kind_dyn), intent(in) :: delp(:,:,:) - real(kind=kind_dyn), intent(inout) :: pt(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: pkz(:,:,:) -#ifdef USE_COND - real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) -#else - real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) -#endif - real(kind=kind_dyn), intent(in) :: akap -#ifdef MOIST_CAPPA - real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) -#else - real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) -#endif - ! DH* WARNING, allocation in fv_arrays.F90 is area(isd_2d:ied_2d, jsd_2d:jed_2d), - ! where normally isd_2d = isd etc, but for memory optimization, these can be set - ! to isd_2d=0, ied_2d=-1 etc. I don't believe this optimization is actually used, - ! as it would break a whole lot of code (including the one below)! - ! Assume thus that isd_2d = isd etc. - real(kind_grid), intent(in) :: area(:,:) - real(kind=kind_dyn), intent(inout) :: dtdt(is:ie, js:je, 1:km) - logical, intent(in) :: out_dt - logical, intent(in) :: last_step - logical, intent(in) :: do_qa - real(kind=kind_dyn), intent( out) :: qa(isd:ied, jsd:jed, 1:km) - integer, intent(in) :: nthreads - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg - - ! Local variables - real(kind=kind_dyn), dimension(is:ie,js:je) :: dpln - integer :: kdelz - integer :: k, j, i - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - -#ifndef FV3 -! Open parallel region if not already opened by host model -!$OMP parallel num_threads(nthreads) default(none) & -!$OMP shared(kmp,km,js,je,is,ie,peln,mdt, & -!$OMP isd,jsd,delz,q_con,cappa,qa, & -!$OMP do_qa,last_step,out_dt,dtdt, & -!$OMP area,delp,pt,hs,qg,qs,qr,qi, & -!$OMP ql,qv,te0,fast_mp_consv, & -!$OMP hydrostatic,ng,zvir,pkz, & -!$OMP akap,te0_2d,ngas,qvi) & -!$OMP private(k,j,i,kdelz,dpln) -#endif - -!$OMP do - do k=kmp,km - do j=js,je - do i=is,ie - dpln(i,j) = peln(i,k+1,j) - peln(i,k,j) - enddo - enddo - if (hydrostatic) then - kdelz = 1 - else - kdelz = k - end if - call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & - te0(isd,jsd,k), & -#ifdef MULTI_GASES - qvi(isd,jsd,k,1:ngas), & -#else - qv(isd,jsd,k), & -#endif - ql(isd,jsd,k), qi(isd,jsd,k), & - qr(isd,jsd,k), qs(isd,jsd,k), qg(isd,jsd,k), & - hs, dpln, delz(is:,js:,kdelz), pt(isd,jsd,k), delp(isd,jsd,k),& - q_con(isd:,jsd:,k), cappa(isd:,jsd:,k), area, dtdt(is,js,k), & - out_dt, last_step, do_qa, qa(isd,jsd,k)) - if ( .not. hydrostatic ) then - do j=js,je - do i=is,ie -#ifdef MOIST_CAPPA - pkz(i,j,k) = exp(cappa(i,j,k)*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) -#else -#ifdef MULTI_GASES - pkz(i,j,k) = exp(akap*(virqd(q(i,j,k,1:num_gas))/vicpqd(q(i,j,k,1:num_gas))*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) -#else - pkz(i,j,k) = exp(akap*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k))) -#endif -#endif - enddo - enddo - endif - enddo -!$OMP end do - - if ( fast_mp_consv ) then -!$OMP do - do j=js,je - do i=is,ie - do k=kmp,km - te0_2d(i,j) = te0_2d(i,j) + te0(i,j,k) - enddo - enddo - enddo -!$OMP end do - endif - -#ifndef FV3 -!$OMP end parallel -#endif - - return - -end subroutine fv_sat_adj_run - -!>\ingroup fast_sat_adj -!> This subroutine includes the entity of the fast saturation adjustment processes. -!>\section fast_gen GFDL Cloud Fast Physics General Algorithm -!> @{ -subroutine fv_sat_adj_work(mdt, zvir, is, ie, js, je, ng, hydrostatic, consv_te, te0, & -#ifdef MULTI_GASES - qvi, & -#else - qv, & -#endif - ql, qi, qr, qs, qg, hs, dpln, delz, pt, dp, q_con, cappa, & - area, dtdt, out_dt, last_step, do_qa, qa) - - implicit none - - ! Interface variables - integer, intent (in) :: is, ie, js, je, ng - logical, intent (in) :: hydrostatic, consv_te, out_dt, last_step, do_qa - real(kind=kind_dyn), intent (in) :: zvir, mdt ! remapping time step - real(kind=kind_dyn), intent (in), dimension (is - ng:ie + ng, js - ng:je + ng) :: dp, hs - real(kind=kind_dyn), intent (in), dimension (is:ie, js:je) :: dpln, delz - real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: pt -#ifdef MULTI_GASES - real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng, 1:1, 1:num_gas) :: qvi -#else - real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: qv -#endif - real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: ql, qi, qr, qs, qg - real(kind=kind_dyn), intent (inout), dimension (is - ng:ie + ng, js - ng:je + ng) :: q_con, cappa - real(kind=kind_dyn), intent (inout), dimension (is:ie, js:je) :: dtdt - real(kind=kind_dyn), intent (out), dimension (is - ng:ie + ng, js - ng:je + ng) :: qa, te0 - real (kind_grid), intent (in), dimension (is - ng:ie + ng, js - ng:je + ng) :: area - - ! Local variables -#ifdef MULTI_GASES - real, dimension (is - ng:ie + ng, js - ng:je + ng) :: qv -#endif - real(kind=kind_dyn), dimension (is:ie) :: wqsat, dq2dt, qpz, cvm, t0, pt1, qstar - real(kind=kind_dyn), dimension (is:ie) :: icp2, lcp2, tcp2, tcp3 - real(kind=kind_dyn), dimension (is:ie) :: den, q_liq, q_sol, q_cond, src, sink, hvar - real(kind=kind_dyn), dimension (is:ie) :: mc_air, lhl, lhi - real(kind=kind_dyn) :: qsw, rh - real(kind=kind_dyn) :: tc, qsi, dqsdt, dq, dq0, pidep, qi_crt, tmp, dtmp - real(kind=kind_dyn) :: tin, rqi, q_plus, q_minus - real(kind=kind_dyn) :: sdt, dt_bigg, adj_fac - real(kind=kind_dyn) :: fac_smlt, fac_r2g, fac_i2s, fac_imlt, fac_l2r, fac_v2l, fac_l2v - real(kind=kind_dyn) :: factor, qim, tice0, c_air, c_vap, dw - integer :: i, j - -#ifdef MULTI_GASES - qv(:,:) = qvi(:,:,1,1) -#endif - sdt = 0.5 * mdt ! half remapping time step - dt_bigg = mdt ! bigg mechinism time step - - tice0 = tice - 0.01 ! 273.15, standard freezing temperature - - ! ----------------------------------------------------------------------- - !> - Define conversion scalar / factor. - ! ----------------------------------------------------------------------- - - fac_i2s = 1. - exp (- mdt / tau_i2s) - fac_v2l = 1. - exp (- sdt / tau_v2l) - fac_r2g = 1. - exp (- mdt / tau_r2g) - fac_l2r = 1. - exp (- mdt / tau_l2r) - - fac_l2v = 1. - exp (- sdt / tau_l2v) - fac_l2v = min (sat_adj0, fac_l2v) - - fac_imlt = 1. - exp (- sdt / tau_imlt) - fac_smlt = 1. - exp (- mdt / tau_smlt) - - ! ----------------------------------------------------------------------- - !> - Define heat capacity of dry air and water vapor based on hydrostatical property. - ! ----------------------------------------------------------------------- - - if (hydrostatic) then - c_air = cp_air - c_vap = cp_vap - else - c_air = cv_air - c_vap = cv_vap - endif - d0_vap = c_vap - c_liq - lv00 = hlv - d0_vap * tice - ! dc_vap = cp_vap - c_liq ! - 2339.5 - ! d0_vap = cv_vap - c_liq ! - 2801.0 - - do j = js, je ! start j loop - - do i = is, ie - q_liq (i) = ql (i, j) + qr (i, j) - q_sol (i) = qi (i, j) + qs (i, j) + qg (i, j) - qpz (i) = q_liq (i) + q_sol (i) -#ifdef MULTI_GASES - pt1 (i) = pt (i, j) / virq_qpz(qvi(i,j,1,1:num_gas),qpz(i)) -#else -#ifdef USE_COND - pt1 (i) = pt (i, j) / ((1 + zvir * qv (i, j)) * (1 - qpz (i))) -#else - pt1 (i) = pt (i, j) / (1 + zvir * qv (i, j)) -#endif -#endif - t0 (i) = pt1 (i) ! true temperature - qpz (i) = qpz (i) + qv (i, j) ! total_wat conserved in this routine - enddo - - ! ----------------------------------------------------------------------- - !> - Define air density based on hydrostatical property. - ! ----------------------------------------------------------------------- - - if (hydrostatic) then - do i = is, ie - den (i) = dp (i, j) / (dpln (i, j) * rdgas * pt (i, j)) - enddo - else - do i = is, ie - den (i) = - dp (i, j) / (grav * delz (i, j)) ! moist_air density - enddo - endif - - ! ----------------------------------------------------------------------- - !> - Define heat capacity and latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie -#ifdef MULTI_GASES - if (hydrostatic) then - c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) - else - c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) - endif -#endif - mc_air (i) = (1. - qpz (i)) * c_air ! constant - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - lhi (i) = li00 + dc_ice * pt1 (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Fix energy conservation. - ! ----------------------------------------------------------------------- - - if (consv_te) then - if (hydrostatic) then - do i = is, ie -#ifdef MULTI_GASES - c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) -#endif - te0 (i, j) = - c_air * t0 (i) - enddo - else - do i = is, ie -#ifdef USE_COND - te0 (i, j) = - cvm (i) * t0 (i) -#else -#ifdef MULTI_GASES - c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) -#endif - te0 (i, j) = - c_air * t0 (i) -#endif - enddo - endif - endif - - ! ----------------------------------------------------------------------- - !> - Fix negative cloud ice with snow. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (qi (i, j) < 0.) then - qs (i, j) = qs (i, j) + qi (i, j) - qi (i, j) = 0. - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Melting of cloud ice to cloud water and rain. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (qi (i, j) > 1.e-8 .and. pt1 (i) > tice) then - sink (i) = min (qi (i, j), fac_imlt * (pt1 (i) - tice) / icp2 (i)) - qi (i, j) = qi (i, j) - sink (i) - ! sjl, may 17, 2017 - ! tmp = min (sink (i), dim (ql_mlt, ql (i, j))) ! max ql amount - ! ql (i, j) = ql (i, j) + tmp - ! qr (i, j) = qr (i, j) + sink (i) - tmp - ! sjl, may 17, 2017 - ql (i, j) = ql (i, j) + sink (i) - q_liq (i) = q_liq (i) + sink (i) - q_sol (i) = q_sol (i) - sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) - sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Fix negative snow with graupel or graupel with available snow. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (qs (i, j) < 0.) then - qg (i, j) = qg (i, j) + qs (i, j) - qs (i, j) = 0. - elseif (qg (i, j) < 0.) then - tmp = min (- qg (i, j), max (0., qs (i, j))) - qg (i, j) = qg (i, j) + tmp - qs (i, j) = qs (i, j) - tmp - endif - enddo - - ! after this point cloud ice & snow are positive definite - - ! ----------------------------------------------------------------------- - !> - Fix negative cloud water with rain or rain with available cloud water. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (ql (i, j) < 0.) then - tmp = min (- ql (i, j), max (0., qr (i, j))) - ql (i, j) = ql (i, j) + tmp - qr (i, j) = qr (i, j) - tmp - elseif (qr (i, j) < 0.) then - tmp = min (- qr (i, j), max (0., ql (i, j))) - ql (i, j) = ql (i, j) - tmp - qr (i, j) = qr (i, j) + tmp - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Enforce complete freezing of cloud water to cloud ice below - 48 c. - ! ----------------------------------------------------------------------- - - do i = is, ie - dtmp = tice - 48. - pt1 (i) - if (ql (i, j) > 0. .and. dtmp > 0.) then - sink (i) = min (ql (i, j), dtmp / icp2 (i)) - ql (i, j) = ql (i, j) - sink (i) - qi (i, j) = qi (i, j) + sink (i) - q_liq (i) = q_liq (i) - sink (i) - q_sol (i) = q_sol (i) + sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhl (i) = lv00 + d0_vap * pt1 (i) - lhi (i) = li00 + dc_ice * pt1 (i) - lcp2 (i) = lhl (i) / cvm (i) - icp2 (i) = lhi (i) / cvm (i) - tcp3 (i) = lcp2 (i) + icp2 (i) * min (1., dim (tice, pt1 (i)) /48.) - enddo - - ! ----------------------------------------------------------------------- - !> - Condensation/evaporation between water vapor and cloud water. - ! ----------------------------------------------------------------------- - - call wqs2_vect (is, ie, pt1, den, wqsat, dq2dt) - - adj_fac = sat_adj0 - do i = is, ie - dq0 = (qv (i, j) - wqsat (i)) / (1. + tcp3 (i) * dq2dt (i)) - if (dq0 > 0.) then ! whole grid - box saturated - src (i) = min (adj_fac * dq0, max (ql_gen - ql (i, j), fac_v2l * dq0)) - else ! evaporation of ql - ! sjl 20170703 added ql factor to prevent the situation of high ql and rh<1 - ! factor = - min (1., fac_l2v * sqrt (max (0., ql (i, j)) / 1.e-5) * 10. * (1. - qv (i, j) / wqsat (i))) - ! factor = - fac_l2v - ! factor = - 1 - factor = - min (1., fac_l2v * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% - src (i) = - min (ql (i, j), factor * dq0) - endif - qv (i, j) = qv (i, j) - src (i) -#ifdef MULTI_GASES - qvi(i,j,1,1) = qv (i, j) -#endif - ql (i, j) = ql (i, j) + src (i) - q_liq (i) = q_liq (i) + src (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + src (i) * lhl (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhl (i) = lv00 + d0_vap * pt1 (i) - lhi (i) = li00 + dc_ice * pt1 (i) - lcp2 (i) = lhl (i) / cvm (i) - icp2 (i) = lhi (i) / cvm (i) - tcp3 (i) = lcp2 (i) + icp2 (i) * min (1., dim (tice, pt1 (i)) / 48.) - enddo - - if (last_step) then - - ! ----------------------------------------------------------------------- - !> - condensation/evaporation between water vapor and cloud water, last time step - !! enforce upper (no super_sat) & lower (critical rh) bounds. - ! final iteration: - ! ----------------------------------------------------------------------- - - call wqs2_vect (is, ie, pt1, den, wqsat, dq2dt) - - do i = is, ie - dq0 = (qv (i, j) - wqsat (i)) / (1. + tcp3 (i) * dq2dt (i)) - if (dq0 > 0.) then ! remove super - saturation, prevent super saturation over water - src (i) = dq0 - else ! evaporation of ql - ! factor = - min (1., fac_l2v * sqrt (max (0., ql (i, j)) / 1.e-5) * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% - ! factor = - fac_l2v - ! factor = - 1 - factor = - min (1., fac_l2v * 10. * (1. - qv (i, j) / wqsat (i))) ! the rh dependent factor = 1 at 90% - src (i) = - min (ql (i, j), factor * dq0) - endif - adj_fac = 1. - qv (i, j) = qv (i, j) - src (i) -#ifdef MULTI_GASES - qvi(i,j,1,1) = qv(i,j) -#endif - ql (i, j) = ql (i, j) + src (i) - q_liq (i) = q_liq (i) + src (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + src (i) * lhl (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhl (i) = lv00 + d0_vap * pt1 (i) - lhi (i) = li00 + dc_ice * pt1 (i) - lcp2 (i) = lhl (i) / cvm (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - endif - - ! ----------------------------------------------------------------------- - !> - Homogeneous freezing of cloud water to cloud ice. - ! ----------------------------------------------------------------------- - - do i = is, ie - dtmp = t_wfr - pt1 (i) ! [ - 40, - 48] - if (ql (i, j) > 0. .and. dtmp > 0.) then - sink (i) = min (ql (i, j), ql (i, j) * dtmp * 0.125, dtmp / icp2 (i)) - ql (i, j) = ql (i, j) - sink (i) - qi (i, j) = qi (i, j) + sink (i) - q_liq (i) = q_liq (i) - sink (i) - q_sol (i) = q_sol (i) + sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - bigg mechanism (heterogeneous freezing of cloud water to cloud ice). - ! ----------------------------------------------------------------------- - - do i = is, ie - tc = tice0 - pt1 (i) - if (ql (i, j) > 0.0 .and. tc > 0.) then - sink (i) = 3.3333e-10 * dt_bigg * (exp (0.66 * tc) - 1.) * den (i) * ql (i, j) ** 2 - sink (i) = min (ql (i, j), tc / icp2 (i), sink (i)) - ql (i, j) = ql (i, j) - sink (i) - qi (i, j) = qi (i, j) + sink (i) - q_liq (i) = q_liq (i) - sink (i) - q_sol (i) = q_sol (i) + sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Freezing of rain to graupel. - ! ----------------------------------------------------------------------- - - do i = is, ie - dtmp = (tice - 0.1) - pt1 (i) - if (qr (i, j) > 1.e-7 .and. dtmp > 0.) then - tmp = min (1., (dtmp * 0.025) ** 2) * qr (i, j) ! no limit on freezing below - 40 deg c - sink (i) = min (tmp, fac_r2g * dtmp / icp2 (i)) - qr (i, j) = qr (i, j) - sink (i) - qg (i, j) = qg (i, j) + sink (i) - q_liq (i) = q_liq (i) - sink (i) - q_sol (i) = q_sol (i) + sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Melting of snow to rain or cloud water. - ! ----------------------------------------------------------------------- - - do i = is, ie - dtmp = pt1 (i) - (tice + 0.1) - if (qs (i, j) > 1.e-7 .and. dtmp > 0.) then - tmp = min (1., (dtmp * 0.1) ** 2) * qs (i, j) ! no limter on melting above 10 deg c - sink (i) = min (tmp, fac_smlt * dtmp / icp2 (i)) - tmp = min (sink (i), dim (qs_mlt, ql (i, j))) ! max ql due to snow melt - qs (i, j) = qs (i, j) - sink (i) - ql (i, j) = ql (i, j) + tmp - qr (i, j) = qr (i, j) + sink (i) - tmp - ! qr (i, j) = qr (i, j) + sink (i) - q_liq (i) = q_liq (i) + sink (i) - q_sol (i) = q_sol (i) - sink (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) - sink (i) * lhi (i) / cvm (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Autoconversion from cloud water to rain. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (ql (i, j) > ql0_max) then - sink (i) = fac_l2r * (ql (i, j) - ql0_max) - qr (i, j) = qr (i, j) + sink (i) - ql (i, j) = ql (i, j) - sink (i) - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - lhl (i) = lv00 + d0_vap * pt1 (i) - lcp2 (i) = lhl (i) / cvm (i) - icp2 (i) = lhi (i) / cvm (i) - tcp2 (i) = lcp2 (i) + icp2 (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Sublimation/deposition between water vapor and cloud ice. - ! ----------------------------------------------------------------------- - - do i = is, ie - src (i) = 0. - if (pt1 (i) < t_sub) then ! too cold to be accurate; freeze qv as a fix - src (i) = dim (qv (i, j), 1.e-6) - elseif (pt1 (i) < tice0) then - qsi = iqs2 (pt1 (i), den (i), dqsdt) - dq = qv (i, j) - qsi - sink (i) = adj_fac * dq / (1. + tcp2 (i) * dqsdt) - if (qi (i, j) > 1.e-8) then - pidep = sdt * dq * 349138.78 * exp (0.875 * log (qi (i, j) * den (i))) & - / (qsi * den (i) * lat2 / (0.0243 * rvgas * pt1 (i) ** 2) + 4.42478e4) - else - pidep = 0. - endif - if (dq > 0.) then ! vapor - > ice - tmp = tice - pt1 (i) - qi_crt = qi_gen * min (qi_lim, 0.1 * tmp) / den (i) - src (i) = min (sink (i), max (qi_crt - qi (i, j), pidep), tmp / tcp2 (i)) - else - pidep = pidep * min (1., dim (pt1 (i), t_sub) * 0.2) - src (i) = max (pidep, sink (i), - qi (i, j)) - endif - endif - qv (i, j) = qv (i, j) - src (i) -#ifdef MULTI_GASES - qvi(i,j,1,1) = qv(i,j) -#endif - qi (i, j) = qi (i, j) + src (i) - q_sol (i) = q_sol (i) + src (i) - cvm (i) = mc_air (i) + qv (i, j) * c_vap + q_liq (i) * c_liq + q_sol (i) * c_ice - pt1 (i) = pt1 (i) + src (i) * (lhl (i) + lhi (i)) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Virtual temperature updated. - ! ----------------------------------------------------------------------- - - do i = is, ie -#ifdef USE_COND - q_con (i, j) = q_liq (i) + q_sol (i) -#ifdef MULTI_GASES - pt (i, j) = pt1 (i) * virq_qpz(qvi(i,j,1,1:num_gas),q_con(i,j)) -#else - tmp = 1. + zvir * qv (i, j) - pt (i, j) = pt1 (i) * tmp * (1. - q_con (i, j)) -#endif - tmp = rdgas * tmp - cappa (i, j) = tmp / (tmp + cvm (i)) -#else -#ifdef MULTI_GASES - q_con (i, j) = q_liq (i) + q_sol (i) - pt (i, j) = pt1 (i) * virq_qpz(qvi(i,j,1,1:num_gas),q_con(i,j)) * (1. - q_con(i,j)) -#else - pt (i, j) = pt1 (i) * (1. + zvir * qv (i, j)) -#endif -#endif - enddo - - ! ----------------------------------------------------------------------- - !> - Fix negative graupel with available cloud ice. - ! ----------------------------------------------------------------------- - - do i = is, ie - if (qg (i, j) < 0.) then - tmp = min (- qg (i, j), max (0., qi (i, j))) - qg (i, j) = qg (i, j) + tmp - qi (i, j) = qi (i, j) - tmp - endif - enddo - - ! ----------------------------------------------------------------------- - !> - Autoconversion from cloud ice to snow. - ! ----------------------------------------------------------------------- - - do i = is, ie - qim = qi0_max / den (i) - if (qi (i, j) > qim) then - sink (i) = fac_i2s * (qi (i, j) - qim) - qi (i, j) = qi (i, j) - sink (i) - qs (i, j) = qs (i, j) + sink (i) - endif - enddo - - if (out_dt) then - do i = is, ie - dtdt (i, j) = dtdt (i, j) + pt1 (i) - t0 (i) - enddo - endif - - ! ----------------------------------------------------------------------- - !> - Fix energy conservation. - ! ----------------------------------------------------------------------- - - if (consv_te) then - do i = is, ie - if (hydrostatic) then -#ifdef MULTI_GASES - c_air = cp_air * vicpqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) -#endif - te0 (i, j) = dp (i, j) * (te0 (i, j) + c_air * pt1 (i)) - else -#ifdef USE_COND - te0 (i, j) = dp (i, j) * (te0 (i, j) + cvm (i) * pt1 (i)) -#else -#ifdef MULTI_GASES - c_air = cv_air * vicvqd_qpz(qvi(i,j,1,1:num_gas),qpz(i)) -#endif - te0 (i, j) = dp (i, j) * (te0 (i, j) + c_air * pt1 (i)) -#endif - endif - enddo - endif - - ! ----------------------------------------------------------------------- - !> - Update latend heat coefficient. - ! ----------------------------------------------------------------------- - - do i = is, ie - lhi (i) = li00 + dc_ice * pt1 (i) - lhl (i) = lv00 + d0_vap * pt1 (i) - cvm (i) = mc_air (i) + (qv (i, j) + q_liq (i) + q_sol (i)) * c_vap - lcp2 (i) = lhl (i) / cvm (i) - icp2 (i) = lhi (i) / cvm (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Compute cloud fraction. - ! ----------------------------------------------------------------------- - - if (do_qa .and. last_step) then - - ! ----------------------------------------------------------------------- - !> - If it is the last step, combine water species. - ! ----------------------------------------------------------------------- - - if (rad_snow) then - if (rad_graupel) then - do i = is, ie - q_sol (i) = qi (i, j) + qs (i, j) + qg (i, j) - enddo - else - do i = is, ie - q_sol (i) = qi (i, j) + qs (i, j) - enddo - endif - else - do i = is, ie - q_sol (i) = qi (i, j) - enddo - endif - if (rad_rain) then - do i = is, ie - q_liq (i) = ql (i, j) + qr (i, j) - enddo - else - do i = is, ie - q_liq (i) = ql (i, j) - enddo - endif - do i = is, ie - q_cond (i) = q_sol (i) + q_liq (i) - enddo - - ! ----------------------------------------------------------------------- - !> - Use the "liquid - frozen water temperature" (tin) to compute saturated specific humidity. - ! ----------------------------------------------------------------------- - - do i = is, ie - - if(tintqs) then - tin = pt1(i) - else - tin = pt1 (i) - (lcp2 (i) * q_cond (i) + icp2 (i) * q_sol (i)) ! minimum temperature - ! tin = pt1 (i) - ((lv00 + d0_vap * pt1 (i)) * q_cond (i) + & - ! (li00 + dc_ice * pt1 (i)) * q_sol (i)) / (mc_air (i) + qpz (i) * c_vap) - endif - - ! ----------------------------------------------------------------------- - ! determine saturated specific humidity - ! ----------------------------------------------------------------------- - - if (tin <= t_wfr) then - ! ice phase: - qstar (i) = iqs1 (tin, den (i)) - elseif (tin >= tice) then - ! liquid phase: - qstar (i) = wqs1 (tin, den (i)) - else - ! mixed phase: - qsi = iqs1 (tin, den (i)) - qsw = wqs1 (tin, den (i)) - if (q_cond (i) > 1.e-6) then - rqi = q_sol (i) / q_cond (i) - else - ! mostly liquid water clouds at initial cloud development stage - rqi = ((tice - tin) / (tice - t_wfr)) - endif - qstar (i) = rqi * qsi + (1. - rqi) * qsw - endif - !> - higher than 10 m is considered "land" and will have higher subgrid variability - dw = dw_ocean + (dw_land - dw_ocean) * min (1., abs (hs (i, j)) / (10. * grav)) - !> - "scale - aware" subgrid variability: 100 - km as the base - hvar (i) = min (0.2, max (0.01, dw * sqrt (sqrt (area (i, j)) / 100.e3))) - - ! ----------------------------------------------------------------------- - !> - calculate partial cloudiness by pdf; - !! assuming subgrid linear distribution in horizontal; this is effectively a smoother for the - !! binary cloud scheme; qa = 0.5 if qstar (i) == qpz - ! ----------------------------------------------------------------------- - - rh = qpz (i) / qstar (i) - - ! ----------------------------------------------------------------------- - ! icloud_f = 0: bug - fixed - ! icloud_f = 1: old fvgfs gfdl) mp implementation - ! icloud_f = 2: binary cloud scheme (0 / 1) - ! ----------------------------------------------------------------------- - - if (rh > 0.75 .and. qpz (i) > 1.e-8) then - dq = hvar (i) * qpz (i) - q_plus = qpz (i) + dq - q_minus = qpz (i) - dq - if (icloud_f == 2) then - if (qpz (i) > qstar (i)) then - qa (i, j) = 1. - elseif (qstar (i) < q_plus .and. q_cond (i) > 1.e-8) then - qa (i, j) = ((q_plus - qstar (i)) / dq) ** 2 - qa (i, j) = min (1., qa (i, j)) - else - qa (i, j) = 0. - endif - else - if (qstar (i) < q_minus) then - qa (i, j) = 1. - else - if (qstar (i) < q_plus) then - if (icloud_f == 0) then - qa (i, j) = (q_plus - qstar (i)) / (dq + dq) - else - qa (i, j) = (q_plus - qstar (i)) / (2. * dq * (1. - q_cond (i))) - endif - else - qa (i, j) = 0. - endif - ! impose minimum cloudiness if substantial q_cond (i) exist - if (q_cond (i) > 1.e-8) then - qa (i, j) = max (cld_min, qa (i, j)) - endif - qa (i, j) = min (1., qa (i, j)) - endif - endif - else - qa (i, j) = 0. - endif - - enddo - - endif - - enddo ! end j loop - -end subroutine fv_sat_adj_work -!> @} - -! ======================================================================= -!>\ingroup fast_sat_adj -!>\brief the function 'wqs1' computes the -!! saturated specific humidity for table ii. -! ======================================================================= -real(kind=kind_dyn) function wqs1 (ta, den) - - implicit none - - ! pure water phase; universal dry / moist formular using air density - ! input "den" can be either dry or moist air density - - real(kind=kind_dyn), intent (in) :: ta, den - - real(kind=kind_dyn) :: es, ap1, tmin - - integer :: it - - tmin = tice - 160. - ap1 = 10. * dim (ta, tmin) + 1. - ap1 = min (2621., ap1) - it = ap1 - es = tablew (it) + (ap1 - it) * desw (it) - wqs1 = es / (rvgas * ta * den) - -end function wqs1 - -! ======================================================================= -!>\ingroup fast_sat_adj -!>\brief the function 'wqs1' computes the saturated specific humidity -!! for table iii -! ======================================================================= -real(kind=kind_dyn) function iqs1 (ta, den) - - implicit none - - ! water - ice phase; universal dry / moist formular using air density - ! input "den" can be either dry or moist air density - - real(kind=kind_dyn), intent (in) :: ta, den - - real(kind=kind_dyn) :: es, ap1, tmin - - integer :: it - - tmin = tice - 160. - ap1 = 10. * dim (ta, tmin) + 1. - ap1 = min (2621., ap1) - it = ap1 - es = table2 (it) + (ap1 - it) * des2 (it) - iqs1 = es / (rvgas * ta * den) - -end function iqs1 - -! ======================================================================= -!>\ingroup fast_sat_adj -!>\brief The function 'wqs2'computes the gradient of saturated specific -!! humidity for table ii -! ======================================================================= -real(kind=kind_dyn) function wqs2 (ta, den, dqdt) - - implicit none - - ! pure water phase; universal dry / moist formular using air density - ! input "den" can be either dry or moist air density - - real(kind=kind_dyn), intent (in) :: ta, den - - real(kind=kind_dyn), intent (out) :: dqdt - - real(kind=kind_dyn) :: es, ap1, tmin - - integer :: it - - tmin = tice - 160. - ap1 = 10. * dim (ta, tmin) + 1. - ap1 = min (2621., ap1) - it = ap1 - es = tablew (it) + (ap1 - it) * desw (it) - wqs2 = es / (rvgas * ta * den) - it = ap1 - 0.5 - ! finite diff, del_t = 0.1: - dqdt = 10. * (desw (it) + (ap1 - it) * (desw (it + 1) - desw (it))) / (rvgas * ta * den) - -end function wqs2 - -! ======================================================================= -!>\ingroup fast_sat_adj -!>\brief The function wqs2_vect computes the gradient of saturated -!! specific humidity for table ii. -!! It is the same as "wqs2", but written as vector function. -! ======================================================================= -subroutine wqs2_vect (is, ie, ta, den, wqsat, dqdt) - - implicit none - - ! pure water phase; universal dry / moist formular using air density - ! input "den" can be either dry or moist air density - - integer, intent (in) :: is, ie - - real(kind=kind_dyn), intent (in), dimension (:) :: ta, den - - real(kind=kind_dyn), intent (out), dimension (:) :: wqsat, dqdt - - real(kind=kind_dyn) :: es, ap1, tmin - - integer :: i, it - - tmin = tice - 160. - - do i = is, ie - ap1 = 10. * dim (ta (i), tmin) + 1. - ap1 = min (2621., ap1) - it = ap1 - es = tablew (it) + (ap1 - it) * desw (it) - wqsat (i) = es / (rvgas * ta (i) * den (i)) - it = ap1 - 0.5 - ! finite diff, del_t = 0.1: - dqdt (i) = 10. * (desw (it) + (ap1 - it) * (desw (it + 1) - desw (it))) / (rvgas * ta (i) * den (i)) - enddo - -end subroutine wqs2_vect - -! ======================================================================= -!>\ingroup fast_sat_adj -!>\brief The function 'iqs2' computes the gradient of saturated specific -!! humidity for table iii. -! ======================================================================= -real(kind=kind_dyn) function iqs2 (ta, den, dqdt) - - implicit none - - ! water - ice phase; universal dry / moist formular using air density - ! input "den" can be either dry or moist air density - - real(kind=kind_dyn), intent (in) :: ta, den - - real(kind=kind_dyn), intent (out) :: dqdt - - real(kind=kind_dyn) :: es, ap1, tmin - - integer :: it - - tmin = tice - 160. - ap1 = 10. * dim (ta, tmin) + 1. - ap1 = min (2621., ap1) - it = ap1 - es = table2 (it) + (ap1 - it) * des2 (it) - iqs2 = es / (rvgas * ta * den) - it = ap1 - 0.5 - ! finite diff, del_t = 0.1: - dqdt = 10. * (des2 (it) + (ap1 - it) * (des2 (it + 1) - des2 (it))) / (rvgas * ta * den) - -end function iqs2 - -! ======================================================================= -!>\ingroup fast_sat_adj -!! saturation water vapor pressure table i -! 3 - phase table -! ======================================================================= - -subroutine qs_table (n) - - implicit none - - integer, intent (in) :: n - real (kind_grid) :: delt = 0.1 - real (kind_grid) :: tmin, tem, esh20 - real (kind_grid) :: wice, wh2o, fac0, fac1, fac2 - real (kind_grid) :: esupc (200) - integer :: i - - tmin = tice - 160. - - ! ----------------------------------------------------------------------- - ! compute es over ice between - 160 deg c and 0 deg c. - ! ----------------------------------------------------------------------- - - do i = 1, 1600 - tem = tmin + delt * real (i - 1) - fac0 = (tem - tice) / (tem * tice) - fac1 = fac0 * li2 - fac2 = (d2ice * log (tem / tice) + fac1) / rvgas - table (i) = e00 * exp (fac2) - enddo - - ! ----------------------------------------------------------------------- - ! compute es over water between - 20 deg c and 102 deg c. - ! ----------------------------------------------------------------------- - - do i = 1, 1221 - tem = 253.16 + delt * real (i - 1) - fac0 = (tem - tice) / (tem * tice) - fac1 = fac0 * lv0 - fac2 = (dc_vap * log (tem / tice) + fac1) / rvgas - esh20 = e00 * exp (fac2) - if (i <= 200) then - esupc (i) = esh20 - else - table (i + 1400) = esh20 - endif - enddo - - ! ----------------------------------------------------------------------- - ! derive blended es over ice and supercooled water between - 20 deg c and 0 deg c - ! ----------------------------------------------------------------------- - - do i = 1, 200 - tem = 253.16 + delt * real (i - 1) - wice = 0.05 * (tice - tem) - wh2o = 0.05 * (tem - 253.16) - table (i + 1400) = wice * table (i + 1400) + wh2o * esupc (i) - enddo - -end subroutine qs_table - -! ======================================================================= -!>\ingroup fast_sat_adj -!! saturation water vapor pressure table ii. -! 1 - phase table -! ======================================================================= - -subroutine qs_tablew (n) - - implicit none - - integer, intent (in) :: n - real (kind_grid) :: delt = 0.1 - real (kind_grid) :: tmin, tem, fac0, fac1, fac2 - integer :: i - - tmin = tice - 160. - - ! ----------------------------------------------------------------------- - ! compute es over water - ! ----------------------------------------------------------------------- - - do i = 1, n - tem = tmin + delt * real (i - 1) - fac0 = (tem - tice) / (tem * tice) - fac1 = fac0 * lv0 - fac2 = (dc_vap * log (tem / tice) + fac1) / rvgas - tablew (i) = e00 * exp (fac2) - enddo - -end subroutine qs_tablew - -! ======================================================================= -!>\ingroup fast_sat_adj -!! saturation water vapor pressure table iii. -! 2 - phase table -! ======================================================================= - -subroutine qs_table2 (n) - - implicit none - - integer, intent (in) :: n - real (kind_grid) :: delt = 0.1 - real (kind_grid) :: tmin, tem0, tem1, fac0, fac1, fac2 - integer :: i, i0, i1 - - tmin = tice - 160. - - do i = 1, n - tem0 = tmin + delt * real (i - 1) - fac0 = (tem0 - tice) / (tem0 * tice) - if (i <= 1600) then - ! ----------------------------------------------------------------------- - ! compute es over ice between - 160 deg c and 0 deg c. - ! ----------------------------------------------------------------------- - fac1 = fac0 * li2 - fac2 = (d2ice * log (tem0 / tice) + fac1) / rvgas - else - ! ----------------------------------------------------------------------- - ! compute es over water between 0 deg c and 102 deg c. - ! ----------------------------------------------------------------------- - fac1 = fac0 * lv0 - fac2 = (dc_vap * log (tem0 / tice) + fac1) / rvgas - endif - table2 (i) = e00 * exp (fac2) - enddo - - ! ----------------------------------------------------------------------- - ! smoother around 0 deg c - ! ----------------------------------------------------------------------- - - i0 = 1600 - i1 = 1601 - tem0 = 0.25 * (table2 (i0 - 1) + 2. * table (i0) + table2 (i0 + 1)) - tem1 = 0.25 * (table2 (i1 - 1) + 2. * table (i1) + table2 (i1 + 1)) - table2 (i0) = tem0 - table2 (i1) = tem1 - -end subroutine qs_table2 - -end module fv_sat_adj -!> @} diff --git a/physics/gitdiff b/physics/gitdiff deleted file mode 100644 index cba1236f2..000000000 --- a/physics/gitdiff +++ /dev/null @@ -1,4397 +0,0 @@ -diff --git a/physics/GFS_DCNV_generic.F90 b/physics/GFS_DCNV_generic.F90 -index bfe97bc..def1e7f 100644 ---- a/physics/GFS_DCNV_generic.F90 -+++ b/physics/GFS_DCNV_generic.F90 -@@ -26,14 +26,14 @@ - - integer, intent(in) :: im, levs - logical, intent(in) :: ldiag3d, qdiag3d, do_cnvgwd, cplchm -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0 -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gv0 -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0 -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: gq0_water_vapor -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_v -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_t -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_qv -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gu0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gv0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: gq0_water_vapor -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_u -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_v -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_qv - ! dqdti only allocated if cplchm is .true. - real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti - character(len=*), intent(out) :: errmsg -@@ -107,18 +107,18 @@ - logical, intent(in) :: flag_for_dcnv_generic_tend - - real(kind=kind_phys), intent(in) :: frain, dtf -- real(kind=kind_phys), dimension(im), intent(in) :: rain1, cld1d -- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor -- real(kind=kind_phys), dimension(im,levs), intent(in) :: ud_mf, dd_mf, dt_mf -+ real(kind=kind_phys), dimension(:), intent(in) :: rain1, cld1d -+ real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t, save_qv -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0, gq0_water_vapor -+ real(kind=kind_phys), dimension(:,:), intent(in) :: ud_mf, dd_mf, dt_mf - real(kind=kind_phys), intent(in) :: con_g - integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d - -- real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cldwrk -+ real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cldwrk - ! dt3dt, dq3dt, du3dt, dv3dt upd_mf, dwn_mf, det_mf only allocated if ldiag3d == .true. - real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt, dq3dt, du3dt, dv3dt - real(kind=kind_phys), dimension(:,:), intent(inout) :: upd_mf, dwn_mf, det_mf -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: cnvw, cnvc -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: cnvw, cnvc - ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. - ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, - ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays -diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 -index 09c9691..a6c6dd4 100644 ---- a/physics/GFS_GWD_generic.F90 -+++ b/physics/GFS_GWD_generic.F90 -@@ -30,12 +30,12 @@ contains - real(kind=kind_phys), intent(in) :: mntvar(im,nmtvr) - - real(kind=kind_phys), intent(out) :: & -- & oc(im), oa4(im,4), clx(im,4), & -+ & oc(:), oa4(:,:), clx(:,:), & - & varss(:), ocss(:), oa4ss(:,:), clxss(:,:), & -- & theta(im), sigma(im), gamma(im), elvmax(im) -+ & theta(:), sigma(:), gamma(:), elvmax(:) - - logical, intent(in) :: lssav, ldiag3d, flag_for_gwd_generic_tend -- real(kind=kind_phys), intent(in) :: dtdt(im,levs), dudt(im,levs), dvdt(im,levs) -+ real(kind=kind_phys), intent(in) :: dtdt(:,:), dudt(:,:), dvdt(:,:) - ! dt3dt only allocated only if ldiag3d is .true. - real(kind=kind_phys), intent(inout) :: dt3dt(:,:), du3dt(:,:), dv3dt(:,:) - real(kind=kind_phys), intent(in) :: dtf -diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 -index 8810cc7..be19536 100644 ---- a/physics/GFS_MP_generic.F90 -+++ b/physics/GFS_MP_generic.F90 -@@ -23,11 +23,11 @@ - implicit none - integer, intent(in) :: im, levs, ntcw, nncl, ntrac - logical, intent(in) :: ldiag3d, qdiag3d, do_aw -- real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 - -- real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t, save_qv -+ real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -109,16 +109,16 @@ - logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm - - real(kind=kind_phys), intent(in) :: dtf, frain, con_g -- real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc -- real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc -- real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 -- real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, save_qv, del -- real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: gq0 -- -- real(kind=kind_phys), dimension(im), intent(in ) :: sr -- real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & -+ real(kind=kind_phys), dimension(:), intent(in) :: rain1, xlat, xlon, tsfc -+ real(kind=kind_phys), dimension(:), intent(inout) :: ice, snow, graupel, rainc -+ real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: rann -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0, prsl, save_t, save_qv, del -+ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 -+ -+ real(kind=kind_phys), dimension(:), intent(in ) :: sr -+ real(kind=kind_phys), dimension(:), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & - srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & - totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & - snow_cpl, pwat -@@ -128,23 +128,23 @@ - - ! Stochastic physics / surface perturbations - logical, intent(in) :: do_sppt, ca_global -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdtr -- real(kind=kind_phys), dimension(im,levs), intent(in) :: dtdtc -- real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl -- real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr -+ real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc -+ real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl -+ real(kind=kind_phys), dimension(:), intent(inout) :: dsnow_cpl - - ! Rainfall variables previous time step - integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp -- real(kind=kind_phys), dimension(im), intent(inout) :: raincprv -- real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv -- real(kind=kind_phys), dimension(im), intent(inout) :: iceprv -- real(kind=kind_phys), dimension(im), intent(inout) :: snowprv -- real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv -- real(kind=kind_phys), dimension(im), intent(inout) :: draincprv -- real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv -- real(kind=kind_phys), dimension(im), intent(inout) :: diceprv -- real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv -- real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: raincprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: iceprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: snowprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: draincprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: diceprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv -+ real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv - - real(kind=kind_phys), intent(in) :: dtp - -diff --git a/physics/GFS_PBL_generic.F90 b/physics/GFS_PBL_generic.F90 -index 357309b..95f6265 100644 ---- a/physics/GFS_PBL_generic.F90 -+++ b/physics/GFS_PBL_generic.F90 -@@ -101,11 +101,11 @@ - integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires - logical, intent(in) :: cplchm, ltaerosol, hybedmf, do_shoc, satmedmf - -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs -- real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs -- real(kind=kind_phys), dimension(im, levs, nvdiff), intent(inout) :: vdftra -- real(kind=kind_phys), dimension(im, levs), intent(out) :: save_u, save_v, save_t -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs -+ real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs -+ real(kind=kind_phys), dimension(:,:, :), intent(inout) :: vdftra -+ real(kind=kind_phys), dimension(:,:), intent(out) :: save_u, save_v, save_t -+ real(kind=kind_phys), dimension(:,:, :), intent(out) :: save_q - - ! CCPP error handling variables - character(len=*), intent(out) :: errmsg -@@ -336,8 +336,8 @@ - logical, dimension(:), intent(in) :: flag_cice - - logical, intent(in) :: flag_for_pbl_generic_tend -- real(kind=kind_phys), dimension(im, levs), intent(in) :: save_u, save_v, save_t -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: save_q -+ real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t -+ real(kind=kind_phys), dimension(:,:, :), intent(in) :: save_q - - real(kind=kind_phys), intent(in) :: dtf - real(kind=kind_phys), intent(in) :: rd, cp, fvirt, hvap -@@ -346,14 +346,14 @@ - real(kind=kind_phys), dimension(:), intent(in) :: dusfc_cice, dvsfc_cice, dtsfc_cice, dqsfc_cice, & - wind, stress_wat, hflx_wat, evap_wat, ugrs1, vgrs1 - -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs -- real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs -+ real(kind=kind_phys), dimension(:,:, :), intent(in) :: qgrs -+ real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs - -- real(kind=kind_phys), dimension(im, levs, nvdiff), intent(in) :: dvdftra -- real(kind=kind_phys), dimension(im), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu -- real(kind=kind_phys), dimension(im, levs), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw -+ real(kind=kind_phys), dimension(:,:, :), intent(in) :: dvdftra -+ real(kind=kind_phys), dimension(:), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu -+ real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw - -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: dqdt -+ real(kind=kind_phys), dimension(:,:, :), intent(inout) :: dqdt - - ! The following arrays may not be allocated, depending on certain flags (cplflx, ...). - ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, -@@ -370,7 +370,7 @@ - real(kind=kind_phys), dimension(:,:), intent(in) :: dkt - - ! From canopy heat storage - reduction factors in latent/sensible heat flux due to surface roughness -- real(kind=kind_phys), dimension(im), intent(in) :: hffac, hefac -+ real(kind=kind_phys), dimension(:), intent(in) :: hffac, hefac - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 -index ae8fac5..450f0e5 100644 ---- a/physics/GFS_SCNV_generic.F90 -+++ b/physics/GFS_SCNV_generic.F90 -@@ -23,9 +23,9 @@ - - integer, intent(in) :: im, levs - logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor -+ real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t, save_qv -+ real(kind=kind_phys), dimension(:, :), intent(inout) :: save_u, save_v, save_t, save_qv - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -@@ -84,20 +84,20 @@ - integer, intent(in) :: im, levs, nn - logical, intent(in) :: lssav, ldiag3d, qdiag3d, cplchm, flag_for_scnv_generic_tend - real(kind=kind_phys), intent(in) :: frain -- real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor -- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t, save_qv -+ real(kind=kind_phys), dimension(:, :), intent(in) :: gu0, gv0, gt0, gq0_water_vapor -+ real(kind=kind_phys), dimension(:, :), intent(in) :: save_u, save_v, save_t, save_qv - - ! dqdti, dt3dt, dq3dt, only allocated if ldiag3d == .true. - real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti - real(kind=kind_phys), dimension(:,:), intent(inout) :: du3dt, dv3dt, dt3dt, dq3dt -- real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw -+ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw - - ! Post code for SAS/SAMF - integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d - logical, intent(in) :: shcnvcw -- real(kind=kind_phys), dimension(im), intent(in) :: rain1 -- real(kind=kind_phys), dimension(im,levs), intent(in) :: cnvw, cnvc -- real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cnvprcp, cnvprcpb -+ real(kind=kind_phys), dimension(:), intent(in) :: rain1 -+ real(kind=kind_phys), dimension(:, :), intent(in) :: cnvw, cnvc -+ real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cnvprcp, cnvprcpb - ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. - ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, - ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays -diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 -index c62cc68..f5d09cd 100644 ---- a/physics/GFS_cloud_diagnostics.F90 -+++ b/physics/GFS_cloud_diagnostics.F90 -@@ -53,15 +53,15 @@ contains - lslwr ! Call LW radiation - real(kind_phys), intent(in) :: & - con_pi ! Physical constant: pi -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lat, & ! Latitude - de_lgth ! Decorrelation length -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lay, & ! Pressure at model-layer - cld_frac ! Total cloud fraction -- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lev ! Pressure at model interfaces -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - deltaZ, & ! Layer thickness (km) - cloud_overlap_param, & ! Cloud-overlap parameter - precip_overlap_param ! Precipitation overlap parameter -@@ -71,10 +71,10 @@ contains - errmsg ! Error message - integer, intent(out) :: & - errflg ! Error flag -- integer,dimension(ncol,3),intent(out) :: & -+ integer,dimension(:,:),intent(out) :: & - mbota, & ! Vertical indices for cloud tops - mtopa ! Vertical indices for cloud bases -- real(kind_phys), dimension(ncol,5), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - cldsa ! Fraction of clouds for low, middle, high, total and BL - - ! Local variables -@@ -136,7 +136,7 @@ contains - integer, intent(in) :: & - nLev, & ! Number of vertical-layers - mpi_rank -- real(kind_phys), dimension(nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - sigmainit - ! Outputs - integer, intent(out) :: & -diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 -index 0562324..3c358a2 100644 ---- a/physics/GFS_debug.F90 -+++ b/physics/GFS_debug.F90 -@@ -970,29 +970,29 @@ - integer, intent(in ) :: im - integer, intent(in ) :: kdt - integer, intent(in ) :: iter -- logical, intent(in ) :: flag_iter(im) -- logical, intent(in ) :: flag_guess(im) -+ logical, intent(in ) :: flag_iter(:) -+ logical, intent(in ) :: flag_guess(:) - logical, intent(in ) :: flag_init - logical, intent(in ) :: flag_restart - logical, intent(in ) :: frac_grid - integer, intent(in ) :: isot - integer, intent(in ) :: ivegsrc -- real(kind_phys), intent(in ) :: stype(im) -- real(kind_phys), intent(in ) :: vtype(im) -- real(kind_phys), intent(in ) :: slope(im) -- integer, intent(in ) :: soiltyp(im) -- integer, intent(in ) :: vegtype(im) -- integer, intent(in ) :: slopetyp(im) -- logical, intent(in ) :: dry(im) -- logical, intent(in ) :: icy(im) -- logical, intent(in ) :: wet(im) -- logical, intent(in ) :: lake(im) -- logical, intent(in ) :: ocean(im) -- real(kind_phys), intent(in ) :: oceanfrac(im) -- real(kind_phys), intent(in ) :: landfrac(im) -- real(kind_phys), intent(in ) :: lakefrac(im) -- real(kind_phys), intent(in ) :: slmsk(im) -- integer, intent(in ) :: islmsk(im) -+ real(kind_phys), intent(in ) :: stype(:) -+ real(kind_phys), intent(in ) :: vtype(:) -+ real(kind_phys), intent(in ) :: slope(:) -+ integer, intent(in ) :: soiltyp(:) -+ integer, intent(in ) :: vegtype(:) -+ integer, intent(in ) :: slopetyp(:) -+ logical, intent(in ) :: dry(:) -+ logical, intent(in ) :: icy(:) -+ logical, intent(in ) :: wet(:) -+ logical, intent(in ) :: lake(:) -+ logical, intent(in ) :: ocean(:) -+ real(kind_phys), intent(in ) :: oceanfrac(:) -+ real(kind_phys), intent(in ) :: landfrac(:) -+ real(kind_phys), intent(in ) :: lakefrac(:) -+ real(kind_phys), intent(in ) :: slmsk(:) -+ integer, intent(in ) :: islmsk(:) - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg - -diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 -index 7f80ca4..82cc4c8 100644 ---- a/physics/GFS_rrtmg_post.F90 -+++ b/physics/GFS_rrtmg_post.F90 -@@ -39,17 +39,17 @@ - type(GFS_coupling_type), intent(inout) :: Coupling - type(GFS_radtend_type), intent(in) :: Radtend - type(GFS_diag_type), intent(inout) :: Diag -- type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(in) :: scmpsw -+ type(cmpfsw_type), dimension(:), intent(in) :: scmpsw - - integer, intent(in) :: im, lm, ltp, kt, kb, kd, nday - real(kind=kind_phys), intent(in) :: raddt - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(in) :: aerodp -- real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(in) :: cldsa -- integer, dimension(size(Grid%xlon,1),3), intent(in) :: mbota, mtopa -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: clouds1 -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtausw -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: cldtaulw -+ real(kind=kind_phys), dimension(:,:), intent(in) :: aerodp -+ real(kind=kind_phys), dimension(:,:), intent(in) :: cldsa -+ integer, dimension(:,:), intent(in) :: mbota, mtopa -+ real(kind=kind_phys), dimension(:,:), intent(in) :: clouds1 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: cldtausw -+ real(kind=kind_phys), dimension(:,:), intent(in) :: cldtaulw - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 -index ca76955..514ea87 100644 ---- a/physics/GFS_rrtmg_pre.F90 -+++ b/physics/GFS_rrtmg_pre.F90 -@@ -95,39 +95,39 @@ - integer, intent(out) :: kd, kt, kb - - ! F-A mp scheme only -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(in) :: f_ice, & -+ real(kind=kind_phys), dimension(:, :), intent(in) :: f_ice, & - f_rain, f_rimef -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: cwm -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: flgmin -+ real(kind=kind_phys), dimension(:, :), intent(out) :: cwm -+ real(kind=kind_phys), dimension(:), intent(in) :: flgmin - real(kind=kind_phys), intent(out) :: raddt - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: delp, & -+ real(kind=kind_phys), dimension(:, :), intent(out) :: delp, & - dz, plyr, tlyr, qlyr, olyr - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+1+LTP), intent(out) :: plvl, tlvl -+ real(kind=kind_phys), dimension(:, :), intent(out) :: plvl, tlvl - -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: tsfg, tsfa -+ real(kind=kind_phys), dimension(:), intent(out) :: tsfg, tsfa - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: gasvmr_co2, & -+ real(kind=kind_phys), dimension(:, :), intent(out) :: gasvmr_co2, & - gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & - gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4, gasvmr_cfc113 - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDSW), intent(out) :: faersw1, & -+ real(kind=kind_phys), dimension(:,:,:), intent(out) :: faersw1, & - faersw2, faersw3 - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP,NBDLW), intent(out) :: faerlw1, & -+ real(kind=kind_phys), dimension(:,:,:), intent(out) :: faerlw1, & - faerlw2, faerlw3 - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),NSPC1), intent(out) :: aerodp -+ real(kind=kind_phys), dimension(:,:), intent(out) :: aerodp - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(inout) :: clouds1, & -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: clouds1, & - clouds2, clouds3, clouds4, clouds5 -- real(kind=kind_phys), dimension(size(Grid%xlon,1),lm+LTP), intent(out) :: clouds6, & -+ real(kind=kind_phys), dimension(:,:), intent(out) :: clouds6, & - clouds7, clouds8, clouds9 - -- real(kind=kind_phys), dimension(size(Grid%xlon,1),5), intent(out) :: cldsa -- integer, dimension(size(Grid%xlon,1),3), intent(out) :: mbota, mtopa -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: de_lgth, alb1d -+ real(kind=kind_phys), dimension(:,:), intent(out) :: cldsa -+ integer, dimension(:,:), intent(out) :: mbota, mtopa -+ real(kind=kind_phys), dimension(:), intent(out) :: de_lgth, alb1d - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 -index b67b22d..a11f03c 100644 ---- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 -+++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 -@@ -62,24 +62,24 @@ contains - con_g, & ! Physical constant: gravitational constant - con_rd, & ! Physical constant: gas-constant for dry air - con_epsq ! Physical constant(?): Minimum value for specific humidity -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lat ! Latitude -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - tv_lay, & ! Virtual temperature (K) - p_lay, & ! Pressure at model-layers (Pa) - effrin_cldliq, & ! Effective radius for liquid cloud-particles (microns) - effrin_cldice, & ! Effective radius for ice cloud-particles (microns) - effrin_cldrain, & ! Effective radius for rain cloud-particles (microns) - effrin_cldsnow ! Effective radius for snow cloud-particles (microns) -- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - p_lev ! Pressure at model-level interfaces (Pa) -- real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & -+ real(kind_phys), dimension(:, :, :),intent(in) :: & - tracer ! Cloud condensate amount in layer by type () - - ! Outputs -- real(kind_phys), dimension(nCol),intent(out) :: & -+ real(kind_phys), dimension(:),intent(out) :: & - de_lgth ! Decorrelation length -- real(kind_phys), dimension(nCol,nLev),intent(out) :: & -+ real(kind_phys), dimension(:, :),intent(out) :: & - cld_frac, & ! Total cloud fraction - cld_lwp, & ! Cloud liquid water path - cld_reliq, & ! Cloud liquid effective radius -diff --git a/physics/GFS_rrtmgp_lw_post.F90 b/physics/GFS_rrtmgp_lw_post.F90 -index a6b37ac..b508996 100644 ---- a/physics/GFS_rrtmgp_lw_post.F90 -+++ b/physics/GFS_rrtmgp_lw_post.F90 -@@ -39,11 +39,11 @@ contains - save_diag ! Output radiation diagnostics? - real(kind_phys), intent(in) :: & - fhlwr ! Frequency for SW radiation -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - tsfa ! Lowest model layer air temperature for radiation (K) -- real(kind_phys), dimension(nCol, nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - t_lay ! Temperature @ model layer centers (K) -- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - p_lev, & ! Pressure @ model layer-interfaces (Pa) - fluxlwUP_allsky, & ! RRTMGP longwave all-sky flux (W/m2) - fluxlwDOWN_allsky, & ! RRTMGP longwave all-sky flux (W/m2) -@@ -51,26 +51,26 @@ contains - fluxlwDOWN_clrsky ! RRTMGP longwave clear-sky flux (W/m2) - real(kind_phys), intent(in) :: & - raddt ! Radiation time step -- real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - aerodp ! Vertical integrated optical depth for various aerosol species -- real(kind_phys), dimension(nCol,5), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - cldsa ! Fraction of clouds for low, middle, high, total and BL -- integer, dimension(nCol,3), intent(in) ::& -+ integer, dimension(:, :), intent(in) ::& - mbota, & ! vertical indices for low, middle and high cloud tops - mtopa ! vertical indices for low, middle and high cloud bases -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - cld_frac, & ! Total cloud fraction in each layer - cldtaulw ! approx 10.mu band layer cloud optical depth - - ! Outputs (mandatory) -- real(kind_phys), dimension(nCol), intent(out) :: & -+ real(kind_phys), dimension(:), intent(out) :: & - sfcdlw, & ! Total sky sfc downward lw flux (W/m2) - tsflw ! surface air temp during lw calculation (K) -- type(sfcflw_type), dimension(nCol), intent(out) :: & -+ type(sfcflw_type), dimension(:), intent(out) :: & - sfcflw ! LW radiation fluxes at sfc -- real(kind_phys), dimension(nCol,nLev), intent(out) :: & -+ real(kind_phys), dimension(:, :), intent(out) :: & - htrlw ! LW all-sky heating rate -- type(topflw_type), dimension(nCol), intent(out) :: & -+ type(topflw_type), dimension(:), intent(out) :: & - topflw ! lw_fluxes_top_atmosphere - character(len=*), intent(out) :: & - errmsg -@@ -78,13 +78,13 @@ contains - errflg - - ! Outputs (optional) -- type(proflw_type), dimension(nCol, nLev+1), optional, intent(out) :: & -+ type(proflw_type), dimension(:, :), optional, intent(out) :: & - flxprf_lw ! 2D radiative fluxes, components: - ! upfxc - total sky upward flux (W/m2) - ! dnfxc - total sky dnward flux (W/m2) - ! upfx0 - clear sky upward flux (W/m2) - ! dnfx0 - clear sky dnward flux (W/m2) -- real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & -+ real(kind_phys),dimension(:, :),intent(out),optional :: & - htrlwc ! Longwave clear-sky heating-rate (K/sec) - - ! Local variables -diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 -index 0e5d65f..7d66339 100644 ---- a/physics/GFS_rrtmgp_pre.F90 -+++ b/physics/GFS_rrtmgp_pre.F90 -@@ -52,7 +52,7 @@ contains - character(len=*), intent(in) :: & - active_gases ! List of active gases from namelist. - ! Outputs -- character(len=*),dimension(nGases), intent(out) :: & -+ character(len=*),dimension(:), intent(out) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - character(len=*), intent(out) :: & - errmsg ! Error message -@@ -159,7 +159,7 @@ contains - logical, intent(in) :: & - lsswr, & ! Call SW radiation? - lslwr ! Call LW radiation -- character(len=*),dimension(nGases), intent(in) :: & -+ character(len=*),dimension(:), intent(in) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - real(kind_phys), intent(in) :: & - fhswr, & ! Frequency of SW radiation call. -@@ -169,11 +169,11 @@ contains - con_epsm1, & ! Physical constant: Epsilon (Rd/Rv) minus one - con_fvirt, & ! Physical constant: Inverse of epsilon minus one - con_epsqs ! Physical constant: Minimum saturation mixing-ratio (kg/kg) -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - xlon, & ! Longitude - xlat, & ! Latitude - tsfc ! Surface skin temperature (K) -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - prsl, & ! Pressure at model-layer centers (Pa) - tgrs, & ! Temperature at model-layer centers (K) - prslk ! Exner function at model layer centers (1) -@@ -189,18 +189,18 @@ contains - errflg ! Error flag - real(kind_phys), intent(out) :: & - raddt ! Radiation time-step -- real(kind_phys), dimension(ncol), intent(out) :: & -+ real(kind_phys), dimension(:), intent(out) :: & - tsfg, & ! Ground temperature - tsfa ! Skin temperature -- real(kind_phys), dimension(nCol,nLev), intent(out) :: & -+ real(kind_phys), dimension(:, :), intent(out) :: & - p_lay, & ! Pressure at model-layer - t_lay, & ! Temperature at model layer - tv_lay, & ! Virtual temperature at model-layers - relhum ! Relative-humidity at model-layers -- real(kind_phys), dimension(nCol,nLev+1), intent(out) :: & -+ real(kind_phys), dimension(:, :), intent(out) :: & - p_lev, & ! Pressure at model-interface - t_lev ! Temperature at model-interface -- real(kind_phys), dimension(nCol, nLev, nTracers),intent(out) :: & -+ real(kind_phys), dimension(:, :,:),intent(out) :: & - tracer ! Array containing trace gases - type(ty_gas_concs),intent(out) :: & - gas_concentrations ! RRTMGP DDT: gas volumne mixing ratios -diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 -index 9b503e3..acc3024 100644 ---- a/physics/GFS_rrtmgp_setup.F90 -+++ b/physics/GFS_rrtmgp_setup.F90 -@@ -54,14 +54,14 @@ module GFS_rrtmgp_setup - imp_physics_zhao_carr, & ! Flag for zhao-carr scheme - imp_physics_zhao_carr_pdf, & ! Flag for zhao-carr+PDF scheme - imp_physics_mg ! Flag for MG scheme -- real(kind_phys), dimension(levr+1), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - si - integer, intent(in) :: levr, ictm, isol, ico2, iaer, ialb, iems, & - ntcw, num_p3d, ntoz, iovr_sw, iovr_lw, isubc_sw, isubc_lw, & - icliq_sw, iflip, me - logical, intent(in) :: & - crick_proof, ccnorm, norad_precip -- integer, intent(in), dimension(4) :: & -+ integer, intent(in), dimension(:) :: & - idate - ! Outputs - character(len=*), intent(out) :: errmsg -diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 -index 0d3991f..8fdf3fa 100644 ---- a/physics/GFS_rrtmgp_sw_post.F90 -+++ b/physics/GFS_rrtmgp_sw_post.F90 -@@ -37,7 +37,7 @@ contains - nCol, & ! Horizontal loop extent - nLev, & ! Number of vertical layers - nDay ! Number of daylit columns -- integer, intent(in), dimension(nday) :: & -+ integer, intent(in), dimension(:) :: & - idxday ! Index array for daytime points - logical, intent(in) :: & - lsswr, & ! Call SW radiation? -@@ -47,37 +47,37 @@ contains - sw_gas_props ! DDT containing SW spectral information - real(kind_phys), intent(in) :: & - fhswr ! Frequency for SW radiation -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(ncol), intent(in) :: & - t_lay, & ! Temperature at model layer centers (K) - coszen, & ! Cosine(SZA) - coszdg ! Cosine(SZA), daytime -- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - p_lev ! Pressure @ model layer-interfaces (Pa) -- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - sfc_alb_nir_dir, & ! Surface albedo (direct) - sfc_alb_nir_dif, & ! Surface albedo (diffuse) - sfc_alb_uvvis_dir, & ! Surface albedo (direct) - sfc_alb_uvvis_dif ! Surface albedo (diffuse) -- real(kind_phys), dimension(nCol, nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - fluxswUP_allsky, & ! SW All-sky flux (W/m2) - fluxswDOWN_allsky, & ! SW All-sky flux (W/m2) - fluxswUP_clrsky, & ! SW Clear-sky flux (W/m2) - fluxswDOWN_clrsky ! SW All-sky flux (W/m2) - real(kind_phys), intent(in) :: & - raddt ! Radiation time step -- real(kind_phys), dimension(nCol,NSPC1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - aerodp ! Vertical integrated optical depth for various aerosol species -- real(kind_phys), dimension(nCol,5), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - cldsa ! Fraction of clouds for low, middle, high, total and BL -- integer, dimension(nCol,3), intent(in) ::& -+ integer, dimension(:, :), intent(in) ::& - mbota, & ! vertical indices for low, middle and high cloud tops - mtopa ! vertical indices for low, middle and high cloud bases -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - cld_frac, & ! Total cloud fraction in each layer - cldtausw ! approx .55mu band layer cloud optical depth - - ! Inputs (optional) -- type(cmpfsw_type), dimension(nCol), intent(in), optional :: & -+ type(cmpfsw_type), dimension(:), intent(in), optional :: & - scmpsw ! 2D surface fluxes, components: - ! uvbfc - total sky downward uv-b flux at (W/m2) - ! uvbf0 - clear sky downward uv-b flux at (W/m2) -@@ -87,7 +87,7 @@ contains - ! visdf - downward uv+vis diffused flux (W/m2) - - ! Outputs (mandatory) -- real(kind_phys), dimension(nCol), intent(out) :: & -+ real(kind_phys), dimension(:), intent(out) :: & - nirbmdi, & ! sfc nir beam sw downward flux (W/m2) - nirdfdi, & ! sfc nir diff sw downward flux (W/m2) - visbmdi, & ! sfc uv+vis beam sw downward flux (W/m2) -@@ -98,11 +98,11 @@ contains - visdfui, & ! sfc uv+vis diff sw upward flux (W/m2) - sfcnsw, & ! total sky sfc netsw flx into ground - sfcdsw ! -- real(kind_phys), dimension(nCol,nLev), intent(out) :: & -+ real(kind_phys), dimension(:, :), intent(out) :: & - htrsw ! SW all-sky heating rate -- type(sfcfsw_type), dimension(nCol), intent(out) :: & -+ type(sfcfsw_type), dimension(:), intent(out) :: & - sfcfsw ! sw radiation fluxes at sfc -- type(topfsw_type), dimension(nCol), intent(out) :: & -+ type(topfsw_type), dimension(:), intent(out) :: & - topfsw ! sw_fluxes_top_atmosphere - character(len=*), intent(out) :: & - errmsg -@@ -110,13 +110,13 @@ contains - errflg - - ! Outputs (optional) -- type(profsw_type), dimension(nCol, nLev), intent(out), optional :: & -+ type(profsw_type), dimension(:, :), intent(out), optional :: & - flxprf_sw ! 2D radiative fluxes, components: - ! upfxc - total sky upward flux (W/m2) - ! dnfxc - total sky dnward flux (W/m2) - ! upfx0 - clear sky upward flux (W/m2) - ! dnfx0 - clear sky dnward flux (W/m2) -- real(kind_phys),dimension(nCol, nLev),intent(out),optional :: & -+ real(kind_phys),dimension(:, :),intent(out),optional :: & - htrswc ! Clear-sky heating rate (K/s) - - ! Local variables -diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 -index c4208d8..5c741a7 100644 ---- a/physics/GFS_rrtmgp_sw_pre.F90 -+++ b/physics/GFS_rrtmgp_sw_pre.F90 -@@ -45,9 +45,9 @@ contains - do_sfcperts - real(kind_phys), intent(in) :: & - solhr ! Time in hours after 00z at the current timestep -- real(kind_phys), dimension(5), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - pertalb ! Magnitude of surface albedo perturbation (frac) -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lsmask, & ! Landmask: sea/land/ice=0/1/2 - lon, & ! Longitude - coslat, & ! Cosine(latitude) -@@ -66,13 +66,13 @@ contains - facwf, & ! Fractional coverage with weak cosz dependency (frac) - fice, & ! Ice fraction over open water (frac) - tisfc ! Sea ice surface skin temperature (K) -- real(kind_phys), dimension(nCol,nsfcpert), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - sfc_wts ! Weights for stochastic surface physics perturbation () -- real(kind_phys), dimension(nCol,nLev),intent(in) :: & -+ real(kind_phys), dimension(:, :),intent(in) :: & - p_lay, & ! Layer pressure - tv_lay, & ! Layer virtual-temperature - relhum ! Layer relative-humidity -- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & -+ real(kind_phys), dimension(:, :),intent(in) :: & - p_lev ! Pressure @ layer interfaces (Pa) - type(ty_gas_optics_rrtmgp),intent(in) :: & - sw_gas_props ! RRTMGP DDT: spectral information for SW calculation -@@ -80,14 +80,14 @@ contains - ! Outputs - integer, intent(out) :: & - nday ! Number of daylit points -- integer, dimension(ncol), intent(out) :: & -+ integer, dimension(:), intent(out) :: & - idxday ! Indices for daylit points -- real(kind_phys), dimension(ncol), intent(out) :: & -+ real(kind_phys), dimension(:), intent(out) :: & - alb1d, & ! Surface albedo pertubation - coszen, & ! Cosine of SZA - coszdg, & ! Cosine of SZA, daytime - sfc_alb_dif ! Mean surface diffused (nIR+uvvis) sw albedo -- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(out) :: & -+ real(kind_phys), dimension(:, :), intent(out) :: & - sfc_alb_nir_dir, & ! Surface albedo (direct) - sfc_alb_nir_dif, & ! Surface albedo (diffuse) - sfc_alb_uvvis_dir, & ! Surface albedo (direct) -diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 -index ac9fb74..0be3be7 100644 ---- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 -+++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 -@@ -59,10 +59,10 @@ contains - con_ttp, & ! Triple point temperature of water (K) - con_rd, & ! Ideal gas constant for dry air (J/kg/K) - con_pi ! Pi -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lsmask, & ! Land/Sea mask - lat ! Latitude -- real(kind_phys), dimension(nCol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - tv_lay, & ! Virtual temperature (K) - p_lay, & ! Pressure at model-layers (Pa) - t_lay, & ! Temperature at model-layers (K) -@@ -73,15 +73,15 @@ contains - effrin_cldsnow, & ! Effective radius for snow cloud-particles (microns) - shoc_sgs_cldfrac, & ! Subgrid-scale cloud fraction from the SHOC scheme - cncvw ! Convective cloud water mixing ratio (kg/kg) -- real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:, :), intent(in) :: & - p_lev ! Pressure at model-level interfaces (Pa) -- real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & -+ real(kind_phys), dimension(:, :, :),intent(in) :: & - tracer ! Cloud condensate amount in layer by type () - - ! Outputs -- real(kind_phys), dimension(nCol),intent(out) :: & -+ real(kind_phys), dimension(:),intent(out) :: & - de_lgth ! Decorrelation length -- real(kind_phys), dimension(nCol,nLev),intent(out) :: & -+ real(kind_phys), dimension(:, :),intent(out) :: & - cld_frac, & ! Total cloud fraction - cld_lwp, & ! Cloud liquid water path - cld_reliq, & ! Cloud liquid effective radius -diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 -index 9b4533c..ce3060c 100644 ---- a/physics/GFS_stochastics.F90 -+++ b/physics/GFS_stochastics.F90 -@@ -50,7 +50,7 @@ - logical, intent(in) :: use_zmtnblck - logical, intent(in) :: do_shum - logical, intent(in) :: do_skeb -- real(kind_phys), dimension(1:im), intent(in) :: zmtnblck -+ real(kind_phys), dimension(:), intent(in) :: zmtnblck - ! sppt_wts only allocated if do_sppt == .true. - real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts - ! skebu_wts, skebv_wts only allocated if do_skeb == .true. -@@ -59,28 +59,28 @@ - ! shum_wts only allocated if do_shum == .true. - real(kind_phys), dimension(:,:), intent(in) :: shum_wts - ! inverse/flipped weights are always allocated -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: sppt_wts_inv -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebu_wts_inv -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebv_wts_inv -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: shum_wts_inv -- real(kind_phys), dimension(1:im,1:km), intent(in) :: diss_est -- real(kind_phys), dimension(1:im,1:km), intent(in) :: ugrs -- real(kind_phys), dimension(1:im,1:km), intent(in) :: vgrs -- real(kind_phys), dimension(1:im,1:km), intent(in) :: tgrs -- real(kind_phys), dimension(1:im,1:km), intent(in) :: qgrs -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gu0 -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gv0 -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gt0 -- real(kind_phys), dimension(1:im,1:km), intent(inout) :: gq0 -+ real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts_inv -+ real(kind_phys), dimension(:,:), intent(inout) :: skebu_wts_inv -+ real(kind_phys), dimension(:,:), intent(inout) :: skebv_wts_inv -+ real(kind_phys), dimension(:,:), intent(inout) :: shum_wts_inv -+ real(kind_phys), dimension(:,:), intent(in) :: diss_est -+ real(kind_phys), dimension(:,:), intent(in) :: ugrs -+ real(kind_phys), dimension(:,:), intent(in) :: vgrs -+ real(kind_phys), dimension(:,:), intent(in) :: tgrs -+ real(kind_phys), dimension(:,:), intent(in) :: qgrs -+ real(kind_phys), dimension(:,:), intent(inout) :: gu0 -+ real(kind_phys), dimension(:,:), intent(inout) :: gv0 -+ real(kind_phys), dimension(:,:), intent(inout) :: gt0 -+ real(kind_phys), dimension(:,:), intent(inout) :: gq0 - ! dtdtr only allocated if do_sppt == .true. - real(kind_phys), dimension(:,:), intent(in) :: dtdtr -- real(kind_phys), dimension(1:im), intent(in) :: rain -- real(kind_phys), dimension(1:im), intent(in) :: rainc -- real(kind_phys), dimension(1:im), intent(inout) :: tprcp -- real(kind_phys), dimension(1:im), intent(inout) :: totprcp -- real(kind_phys), dimension(1:im), intent(inout) :: cnvprcp -- real(kind_phys), dimension(1:im), intent(inout) :: totprcpb -- real(kind_phys), dimension(1:im), intent(inout) :: cnvprcpb -+ real(kind_phys), dimension(:), intent(in) :: rain -+ real(kind_phys), dimension(:), intent(in) :: rainc -+ real(kind_phys), dimension(:), intent(inout) :: tprcp -+ real(kind_phys), dimension(:), intent(inout) :: totprcp -+ real(kind_phys), dimension(:), intent(inout) :: cnvprcp -+ real(kind_phys), dimension(:), intent(inout) :: totprcpb -+ real(kind_phys), dimension(:), intent(inout) :: cnvprcpb - logical, intent(in) :: cplflx - ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. - real(kind_phys), dimension(:), intent(inout) :: rain_cpl -@@ -88,9 +88,9 @@ - ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. - real(kind_phys), dimension(:), intent(in) :: drain_cpl - real(kind_phys), dimension(:), intent(in) :: dsnow_cpl -- real(kind_phys), dimension(1:km), intent(in) :: si -- real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca -- real(kind_phys), dimension(1:im), intent(in) :: ca1 -+ real(kind_phys), dimension(:), intent(in) :: si -+ real(kind_phys), dimension(:), intent(inout) :: vfact_ca -+ real(kind_phys), dimension(:), intent(in) :: ca1 - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 -index 263e316..4214dbf 100644 ---- a/physics/GFS_suite_interstitial.F90 -+++ b/physics/GFS_suite_interstitial.F90 -@@ -94,12 +94,12 @@ - ! interface variables - integer, intent(in) :: im, levs, ntrac - real(kind=kind_phys), intent(in) :: dtf, dtp, dxmin, dxinv -- real(kind=kind_phys), intent(in), dimension(im) :: slmsk, area, pgr -+ real(kind=kind_phys), intent(in), dimension(:) :: slmsk, area, pgr - -- integer, intent(out), dimension(im) :: islmsk -- real(kind=kind_phys), intent(out), dimension(im) :: work1, work2, psurf -- real(kind=kind_phys), intent(out), dimension(im,levs) :: dudt, dvdt, dtdt, dtdtc -- real(kind=kind_phys), intent(out), dimension(im,levs,ntrac) :: dqdt -+ integer, intent(out), dimension(:) :: islmsk -+ real(kind=kind_phys), intent(out), dimension(:) :: work1, work2, psurf -+ real(kind=kind_phys), intent(out), dimension(:,:) :: dudt, dvdt, dtdt, dtdtc -+ real(kind=kind_phys), intent(out), dimension(:,:,:) :: dqdt - real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -173,34 +173,34 @@ - logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid - real(kind=kind_phys), intent(in ) :: dtf, cp, hvap - -- logical, intent(in ), dimension(im) :: flag_cice -- real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm -- real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 -- real(kind=kind_phys), intent(in ), dimension(im) :: cice -- real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk -- real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi -- real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd -- integer, intent(inout), dimension(im) :: kinver -- real(kind=kind_phys), intent(inout), dimension(im) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r -- real(kind=kind_phys), intent(in ), dimension(im) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat -- real(kind=kind_phys), intent( out), dimension(im) :: adjsfculw -+ logical, intent(in ), dimension(:) :: flag_cice -+ real(kind=kind_phys), intent(in ), dimension(:) :: ctei_rm -+ real(kind=kind_phys), intent(in ), dimension(:) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 -+ real(kind=kind_phys), intent(in ), dimension(:) :: cice -+ real(kind=kind_phys), intent(in ), dimension(:, :) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk -+ real(kind=kind_phys), intent(in ), dimension(:, :) :: prsi -+ real(kind=kind_phys), intent(in ), dimension(:, :, :) :: lwhd -+ integer, intent(inout), dimension(:) :: kinver -+ real(kind=kind_phys), intent(inout), dimension(:) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r -+ real(kind=kind_phys), intent(in ), dimension(:) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat -+ real(kind=kind_phys), intent( out), dimension(:) :: adjsfculw - - ! RRTMGP - logical, intent(in ) :: & - use_GP_jacobian ! Use RRTMGP LW Jacobian of upwelling to adjust the surface flux? -- real(kind=kind_phys), intent(in ), dimension(im) :: & -+ real(kind=kind_phys), intent(in ), dimension(:) :: & - skt ! Skin temperature -- real(kind=kind_phys), intent(inout), dimension(im) :: & -+ real(kind=kind_phys), intent(inout), dimension(:) :: & - sktp1r ! Skin temperature at previous timestep -- real(kind=kind_phys), intent(in ), dimension(im,levs+1), optional :: & -+ real(kind=kind_phys), intent(in ), dimension(:,:), optional :: & - fluxlwUP, & ! Upwelling LW flux (W/m2) - fluxlwUP_jac ! Jacobian of upwelling LW flux (W/m2/K) - - ! These arrays are only allocated if ldiag3d is .true. - real(kind=kind_phys), intent(inout), dimension(:,:) :: dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp - -- logical, intent(in ), dimension(im) :: dry, icy, wet -- real(kind=kind_phys), intent(in ), dimension(im) :: frland -+ logical, intent(in ), dimension(:) :: dry, icy, wet -+ real(kind=kind_phys), intent(in ), dimension(:) :: frland - real(kind=kind_phys), intent(in ) :: huge - - character(len=*), intent(out) :: errmsg -@@ -402,10 +402,10 @@ - integer, intent(in) :: im - integer, intent(in) :: levs - integer, intent(in) :: ntrac -- real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs -- real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs -+ real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 -+ real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -451,12 +451,12 @@ - integer, intent(in) :: ntrac - real(kind=kind_phys), intent(in) :: dtp - -- real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs -- real(kind=kind_phys), dimension(im,levs), intent(in) :: dudt, dvdt, dtdt -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: dqdt -- real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs, ugrs, vgrs -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs -+ real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: dqdt -+ real(kind=kind_phys), dimension(:,:), intent(out) :: gt0, gu0, gv0 -+ real(kind=kind_phys), dimension(:,:,:), intent(out) :: gq0 - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -509,22 +509,22 @@ - integer, intent(in) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, & - ntsw, ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & - imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6,imp_physics_fer_hires, me -- integer, dimension(im), intent(in) :: islmsk, kpbl, kinver -+ integer, dimension(:), intent(in) :: islmsk, kpbl, kinver - logical, intent(in) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras - - real(kind=kind_phys), intent(in) :: rhcbot, rhcmax, rhcpbl, rhctop -- real(kind=kind_phys), dimension(im), intent(in) :: work1, work2 -- real(kind=kind_phys), dimension(im, levs), intent(in) :: prsl, prslk -- real(kind=kind_phys), dimension(im, levs+1), intent(in) :: prsi -- real(kind=kind_phys), dimension(im), intent(in) :: xlon, xlat -- real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 -- -- real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc -+ real(kind=kind_phys), dimension(:), intent(in) :: work1, work2 -+ real(kind=kind_phys), dimension(:, :), intent(in) :: prsl, prslk -+ real(kind=kind_phys), dimension(:, :), intent(in) :: prsi -+ real(kind=kind_phys), dimension(:), intent(in) :: xlon, xlat -+ real(kind=kind_phys), dimension(:, :), intent(in) :: gt0 -+ real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 -+ -+ real(kind=kind_phys), dimension(:, :), intent(inout) :: rhc, save_qc - ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp ! ONLY ALLOCATE FOR THOMPSON! TODO -- real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw -+ real(kind=kind_phys), dimension(:, :, :), intent(inout) :: clw - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -679,16 +679,16 @@ - logical, intent(in) :: ltaerosol, cplchm - - real(kind=kind_phys), intent(in) :: con_pi, dtf -- real(kind=kind_phys), dimension(im,levs), intent(in) :: save_qc -+ real(kind=kind_phys), dimension(:, :), intent(in) :: save_qc - ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(in) :: save_qi - -- real(kind=kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 -- real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw -- real(kind=kind_phys), dimension(im,levs), intent(in) :: prsl -+ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: gq0 -+ real(kind=kind_phys), dimension(:, :,:), intent(inout) :: clw -+ real(kind=kind_phys), dimension(:, :), intent(in) :: prsl - real(kind=kind_phys), intent(in) :: con_rd - real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp -- real(kind=kind_phys), dimension(im,levs), intent(in) :: spechum -+ real(kind=kind_phys), dimension(:, :), intent(in) :: spechum - - ! dqdti may not be allocated - real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti -@@ -828,9 +828,9 @@ - ! interface variables - integer, intent(in) :: im, levs, ntrac, ntcw, ntiw, nn - -- real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 -+ real(kind=kind_phys), dimension(:, :, :), intent(in) :: gq0 - -- real(kind=kind_phys), dimension(im, levs, nn), intent(out) :: clw -+ real(kind=kind_phys), dimension(:, :, :), intent(out) :: clw - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 -index b3000b0..ff513a1 100644 ---- a/physics/GFS_surface_composites.F90 -+++ b/physics/GFS_surface_composites.F90 -@@ -40,24 +40,24 @@ contains - ! Interface variables - integer, intent(in ) :: im, lkm - logical, intent(in ) :: frac_grid, cplflx, cplwav2atm -- logical, dimension(im), intent(inout) :: flag_cice -- logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet -+ logical, dimension(:), intent(inout) :: flag_cice -+ logical, dimension(:), intent(inout) :: dry, icy, lake, ocean, wet - real(kind=kind_phys), intent(in ) :: cimin -- real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac -- real(kind=kind_phys), dimension(im), intent(inout) :: cice -- real(kind=kind_phys), dimension(im), intent( out) :: frland -- real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx -+ real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac -+ real(kind=kind_phys), dimension(:), intent(inout) :: cice -+ real(kind=kind_phys), dimension(:), intent( out) :: frland -+ real(kind=kind_phys), dimension(:), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx - -- real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf -- real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & -+ real(kind=kind_phys), dimension(:), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf -+ real(kind=kind_phys), dimension(:), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & - tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & - tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & - qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice -- real(kind=kind_phys), dimension(im), intent( out) :: tice -+ real(kind=kind_phys), dimension(:), intent( out) :: tice - real(kind=kind_phys), intent(in ) :: tgice -- integer, dimension(im), intent(inout) :: islmsk -- real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad -- real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice -+ integer, dimension(:), intent(inout) :: islmsk -+ real(kind=kind_phys), dimension(:), intent(in ) :: semis_rad -+ real(kind=kind_phys), dimension(:), intent(inout) :: semis_wat, semis_lnd, semis_ice - real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice - - ! CCPP error handling -@@ -252,11 +252,11 @@ contains - - ! Interface variables - integer, intent(in ) :: im -- logical, dimension(im), intent(in ) :: dry, icy, wet -- real(kind=kind_phys), dimension(im), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & -+ logical, dimension(:), intent(in ) :: dry, icy, wet -+ real(kind=kind_phys), dimension(:), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & - adjsfcdsw, adjsfcnsw -- real(kind=kind_phys), dimension(im), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat -- real(kind=kind_phys), dimension(im), intent(out) :: adjsfcusw -+ real(kind=kind_phys), dimension(:), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat -+ real(kind=kind_phys), dimension(:), intent(out) :: adjsfcusw - - ! CCPP error handling - character(len=*), intent(out) :: errmsg -@@ -339,9 +339,9 @@ contains - - integer, intent(in) :: im, kice, km - logical, intent(in) :: cplflx, frac_grid, cplwav2atm -- logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy -- integer, dimension(im), intent(in) :: islmsk -- real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & -+ logical, dimension(:), intent(in) :: flag_cice, dry, wet, icy -+ integer, dimension(:), intent(in) :: islmsk -+ real(kind=kind_phys), dimension(:), intent(in) :: landfrac, lakefrac, oceanfrac, & - zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & - stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & - fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & -@@ -349,15 +349,15 @@ contains - snowd_wat, snowd_lnd, snowd_ice,tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & - hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, tsfc_lnd, tsfc_ice - -- real(kind=kind_phys), dimension(im), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & -+ real(kind=kind_phys), dimension(:), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & - fh2, tsurf, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc - -- real(kind=kind_phys), dimension(im), intent(in ) :: tice ! interstitial sea ice temperature -- real(kind=kind_phys), dimension(im), intent(inout) :: hice, cice -+ real(kind=kind_phys), dimension(:), intent(in ) :: tice ! interstitial sea ice temperature -+ real(kind=kind_phys), dimension(:), intent(inout) :: hice, cice - real(kind=kind_phys), intent(in ) :: min_seaice - -- real(kind=kind_phys), dimension(im, kice), intent(in ) :: tiice -- real(kind=kind_phys), dimension(im, km), intent(inout) :: stc -+ real(kind=kind_phys), dimension(:, :), intent(in ) :: tiice -+ real(kind=kind_phys), dimension(:, :), intent(inout) :: stc - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 -index 337e4c5..d65f4ad 100644 ---- a/physics/GFS_surface_generic.F90 -+++ b/physics/GFS_surface_generic.F90 -@@ -38,51 +38,51 @@ - - ! Interface variables - integer, intent(in) :: im, levs, isot, ivegsrc -- integer, dimension(im), intent(in) :: islmsk -- integer, dimension(im), intent(inout) :: soiltyp, vegtype, slopetyp -+ integer, dimension(:), intent(in) :: islmsk -+ integer, dimension(:), intent(inout) :: soiltyp, vegtype, slopetyp - - real(kind=kind_phys), intent(in) :: con_g -- real(kind=kind_phys), dimension(im), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 -+ real(kind=kind_phys), dimension(:), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 - -- real(kind=kind_phys), dimension(im), intent(inout) :: tsfc -- real(kind=kind_phys), dimension(im,levs), intent(in) :: phil -+ real(kind=kind_phys), dimension(:), intent(inout) :: tsfc -+ real(kind=kind_phys), dimension(:,:), intent(in) :: phil - -- real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl -+ real(kind=kind_phys), dimension(:), intent(inout) :: sigmaf, work3, tsurf, zlvl - - ! Stochastic physics / surface perturbations - logical, intent(in) :: do_sppt, ca_global -- real(kind=kind_phys), dimension(im,levs), intent(out) :: dtdtr -- real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl -- real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl -- real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl -- real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl -+ real(kind=kind_phys), dimension(:,:), intent(out) :: dtdtr -+ real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl -+ real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl -+ real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl -+ real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl - logical, intent(in) :: do_sfcperts - integer, intent(in) :: nsfcpert -- real(kind=kind_phys), dimension(im,nsfcpert), intent(in) :: sfc_wts -+ real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts - real(kind=kind_phys), dimension(:), intent(in) :: pertz0 - real(kind=kind_phys), dimension(:), intent(in) :: pertzt - real(kind=kind_phys), dimension(:), intent(in) :: pertshc - real(kind=kind_phys), dimension(:), intent(in) :: pertlai - real(kind=kind_phys), dimension(:), intent(in) :: pertvegf -- real(kind=kind_phys), dimension(im), intent(out) :: z01d -- real(kind=kind_phys), dimension(im), intent(out) :: zt1d -- real(kind=kind_phys), dimension(im), intent(out) :: bexp1d -- real(kind=kind_phys), dimension(im), intent(out) :: xlai1d -- real(kind=kind_phys), dimension(im), intent(out) :: vegf1d -+ real(kind=kind_phys), dimension(:), intent(out) :: z01d -+ real(kind=kind_phys), dimension(:), intent(out) :: zt1d -+ real(kind=kind_phys), dimension(:), intent(out) :: bexp1d -+ real(kind=kind_phys), dimension(:), intent(out) :: xlai1d -+ real(kind=kind_phys), dimension(:), intent(out) :: vegf1d - - logical, intent(in) :: cplflx -- real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl -- logical, dimension(im), intent(inout) :: flag_cice -- integer, dimension(im), intent(out) :: islmsk_cice -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl -+ logical, dimension(:), intent(inout) :: flag_cice -+ integer, dimension(:), intent(out) :: islmsk_cice -+ real(kind=kind_phys), dimension(:), intent(in) :: & - tisfc, tsfco, fice, hice - -- real(kind=kind_phys), dimension(im), intent(out) :: wind -- real(kind=kind_phys), dimension(im), intent(in ) :: u1, v1 -+ real(kind=kind_phys), dimension(:), intent(out) :: wind -+ real(kind=kind_phys), dimension(:), intent(in ) :: u1, v1 - ! surface wind enhancement due to convection -- real(kind=kind_phys), dimension(im), intent(inout ) :: cnvwind -+ real(kind=kind_phys), dimension(:), intent(inout ) :: cnvwind - ! -- real(kind=kind_phys), dimension(im), intent(out) :: smcwlt2, smcref2 -+ real(kind=kind_phys), dimension(:), intent(out) :: smcwlt2, smcref2 - - ! CCPP error handling - character(len=*), intent(out) :: errmsg -@@ -227,29 +227,29 @@ - - integer, intent(in) :: im - logical, intent(in) :: cplflx, cplwav, lssav -- logical, dimension(im), intent(in) :: icy, wet -+ logical, dimension(:), intent(in) :: icy, wet - real(kind=kind_phys), intent(in) :: dtf - -- real(kind=kind_phys), dimension(im), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & -+ real(kind=kind_phys), dimension(:), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & - adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & - t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf - -- real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & -+ real(kind=kind_phys), dimension(:), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & - dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & - nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & - nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & - evcwa, transa, sbsnoa, snowca, snohfa, ep - -- real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff -- real(kind=kind_phys), dimension(im), intent(in) :: drain, runof -+ real(kind=kind_phys), dimension(:), intent(inout) :: runoff, srunoff -+ real(kind=kind_phys), dimension(:), intent(in) :: drain, runof - - ! For canopy heat storage - logical, intent(in) :: lheatstrg - real(kind=kind_phys), intent(in) :: z0fac, e0fac -- real(kind=kind_phys), dimension(im), intent(in) :: zorl -- real(kind=kind_phys), dimension(im), intent(in) :: hflx, evap -- real(kind=kind_phys), dimension(im), intent(out) :: hflxq, evapq -- real(kind=kind_phys), dimension(im), intent(out) :: hffac, hefac -+ real(kind=kind_phys), dimension(:), intent(in) :: zorl -+ real(kind=kind_phys), dimension(:), intent(in) :: hflx, evap -+ real(kind=kind_phys), dimension(:), intent(out) :: hflxq, evapq -+ real(kind=kind_phys), dimension(:), intent(out) :: hffac, hefac - - ! CCPP error handling variables - character(len=*), intent(out) :: errmsg -diff --git a/physics/GFS_surface_loop_control.F90 b/physics/GFS_surface_loop_control.F90 -index c7f727d..afa3413 100644 ---- a/physics/GFS_surface_loop_control.F90 -+++ b/physics/GFS_surface_loop_control.F90 -@@ -90,10 +90,10 @@ - ! Interface variables - integer, intent(in) :: im - integer, intent(in) :: iter -- real(kind=kind_phys), dimension(im), intent(in) :: wind -- logical, dimension(im), intent(inout) :: flag_guess -- logical, dimension(im), intent(inout) :: flag_iter -- logical, dimension(im), intent(in) :: dry, wet, icy -+ real(kind=kind_phys), dimension(:), intent(in) :: wind -+ logical, dimension(:), intent(inout) :: flag_guess -+ logical, dimension(:), intent(inout) :: flag_iter -+ logical, dimension(:), intent(in) :: dry, wet, icy - integer, intent(in) :: nstf_name1 - - character(len=*), intent(out) :: errmsg -diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 -index dc9332b..66c9173 100644 ---- a/physics/GFS_time_vary_pre.fv3.F90 -+++ b/physics/GFS_time_vary_pre.fv3.F90 -@@ -74,7 +74,7 @@ - implicit none - - integer, intent(in) :: idate(4) -- integer, intent(in) :: jdat(1:8), idat(1:8) -+ integer, intent(in) :: jdat(:), idat(:) - integer, intent(in) :: lkm, lsm, lsm_noahmp, & - nsswr, nslwr, me, & - master, nscyc, nhfrad -diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 -index 2fa3527..842423d 100644 ---- a/physics/GFS_time_vary_pre.scm.F90 -+++ b/physics/GFS_time_vary_pre.scm.F90 -@@ -74,7 +74,7 @@ - implicit none - - integer, intent(in) :: idate(4) -- integer, intent(in) :: jdat(1:8), idat(1:8) -+ integer, intent(in) :: jdat(:), idat(:) - integer, intent(in) :: lsm, lsm_noahmp, & - nsswr, nslwr, me, & - master, nscyc -diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 -index df0116c..018cf6a 100644 ---- a/physics/cires_ugwp.F90 -+++ b/physics/cires_ugwp.F90 -@@ -54,7 +54,7 @@ contains - integer, intent (in) :: latr - real(kind=kind_phys), intent (in) :: ak(:), bk(:) - real(kind=kind_phys), intent (in) :: dtp -- real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes -+ real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes - real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in - real(kind=kind_phys), intent (in) :: con_p0 - logical, intent (in) :: do_ugwp -@@ -163,24 +163,24 @@ contains - - ! interface variables - integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr -- integer, intent(in), dimension(im) :: kpbl -- real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma -+ integer, intent(in), dimension(:) :: kpbl -+ real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma - logical, intent(in) :: flag_for_gwd_generic_tend - ! elvmax is intent(in) for CIRES UGWP, but intent(inout) for GFS GWDPS -- real(kind=kind_phys), intent(inout), dimension(im) :: elvmax -- real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 -- real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area -- real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil -- real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii -- real(kind=kind_phys), intent(in), dimension(im, levs, ntrac):: qgrs -- real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(4) -+ real(kind=kind_phys), intent(inout), dimension(:) :: elvmax -+ real(kind=kind_phys), intent(in), dimension(:, :) :: clx, oa4 -+ real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area -+ real(kind=kind_phys), intent(in), dimension(:, :) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil -+ real(kind=kind_phys), intent(in), dimension(:, :) :: prsi, phii -+ real(kind=kind_phys), intent(in), dimension(:,:,:):: qgrs -+ real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(:) - logical, intent(in) :: do_ugwp, do_tofd, ldiag_ugwp - -- real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg -- real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb -- real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw -- real(kind=kind_phys), intent(out), dimension(im, levs):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis -- real(kind=kind_phys), intent(out), dimension(im, levs):: dudt_mtb, dudt_ogw, dudt_tms -+ real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg -+ real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb -+ real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw -+ real(kind=kind_phys), intent(out), dimension(:, :):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis -+ real(kind=kind_phys), intent(out), dimension(:, :):: dudt_mtb, dudt_ogw, dudt_tms - - ! These arrays are only allocated if ldiag=.true. - real(kind=kind_phys), intent(inout), dimension(:,:) :: ldu3dt_ogw, ldv3dt_ogw, ldt3dt_ogw -@@ -190,11 +190,11 @@ contains - ! These arrays only allocated if ldiag_ugwp = .true. - real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - -- real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt -+ real(kind=kind_phys), intent(inout), dimension(:, :):: dudt, dvdt, dtdt - - real(kind=kind_phys), intent(in) :: con_g, con_pi, con_cp, con_rd, con_rv, con_fvirt - -- real(kind=kind_phys), intent(in), dimension(im) :: rain -+ real(kind=kind_phys), intent(in), dimension(:) :: rain - - integer, intent(in) :: ntke - real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke -diff --git a/physics/cnvc90.f b/physics/cnvc90.f -index 9bef0eb..6a49158 100644 ---- a/physics/cnvc90.f -+++ b/physics/cnvc90.f -@@ -30,16 +30,16 @@ - ! Interface variables - real(kind=kind_phys), intent(in) :: clstp - integer, intent(in) :: im, km -- real(kind=kind_phys), intent(in) :: RN(IM) -- integer, intent(in) :: KBOT(IM) -- integer, intent(in) :: KTOP(IM) -- real(kind=kind_phys), intent(in) :: prsi(IM,km+1) -- real(kind=kind_phys), intent(inout) :: ACV(IM) -- real(kind=kind_phys), intent(inout) :: ACVB(IM) -- real(kind=kind_phys), intent(inout) :: ACVT(IM) -- real(kind=kind_phys), intent(inout) :: CV(IM) -- real(kind=kind_phys), intent(inout) :: CVB(IM) -- real(kind=kind_phys), intent(inout) :: CVT(IM) -+ real(kind=kind_phys), intent(in) :: RN(:) -+ integer, intent(in) :: KBOT(:) -+ integer, intent(in) :: KTOP(:) -+ real(kind=kind_phys), intent(in) :: prsi(:,:) -+ real(kind=kind_phys), intent(inout) :: ACV(:) -+ real(kind=kind_phys), intent(inout) :: ACVB(:) -+ real(kind=kind_phys), intent(inout) :: ACVT(:) -+ real(kind=kind_phys), intent(inout) :: CV(:) -+ real(kind=kind_phys), intent(inout) :: CVB(:) -+ real(kind=kind_phys), intent(inout) :: CVT(:) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 -index 3863494..f1d138e 100644 ---- a/physics/cs_conv.F90 -+++ b/physics/cs_conv.F90 -@@ -31,15 +31,15 @@ module cs_conv_pre - - ! --- inputs - integer, intent(in) :: im, levs, ntrac, ncld -- real(r8), dimension(im,levs), intent(in) :: q -- real(r8), dimension(im,levs), intent(in) :: clw1,clw2 -- real(r8), dimension(im), intent(in) :: work1, work2 -+ real(r8), dimension(:, :), intent(in) :: q -+ real(r8), dimension(:, :), intent(in) :: clw1,clw2 -+ real(r8), dimension(:), intent(in) :: work1, work2 - real(r8), intent(in) :: cs_parm1, cs_parm2 - - ! --- input/output -- real(r8), dimension(ntrac-ncld+2), intent(out) :: fswtr, fscav -- real(r8), dimension(im), intent(out) :: wcbmax -- real(r8), dimension(im,levs), intent(out) :: save_q1,save_q2 -+ real(r8), dimension(:), intent(out) :: fswtr, fscav -+ real(r8), dimension(:), intent(out) :: wcbmax -+ real(r8), dimension(:, :), intent(out) :: save_q1,save_q2 - ! save_q3 is not allocated for Zhao-Carr MP - real(r8), dimension(:,:), intent(out) :: save_q3 - -@@ -101,10 +101,10 @@ module cs_conv_post - ! --- inputs - integer, intent(in) :: im, kmax - logical, intent(in) :: do_aw -- real(r8), dimension(im,kmax), intent(in) :: sigmatot -+ real(r8), dimension(:, :), intent(in) :: sigmatot - - ! --- input/output -- real(r8), dimension(im,kmax), intent(out) :: sigmafrac -+ real(r8), dimension(:, :), intent(out) :: sigmafrac - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -309,23 +309,23 @@ module cs_conv - ! input arguments - ! - INTEGER, INTENT(IN) :: IJSDIM, KMAX, ntracp1, nn, NTR, mype, nctp, mp_phys, kdt, lat !! DD, for GFS, pass in -- logical, intent(in) :: otspt(1:ntracp1,1:2)! otspt(:,1) - on/off switch for tracer transport by updraft and -+ logical, intent(in) :: otspt(:, :)! otspt(:,1) - on/off switch for tracer transport by updraft and - ! downdraft. should not include subgrid PDF and turbulence - ! otspt(:,2) - on/off switch for tracer transport by subsidence - ! should include subgrid PDF and turbulence - -- real(r8), intent(inout) :: t(IJSDIM,KMAX) ! temperature at mid-layer (K) -- real(r8), intent(inout) :: q(IJSDIM,KMAX) ! water vapor array including moisture (kg/kg) -- real(r8), intent(inout) :: clw(IJSDIM,KMAX,nn) ! tracer array including cloud condensate (kg/kg) -- real(r8), intent(in) :: pap(IJSDIM,KMAX) ! pressure at mid-layer (Pa) -- real(r8), intent(in) :: paph(IJSDIM,KMAX+1) ! pressure at boundaries (Pa) -- real(r8), intent(in) :: zm(IJSDIM,KMAX) ! geopotential at mid-layer (m) -- real(r8), intent(in) :: zi(IJSDIM,KMAX+1) ! geopotential at boundaries (m) -- real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) -+ real(r8), intent(inout) :: t(:, :) ! temperature at mid-layer (K) -+ real(r8), intent(inout) :: q(:, :) ! water vapor array including moisture (kg/kg) -+ real(r8), intent(inout) :: clw(:, :, :) ! tracer array including cloud condensate (kg/kg) -+ real(r8), intent(in) :: pap(:, :) ! pressure at mid-layer (Pa) -+ real(r8), intent(in) :: paph(:, :) ! pressure at boundaries (Pa) -+ real(r8), intent(in) :: zm(:, :) ! geopotential at mid-layer (m) -+ real(r8), intent(in) :: zi(:, :) ! geopotential at boundaries (m) -+ real(r8), intent(in) :: fscav(:), fswtr(:), wcbmaxm(:) - real(r8), intent(in) :: precz0in, preczhin, clmdin - ! added for cs_convr -- real(r8), intent(inout) :: u(IJSDIM,KMAX) ! zonal wind at mid-layer (m/s) -- real(r8), intent(inout) :: v(IJSDIM,KMAX) ! meridional wind at mid-layer (m/s) -+ real(r8), intent(inout) :: u(:, :) ! zonal wind at mid-layer (m/s) -+ real(r8), intent(inout) :: v(:, :) ! meridional wind at mid-layer (m/s) - - real(r8), intent(in) :: DELTA ! physics time step - real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) -@@ -333,12 +333,12 @@ module cs_conv - ! - ! modified arguments - ! -- real(r8), intent(inout) :: CBMFX(IJSDIM,nctp) ! cloud base mass flux (kg/m2/s) -+ real(r8), intent(inout) :: CBMFX(:, :) ! cloud base mass flux (kg/m2/s) - ! - ! output arguments - ! - ! updraft, downdraft, and detrainment mass flux (kg/m2/s) -- real(r8), intent(inout), dimension(IJSDIM,KMAX) :: ud_mf, dd_mf, dt_mf -+ real(r8), intent(inout), dimension(:, :) :: ud_mf, dd_mf, dt_mf - - real(r8), intent(out) :: rain1(IJSDIM) ! lwe thickness of deep convective precipitation amount (m) - ! GJF* These variables are conditionally allocated depending on whether the -@@ -348,14 +348,14 @@ module cs_conv - cnv_dqldt, clcn, cnv_fice, & - cnv_ndrop, cnv_nice, cf_upi - ! *GJF -- integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise -+ integer, intent(inout) :: kcnv(:) ! zero if no deep convection and 1 otherwise - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - !DDsigma - output added for AW sigma diagnostics - ! interface sigma and vertical velocity by cloud type (1=sfc) - ! real(r8), intent(out), dimension(IJSDIM,KMAX,nctp) :: sigmai, vverti -- real(r8), intent(out), dimension(IJSDIM,KMAX) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) -+ real(r8), intent(out), dimension(:, :) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) - ! sigma terms in eq 91 and 92 - ! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm - !DDsigma -@@ -738,19 +738,19 @@ module cs_conv - logical, intent(in) :: otspt1(ntr), otspt2(ntr), lprnt - ! - ! [OUTPUT] -- REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate -+ REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate - REAL(r8), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q -- REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u -- REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v -- REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux -+ REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u -+ REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v -+ REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux - - ! assuming there is no flux at the top of the atmospherea - Moorthi -- REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux -- REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux -- REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux -- REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux -+ REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux -+ REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux -+ REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux -+ REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux - -- REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) -+ REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) - INTEGER , INTENT(OUT) :: KT (IJSDIM, NCTP ) ! cloud top - ! - ! [MODIFIED] -@@ -774,14 +774,14 @@ module cs_conv - real(r8), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux - ! - ! [INPUT] -- REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T -+ REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T - REAL(r8), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag -- REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u -- REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v -- REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T -+ REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u -+ REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v -+ REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T - REAL(r8), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P - REAL(r8), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) -- REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude -+ REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude - REAL(r8), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude - REAL(r8), INTENT(IN) :: DELTA ! delta(t) (dynamics) - REAL(r8), INTENT(IN) :: DELTI ! delta(t) (internal variable) -diff --git a/physics/cs_conv_aw_adj.F90 b/physics/cs_conv_aw_adj.F90 -index 756161d..74cac91 100644 ---- a/physics/cs_conv_aw_adj.F90 -+++ b/physics/cs_conv_aw_adj.F90 -@@ -40,15 +40,15 @@ module cs_conv_aw_adj - logical, intent(in) :: do_cscnv, do_aw, do_shoc - integer, intent(in) :: ntrac, ncld, ntcw, ntclamt, nncl - real(kind_phys), intent(in) :: con_g -- real(kind_phys), dimension(im,levs), intent(inout) :: sigmafrac -- real(kind_phys), dimension(im,levs), intent(inout) :: gt0 -- real(kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 -- real(kind_phys), dimension(im,levs), intent(in) :: save_t -- real(kind_phys), dimension(im,levs,ntrac), intent(in) :: save_q -- real(kind_phys), dimension(im,levs+1), intent(in) :: prsi -- real(kind_phys), dimension(im,levs), intent(inout) :: cldfrac -- real(kind_phys), dimension(im,levs), intent(inout) :: subcldfrac -- real(kind_phys), dimension(im), intent(inout) :: prcp -+ real(kind_phys), dimension(:,:), intent(inout) :: sigmafrac -+ real(kind_phys), dimension(:,:), intent(inout) :: gt0 -+ real(kind_phys), dimension(:,:,:), intent(inout) :: gq0 -+ real(kind_phys), dimension(:,:), intent(in) :: save_t -+ real(kind_phys), dimension(:,:,:), intent(in) :: save_q -+ real(kind_phys), dimension(:,:), intent(in) :: prsi -+ real(kind_phys), dimension(:,:), intent(inout) :: cldfrac -+ real(kind_phys), dimension(:,:), intent(inout) :: subcldfrac -+ real(kind_phys), dimension(:), intent(inout) :: prcp - integer, intent(in ) :: imp_physics, imp_physics_mg - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg -diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 -index 5c43709..4b9e423 100644 ---- a/physics/cu_gf_driver.F90 -+++ b/physics/cu_gf_driver.F90 -@@ -101,42 +101,42 @@ contains - logical, intent(in ) :: flag_for_scnv_generic_tend,flag_for_dcnv_generic_tend - logical, intent(in ) :: ldiag3d,qdiag3d - -- real(kind=kind_phys), dimension( im , km ), intent(in ) :: forcet,forceqv_spechum,w,phil -- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: t,us,vs -- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: qci_conv -+ real(kind=kind_phys), dimension( :, :), intent(in ) :: forcet,forceqv_spechum,w,phil -+ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: t,us,vs -+ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: qci_conv - real(kind=kind_phys), dimension( im ) :: rand_mom,rand_vmas -- real(kind=kind_phys), dimension( im,4 ) :: rand_clos -+ real(kind=kind_phys), dimension( im,4 ) :: rand_clos - real(kind=kind_phys), dimension( im , km, 11 ) :: gdc,gdc2 -- real(kind=kind_phys), dimension( im , km ), intent(out ) :: cnvw_moist,cnvc -- real(kind=kind_phys), dimension( im , km ), intent(inout ) :: cliw, clcw -+ real(kind=kind_phys), dimension( :, :), intent(out ) :: cnvw_moist,cnvc -+ real(kind=kind_phys), dimension( :, : ), intent(inout ) :: cliw, clcw - - real(kind=kind_phys), dimension( : , : ), intent(inout ) :: & - du3dt_SCNV,dv3dt_SCNV,dt3dt_SCNV,dq3dt_SCNV, & - du3dt_DCNV,dv3dt_DCNV,dt3dt_DCNV,dq3dt_DCNV - -- integer, dimension (im), intent(inout) :: hbot,htop,kcnv -- integer, dimension (im), intent(in) :: xland -- real(kind=kind_phys), dimension (im), intent(in) :: pbl -+ integer, dimension (:), intent(inout) :: hbot,htop,kcnv -+ integer, dimension (:), intent(in) :: xland -+ real(kind=kind_phys), dimension (:), intent(in) :: pbl - integer, dimension (im) :: tropics - ! ruc variable -- real(kind=kind_phys), dimension (im) :: hfx2,qfx2,psuri -- real(kind=kind_phys), dimension (im,km) :: ud_mf,dd_mf,dt_mf -- real(kind=kind_phys), dimension (im), intent(inout) :: raincv,cld1d -- real(kind=kind_phys), dimension (im,km) :: t2di,p2di -+ real(kind=kind_phys), dimension (:) :: hfx2,qfx2,psuri -+ real(kind=kind_phys), dimension (:,:) :: ud_mf,dd_mf,dt_mf -+ real(kind=kind_phys), dimension (:), intent(inout) :: raincv,cld1d -+ real(kind=kind_phys), dimension (:,:) :: t2di,p2di - ! Specific humidity from FV3 -- real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum -- real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum -+ real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum -+ real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum - ! Local water vapor mixing ratios and cloud water mixing ratios - real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw - ! -- real(kind=kind_phys), dimension( im ),intent(in) :: garea -+ real(kind=kind_phys), dimension( : ),intent(in) :: garea - real(kind=kind_phys), intent(in ) :: dt - - integer, intent(in ) :: imfshalcnv - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! define locally for now. -- integer, dimension(im),intent(inout) :: cactiv -+ integer, dimension(:),intent(inout) :: cactiv - integer, dimension(im) :: k22_shallow,kbcon_shallow,ktop_shallow - real(kind=kind_phys), dimension(im) :: ht - real(kind=kind_phys), dimension(im) :: dx -diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 -index a824c6a..66ae9d0 100644 ---- a/physics/cu_ntiedtke.F90 -+++ b/physics/cu_ntiedtke.F90 -@@ -159,16 +159,16 @@ contains - ! in&out variables - integer, intent(in) :: lq, km, ktrac - real(kind=kind_phys), intent(in ) :: dt -- integer, dimension( lq ), intent(in) :: lmask -- real(kind=kind_phys), dimension( lq ), intent(in ) :: evap, hfx, dx -- real(kind=kind_phys), dimension( lq , km ), intent(inout) :: pu, pv, pt, pqv -- real(kind=kind_phys), dimension( lq , km ), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf -- real(kind=kind_phys), dimension( lq , km+1 ), intent(in ) :: pzz, prsi -- real(kind=kind_phys), dimension( lq , km, ktrac ), intent(inout ) :: clw -- -- integer, dimension( lq ), intent(out) :: kbot, ktop, kcnv -- real(kind=kind_phys), dimension( lq ), intent(out) :: zprecc -- real(kind=kind_phys), dimension (lq,km), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc -+ integer, dimension( : ), intent(in) :: lmask -+ real(kind=kind_phys), dimension( : ), intent(in ) :: evap, hfx, dx -+ real(kind=kind_phys), dimension( :, : ), intent(inout) :: pu, pv, pt, pqv -+ real(kind=kind_phys), dimension( :, :), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf -+ real(kind=kind_phys), dimension( :, : ), intent(in ) :: pzz, prsi -+ real(kind=kind_phys), dimension( :, :, : ), intent(inout ) :: clw -+ -+ integer, dimension( : ), intent(out) :: kbot, ktop, kcnv -+ real(kind=kind_phys), dimension( : ), intent(out) :: zprecc -+ real(kind=kind_phys), dimension (:, :), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc - - ! error messages - character(len=*), intent(out) :: errmsg -diff --git a/physics/dcyc2.f b/physics/dcyc2.f -index 6dca65c..347639d 100644 ---- a/physics/dcyc2.f -+++ b/physics/dcyc2.f -@@ -216,36 +216,36 @@ - - ! integer, intent(in) :: ipr - ! logical lprnt -- logical, dimension(im), intent(in) :: dry, icy, wet -+ logical, dimension(:), intent(in) :: dry, icy, wet - real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & - & deltim, fhswr - -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & - & sfcdsw, sfcnsw - -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & tsfc_lnd, tsfc_ice, tsfc_wat, & - & sfcemis_lnd, sfcemis_ice, sfcemis_wat - -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & sfcnirbmu, sfcnirdfu, sfcvisbmu, sfcvisdfu, & - & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd - -- real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & -+ real(kind=kind_phys), dimension(:,:), intent(in) :: swh, hlw & - &, swhc, hlwc - - ! --- input/output: -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdt & - &, dtdtc - - ! --- outputs: -- real(kind=kind_phys), dimension(im), intent(out) :: & -+ real(kind=kind_phys), dimension(:), intent(out) :: & - & adjsfcdsw, adjsfcnsw, adjsfcdlw, xmu, xcosz, & - & adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & - & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd - -- real(kind=kind_phys), dimension(im), intent(out) :: & -+ real(kind=kind_phys), dimension(:), intent(out) :: & - & adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat - - character(len=*), intent(out) :: errmsg -diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 -index 55ef9c2..050d635 100644 ---- a/physics/drag_suite.F90 -+++ b/physics/drag_suite.F90 -@@ -298,8 +298,8 @@ - integer, intent(in) :: im, km, imx, kdt, ipr, me, master - integer, intent(in) :: gwd_opt - logical, intent(in) :: lprnt -- integer, intent(in) :: KPBL(im) -- real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(2) -+ integer, intent(in) :: KPBL(:) -+ real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(:) - - integer :: kpblmax - integer, parameter :: ims=1, kms=1, its=1, kts=1 -@@ -308,29 +308,29 @@ - real(kind=kind_phys) :: g_inv - - real(kind=kind_phys), intent(inout) :: & -- & dudt(im,km),dvdt(im,km), & -- & dtdt(im,km) -- real(kind=kind_phys), intent(out) :: rdxzb(im) -+ & dudt(:,:),dvdt(:,:), & -+ & dtdt(:,:) -+ real(kind=kind_phys), intent(out) :: rdxzb(:) - real(kind=kind_phys), intent(in) :: & -- & u1(im,km),v1(im,km), & -- & t1(im,km),q1(im,km), & -- & PHII(im,km+1),prsl(im,km), & -- & prslk(im,km),PHIL(im,km) -- real(kind=kind_phys), intent(in) :: prsi(im,km+1), & -- & del(im,km) -- real(kind=kind_phys), intent(in) :: var(im),oc1(im), & -- & oa4(im,4),ol4(im,4), & -- & dx(im) -- real(kind=kind_phys), intent(in) :: varss(im),oc1ss(im), & -- & oa4ss(im,4),ol4ss(im,4) -- real(kind=kind_phys), intent(in) :: THETA(im),SIGMA(im), & -- & GAMMA(im),ELVMAX(im) -+ & u1(:,:),v1(:,:), & -+ & t1(:,:),q1(:,:), & -+ & PHII(:,:),prsl(:,:), & -+ & prslk(:,:),PHIL(:,:) -+ real(kind=kind_phys), intent(in) :: prsi(:,:), & -+ & del(:,:) -+ real(kind=kind_phys), intent(in) :: var(:),oc1(:), & -+ & oa4(:,:),ol4(:,:), & -+ & dx(:) -+ real(kind=kind_phys), intent(in) :: varss(:),oc1ss(:), & -+ & oa4ss(:,:),ol4ss(:,:) -+ real(kind=kind_phys), intent(in) :: THETA(:),SIGMA(:), & -+ & GAMMA(:),ELVMAX(:) - - ! added for small-scale orographic wave drag - real(kind=kind_phys), dimension(im,km) :: utendwave,vtendwave,thx,thvx -- real(kind=kind_phys), intent(in) :: br1(im), & -- & hpbl(im), & -- & slmsk(im) -+ real(kind=kind_phys), intent(in) :: br1(:), & -+ & hpbl(:), & -+ & slmsk(:) - real(kind=kind_phys), dimension(im) :: govrth,xland - !real(kind=kind_phys), dimension(im,km) :: dz2 - real(kind=kind_phys) :: tauwavex0,tauwavey0, & -@@ -344,7 +344,7 @@ - - !Output: - real(kind=kind_phys), intent(out) :: & -- & dusfc(im), dvsfc(im) -+ & dusfc(:), dvsfc(:) - !Output (optional): - real(kind=kind_phys), intent(out) :: & - & dusfc_ls(:),dvsfc_ls(:), & -diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 -index b882c74..a1edf69 100644 ---- a/physics/flake_driver.F90 -+++ b/physics/flake_driver.F90 -@@ -81,21 +81,21 @@ IMPLICIT NONE - integer, intent(in) :: im, imon,yearlen - ! integer, dimension(im), intent(in) :: islmsk - -- real (kind=kind_phys), dimension(im), intent(in) :: ps, wind, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, wind, & - & t1, q1, dlwflx, dswsfc, zlvl, elev - - real (kind=kind_phys), intent(in) :: delt - -- real (kind=kind_phys), dimension(im), intent(in) :: & -+ real (kind=kind_phys), dimension(:), intent(in) :: & - & xlat, weasd, lakedepth - -- real (kind=kind_phys),dimension(im),intent(inout) :: & -+ real (kind=kind_phys),dimension(:),intent(inout) :: & - & snwdph, hice, tsurf, t_sfc, hflx, evap, fice, ustar, qsfc, & - & ch, cm, chh, cmm - - real (kind=kind_phys), intent(in) :: julian - -- logical, dimension(im), intent(in) :: flag_iter, wet, lake -+ logical, dimension(:), intent(in) :: flag_iter, wet, lake - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/gcm_shoc.F90 b/physics/gcm_shoc.F90 -index dd7791e..3d98a5d 100644 ---- a/physics/gcm_shoc.F90 -+++ b/physics/gcm_shoc.F90 -@@ -35,12 +35,12 @@ subroutine shoc_run (nx, nzm, tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_ - real(kind=kind_phys), intent(in) :: tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_rv, con_rd, con_pi, con_fvirt, & - dtp, supice, pcrit, cefac, cesfac, tkef1, dis_opt - ! -- real(kind=kind_phys), intent(in), dimension(nx) :: hflx, evap -- real(kind=kind_phys), intent(in), dimension(nx,nzm) :: prsl, delp, phil, u, v, omega, rhc, prnum -- real(kind=kind_phys), intent(in), dimension(nx,nzm+1) :: phii -+ real(kind=kind_phys), intent(in), dimension(:) :: hflx, evap -+ real(kind=kind_phys), intent(in), dimension(:,:) :: prsl, delp, phil, u, v, omega, rhc, prnum -+ real(kind=kind_phys), intent(in), dimension(:,:) :: phii - ! -- real(kind=kind_phys), intent(inout), dimension(nx,nzm) :: gt0, cld_sgs, tke, tkh, wthv_sec -- real(kind=kind_phys), intent(inout), dimension(nx,nzm,ntrac) :: gq0 -+ real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, cld_sgs, tke, tkh, wthv_sec -+ real(kind=kind_phys), intent(inout), dimension(:,:,:) :: gq0 - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -1724,7 +1724,7 @@ contains - - - real function esatw(t) -- real t ! temperature (K) -+ real t ! temperature (K) - real a0,a1,a2,a3,a4,a5,a6,a7,a8 - data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & - 6.11239921, 0.443987641, 0.142986287e-1, & -@@ -1737,8 +1737,8 @@ contains - - real function qsatw(t,p) - ! implicit none -- real t ! temperature (K) -- real p ! pressure (Pa) -+ real t ! temperature (K) -+ real p ! pressure (Pa) - real esat - ! esat = fpvs(t) - esat = fpvsl(t) -@@ -1749,7 +1749,7 @@ contains - - - real function esati(t) -- real t ! temperature (K) -+ real t ! temperature (K) - real a0,a1,a2,a3,a4,a5,a6,a7,a8 - data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & - 6.11147274, 0.503160820, 0.188439774e-1, & -@@ -1769,8 +1769,8 @@ contains - end function esati - - real function qsati(t,p) -- real t ! temperature (K) -- real p ! pressure (Pa) -+ real t ! temperature (K) -+ real p ! pressure (Pa) - real esat !,esati - ! esat = fpvs(t) - esat = fpvsi(t) -@@ -1780,7 +1780,7 @@ contains - end function qsati - - real function dtesatw(t) -- real t ! temperature (K) -+ real t ! temperature (K) - real a0,a1,a2,a3,a4,a5,a6,a7,a8 - data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & - 0.443956472, 0.285976452e-1, 0.794747212e-3, & -@@ -1792,14 +1792,14 @@ contains - end function dtesatw - - real function dtqsatw(t,p) -- real t ! temperature (K) -- real p ! pressure (Pa) -+ real t ! temperature (K) -+ real p ! pressure (Pa) - ! real dtesatw - dtqsatw = 100.0*0.622*dtesatw(t)/p - end function dtqsatw - - real function dtesati(t) -- real t ! temperature (K) -+ real t ! temperature (K) - real a0,a1,a2,a3,a4,a5,a6,a7,a8 - data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & - 0.503223089, 0.377174432e-1, 0.126710138e-2, & -@@ -1820,8 +1820,8 @@ contains - - - real function dtqsati(t,p) -- real t ! temperature (K) -- real p ! pressure (Pa) -+ real t ! temperature (K) -+ real p ! pressure (Pa) - ! real dtesati - dtqsati = 100.0*0.622*dtesati(t)/p - end function dtqsati -diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 -index 352a618..e520c3e 100644 ---- a/physics/get_prs_fv3.F90 -+++ b/physics/get_prs_fv3.F90 -@@ -28,12 +28,12 @@ contains - - ! Interface variables - integer, intent(in) :: ix, levs -- real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: phii -- real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: prsi -- real(kind=kind_phys), dimension(ix,levs), intent(in) :: tgrs -- real(kind=kind_phys), dimension(ix,levs), intent(in) :: qgrs1 -- real(kind=kind_phys), dimension(ix,levs), intent(out) :: del -- real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: del_gz -+ real(kind=kind_phys), dimension(:,:), intent(in) :: phii -+ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi -+ real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs -+ real(kind=kind_phys), dimension(:,:), intent(in) :: qgrs1 -+ real(kind=kind_phys), dimension(:,:), intent(out) :: del -+ real(kind=kind_phys), dimension(:,:), intent(out) :: del_gz - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -@@ -97,11 +97,11 @@ contains - - ! Interface variables - integer, intent(in) :: ix, levs -- real(kind=kind_phys), dimension(ix,levs), intent(in) :: gt0 -- real(kind=kind_phys), dimension(ix,levs), intent(in) :: gq01 -- real(kind=kind_phys), dimension(ix,levs+1), intent(inout) :: del_gz -- real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: phii -- real(kind=kind_phys), dimension(ix,levs), intent(out) :: phil -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: gq01 -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: del_gz -+ real(kind=kind_phys), dimension(:,:), intent(out) :: phii -+ real(kind=kind_phys), dimension(:,:), intent(out) :: phil - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -diff --git a/physics/gfdl_cloud_microphys.F90 b/physics/gfdl_cloud_microphys.F90 -index 1ccedb9..de1e0ef 100644 ---- a/physics/gfdl_cloud_microphys.F90 -+++ b/physics/gfdl_cloud_microphys.F90 -@@ -135,29 +135,29 @@ contains - ! interface variables - integer, intent(in ) :: levs, im - real(kind=kind_phys), intent(in ) :: con_g, con_fvirt, con_rd -- real(kind=kind_phys), intent(in ), dimension(1:im) :: frland, garea -- integer, intent(in ), dimension(1:im) :: islmsk -- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & -+ real(kind=kind_phys), intent(in ), dimension(:) :: frland, garea -+ integer, intent(in ), dimension(:) :: islmsk -+ real(kind=kind_phys), intent(inout), dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & - gq0_ntsw, gq0_ntgl, gq0_ntclamt -- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gt0, gu0, gv0 -- real(kind=kind_phys), intent(in ), dimension(1:im,1:levs) :: vvl, prsl, del -- real(kind=kind_phys), intent(in ), dimension(1:im,1:levs+1) :: phii -+ real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, gu0, gv0 -+ real(kind=kind_phys), intent(in ), dimension(:,:) :: vvl, prsl, del -+ real(kind=kind_phys), intent(in ), dimension(:,:) :: phii - - ! rain/snow/ice/graupel/precip amounts, fraction of frozen precip -- real(kind_phys), intent(out ), dimension(1:im) :: rain0 -- real(kind_phys), intent(out ), dimension(1:im) :: snow0 -- real(kind_phys), intent(out ), dimension(1:im) :: ice0 -- real(kind_phys), intent(out ), dimension(1:im) :: graupel0 -- real(kind_phys), intent(out ), dimension(1:im) :: prcp0 -- real(kind_phys), intent(out ), dimension(1:im) :: sr -+ real(kind_phys), intent(out ), dimension(:) :: rain0 -+ real(kind_phys), intent(out ), dimension(:) :: snow0 -+ real(kind_phys), intent(out ), dimension(:) :: ice0 -+ real(kind_phys), intent(out ), dimension(:) :: graupel0 -+ real(kind_phys), intent(out ), dimension(:) :: prcp0 -+ real(kind_phys), intent(out ), dimension(:) :: sr - - real(kind_phys), intent(in) :: dtp ! physics time step - logical, intent (in) :: hydrostatic, phys_hydrostatic - - logical, intent (in) :: lradar -- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: refl_10cm -+ real(kind=kind_phys), intent(inout), dimension(:,:) :: refl_10cm - logical, intent (in) :: reset, effr_in -- real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: rew, rei, rer, res, reg -+ real(kind=kind_phys), intent(inout), dimension(:,:) :: rew, rei, rer, res, reg - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 -index 816488f..5cc3c91 100644 ---- a/physics/gfdl_fv_sat_adj.F90 -+++ b/physics/gfdl_fv_sat_adj.F90 -@@ -128,8 +128,8 @@ subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & - integer, intent(in ) :: kmp - integer, intent(in ) :: nwat - integer, intent(in ) :: ngas -- real(kind_dyn), intent(in ) :: rilist(0:ngas) -- real(kind_dyn), intent(in ) :: cpilist(0:ngas) -+ real(kind_dyn), intent(in ) :: rilist(:) -+ real(kind_dyn), intent(in ) :: cpilist(:) - integer, intent(in ) :: mpirank - integer, intent(in ) :: mpiroot - character(len=*), intent( out) :: errmsg -diff --git a/physics/gscond.f b/physics/gscond.f -index 28f2476..7144ba2 100644 ---- a/physics/gscond.f -+++ b/physics/gscond.f -@@ -73,14 +73,14 @@ - ! Interface variables - integer, intent(in) :: im, km, ipr - real(kind=kind_phys), intent(in) :: dt, dtf -- real(kind=kind_phys), intent(in) :: prsl(im,km), ps(im) -- real(kind=kind_phys), intent(inout) :: q(im,km) -- real(kind=kind_phys), intent(in) :: clw1(im,km), clw2(im,km) -- real(kind=kind_phys), intent(out) :: cwm(im,km) -- real(kind=kind_phys), intent(inout) :: t(im,km) & -- &, tp(im,km), qp(im,km), psp(im) & -- &, tp1(im,km), qp1(im,km), psp1(im) -- real(kind=kind_phys), intent(in) :: u(im,km) -+ real(kind=kind_phys), intent(in) :: prsl(:,:), ps(:) -+ real(kind=kind_phys), intent(inout) :: q(:,:) -+ real(kind=kind_phys), intent(in) :: clw1(:,:), clw2(:,:) -+ real(kind=kind_phys), intent(out) :: cwm(:,:) -+ real(kind=kind_phys), intent(inout) :: t(:,:) & -+ &, tp(:,:), qp(:,:), psp(:) & -+ &, tp1(:,:), qp1(:,:), psp1(:) -+ real(kind=kind_phys), intent(in) :: u(:,:) - logical, intent(in) :: lprnt - ! - character(len=*), intent(out) :: errmsg -diff --git a/physics/gwdc.f b/physics/gwdc.f -index 5c6f8ec..0978a95 100644 ---- a/physics/gwdc.f -+++ b/physics/gwdc.f -@@ -187,15 +187,15 @@ - !----------------------------------------------------------------------- - - integer, intent(in) :: im, km, lat, ipr -- integer, intent(in) :: ktop(im),kbot(im),kcnv(im) -+ integer, intent(in) :: ktop(:),kbot(:),kcnv(:) - real(kind=kind_phys), intent(in) :: grav,cp,rd,fv,fhour,deltim,pi -- real(kind=kind_phys), dimension(im), intent(in) :: qmax -- real(kind=kind_phys), dimension(im), intent(out) :: tauctx,taucty -- real(kind=kind_phys), dimension(im), intent(in) :: cldf,dlength -- real(kind=kind_phys), dimension(im,km), intent(in) :: u1,v1,t1, & -+ real(kind=kind_phys), dimension(:), intent(in) :: qmax -+ real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty -+ real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength -+ real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & - & q1,pmid1,dpmid1 -- real(kind=kind_phys), dimension(im,km), intent(out) :: utgwc,vtgwc -- real(kind=kind_phys), dimension(im,km+1), intent(in) :: pint1 -+ real(kind=kind_phys), dimension(:,:), intent(out) :: utgwc,vtgwc -+ real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 - ! - logical, intent(in) :: lprnt - ! -diff --git a/physics/gwdps.f b/physics/gwdps.f -index b09413f..486aa66 100644 ---- a/physics/gwdps.f -+++ b/physics/gwdps.f -@@ -1315,4 +1315,4 @@ - subroutine gwdps_finalize() - end subroutine gwdps_finalize - -- end module gwdps -+ end module gwdps -\ No newline at end of file -diff --git a/physics/h2ophys.f b/physics/h2ophys.f -index b3bdd27..ccbce7c 100644 ---- a/physics/h2ophys.f -+++ b/physics/h2ophys.f -@@ -41,10 +41,10 @@ - ! interface variables - integer, intent(in) :: im, levs, kh2o, h2o_coeff, me - real(kind=kind_phys), intent(in) :: dt -- real(kind=kind_phys), intent(inout) :: h2o(im,levs) -- real(kind=kind_phys), intent(in) :: ph2o(kh2o) -- real(kind=kind_phys), intent(in) :: prsl(im,levs) -- real(kind=kind_phys), intent(in) :: h2opltc(im,kh2o,h2o_coeff) -+ real(kind=kind_phys), intent(inout) :: h2o(:,:) -+ real(kind=kind_phys), intent(in) :: ph2o(:) -+ real(kind=kind_phys), intent(in) :: prsl(:,:) -+ real(kind=kind_phys), intent(in) :: h2opltc(:,:,:) - logical , intent(in) :: ldiag3d - !real(kind=kind_phys), intent(inout) :: h2op(im,levs,h2o_coeff) - character(len=*), intent(out) :: errmsg -diff --git a/physics/lsm_ruc_sfc_sice_interstitial.F90 b/physics/lsm_ruc_sfc_sice_interstitial.F90 -index 27033fc..54c514a 100644 ---- a/physics/lsm_ruc_sfc_sice_interstitial.F90 -+++ b/physics/lsm_ruc_sfc_sice_interstitial.F90 -@@ -27,12 +27,12 @@ contains - - ! Interface variables - integer, intent(in) :: im, lsoil_ruc, lsoil, kice -- logical, dimension(im), intent(in) :: land, icy -+ logical, dimension(:), intent(in) :: land, icy - ! --- on Noah levels -- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: stc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: stc - ! --- on RUC levels -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(in) :: tslb -- real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice -+ real (kind=kind_phys), dimension(:,:), intent(in) :: tslb -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -@@ -89,12 +89,12 @@ contains - - ! Interface variables - integer, intent(in) :: im, lsoil_ruc, lsoil, kice -- logical, dimension(im), intent(in) :: land, icy -+ logical, dimension(:), intent(in) :: land, icy - ! --- on Noah levels -- real (kind=kind_phys), dimension(im,lsoil), intent(in) :: stc -- real (kind=kind_phys), dimension(im,kice), intent(in) :: tiice -+ real (kind=kind_phys), dimension(:,:), intent(in) :: stc -+ real (kind=kind_phys), dimension(:,:), intent(in) :: tiice - ! --- on RUC levels -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 -index 69690d5..67706ca 100644 ---- a/physics/m_micro.F90 -+++ b/physics/m_micro.F90 -@@ -181,10 +181,10 @@ end subroutine m_micro_init - logical,intent(in) :: flipv, skip_macro - real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(2) - -- real (kind=kind_phys), dimension(im,lm),intent(in) :: & -+ real (kind=kind_phys), dimension(:,:),intent(in) :: & - & prsl_i,u_i,v_i,phil, omega_i, QLLS_i,QILS_i, & - & lwheat_i,swheat_i -- real (kind=kind_phys), dimension(im,0:lm),intent(in):: prsi_i, & -+ real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, & - & phii - ! GJF* These variables are conditionally allocated depending on whether the - ! Morrison-Gettelman microphysics is used, so they must be declared -@@ -194,26 +194,26 @@ end subroutine m_micro_init - & CNV_MFD_i, cf_upi, CNV_FICE_i, CNV_NDROP_i, & - & CNV_NICE_i, w_upi - ! *GJF -- real (kind=kind_phys), dimension(im,lm),intent(in) :: & -+ real (kind=kind_phys), dimension(:,:),intent(in) :: & - & rhc_i, naai_i, npccn_i -- real (kind=kind_phys), dimension(im,lm,ntrcaer),intent(in) :: & -+ real (kind=kind_phys), dimension(:,:,:),intent(in) :: & - & aerfld_i -- real (kind=kind_phys),dimension(im),intent(in):: TAUGWX, & -+ real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & - & TAUGWY, TAUOROX, TAUOROY, FRLAND,ZPBL,xlat,xlon - ! & TAUGWY, TAUX, TAUY, TAUOROX, TAUOROY,ps_i,FRLAND,ZPBL - ! & CNVPRCP - - ! output -- real (kind=kind_phys),dimension(im,lm), intent(out) :: lwm_o, qi_o, & -+ real (kind=kind_phys),dimension(:,:), intent(out) :: lwm_o, qi_o, & - cldreffl, cldreffi, cldreffr, cldreffs, cldreffg -- real (kind=kind_phys),dimension(im), intent(out) :: rn_o, sr_o -+ real (kind=kind_phys),dimension(:), intent(out) :: rn_o, sr_o - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! input and output - ! Anning Cheng 10/24/2016 twat for total water, diagnostic purpose -- integer, dimension(IM), intent(inout):: KCBL -- real (kind=kind_phys),dimension(im,lm),intent(inout):: q_io, t_io, & -+ integer, dimension(:), intent(inout):: KCBL -+ real (kind=kind_phys),dimension(:,:),intent(inout):: q_io, t_io, & - & ncpl_io,ncpi_io,CLLS_io - ! GJF* These variables are conditionally allocated depending on whether the - ! Morrison-Gettelman microphysics is used, so they must be declared -diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 -index 930b32b..00e6f8e 100644 ---- a/physics/m_micro_interstitial.F90 -+++ b/physics/m_micro_interstitial.F90 -@@ -183,22 +183,22 @@ - integer, intent(in) :: im, levs, fprcp - logical, intent(in) :: mg3_as_mg2 - -- real(kind=kind_phys), intent(in ) :: ncpr(1:im,1:levs) -- real(kind=kind_phys), intent(in ) :: ncps(1:im,1:levs) -- real(kind=kind_phys), intent(in ) :: ncgl(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_rain(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_snow(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_graupel(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_rain_nc(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_snow_nc(1:im,1:levs) -- real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(1:im,1:levs) -- real(kind=kind_phys), intent( out) :: ice(1:im) -- real(kind=kind_phys), intent( out) :: snow(1:im) -- real(kind=kind_phys), intent( out) :: graupel(1:im) -+ real(kind=kind_phys), intent(in ) :: ncpr(:,:) -+ real(kind=kind_phys), intent(in ) :: ncps(:,:) -+ real(kind=kind_phys), intent(in ) :: ncgl(:,:) -+ real(kind=kind_phys), intent(inout) :: qrn(:,:) -+ real(kind=kind_phys), intent(inout) :: qsnw(:,:) -+ real(kind=kind_phys), intent(inout) :: qgl(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_ice(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_rain(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_snow(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_graupel(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_rain_nc(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_snow_nc(:,:) -+ real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(:,:) -+ real(kind=kind_phys), intent( out) :: ice(:) -+ real(kind=kind_phys), intent( out) :: snow(:) -+ real(kind=kind_phys), intent( out) :: graupel(:) - real(kind=kind_phys), intent(in ) :: dtp - - character(len=*), intent(out) :: errmsg -diff --git a/physics/maximum_hourly_diagnostics.F90 b/physics/maximum_hourly_diagnostics.F90 -index 174e0c9..615c49b 100644 ---- a/physics/maximum_hourly_diagnostics.F90 -+++ b/physics/maximum_hourly_diagnostics.F90 -@@ -37,23 +37,23 @@ contains - logical, intent(in) :: reset, lradar - integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_fer_hires - real(kind_phys), intent(in ) :: con_g -- real(kind_phys), intent(in ) :: phil(im,levs) -- real(kind_phys), intent(in ) :: gt0(im,levs) -- real(kind_phys), intent(in ) :: refl_10cm(im,levs) -- real(kind_phys), intent(inout) :: refdmax(im) -- real(kind_phys), intent(inout) :: refdmax263k(im) -- real(kind_phys), intent(in ) :: u10m(im) -- real(kind_phys), intent(in ) :: v10m(im) -- real(kind_phys), intent(inout) :: u10max(im) -- real(kind_phys), intent(inout) :: v10max(im) -- real(kind_phys), intent(inout) :: spd10max(im) -- real(kind_phys), intent(in ) :: pgr(im) -- real(kind_phys), intent(in ) :: t2m(im) -- real(kind_phys), intent(in ) :: q2m(im) -- real(kind_phys), intent(inout) :: t02max(im) -- real(kind_phys), intent(inout) :: t02min(im) -- real(kind_phys), intent(inout) :: rh02max(im) -- real(kind_phys), intent(inout) :: rh02min(im) -+ real(kind_phys), intent(in ) :: phil(:,:) -+ real(kind_phys), intent(in ) :: gt0(:,:) -+ real(kind_phys), intent(in ) :: refl_10cm(:,:) -+ real(kind_phys), intent(inout) :: refdmax(:) -+ real(kind_phys), intent(inout) :: refdmax263k(:) -+ real(kind_phys), intent(in ) :: u10m(:) -+ real(kind_phys), intent(in ) :: v10m(:) -+ real(kind_phys), intent(inout) :: u10max(:) -+ real(kind_phys), intent(inout) :: v10max(:) -+ real(kind_phys), intent(inout) :: spd10max(:) -+ real(kind_phys), intent(in ) :: pgr(:) -+ real(kind_phys), intent(in ) :: t2m(:) -+ real(kind_phys), intent(in ) :: q2m(:) -+ real(kind_phys), intent(inout) :: t02max(:) -+ real(kind_phys), intent(inout) :: t02min(:) -+ real(kind_phys), intent(inout) :: rh02max(:) -+ real(kind_phys), intent(inout) :: rh02min(:) - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -@@ -126,12 +126,12 @@ contains - subroutine max_fields(phil,ref3D,grav,im,levs,refd,tk,refd263k) - integer, intent(in) :: im,levs - real (kind=kind_phys), intent(in) :: grav -- real (kind=kind_phys), intent(in),dimension(im,levs) :: phil,ref3D,tk -+ real (kind=kind_phys), intent(in),dimension(:,:) :: phil,ref3D,tk - integer :: i,k,ll,ipt,kpt - real :: dbz1avg,zmidp1,zmidloc,refl,fact - real, dimension(im,levs) :: z - real, dimension(im) :: zintsfc -- real, dimension(im), intent(inout) :: refd,refd263k -+ real, dimension(:), intent(inout) :: refd,refd263k - REAL :: dbz1(2),dbzk,dbzk1 - logical :: counter - do i=1,im -diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 -index e3dcf41..90c50ce 100644 ---- a/physics/module_MYJSFC_wrapper.F90 -+++ b/physics/module_MYJSFC_wrapper.F90 -@@ -91,22 +91,22 @@ - real(kind=kind_phys),intent(in) :: con_cp, con_g, con_rd - - !MYJ-2D -- logical,dimension(im),intent(in) :: flag_iter -- real(kind=kind_phys),dimension(im),intent(in) :: & -+ logical,dimension(:),intent(in) :: flag_iter -+ real(kind=kind_phys),dimension(:),intent(in) :: & - & prsik_1, prslk_1, tsfc, qsfc, slmsk -- real(kind=kind_phys),dimension(im),intent(inout) :: & -+ real(kind=kind_phys),dimension(:),intent(inout) :: & - & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & - & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & - & phy_myj_akhs, phy_myj_akms, & - & phy_myj_chkqlm, phy_myj_elflx, & - & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q -- real(kind=kind_phys),dimension(im),intent(inout) :: & -+ real(kind=kind_phys),dimension(:),intent(inout) :: & - & pblh, zorl, ustar, rib -- real(kind=kind_phys),dimension(im),intent(out) :: & -+ real(kind=kind_phys),dimension(:),intent(out) :: & - & cm, ch, stress, ffm, ffh, fm10, fh2 -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & landfrac, lakefrac, oceanfrac, fice -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & z0rl_wat, z0rl_lnd, z0rl_ice, & - & ustar_wat, ustar_lnd, ustar_ice, & - & cm_wat, cm_lnd, cm_ice, & -@@ -121,12 +121,12 @@ - - - !MYJ-3D -- real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & -+ real(kind=kind_phys),dimension(:,:),intent(in) :: & - phii, prsi -- real(kind=kind_phys),dimension(im,levs),intent(in) :: & -+ real(kind=kind_phys),dimension(:,:),intent(in) :: & - & ugrs, vgrs, tgrs, prsl - !MYJ-4D -- real(kind=kind_phys),dimension(im,levs,ntrac),intent(in) :: & -+ real(kind=kind_phys),dimension(:,:,:),intent(in) :: & - & qgrs - - !LOCAL -diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 -index 8fd7271..2d673e4 100644 ---- a/physics/module_MYNNPBL_wrapper.F90 -+++ b/physics/module_MYNNPBL_wrapper.F90 -@@ -234,13 +234,13 @@ SUBROUTINE mynnedmf_wrapper_run( & - REAL(kind=kind_phys) :: tem - - !MYNN-3D -- real(kind=kind_phys), dimension(im,levs+1), intent(in) :: phii -- real(kind=kind_phys), dimension(im,levs ), intent(inout) :: & -+ real(kind=kind_phys), dimension(:,:), intent(in) :: phii -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: & - & dtdt, dudt, dvdt, & - & dqdt_water_vapor, dqdt_liquid_cloud, dqdt_ice_cloud, & - & dqdt_cloud_droplet_num_conc, dqdt_ice_num_conc, & - & dqdt_ozone, dqdt_water_aer_num_conc, dqdt_ice_aer_num_conc -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: & -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: & - & qke, qke_adv, EL_PBL, Sh3D, & - & qc_bl, qi_bl, cldfra_bl - !These 10 arrays are only allocated when bl_mynn_output > 0 -@@ -248,7 +248,7 @@ SUBROUTINE mynnedmf_wrapper_run( & - & edmf_a,edmf_w,edmf_qt, & - & edmf_thl,edmf_ent,edmf_qc, & - & sub_thl,sub_sqv,det_thl,det_sqv -- real(kind=kind_phys), dimension(im,levs), intent(in) :: & -+ real(kind=kind_phys), dimension(:,:), intent(in) :: & - & u,v,omega,t3d, & - & exner,prsl, & - & qgrs_water_vapor, & -@@ -259,13 +259,13 @@ SUBROUTINE mynnedmf_wrapper_run( & - & qgrs_ozone, & - & qgrs_water_aer_num_conc, & - & qgrs_ice_aer_num_conc -- real(kind=kind_phys), dimension(im,levs), intent(out) :: & -+ real(kind=kind_phys), dimension(:,:), intent(out) :: & - & Tsq, Qsq, Cov, exch_h, exch_m - real(kind=kind_phys), dimension(:,:), intent(inout) :: & - & du3dt_PBL, du3dt_OGWD, dv3dt_PBL, dv3dt_OGWD, & - & do3dt_PBL, dq3dt_PBL, dt3dt_PBL -- real(kind=kind_phys), dimension(im), intent(in) :: xmu -- real(kind=kind_phys), dimension(im, levs), intent(in) :: htrsw, htrlw -+ real(kind=kind_phys), dimension(:), intent(in) :: xmu -+ real(kind=kind_phys), dimension(:,:), intent(in) :: htrsw, htrlw - !LOCAL - real(kind=kind_phys), dimension(im,levs) :: & - & sqv,sqc,sqi,qnc,qni,ozone,qnwfa,qnifa, & -@@ -284,26 +284,26 @@ SUBROUTINE mynnedmf_wrapper_run( & - REAL(kind=kind_phys), DIMENSION( ndvel ) :: vd1 - - !MYNN-2D -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & dx,zorl,slmsk,tsurf,qsfc,ps, & - & hflx,qflx,ust,wspd,rb,recmol - -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & - & stress_ocn,hflx_ocn,qflx_ocn, & - & oceanfrac,fice - -- logical, dimension(im), intent(in) :: & -+ logical, dimension(:), intent(in) :: & - & wet, dry, icy - -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & pblh -- real(kind=kind_phys), dimension(im), intent(out) :: & -+ real(kind=kind_phys), dimension(:), intent(out) :: & - & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & - & dtsfci_diag,dqsfci_diag,dtsfc_diag,dqsfc_diag, & - & dusfci_diag,dvsfci_diag,dusfc_diag,dvsfc_diag, & - & maxMF -- integer, dimension(im), intent(inout) :: & -+ integer, dimension(:), intent(inout) :: & - & kpbl,nupdraft,ktop_plume - - real(kind=kind_phys), dimension(:), intent(inout) :: & -diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 -index 496db75..4bfb91c 100644 ---- a/physics/module_MYNNSFC_wrapper.F90 -+++ b/physics/module_MYNNSFC_wrapper.F90 -@@ -111,8 +111,8 @@ SUBROUTINE mynnsfc_wrapper_run( & - logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) - - !Input data -- integer, dimension(im), intent(in) :: vegtype -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ integer, dimension(:), intent(in) :: vegtype -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & sigmaf,shdmax,z0pert,ztpert - - !MYNN-1D -@@ -124,23 +124,23 @@ SUBROUTINE mynnsfc_wrapper_run( & - & IMS,IME,JMS,JME,KMS,KME, & - & ITS,ITE,JTS,JTE,KTS,KTE - -- real(kind=kind_phys), dimension(im,levs+1), & -+ real(kind=kind_phys), dimension(:,:), & - & intent(in) :: phii -- real(kind=kind_phys), dimension(im,levs), & -+ real(kind=kind_phys), dimension(:,:), & - & intent(in) :: exner, PRSL, & - & u, v, t3d, qvsh, qc - - real(kind=kind_phys), dimension(im,levs) :: & - & pattern_spp_pbl, dz, th, qv - -- logical, dimension(im), intent(in) :: wet, dry, icy -+ logical, dimension(:), intent(in) :: wet, dry, icy - -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice - -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & znt_ocn, znt_lnd, znt_ice, & - & ust_ocn, ust_lnd, ust_ice, & - & cm_ocn, cm_lnd, cm_ice, & -@@ -156,10 +156,10 @@ SUBROUTINE mynnsfc_wrapper_run( & - & qsfc_ocn, qsfc_lnd, qsfc_ice - - !MYNN-2D -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & dx, pblh, slmsk, ps - -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & ustm, hflx, qflx, wspd, qsfc, qsfc_ruc, & - & FLHC, FLQC, U10, V10, TH2, T2, Q2, & - & CHS2, CQS2, rmol, zol, mol, ch, & -diff --git a/physics/module_SGSCloud_RadPost.F90 b/physics/module_SGSCloud_RadPost.F90 -index bedb660..ea26259 100644 ---- a/physics/module_SGSCloud_RadPost.F90 -+++ b/physics/module_SGSCloud_RadPost.F90 -@@ -34,8 +34,8 @@ - - integer, intent(in) :: im, levs - logical, intent(in) :: flag_init, flag_restart -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi -- real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_save, qi_save -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi -+ real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! Local variable -diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 -index 5a1a274..3380f8f 100644 ---- a/physics/module_SGSCloud_RadPre.F90 -+++ b/physics/module_SGSCloud_RadPre.F90 -@@ -67,20 +67,20 @@ - integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & - & nlay, imp_physics, imp_physics_gfdl - logical, intent(in) :: flag_init, flag_restart, do_mynnedmf -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qr, qs, qg -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: qr, qs, qg - ! qci_conv only allocated if GF is used - real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv -- real(kind=kind_phys), dimension(im,levs), intent(in) :: T3D,delp, & -+ real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp, & - & qv,P3D -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: & -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: & - & clouds1,clouds2,clouds3,clouds4,clouds5 -- real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc_save, qi_save -- real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_bl, qi_bl, cldfra_bl -- real(kind=kind_phys), dimension(im), intent(in) :: slmsk, xlat, de_lgth -- real(kind=kind_phys), dimension(im,nlay), intent(in) :: plyr, dz -- real(kind=kind_phys), dimension(im,5), intent(inout) :: cldsa -- integer, dimension(im,3), intent(inout) :: mbota, mtopa -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save -+ real(kind=kind_phys), dimension(:,:), intent(in) :: qc_bl, qi_bl, cldfra_bl -+ real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth -+ real(kind=kind_phys), dimension(:,:), intent(in) :: plyr, dz -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa -+ integer, dimension(:,:), intent(inout) :: mbota, mtopa - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! Local variables -diff --git a/physics/moninedmf.f b/physics/moninedmf.f -index 63edc34..9a6e4a6 100644 ---- a/physics/moninedmf.f -+++ b/physics/moninedmf.f -@@ -79,38 +79,38 @@ - logical, intent(in) :: lprnt,lssav,ldiag3d,qdiag3d,lsidea - logical, intent(in) :: flag_for_pbl_generic_tend - integer, intent(in) :: ipr -- integer, intent(in) :: im, km, ntrac, ntcw, kinver(im), ntoz -- integer, intent(out) :: kpbl(im) -+ integer, intent(in) :: im, km, ntrac, ntcw, kinver(:), ntoz -+ integer, intent(out) :: kpbl(:) - - ! - real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s - real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac -- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & -- & tau(im,km), rtg(im,km,ntrac) -+ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & -+ & tau(:,:), rtg(:,:,:) - ! Only allocated if ldiag3d or qdiag3d are true - real(kind=kind_phys), intent(inout), dimension(:,:) :: & - & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL - real(kind=kind_phys), intent(in) :: & -- & u1(im,km), v1(im,km), & -- & t1(im,km), q1(im,km,ntrac), & -- & swh(im,km), hlw(im,km), & -- & xmu(im), psk(im), & -- & rbsoil(im), zorl(im), & -- & u10m(im), v10m(im), & -- & fm(im), fh(im), & -- & tsea(im), & -- & heat(im), evap(im), & -- & stress(im), spd1(im) -+ & u1(:,:), v1(:,:), & -+ & t1(:,:), q1(:,:,:), & -+ & swh(:,:), hlw(:,:), & -+ & xmu(:), psk(:), & -+ & rbsoil(:), zorl(:), & -+ & u10m(:), v10m(:), & -+ & fm(:), fh(:), & -+ & tsea(:), & -+ & heat(:), evap(:), & -+ & stress(:), spd1(:) - real(kind=kind_phys), intent(in) :: & -- & prsi(im,km+1), del(im,km), & -- & prsl(im,km), prslk(im,km), & -- & phii(im,km+1), phil(im,km) -+ & prsi(:,:), del(:,:), & -+ & prsl(:,:), prslk(:,:), & -+ & phii(:,:), phil(:,:) - real(kind=kind_phys), intent(out) :: & -- & dusfc(im), dvsfc(im), & -- & dtsfc(im), dqsfc(im), & -- & hpbl(im), dkt(im,km-1) -+ & dusfc(:), dvsfc(:), & -+ & dtsfc(:), dqsfc(:), & -+ & hpbl(:), dkt(:,:) - real(kind=kind_phys), intent(inout) :: & -- & hgamt(im), hgamq(im) -+ & hgamt(:), hgamq(:) - ! - logical, intent(in) :: dspheat - ! flag for tke dissipative heating -diff --git a/physics/moninedmf_hafs.f b/physics/moninedmf_hafs.f -index 00a8dbd..5b16a63 100644 ---- a/physics/moninedmf_hafs.f -+++ b/physics/moninedmf_hafs.f -@@ -76,37 +76,37 @@ - ! - logical, intent(in) :: lprnt - integer, intent(in) :: ipr -- integer, intent(in) :: im, km, ntrac, ntcw, kinver(im) -- integer, intent(in) :: islimsk(1:im) -- integer, intent(out) :: kpbl(im) -+ integer, intent(in) :: im, km, ntrac, ntcw, kinver(:) -+ integer, intent(in) :: islimsk(:) -+ integer, intent(out) :: kpbl(:) - - ! - real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s - real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac -- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & -- & tau(im,km), rtg(im,km,ntrac) -+ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & -+ & tau(:,:), rtg(:,:,:) - real(kind=kind_phys), intent(in) :: & -- & u1(im,km), v1(im,km), & -- & t1(im,km), q1(im,km,ntrac), & -- & swh(im,km), hlw(im,km), & -- & xmu(im), psk(im), & -- & rbsoil(im), zorl(im), & -- & u10m(im), v10m(im), & -- & fm(im), fh(im), & -- & tsea(im), & -- & heat(im), evap(im), & -- & stress(im), spd1(im) -+ & u1(:,:), v1(:,:), & -+ & t1(:,:), q1(:,:,:), & -+ & swh(:,:), hlw(:,:), & -+ & xmu(:), psk(:), & -+ & rbsoil(:), zorl(:), & -+ & u10m(:), v10m(:), & -+ & fm(:), fh(:), & -+ & tsea(:), & -+ & heat(:), evap(:), & -+ & stress(:), spd1(:) - real(kind=kind_phys), intent(in) :: & -- & prsi(im,km+1), del(im,km), & -- & prsl(im,km), prslk(im,km), & -- & phii(im,km+1), phil(im,km) -+ & prsi(:,:), del(:,:), & -+ & prsl(:,:), prslk(:,:), & -+ & phii(:,:), phil(:,:) - real(kind=kind_phys), intent(out) :: & -- & dusfc(im), dvsfc(im), & -- & dtsfc(im), dqsfc(im), & -- & hpbl(im), dkt(im,km-1) -+ & dusfc(:), dvsfc(:), & -+ & dtsfc(:), dqsfc(:), & -+ & hpbl(:), dkt(:,:) - - real(kind=kind_phys), intent(inout) :: & -- & hgamt(im), hgamq(im) -+ & hgamt(:), hgamq(:) - ! - logical, intent(in) :: dspheat - ! flag for tke dissipative heating -diff --git a/physics/moninshoc.f b/physics/moninshoc.f -index 275d979..da5c102 100644 ---- a/physics/moninshoc.f -+++ b/physics/moninshoc.f -@@ -43,28 +43,28 @@ - ! - integer, intent(in) :: im, - & km, ntrac, ntcw, ncnd, ntke -- integer, dimension(im), intent(in) :: kinver -+ integer, dimension(:), intent(in) :: kinver - - real(kind=kind_phys), intent(in) :: delt, - & xkzm_m, xkzm_h, xkzm_s, xkzminv - real(kind=kind_phys), intent(in) :: grav, - & rd, cp, hvap, fv -- real(kind=kind_phys), dimension(im), intent(in) :: psk, -+ real(kind=kind_phys), dimension(:), intent(in) :: psk, - & rbsoil, zorl, u10m, v10m, fm, fh, tsea, heat, evap, stress, spd1 -- real(kind=kind_phys), dimension(im,km), intent(in) :: u1, v1, -+ real(kind=kind_phys), dimension(:,:), intent(in) :: u1, v1, - & t1, tkh, del, prsl, phil, prslk -- real(kind=kind_phys), dimension(im,km+1), intent(in) :: prsi, phii -- real(kind=kind_phys), dimension(im,km,ntrac), intent(in) :: q1 -+ real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii -+ real(kind=kind_phys), dimension(:,:,:), intent(in) :: q1 - -- real(kind=kind_phys), dimension(im,km), intent(inout) :: du, dv, -+ real(kind=kind_phys), dimension(:,:), intent(inout) :: du, dv, - & tau -- real(kind=kind_phys), dimension(im,km,ntrac), intent(inout) :: rtg -+ real(kind=kind_phys), dimension(:,:,:), intent(inout) :: rtg - -- integer, dimension(im), intent(out) :: kpbl -- real(kind=kind_phys), dimension(im), intent(out) :: dusfc, -+ integer, dimension(:), intent(out) :: kpbl -+ real(kind=kind_phys), dimension(:), intent(out) :: dusfc, - & dvsfc, dtsfc, dqsfc, hpbl -- real(kind=kind_phys), dimension(im,km), intent(out) :: prnum -- real(kind=kind_phys), dimension(im,km-1), intent(out) :: dkt -+ real(kind=kind_phys), dimension(:,:), intent(out) :: prnum -+ real(kind=kind_phys), dimension(:,:), intent(out) :: dkt - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 -index 95e5211..a6907be 100644 ---- a/physics/mp_fer_hires.F90 -+++ b/physics/mp_fer_hires.F90 -@@ -53,9 +53,9 @@ module mp_fer_hires - logical, intent(in) :: restart - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -- real(kind_phys), intent(out), optional :: f_ice(1:ncol,1:nlev) -- real(kind_phys), intent(out), optional :: f_rain(1:ncol,1:nlev) -- real(kind_phys), intent(out), optional :: f_rimef(1:ncol,1:nlev) -+ real(kind_phys), intent(out), optional :: f_ice(:,:) -+ real(kind_phys), intent(out), optional :: f_rain(:,:) -+ real(kind_phys), intent(out), optional :: f_rimef(:,:) - - - ! Local variables -@@ -153,28 +153,28 @@ module mp_fer_hires - logical, intent(in ) :: spec_adv - integer, intent(in ) :: mpirank - integer, intent(in ) :: mpiroot -- real(kind_phys), intent(in ) :: slmsk(1:ncol) -- real(kind_phys), intent(in ) :: prsi(1:ncol,1:nlev+1) -- real(kind_phys), intent(in ) :: p_phy(1:ncol,1:nlev) -+ real(kind_phys), intent(in ) :: slmsk(:) -+ real(kind_phys), intent(in ) :: prsi(:,:) -+ real(kind_phys), intent(in ) :: p_phy(:,:) - real(kind_phys), intent(in ) :: epsq,r_d,p608,cp,g -- real(kind_phys), intent(inout) :: t(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: q(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) -- real(kind_phys), intent(out ) :: sr(1:ncol) -- real(kind_phys), intent(inout) :: f_ice(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: f_rain(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: f_rimef(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) ! QRIMEF -- -- real(kind_phys), intent(inout) :: prec(1:ncol) -+ real(kind_phys), intent(inout) :: t(:,:) -+ real(kind_phys), intent(inout) :: q(:,:) -+ real(kind_phys), intent(inout) :: cwm(:,:) -+ real(kind_phys), intent(inout) :: train(:,:) -+ real(kind_phys), intent(out ) :: sr(:) -+ real(kind_phys), intent(inout) :: f_ice(:,:) -+ real(kind_phys), intent(inout) :: f_rain(:,:) -+ real(kind_phys), intent(inout) :: f_rimef(:,:) -+ real(kind_phys), intent(inout) :: qc(:,:) -+ real(kind_phys), intent(inout) :: qr(:,:) -+ real(kind_phys), intent(inout) :: qi(:,:) -+ real(kind_phys), intent(inout) :: qg(:,:) ! QRIMEF -+ -+ real(kind_phys), intent(inout) :: prec(:) - ! real(kind_phys) :: acprec(1:ncol) !MZ: change to local -- real(kind_phys), intent(inout) :: refl_10cm(1:ncol,1:nlev) -+ real(kind_phys), intent(inout) :: refl_10cm(:,:) - real(kind_phys), intent(in ) :: rhgrd -- real(kind_phys), intent(in ) :: dx(1:ncol) -+ real(kind_phys), intent(in ) :: dx(:) - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! -diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 -index ec19945..ef4748c 100644 ---- a/physics/mp_thompson.F90 -+++ b/physics/mp_thompson.F90 -@@ -380,14 +380,14 @@ module mp_thompson - real(kind_phys), intent(in ) :: con_g - real(kind_phys), intent(in ) :: con_rd - ! Hydrometeors -- real(kind_phys), intent(inout) :: spechum(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qs(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: ni(1:ncol,1:nlev) -- real(kind_phys), intent(inout) :: nr(1:ncol,1:nlev) -+ real(kind_phys), intent(inout) :: spechum(:,:) -+ real(kind_phys), intent(inout) :: qc(:,:) -+ real(kind_phys), intent(inout) :: qr(:,:) -+ real(kind_phys), intent(inout) :: qi(:,:) -+ real(kind_phys), intent(inout) :: qs(:,:) -+ real(kind_phys), intent(inout) :: qg(:,:) -+ real(kind_phys), intent(inout) :: ni(:,:) -+ real(kind_phys), intent(inout) :: nr(:,:) - ! Aerosols - logical, intent(in) :: is_aerosol_aware, reset - ! The following arrays are not allocated if is_aerosol_aware is false -@@ -397,25 +397,25 @@ module mp_thompson - real(kind_phys), optional, intent(in ) :: nwfa2d(:) - real(kind_phys), optional, intent(in ) :: nifa2d(:) - ! State variables and timestep information -- real(kind_phys), intent(inout) :: tgrs(1:ncol,1:nlev) -- real(kind_phys), intent(in ) :: prsl(1:ncol,1:nlev) -- real(kind_phys), intent(in ) :: phii(1:ncol,1:nlev+1) -- real(kind_phys), intent(in ) :: omega(1:ncol,1:nlev) -+ real(kind_phys), intent(inout) :: tgrs(:,:) -+ real(kind_phys), intent(in ) :: prsl(:,:) -+ real(kind_phys), intent(in ) :: phii(:,:) -+ real(kind_phys), intent(in ) :: omega(:,:) - real(kind_phys), intent(in ) :: dtp - ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip -- real(kind_phys), intent( out) :: prcp(1:ncol) -- real(kind_phys), intent( out) :: rain(1:ncol) -- real(kind_phys), intent( out) :: graupel(1:ncol) -- real(kind_phys), intent( out) :: ice(1:ncol) -- real(kind_phys), intent( out) :: snow(1:ncol) -- real(kind_phys), intent( out) :: sr(1:ncol) -+ real(kind_phys), intent( out) :: prcp(:) -+ real(kind_phys), intent( out) :: rain(:) -+ real(kind_phys), intent( out) :: graupel(:) -+ real(kind_phys), intent( out) :: ice(:) -+ real(kind_phys), intent( out) :: snow(:) -+ real(kind_phys), intent( out) :: sr(:) - ! Radar reflectivity -- real(kind_phys), intent( out) :: refl_10cm(1:ncol,1:nlev) -+ real(kind_phys), intent( out) :: refl_10cm(:,:) - logical, optional, intent(in ) :: do_radar_ref - ! Cloud effective radii -- real(kind_phys), optional, intent( out) :: re_cloud(1:ncol,1:nlev) -- real(kind_phys), optional, intent( out) :: re_ice(1:ncol,1:nlev) -- real(kind_phys), optional, intent( out) :: re_snow(1:ncol,1:nlev) -+ real(kind_phys), optional, intent( out) :: re_cloud(:,:) -+ real(kind_phys), optional, intent( out) :: re_ice(:,:) -+ real(kind_phys), optional, intent( out) :: re_snow(:,:) - ! MPI information - integer, intent(in) :: mpicomm - integer, intent(in) :: mpirank -diff --git a/physics/mp_thompson_post.F90 b/physics/mp_thompson_post.F90 -index cca7495..36e3093 100644 ---- a/physics/mp_thompson_post.F90 -+++ b/physics/mp_thompson_post.F90 -@@ -59,9 +59,9 @@ contains - ! Interface variables - integer, intent(in) :: ncol - integer, intent(in) :: nlev -- real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: tgrs_save -- real(kind_phys), dimension(1:ncol,1:nlev), intent(inout) :: tgrs -- real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: prslk -+ real(kind_phys), dimension(:,:), intent(in) :: tgrs_save -+ real(kind_phys), dimension(:,:), intent(inout) :: tgrs -+ real(kind_phys), dimension(:,:), intent(in) :: prslk - real(kind_phys), intent(in) :: dtp - real(kind_phys), intent(in) :: ttendlim - integer, intent(in) :: kdt -diff --git a/physics/mp_thompson_pre.F90 b/physics/mp_thompson_pre.F90 -index 4087ac8..957c1f1 100644 ---- a/physics/mp_thompson_pre.F90 -+++ b/physics/mp_thompson_pre.F90 -@@ -28,8 +28,8 @@ module mp_thompson_pre - ! Interface variables - integer, intent(in ) :: ncol - integer, intent(in ) :: nlev -- real(kind_phys), intent(in ) :: tgrs(1:ncol,1:nlev) -- real(kind_phys), intent( out) :: tgrs_save(1:ncol,1:nlev) -+ real(kind_phys), intent(in ) :: tgrs(:,:) -+ real(kind_phys), intent( out) :: tgrs_save(:,:) - - ! CCPP error handling - character(len=*), intent( out) :: errmsg -diff --git a/physics/ozphys.f b/physics/ozphys.f -index f8da587..ba6cb45 100644 ---- a/physics/ozphys.f -+++ b/physics/ozphys.f -@@ -68,8 +68,8 @@ - real(kind=kind_phys), intent(inout) :: & - & ozp1(:,:), ozp2(:,:), ozp3(:,:), ozp4(:,:) - real(kind=kind_phys), intent(in) :: & -- & dt, po3(ko3), prdout(im,ko3,oz_coeff), & -- & prsl(im,levs), tin(im,levs), delp(im,levs), & -+ & dt, po3(:), prdout(:,:,:), & -+ & prsl(:,:), tin(:,:), delp(:,:), & - & con_g - real :: gravi - logical, intent(in) :: ldiag3d, qdiag3d -diff --git a/physics/ozphys_2015.f b/physics/ozphys_2015.f -index 238a8fb..113dc03 100644 ---- a/physics/ozphys_2015.f -+++ b/physics/ozphys_2015.f -@@ -67,14 +67,14 @@ - real(kind=kind_phys),intent(in) :: con_g - real :: gravi - integer, intent(in) :: im, levs, ko3, pl_coeff,me -- real(kind=kind_phys), intent(in) :: po3(ko3), & -- & prsl(im,levs), tin(im,levs), & -- & delp(im,levs), & -- & prdout(im,ko3,pl_coeff), dt -+ real(kind=kind_phys), intent(in) :: po3(:), & -+ & prsl(:,:), tin(:,:), & -+ & delp(:,:), & -+ & prdout(:,:,:), dt - ! These arrays may not be allocated and need assumed array sizes - real(kind=kind_phys), intent(inout) :: & - & ozp1(:,:), ozp2(:,:), ozp3(:,:),ozp4(:,:) -- real(kind=kind_phys), intent(inout) :: oz(im,levs) -+ real(kind=kind_phys), intent(inout) :: oz(:,:) - - - character(len=*), intent(out) :: errmsg -diff --git a/physics/precpd.f b/physics/precpd.f -index 0e33055..8d58a38 100644 ---- a/physics/precpd.f -+++ b/physics/precpd.f -@@ -102,13 +102,13 @@ - ! Interface variables - integer, intent(in) :: im, km, jpr - real (kind=kind_phys), intent(in) :: dt -- real (kind=kind_phys), intent(in) :: del(im,km), prsl(im,km) -- real (kind=kind_phys), intent(inout) :: q(im,km), t(im,km), & -- & cwm(im,km) -- real (kind=kind_phys), intent(out) :: rn(im), sr(im), rainp(im,km) -- real (kind=kind_phys), intent(in) :: u00k(im,km) -- real (kind=kind_phys), intent(in) :: psautco(2), prautco(2), & -- & evpco, wminco(2), wk1(im) -+ real (kind=kind_phys), intent(in) :: del(:,:), prsl(:,:) -+ real (kind=kind_phys), intent(inout) :: q(:,:), t(:,:), & -+ & cwm(:,:) -+ real (kind=kind_phys), intent(out) :: rn(:), sr(:), rainp(:,:) -+ real (kind=kind_phys), intent(in) :: u00k(:,:) -+ real (kind=kind_phys), intent(in) :: psautco(:), prautco(:), & -+ & evpco, wminco(:), wk1(:) - logical, intent(in) :: lprnt - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/radlw_main.f b/physics/radlw_main.f -index 7b029f8..e45e556 100644 ---- a/physics/radlw_main.f -+++ b/physics/radlw_main.f -@@ -572,44 +572,44 @@ - - logical, intent(in) :: lprnt - -- real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: plvl, & -+ real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, & - & tlvl -- real (kind=kind_phys), dimension(npts,nlay), intent(in) :: plyr, & -+ real (kind=kind_phys), dimension(:,:), intent(in) :: plyr, & - & tlyr, qlyr, olyr, dzlyr, delpin - -- real (kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2,& -+ real (kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2, & - & gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & - & gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4 - -- real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf -- real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & -+ real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf -+ real (kind=kind_phys), dimension(:,:),intent(in),optional:: & - & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & - & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & - & cld_od - -- real (kind=kind_phys), dimension(npts), intent(in) :: sfemis, & -+ real (kind=kind_phys), dimension(:), intent(in) :: sfemis, & - & sfgtmp, de_lgth - -- real (kind=kind_phys), dimension(npts,nlay,nbands),intent(in):: & -+ real (kind=kind_phys), dimension(:,:,:),intent(in):: & - & aeraod, aerssa - - ! --- outputs: -- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hlwc -- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: hlwc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: & - & cldtau - -- type (topflw_type), dimension(npts), intent(inout) :: topflx -- type (sfcflw_type), dimension(npts), intent(inout) :: sfcflx -+ type (topflw_type), dimension(:), intent(inout) :: topflx -+ type (sfcflw_type), dimension(:), intent(inout) :: sfcflx - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - !! --- optional outputs: -- real (kind=kind_phys), dimension(npts,nlay,nbands),optional, & -+ real (kind=kind_phys), dimension(:,:,:),optional, & - & intent(inout) :: hlwb -- real (kind=kind_phys), dimension(npts,nlay), optional, & -+ real (kind=kind_phys), dimension(:,:), optional, & - & intent(inout) :: hlw0 -- type (proflw_type), dimension(npts,nlp1), optional, & -+ type (proflw_type), dimension(:,:), optional, & - & intent(inout) :: flxprf - logical, intent(in) :: lslwr - -diff --git a/physics/radsw_main.f b/physics/radsw_main.f -index b10541f..7f41cca 100644 ---- a/physics/radsw_main.f -+++ b/physics/radsw_main.f -@@ -659,59 +659,59 @@ - - logical, intent(in) :: lprnt, lsswr - -- real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: & -+ real (kind=kind_phys), dimension(:,:), intent(in) :: & - & plvl, tlvl -- real (kind=kind_phys), dimension(npts,nlay), intent(in) :: & -+ real (kind=kind_phys), dimension(:,:), intent(in) :: & - & plyr, tlyr, qlyr, olyr, dzlyr, delpin - -- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir -- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif -- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dir -- real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dif -- -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_n2o -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ch4 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_o2 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc11 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc12 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc22 -- real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ccl4 -- -- real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf -- real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & -+ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dir -+ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dif -+ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dir -+ real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dif -+ -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_n2o -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ch4 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_o2 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc11 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc12 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc22 -+ real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ccl4 -+ -+ real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf -+ real (kind=kind_phys), dimension(:,:),intent(in),optional:: & - & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & - & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & - & cld_od, cld_ssa, cld_asy - -- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aeraod -- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerssa -- real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerasy -+ real(kind=kind_phys),dimension(:,:,:),intent(in)::aeraod -+ real(kind=kind_phys),dimension(:,:,:),intent(in)::aerssa -+ real(kind=kind_phys),dimension(:,:,:),intent(in)::aerasy - - real (kind=kind_phys), intent(in) :: cosz(npts), solcon, & - & de_lgth(npts) - - ! --- outputs: -- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hswc -- real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: hswc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: & - & cldtau - -- type (topfsw_type), dimension(npts), intent(inout) :: topflx -- type (sfcfsw_type), dimension(npts), intent(inout) :: sfcflx -+ type (topfsw_type), dimension(:), intent(inout) :: topflx -+ type (sfcfsw_type), dimension(:), intent(inout) :: sfcflx - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - !! --- optional outputs: -- real (kind=kind_phys), dimension(npts,nlay,nbdsw), optional, & -+ real (kind=kind_phys), dimension(:,:,:), optional, & - & intent(inout) :: hswb - -- real (kind=kind_phys), dimension(npts,nlay), optional, & -+ real (kind=kind_phys), dimension(:,:), optional, & - & intent(inout) :: hsw0 -- type (profsw_type), dimension(npts,nlp1), optional, & -+ type (profsw_type), dimension(:,:), optional, & - & intent(inout) :: flxprf -- type (cmpfsw_type), dimension(npts), optional, & -+ type (cmpfsw_type), dimension(:), optional, & - & intent(inout) :: fdncmp - - ! --- locals: -diff --git a/physics/rayleigh_damp.f b/physics/rayleigh_damp.f -index a56a85e..579370c 100644 ---- a/physics/rayleigh_damp.f -+++ b/physics/rayleigh_damp.f -@@ -71,9 +71,9 @@ - logical,intent(in) :: lsidea,ldiag3d - integer,intent(in) :: im, km,levr - real(kind=kind_phys),intent(in) :: DT, CP, PRSLRD0, ral_ts -- real(kind=kind_phys),intent(in) :: pgr(im), PRSL(IM,KM) -- real(kind=kind_phys),intent(in) :: U1(IM,KM), V1(IM,KM) -- real(kind=kind_phys),intent(inout) :: A(IM,KM), B(IM,KM), C(IM,KM) -+ real(kind=kind_phys),intent(in) :: pgr(:), PRSL(:,:) -+ real(kind=kind_phys),intent(in) :: U1(:,:), V1(:,:) -+ real(kind=kind_phys),intent(inout) :: A(:,:), B(:,:), C(:,:) - real(kind=kind_phys),intent(inout) :: du3dt(:,:) - real(kind=kind_phys),intent(inout) :: dv3dt(:,:) - real(kind=kind_phys),intent(inout) :: dt3dt(:,:) -diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 -index af83c5c..7715ed7 100644 ---- a/physics/rrtmg_lw_post.F90 -+++ b/physics/rrtmg_lw_post.F90 -@@ -30,8 +30,8 @@ - type(GFS_grid_type), intent(in) :: Grid - type(GFS_radtend_type), intent(inout) :: Radtend - integer, intent(in) :: im, ltp, LM, kd -- real(kind=kind_phys), dimension(size(Grid%xlon,1), lm+LTP), intent(in) :: htlwc, htlw0 -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa -+ real(kind=kind_phys), dimension(:,:), intent(in) :: htlwc, htlw0 -+ real(kind=kind_phys), dimension(:), intent(in) :: tsfa - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! local variables -diff --git a/physics/rrtmg_lw_pre.F90 b/physics/rrtmg_lw_pre.F90 -index 7de02ee..1e46717 100644 ---- a/physics/rrtmg_lw_pre.F90 -+++ b/physics/rrtmg_lw_pre.F90 -@@ -30,7 +30,7 @@ - type(GFS_sfcprop_type), intent(in) :: Sfcprop - type(GFS_grid_type), intent(in) :: Grid - integer, intent(in) :: im -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg -+ real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 -index b0ab311..b9534e0 100644 ---- a/physics/rrtmg_sw_post.F90 -+++ b/physics/rrtmg_sw_post.F90 -@@ -35,9 +35,9 @@ - type(GFS_grid_type), intent(in) :: Grid - type(GFS_diag_type), intent(inout) :: Diag - integer, intent(in) :: im, lm, kd, nday, ltp -- type(cmpfsw_type), dimension(size(Grid%xlon,1)), intent(inout) :: scmpsw -- real(kind=kind_phys), dimension(Size(Grid%xlon,1), lm+LTP), intent(in) :: htswc, htsw0 -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 -+ type(cmpfsw_type), dimension(:), intent(inout) :: scmpsw -+ real(kind=kind_phys), dimension(:,:), intent(in) :: htswc, htsw0 -+ real(kind=kind_phys), dimension(:), intent(in) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! Local variables -diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 -index 05e8d4c..3ef89c8 100644 ---- a/physics/rrtmg_sw_pre.F90 -+++ b/physics/rrtmg_sw_pre.F90 -@@ -34,10 +34,10 @@ - type(GFS_grid_type), intent(in) :: Grid - integer, intent(in) :: im - integer, intent(out) :: nday -- integer, dimension(size(Grid%xlon,1)), intent(out) :: idxday -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: tsfa, tsfg -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 -- real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: alb1d -+ integer, dimension(:), intent(out) :: idxday -+ real(kind=kind_phys), dimension(:), intent(in) :: tsfa, tsfg -+ real(kind=kind_phys), dimension(:), intent(out) :: sfcalb1, sfcalb2, sfcalb3, sfcalb4 -+ real(kind=kind_phys), dimension(:), intent(in) :: alb1d - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - ! Local variables -diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 -index 2047dea..0b4339b 100644 ---- a/physics/rrtmgp_lw_aerosol_optics.F90 -+++ b/physics/rrtmgp_lw_aerosol_optics.F90 -@@ -40,20 +40,20 @@ contains - nLev, & ! Number of vertical layers - nTracer, & ! Number of tracers - nTracerAer ! Number of aerosol tracers -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lon, & ! Longitude - lat, & ! Latitude - lsmask ! Land/sea/sea-ice mask -- real(kind_phys), dimension(nCol,Nlev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - p_lay, & ! Pressure @ layer-centers (Pa) - tv_lay, & ! Virtual-temperature @ layer-centers (K) - relhum, & ! Relative-humidity @ layer-centers - p_lk ! Exner function @ layer-centers (1) -- real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & -+ real(kind_phys), dimension(:,:, :),intent(in) :: & - tracer ! trace gas concentrations -- real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & -+ real(kind_phys), dimension(:,:, :),intent(in) :: & - aerfld ! aerosol input concentrations -- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - p_lev ! Pressure @ layer-interfaces (Pa) - type(ty_gas_optics_rrtmgp),intent(in) :: & - sw_gas_props ! RRTMGP DDT: spectral information for SW calculation -@@ -61,7 +61,7 @@ contains - lw_gas_props ! RRTMGP DDT: spectral information for LW calculation - - ! Outputs -- real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & -+ real(kind_phys), dimension(:,:), intent(inout) :: & - aerodp ! Vertical integrated optical depth for various aerosol species - type(ty_optical_props_1scl),intent(out) :: & - lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) -diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 -index 93e3899..f679154 100644 ---- a/physics/rrtmgp_lw_cloud_optics.F90 -+++ b/physics/rrtmgp_lw_cloud_optics.F90 -@@ -286,10 +286,10 @@ contains - nCol, & ! Number of horizontal gridpoints - nLev, & ! Number of vertical levels - nrghice ! Number of ice-roughness categories -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lon, & ! Longitude - lat ! Latitude -- real(kind_phys), dimension(ncol,nLev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - p_lay, & ! Layer pressure (Pa) - cld_frac, & ! Total cloud fraction by layer - cld_lwp, & ! Cloud liquid water path -@@ -314,7 +314,7 @@ contains - type(ty_optical_props_1scl),intent(out) :: & - lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) - lw_optical_props_precipByBand ! RRTMGP DDT: Longwave optical properties in each band (precipitation) -- real(kind_phys), dimension(ncol,nLev), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - cldtaulw ! Approx 10.mu band layer cloud optical depth - - ! Local variables -diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 -index 1d6cc06..c5de7b5 100644 ---- a/physics/rrtmgp_lw_cloud_sampling.F90 -+++ b/physics/rrtmgp_lw_cloud_sampling.F90 -@@ -57,15 +57,15 @@ contains - nCol, & ! Number of horizontal gridpoints - nLev, & ! Number of vertical layers - ipsdlw0 ! Initial permutation seed for McICA -- integer,intent(in),dimension(ncol) :: & -+ integer,intent(in),dimension(:) :: & - icseed_lw ! auxiliary special cloud related array when module - ! variable isubclw=2, it provides permutation seed - ! for each column profile that are used for generating - ! random numbers. when isubclw /=2, it will not be used. -- real(kind_phys), dimension(ncol,nLev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - cld_frac, & ! Total cloud fraction by layer - precip_frac ! Precipitation fraction by layer -- real(kind_phys), dimension(ncol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - cloud_overlap_param, & ! Cloud overlap parameter - precip_overlap_param ! Precipitation overlap parameter - type(ty_gas_optics_rrtmgp),intent(in) :: & -diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 -index 787db6b..deea465 100644 ---- a/physics/rrtmgp_lw_gas_optics.F90 -+++ b/physics/rrtmgp_lw_gas_optics.F90 -@@ -28,7 +28,7 @@ contains - rrtmgp_lw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties - integer, intent(in) :: & - rrtmgp_nGases ! Number of trace gases active in RRTMGP -- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & -+ character(len=*),dimension(:), intent(in) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - integer,intent(in) :: & - mpicomm, & ! MPI communicator -@@ -292,13 +292,13 @@ contains - nLev ! Number of vertical levels - type(ty_gas_optics_rrtmgp),intent(in) :: & - lw_gas_props ! RRTMGP DDT: -- real(kind_phys), dimension(ncol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lay, & ! Pressure @ model layer-centers (hPa) - t_lay ! Temperature (K) -- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lev, & ! Pressure @ model layer-interfaces (hPa) - t_lev ! Temperature @ model levels -- real(kind_phys), dimension(ncol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - skt ! Surface(skin) temperature (K) - type(ty_gas_concs),intent(in) :: & - gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) -diff --git a/physics/rrtmgp_lw_pre.F90 b/physics/rrtmgp_lw_pre.F90 -index 1148c67..8bede8c 100644 ---- a/physics/rrtmgp_lw_pre.F90 -+++ b/physics/rrtmgp_lw_pre.F90 -@@ -39,7 +39,7 @@ contains - doLWrad ! Logical flag for longwave radiation call - integer, intent(in) :: & - nCol ! Number of horizontal grid points -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - xlon, & ! Longitude - xlat, & ! Latitude - slmsk, & ! Land/sea/sea-ice mask -@@ -52,13 +52,13 @@ contains - lw_gas_props ! RRTMGP DDT: spectral information for LW calculation - - ! Outputs -- real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - sfc_emiss_byband ! Surface emissivity in each band - character(len=*), intent(out) :: & - errmsg ! Error message - integer, intent(out) :: & - errflg ! Error flag -- real(kind_phys), dimension(nCol), intent(out) :: & -+ real(kind_phys), dimension(:), intent(out) :: & - semis - - ! Local variables -diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 -index dc49260..137512c 100644 ---- a/physics/rrtmgp_lw_rte.F90 -+++ b/physics/rrtmgp_lw_rte.F90 -@@ -43,16 +43,16 @@ contains - nCol, & ! Number of horizontal gridpoints - nLev, & ! Number of vertical levels - nGauss_angles ! Number of angles used in Gaussian quadrature -- real(kind_phys), dimension(ncol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lay, & ! Pressure @ model layer-centers (hPa) - t_lay ! Temperature (K) -- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lev ! Pressure @ model layer-interfaces (hPa) -- real(kind_phys), dimension(ncol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - skt ! Surface(skin) temperature (K) - type(ty_gas_optics_rrtmgp),intent(in) :: & - lw_gas_props ! RRTMGP DDT: longwave spectral information -- real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - sfc_emiss_byband ! Surface emissivity in each band - type(ty_source_func_lw),intent(in) :: & - sources ! RRTMGP DDT: longwave source functions -@@ -62,7 +62,7 @@ contains - lw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties - lw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties - ! Outputs -- real(kind_phys), dimension(ncol,nLev+1), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - fluxlwUP_allsky, & ! All-sky flux (W/m2) - fluxlwDOWN_allsky, & ! All-sky flux (W/m2) - fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) -@@ -72,7 +72,7 @@ contains - integer, intent(out) :: & - errflg ! CCPP error flag - ! Outputs (optional) -- real(kind_phys), dimension(ncol,nLev+1), intent(out), optional :: & -+ real(kind_phys), dimension(:,:), intent(out), optional :: & - fluxlwUP_jac, & ! Jacobian of upward LW flux (W/m2/K) - fluxlwDOWN_jac ! Jacobian of downward LW flux (W/m2/K) - -diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 -index 4bb0342..b689550 100644 ---- a/physics/rrtmgp_sw_aerosol_optics.F90 -+++ b/physics/rrtmgp_sw_aerosol_optics.F90 -@@ -41,22 +41,22 @@ contains - nLev, & ! Number of vertical layers - nTracer, & ! Number of tracers - nTracerAer ! Number of aerosol tracers -- integer,intent(in),dimension(nCol) :: & -+ integer,intent(in),dimension(:) :: & - idxday ! Indices for daylit points. -- real(kind_phys), dimension(nCol), intent(in) :: & -+ real(kind_phys), dimension(:), intent(in) :: & - lon, & ! Longitude - lat, & ! Latitude - lsmask ! Land/sea/sea-ice mask -- real(kind_phys), dimension(nCol,Nlev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - p_lay, & ! Pressure @ layer-centers (Pa) - tv_lay, & ! Virtual-temperature @ layer-centers (K) - relhum, & ! Relative-humidity @ layer-centers - p_lk ! Exner function @ layer-centers (1) -- real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & -+ real(kind_phys), dimension(:, :,:),intent(in) :: & - tracer ! trace gas concentrations -- real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & -+ real(kind_phys), dimension(:, :,:),intent(in) :: & - aerfld ! aerosol input concentrations -- real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - p_lev ! Pressure @ layer-interfaces (Pa) - type(ty_gas_optics_rrtmgp),intent(in) :: & - sw_gas_props ! RRTMGP DDT: spectral information for SW calculation -@@ -64,7 +64,7 @@ contains - lw_gas_props ! RRTMGP DDT: spectral information for LW calculation - - ! Outputs -- real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & -+ real(kind_phys), dimension(:,:), intent(inout) :: & - aerodp ! Vertical integrated optical depth for various aerosol species - type(ty_optical_props_2str),intent(out) :: & - sw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) -diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 -index 7ab3c27..7907751 100644 ---- a/physics/rrtmgp_sw_cloud_optics.F90 -+++ b/physics/rrtmgp_sw_cloud_optics.F90 -@@ -304,9 +304,9 @@ contains - nLev, & ! Number of vertical levels - nday, & ! Number of daylit points. - nrghice ! Number of ice-roughness categories -- integer,intent(in),dimension(ncol) :: & -+ integer,intent(in),dimension(:) :: & - idxday ! Indices for daylit points. -- real(kind_phys), dimension(ncol,nLev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - cld_frac, & ! Total cloud fraction by layer - cld_lwp, & ! Cloud liquid water path - cld_reliq, & ! Cloud liquid effective radius -@@ -330,7 +330,7 @@ contains - type(ty_optical_props_2str),intent(out) :: & - sw_optical_props_cloudsByBand, & ! RRTMGP DDT: Shortwave optical properties in each band (clouds) - sw_optical_props_precipByBand ! RRTMGP DDT: Shortwave optical properties in each band (cloud precipitation) -- real(kind_phys), dimension(ncol,NLev), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - cldtausw ! Approx 10.mu band layer cloud optical depth - - ! Local variables -diff --git a/physics/rrtmgp_sw_cloud_sampling.F90 b/physics/rrtmgp_sw_cloud_sampling.F90 -index 0a0511b..617bbfc 100644 ---- a/physics/rrtmgp_sw_cloud_sampling.F90 -+++ b/physics/rrtmgp_sw_cloud_sampling.F90 -@@ -58,17 +58,17 @@ contains - nDay, & ! Number of daylit points. - nLev, & ! Number of vertical layers - ipsdsw0 ! Initial permutation seed for McICA -- integer,intent(in),dimension(ncol) :: & -+ integer,intent(in),dimension(:) :: & - idxday ! Indices for daylit points. -- integer,intent(in),dimension(ncol) :: & -+ integer,intent(in),dimension(:) :: & - icseed_sw ! auxiliary special cloud related array when module - ! variable isubcsw=2, it provides permutation seed - ! for each column profile that are used for generating - ! random numbers. when isubcsw /=2, it will not be used. -- real(kind_phys), dimension(ncol,nLev),intent(in) :: & -+ real(kind_phys), dimension(:,:),intent(in) :: & - cld_frac, & ! Total cloud fraction by layer - precip_frac ! Precipitation fraction by layer -- real(kind_phys), dimension(ncol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - cloud_overlap_param, & ! Cloud overlap parameter - precip_overlap_param ! Precipitation overlap parameter - type(ty_gas_optics_rrtmgp),intent(in) :: & -diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 -index efe611e..fb14a57 100644 ---- a/physics/rrtmgp_sw_gas_optics.F90 -+++ b/physics/rrtmgp_sw_gas_optics.F90 -@@ -28,7 +28,7 @@ contains - rrtmgp_sw_file_gas ! RRTMGP file containing coefficients used to compute gaseous optical properties - integer, intent(in) :: & - rrtmgp_nGases ! Number of trace gases active in RRTMGP -- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & -+ character(len=*),dimension(:), intent(in) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - integer,intent(in) :: & - mpicomm, & ! MPI communicator -@@ -302,14 +302,14 @@ contains - nDay, & ! Number of daylit points. - nCol, & ! Number of horizontal points - nLev ! Number of vertical levels -- integer,intent(in),dimension(ncol) :: & -+ integer,intent(in),dimension(:) :: & - idxday ! Indices for daylit points. - type(ty_gas_optics_rrtmgp),intent(in) :: & - sw_gas_props ! RRTMGP DDT: spectral information for RRTMGP SW radiation scheme -- real(kind_phys), dimension(ncol,nLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lay, & ! Pressure @ model layer-centers (hPa) - t_lay ! Temperature (K) -- real(kind_phys), dimension(ncol,nLev+1), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lev, & ! Pressure @ model layer-interfaces (hPa) - t_lev ! Temperature @ model levels - type(ty_gas_concs),intent(in) :: & -@@ -318,7 +318,7 @@ contains - solcon ! Solar constant - integer, intent(in) :: & - rrtmgp_nGases ! Number of trace gases active in RRTMGP -- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & -+ character(len=*),dimension(:), intent(in) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - - ! Output -@@ -328,7 +328,7 @@ contains - errflg ! CCPP error code - type(ty_optical_props_2str),intent(out) :: & - sw_optical_props_clrsky ! RRTMGP DDT: clear-sky shortwave optical properties, spectral (tau,ssa,g) -- real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(out) :: & -+ real(kind_phys), dimension(:,:), intent(out) :: & - toa_src_sw ! TOA incident spectral flux (W/m2) - - ! Local variables -diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 -index 9719c6e..2bcfe4f 100644 ---- a/physics/rrtmgp_sw_rte.F90 -+++ b/physics/rrtmgp_sw_rte.F90 -@@ -42,14 +42,14 @@ contains - nCol, & ! Number of horizontal gridpoints - nday, & ! Number of daytime points - nLev ! Number of vertical levels -- integer, intent(in), dimension(ncol) :: & -+ integer, intent(in), dimension(:) :: & - idxday ! Index array for daytime points -- real(kind_phys),intent(in), dimension(ncol) :: & -+ real(kind_phys),intent(in), dimension(:) :: & - coszen ! Cosize of SZA -- real(kind_phys), dimension(ncol,NLev), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lay, & ! Pressure @ model layer-centers (Pa) - t_lay ! Temperature (K) -- real(kind_phys), dimension(ncol,NLev+1), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - p_lev ! Pressure @ model layer-interfaces (Pa) - type(ty_gas_optics_rrtmgp),intent(in) :: & - sw_gas_props ! RRTMGP DDT: SW spectral information -@@ -58,16 +58,16 @@ contains - type(ty_optical_props_2str),intent(in) :: & - sw_optical_props_clouds, & ! RRTMGP DDT: shortwave cloud radiative properties - sw_optical_props_aerosol ! RRTMGP DDT: shortwave aerosol radiative properties -- real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - sfc_alb_nir_dir, & ! Surface albedo (direct) - sfc_alb_nir_dif, & ! Surface albedo (diffuse) - sfc_alb_uvvis_dir, & ! Surface albedo (direct) - sfc_alb_uvvis_dif ! Surface albedo (diffuse) -- real(kind_phys), dimension(ncol,sw_gas_props%get_ngpt()), intent(in) :: & -+ real(kind_phys), dimension(:,:), intent(in) :: & - toa_src_sw ! TOA incident spectral flux (W/m2) - integer, intent(in) :: & - rrtmgp_nGases ! Number of trace gases active in RRTMGP -- character(len=*),dimension(rrtmgp_nGases), intent(in) :: & -+ character(len=*),dimension(:), intent(in) :: & - active_gases_array ! Character array containing trace gases to include in RRTMGP - - ! Outputs -@@ -75,14 +75,14 @@ contains - errmsg ! CCPP error message - integer, intent(out) :: & - errflg ! CCPP error flag -- real(kind_phys), dimension(ncol,NLev+1), intent(inout) :: & -+ real(kind_phys), dimension(:,:), intent(inout) :: & - fluxswUP_allsky, & ! RRTMGP upward all-sky flux profiles (W/m2) - fluxswDOWN_allsky, & ! RRTMGP downward all-sky flux profiles (W/m2) - fluxswUP_clrsky, & ! RRTMGP upward clear-sky flux profiles (W/m2) - fluxswDOWN_clrsky ! RRTMGP downward clear-sky flux profiles (W/m2) - - ! Outputs (optional) -- type(cmpfsw_type), dimension(ncol), intent(inout),optional :: & -+ type(cmpfsw_type), dimension(:), intent(inout),optional :: & - scmpsw ! 2D surface fluxes, components: - ! uvbfc - total sky downward uv-b flux (W/m2) - ! uvbf0 - clear sky downward uv-b flux (W/m2) -diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f -index 67576af..d67ebb7 100644 ---- a/physics/samfdeepcnv.f -+++ b/physics/samfdeepcnv.f -@@ -87,29 +87,29 @@ - implicit none - ! - integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud -- integer, intent(in) :: islimsk(im) -+ integer, intent(in) :: islimsk(:) - real(kind=kind_phys), intent(in) :: cliq, cp, cvap, eps, epsm1, & - & fv, grav, hvap, rd, rv, t0c - real(kind=kind_phys), intent(in) :: delt -- real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & -- & prslp(im,km), garea(im), dot(im,km), phil(im,km) -+ real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & -+ & prslp(:,:), garea(:), dot(:,:), phil(:,:) - real(kind=kind_phys), dimension(:), intent(in) :: fscav - logical, intent(in) :: hwrf_samfdeep - real(kind=kind_phys), intent(in) :: nthresh -- real(kind=kind_phys), intent(in) :: ca_deep(im) -- real(kind=kind_phys), intent(out) :: rainevap(im) -+ real(kind=kind_phys), intent(in) :: ca_deep(:) -+ real(kind=kind_phys), intent(out) :: rainevap(:) - logical, intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger - -- integer, intent(inout) :: kcnv(im) -+ integer, intent(inout) :: kcnv(:) - ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH -- real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & -- & q1(im,km), t1(im,km), u1(im,km), v1(im,km), & -- & cnvw(im,km), cnvc(im,km) -+ real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & -+ & q1(:,:), t1(:,:), u1(:,:), v1(:,:), & -+ & cnvw(:,:), cnvc(:,:) - -- integer, intent(out) :: kbot(im), ktop(im) -- real(kind=kind_phys), intent(out) :: cldwrk(im), & -- & rn(im), & -- & ud_mf(im,km),dd_mf(im,km), dt_mf(im,km) -+ integer, intent(out) :: kbot(:), ktop(:) -+ real(kind=kind_phys), intent(out) :: cldwrk(:), & -+ & rn(:), & -+ & ud_mf(:,:),dd_mf(:,:), dt_mf(:,:) - - ! GJF* These variables are conditionally allocated depending on whether the - ! Morrison-Gettelman microphysics is used, so they must be declared -diff --git a/physics/samfshalcnv.f b/physics/samfshalcnv.f -index e489628..9571b55 100644 ---- a/physics/samfshalcnv.f -+++ b/physics/samfshalcnv.f -@@ -63,22 +63,22 @@ - implicit none - ! - integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud -- integer, intent(in) :: islimsk(im) -+ integer, intent(in) :: islimsk(:) - real(kind=kind_phys), intent(in) :: cliq, cp, cvap, & - & eps, epsm1, fv, grav, hvap, rd, rv, t0c - real(kind=kind_phys), intent(in) :: delt -- real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & -- & prslp(im,km), garea(im), hpbl(im), dot(im,km), phil(im,km) -+ real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & -+ & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:) - ! - real(kind=kind_phys), dimension(:), intent(in) :: fscav -- integer, intent(inout) :: kcnv(im) -+ integer, intent(inout) :: kcnv(:) - ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH -- real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & -- & q1(im,km), t1(im,km), u1(im,km), v1(im,km) -+ real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & -+ & q1(:,:), t1(:,:), u1(:,:), v1(:,:) - ! -- integer, intent(out) :: kbot(im), ktop(im) -- real(kind=kind_phys), intent(out) :: rn(im), & -- & cnvw(im,km), cnvc(im,km), ud_mf(im,km), dt_mf(im,km) -+ integer, intent(out) :: kbot(:), ktop(:) -+ real(kind=kind_phys), intent(out) :: rn(:), & -+ & cnvw(:,:), cnvc(:,:), ud_mf(:,:), dt_mf(:,:) - ! - real(kind=kind_phys), intent(in) :: clam, c0s, c1, & - & asolfac, pgcon -diff --git a/physics/satmedmfvdif.F b/physics/satmedmfvdif.F -index f00fb37..69c0bb5 100644 ---- a/physics/satmedmfvdif.F -+++ b/physics/satmedmfvdif.F -@@ -71,8 +71,8 @@ - ! - !---------------------------------------------------------------------- - integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke -- integer, intent(in) :: kinver(im) -- integer, intent(out) :: kpbl(im) -+ integer, intent(in) :: kinver(:) -+ integer, intent(out) :: kpbl(:) - ! - logical, intent(in) :: ldiag3d, qdiag3d - real(kind=kind_phys), intent(inout), dimension(:,:) :: & -@@ -81,26 +81,26 @@ - real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & - & eps,epsm1 - real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s -- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & -- & tdt(im,km), rtg(im,km,ntrac) -+ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & -+ & tdt(:,:), rtg(:,:,:) - real(kind=kind_phys), intent(in) :: & -- & u1(im,km), v1(im,km), & -- & t1(im,km), q1(im,km,ntrac), & -- & swh(im,km), hlw(im,km), & -- & xmu(im), garea(im), & -- & psk(im), rbsoil(im), & -- & zorl(im), tsea(im), & -- & u10m(im), v10m(im), & -- & fm(im), fh(im), & -- & evap(im), heat(im), & -- & stress(im), spd1(im), & -- & prsi(im,km+1), del(im,km), & -- & prsl(im,km), prslk(im,km), & -- & phii(im,km+1), phil(im,km) -+ & u1(:,:), v1(:,:), & -+ & t1(:,:), q1(:,:,:), & -+ & swh(:,:), hlw(:,:), & -+ & xmu(:), garea(:), & -+ & psk(:), rbsoil(:), & -+ & zorl(:), tsea(:), & -+ & u10m(:), v10m(:), & -+ & fm(:), fh(:), & -+ & evap(:), heat(:), & -+ & stress(:), spd1(:), & -+ & prsi(:,:), del(:,:), & -+ & prsl(:,:), prslk(:,:), & -+ & phii(:,:), phil(:,:) - real(kind=kind_phys), intent(out) :: & -- & dusfc(im), dvsfc(im), & -- & dtsfc(im), dqsfc(im), & -- & hpbl(im) -+ & dusfc(:), dvsfc(:), & -+ & dtsfc(:), dqsfc(:), & -+ & hpbl(:) - ! - logical, intent(in) :: dspheat - character(len=*), intent(out) :: errmsg -diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F -index f192788..0773137 100644 ---- a/physics/satmedmfvdifq.F -+++ b/physics/satmedmfvdifq.F -@@ -75,40 +75,40 @@ - ! - !---------------------------------------------------------------------- - integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke, ntoz -- integer, intent(in) :: kinver(im) -- integer, intent(in) :: islimsk(im) -- integer, intent(out) :: kpbl(im) -+ integer, intent(in) :: kinver(:) -+ integer, intent(in) :: islimsk(:) -+ integer, intent(out) :: kpbl(:) - logical, intent(in) :: ldiag3d,qdiag3d - ! - real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & - & eps,epsm1 - real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s - real(kind=kind_phys), intent(in) :: dspfac, bl_upfr, bl_dnfr -- real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & -- & tdt(im,km), rtg(im,km,ntrac) -+ real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & -+ & tdt(:,:), rtg(:,:,:) - real(kind=kind_phys), intent(in) :: & -- & u1(im,km), v1(im,km), & -- & t1(im,km), q1(im,km,ntrac), & -- & swh(im,km), hlw(im,km), & -- & xmu(im), garea(im), & -- & snwdph_lnd(im), & -- & psk(im), rbsoil(im), & -- & zorl(im), tsea(im), & -- & u10m(im), v10m(im), & -- & fm(im), fh(im), & -- & evap(im), heat(im), & -- & stress(im), spd1(im), & -- & prsi(im,km+1), del(im,km), & -- & prsl(im,km), prslk(im,km), & -- & phii(im,km+1), phil(im,km) -+ & u1(:,:), v1(:,:), & -+ & t1(:,:), q1(:,:,:), & -+ & swh(:,:), hlw(:,:), & -+ & xmu(:), garea(:), & -+ & snwdph_lnd(:), & -+ & psk(:), rbsoil(:), & -+ & zorl(:), tsea(:), & -+ & u10m(:), v10m(:), & -+ & fm(:), fh(:), & -+ & evap(:), heat(:), & -+ & stress(:), spd1(:), & -+ & prsi(:,:), del(:,:), & -+ & prsl(:,:), prslk(:,:), & -+ & phii(:,:), phil(:,:) - real(kind=kind_phys), intent(inout), dimension(:,:) :: & - & du3dt(:,:), dv3dt(:,:), & - & dt3dt(:,:), dq3dt(:,:), & - & do3dt(:,:) - real(kind=kind_phys), intent(out) :: & -- & dusfc(im), dvsfc(im), & -- & dtsfc(im), dqsfc(im), & -- & hpbl(im) -+ & dusfc(:), dvsfc(:), & -+ & dtsfc(:), dqsfc(:), & -+ & hpbl(:) - ! - logical, intent(in) :: dspheat - character(len=*), intent(out) :: errmsg -diff --git a/physics/sfc_cice.f b/physics/sfc_cice.f -index f845f60..44b3ee2 100644 ---- a/physics/sfc_cice.f -+++ b/physics/sfc_cice.f -@@ -107,14 +107,14 @@ - logical, intent(in) :: cplflx - - ! real (kind=kind_phys), dimension(im), intent(in) :: u1, v1, & -- real (kind=kind_phys), dimension(im), intent(in) :: & -+ real (kind=kind_phys), dimension(:), intent(in) :: & - & t1, q1, cm, ch, prsl1, wind, dqsfc, dtsfc, dusfc, dvsfc - &, snowd - - logical, intent(in) :: flag_cice(im), flag_iter(im) - - ! --- outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & - & cmm, chh, evap, hflx, stress - &, weasd, snwdph, ep - ! -diff --git a/physics/sfc_diag.f b/physics/sfc_diag.f -index b78c9b2..e91bd0e 100644 ---- a/physics/sfc_diag.f -+++ b/physics/sfc_diag.f -@@ -33,10 +33,10 @@ - ! - integer, intent(in) :: im - real(kind=kind_phys), intent(in) :: grav,cp,eps,epsm1 -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & ps, u1, v1, t1, q1, tskin, & - & qsurf, prslki, evap, fm, fh, fm10, fh2 -- real(kind=kind_phys), dimension(im), intent(out) :: & -+ real(kind=kind_phys), dimension(:), intent(out) :: & - & f10m, u10m, v10m, t2m, q2m - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/sfc_diag_post.F90 b/physics/sfc_diag_post.F90 -index 767e98d..1bf3e7e 100644 ---- a/physics/sfc_diag_post.F90 -+++ b/physics/sfc_diag_post.F90 -@@ -26,11 +26,11 @@ - integer, intent(in) :: im, lsm, lsm_noahmp - logical, intent(in) :: lssav - real(kind=kind_phys), intent(in) :: dtf, con_eps, con_epsm1 -- logical , dimension(im), intent(in) :: dry -- real(kind=kind_phys), dimension(im), intent(in) :: pgr, u10m, v10m -+ logical , dimension(:), intent(in) :: dry -+ real(kind=kind_phys), dimension(:), intent(in) :: pgr, u10m, v10m - real(kind=kind_phys), dimension(:) , intent(in) :: t2mmp, q2mp -- real(kind=kind_phys), dimension(im), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax -- real(kind=kind_phys), dimension(im), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m -+ real(kind=kind_phys), dimension(:), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax -+ real(kind=kind_phys), dimension(:), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg -diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f -index b7ef1ea..93102e4 100644 ---- a/physics/sfc_diff.f -+++ b/physics/sfc_diff.f -@@ -90,24 +90,24 @@ - integer, intent(in) :: im, ivegsrc - integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean - -- integer, dimension(im), intent(in) :: vegtype -+ integer, dimension(:), intent(in) :: vegtype - - logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) -- logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy -+ logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy - -- real(kind=kind_phys), dimension(im), intent(in) :: u10m,v10m -+ real(kind=kind_phys), dimension(:), intent(in) :: u10m,v10m - real(kind=kind_phys), intent(in) :: rvrdm1, eps, epsm1, grav -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & ps,t1,q1,z1,prsl1,prslki,prsik1,prslk1, & - & wind,sigmaf,shdmax, & - & z0pert,ztpert ! mg, sfc-perts -- real(kind=kind_phys), dimension(im), intent(in) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: & - & tskin_wat, tskin_lnd, tskin_ice, & - & tsurf_wat, tsurf_lnd, tsurf_ice, & - & snwdph_wat,snwdph_lnd,snwdph_ice - -- real(kind=kind_phys), dimension(im), intent(in) :: z0rl_wav -- real(kind=kind_phys), dimension(im), intent(inout) :: & -+ real(kind=kind_phys), dimension(:), intent(in) :: z0rl_wav -+ real(kind=kind_phys), dimension(:), intent(inout) :: & - & z0rl_wat, z0rl_lnd, z0rl_ice, & - & ustar_wat, ustar_lnd, ustar_ice, & - & cm_wat, cm_lnd, cm_ice, & -diff --git a/physics/sfc_drv.f b/physics/sfc_drv.f -index 5d8e196..878f08a 100644 ---- a/physics/sfc_drv.f -+++ b/physics/sfc_drv.f -@@ -211,11 +211,11 @@ - integer, intent(in) :: im, km, isot, ivegsrc - real (kind=kind_phys), intent(in) :: grav, cp, hvap, rd, eps, & - & epsm1, rvrdm1 -- real (kind=kind_phys), dimension(5), intent(in) :: pertvegf -+ real (kind=kind_phys), dimension(:), intent(in) :: pertvegf - -- integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp -+ integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp - -- real (kind=kind_phys), dimension(im), intent(in) :: ps, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, & - & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & - & ch, prsl1, prslki, wind, shdmin, shdmax, & - & snoalb, sfalb, zf, & -@@ -223,19 +223,19 @@ - - real (kind=kind_phys), intent(in) :: delt - -- logical, dimension(im), intent(in) :: flag_iter, flag_guess, land -+ logical, dimension(:), intent(in) :: flag_iter, flag_guess, land - - logical, intent(in) :: lheatstrg - - ! --- in/out: -- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & - & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl - -- real (kind=kind_phys), dimension(im,km), intent(inout) :: & -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: & - & smc, stc, slc - - ! --- output: -- real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & - & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & - & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, & - & wet1 -diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 -index 65935ef..ff72777 100644 ---- a/physics/sfc_drv_ruc.F90 -+++ b/physics/sfc_drv_ruc.F90 -@@ -168,9 +168,9 @@ module lsm_ruc - integer, intent(in) :: lsm_ruc, lsm - integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson - -- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: smc,stc,slc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: smc,stc,slc - -- real (kind=kind_phys), dimension(im), intent(in) :: & -+ real (kind=kind_phys), dimension(:), intent(in) :: & - & t1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & - & ch, prsl1, wind, shdmin, shdmax, & - & snoalb, alvwf, alnwf, zf, qc, q1 -@@ -182,30 +182,30 @@ module lsm_ruc - con_pi, con_rd, & - con_hvap, con_fvirt - -- logical, dimension(im), intent(in) :: flag_iter, flag_guess, land -- integer, dimension(im), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) -+ logical, dimension(:), intent(in) :: flag_iter, flag_guess, land -+ integer, dimension(:), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2) - logical, intent(in) :: do_mynnsfclay - - logical, intent(in) :: rdlai - - ! --- in/out: -- integer, dimension(im), intent(inout) :: soiltyp, vegtype -+ integer, dimension(:), intent(inout) :: soiltyp, vegtype - real (kind=kind_phys), dimension(lsoil_ruc) :: dzs -- real (kind=kind_phys), dimension(lsoil_ruc), intent(inout ) :: zs -- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & -+ real (kind=kind_phys), dimension(:), intent(inout ) :: zs -+ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & - & snwdph, tskin, tskin_wat, & - & srflag, canopy, trans, tsurf, zorl, tsnow, & - & sfcqc, sfcqv, sfcdew, fice, tice, sfalb, smcwlt2, smcref2 - ! --- in -- real (kind=kind_phys), dimension(im), intent(in) :: & -+ real (kind=kind_phys), dimension(:), intent(in) :: & - & rainnc, rainc, ice, snow, graupel - ! --- in/out: - ! --- on RUC levels -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: & - & smois, tslb, sh2o, keepfr, smfrkeep - - ! --- output: -- real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & - & qsurf , gflux , evap , runof , drain , & - & runoff, srunoff, hflx, cmm, chh, & - & rhosnf, evbs, evcw, sbsno, stm, wetness, & -@@ -1053,25 +1053,25 @@ module lsm_ruc - integer, intent(in ) :: im, nlev - integer, intent(in ) :: lsoil_ruc - integer, intent(in ) :: lsoil -- logical, dimension(im), intent(in ) :: land -- real (kind=kind_phys), dimension(im), intent(in ) :: tsurf, tsurf_wat -- real (kind=kind_phys), dimension(im), intent(inout) :: smcref2 -- real (kind=kind_phys), dimension(im), intent(inout) :: smcwlt2 -- real (kind=kind_phys), dimension(im), intent(in ) :: tg3 -- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: smc ! Noah -- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: stc ! Noah -- real (kind=kind_phys), dimension(im,lsoil), intent(in ) :: slc ! Noah -- -- integer, dimension(im), intent(inout) :: soiltyp -- integer, dimension(im), intent(inout) :: vegtype -- real (kind=kind_phys), dimension(im), intent(inout) :: wetness -- real (kind=kind_phys), dimension(im), intent(inout) :: fice -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smois! ruc -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb ! ruc -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: sh2o ! ruc -- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: smfrkeep ! ruc -- -- real (kind=kind_phys), dimension(1:lsoil_ruc), intent (out) :: zs -+ logical, dimension(:), intent(in ) :: land -+ real (kind=kind_phys), dimension(:), intent(in ) :: tsurf, tsurf_wat -+ real (kind=kind_phys), dimension(:), intent(inout) :: smcref2 -+ real (kind=kind_phys), dimension(:), intent(inout) :: smcwlt2 -+ real (kind=kind_phys), dimension(:), intent(in ) :: tg3 -+ real (kind=kind_phys), dimension(:,:), intent(in ) :: smc ! Noah -+ real (kind=kind_phys), dimension(:,:), intent(in ) :: stc ! Noah -+ real (kind=kind_phys), dimension(:,:), intent(in ) :: slc ! Noah -+ -+ integer, dimension(:), intent(inout) :: soiltyp -+ integer, dimension(:), intent(inout) :: vegtype -+ real (kind=kind_phys), dimension(:), intent(inout) :: wetness -+ real (kind=kind_phys), dimension(:), intent(inout) :: fice -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: smois! ruc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb ! ruc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: sh2o ! ruc -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: smfrkeep ! ruc -+ -+ real (kind=kind_phys), dimension(:), intent (out) :: zs - - integer, intent(in ) :: me - integer, intent(in ) :: master -diff --git a/physics/sfc_noahmp_drv.f b/physics/sfc_noahmp_drv.f -index bdba632..f2c5809 100644 ---- a/physics/sfc_noahmp_drv.f -+++ b/physics/sfc_noahmp_drv.f -@@ -142,17 +142,17 @@ - - integer, intent(in) :: im, km, itime - -- integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp -+ integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp - -- real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & - & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & - & ch, prsl1, prslki, wind, shdmin, shdmax, & - & snoalb, sfalb, zf, & - & rainn_mp,rainc_mp,snow_mp,graupel_mp,ice_mp - -- logical, dimension(im), intent(in) :: dry -+ logical, dimension(:), intent(in) :: dry - -- real (kind=kind_phys),dimension(im),intent(in) :: xlatin,xcoszin -+ real (kind=kind_phys),dimension(:),intent(in) :: xlatin,xcoszin - - integer, intent(in) :: idveg, iopt_crs,iopt_btr,iopt_run, & - & iopt_sfc,iopt_frz,iopt_inf,iopt_rad, & -@@ -170,24 +170,24 @@ - & con_rd, con_hfus - - ! --- in/out: -- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & - & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl - -- real (kind=kind_phys), dimension(im,km), intent(inout) :: & -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: & - & smc, stc, slc - -- real (kind=kind_phys), dimension(im), intent(inout) :: snowxy, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: snowxy, & - & tvxy,tgxy,canicexy,canliqxy,eahxy,tahxy, & - & cmxy,chxy,fwetxy,sneqvoxy,alboldxy,qsnowxy, & - & wslakexy,zwtxy,waxy,wtxy,lfmassxy,rtmassxy, & - & stmassxy,woodxy,stblcpxy,fastcpxy,xlaixy, & - & xsaixy,taussxy,smcwtdxy,deeprechxy,rechxy - -- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: tsnoxy -- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snicexy -- real (kind=kind_phys),dimension(im,-2:0),intent(inout) :: snliqxy -- real (kind=kind_phys),dimension(im,1:4), intent(inout) :: smoiseq -- real (kind=kind_phys),dimension(im,-2:4),intent(inout) :: zsnsoxy -+ real (kind=kind_phys),dimension(:,:),intent(inout) :: tsnoxy -+ real (kind=kind_phys),dimension(:,:),intent(inout) :: snicexy -+ real (kind=kind_phys),dimension(:,:),intent(inout) :: snliqxy -+ real (kind=kind_phys),dimension(:,:), intent(inout) :: smoiseq -+ real (kind=kind_phys),dimension(:,:),intent(inout) :: zsnsoxy - - integer, dimension(im) :: jsnowxy - real (kind=kind_phys),dimension(im) :: snodep -@@ -195,7 +195,7 @@ - - ! --- output: - -- real (kind=kind_phys), dimension(im), intent(out) :: sncovr1, & -+ real (kind=kind_phys), dimension(:), intent(out) :: sncovr1, & - & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & - & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, wet1 - real (kind=kind_phys), dimension(:), intent(out) :: t2mmp, q2mp -diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f -index 5920f37..0e6872c 100644 ---- a/physics/sfc_nst.f -+++ b/physics/sfc_nst.f -@@ -190,25 +190,25 @@ - & nstf_name5 - real (kind=kind_phys), intent(in) :: hvap, cp, hfus, jcal, eps, & - & epsm1, rvrdm1, rd, rhw0, sbc, pi -- real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & - & t1, q1, tref, cm, ch, prsl1, prslki, prsik1, prslk1, & - & xlon,xcosz, & - & sinlat, stress, sfcemis, dlwflx, sfcnsw, rain, wind - real (kind=kind_phys), intent(in) :: timestep - real (kind=kind_phys), intent(in) :: solhr - -- logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet -+ logical, dimension(:), intent(in) :: flag_iter, flag_guess, wet - ! &, icy - logical, intent(in) :: lprnt - - ! --- input/outputs: - ! control variables of dtl system (5+2) and sl (2) and coefficients for d(tz)/d(ts) calculation -- real (kind=kind_phys), dimension(im), intent(inout) :: tskin, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: tskin, & - & tsurf, xt, xs, xu, xv, xz, zm, xtts, xzts, dt_cool, & - & z_c, c_0, c_d, w_0, w_d, d_conv, ifd, qrain - - ! --- outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: & -+ real (kind=kind_phys), dimension(:), intent(inout) :: & - & qsurf, gflux, cmm, chh, evap, hflx, ep - - character(len=*), intent(out) :: errmsg -@@ -687,13 +687,13 @@ cc - - ! --- inputs: - integer, intent(in) :: im, nthreads -- logical, dimension(im), intent(in) :: wet -- real (kind=kind_phys), dimension(im), intent(in) :: -+ logical, dimension(:), intent(in) :: wet -+ real (kind=kind_phys), dimension(:), intent(in) :: - & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac - logical, intent(in) :: cplflx - - ! --- input/outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: -+ real (kind=kind_phys), dimension(:), intent(inout) :: - & tsurf_wat, tseal, tref - - ! --- outputs: -diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F -index 20c8cdf..f6e511a 100644 ---- a/physics/sfc_ocean.F -+++ b/physics/sfc_ocean.F -@@ -103,13 +103,13 @@ - integer, intent(in) :: im - real (kind=kind_phys), intent(in) :: rd, eps, epsm1, rvrdm1 - -- real (kind=kind_phys), dimension(im), intent(in) :: ps, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, & - & t1, q1, tskin, cm, ch, prsl1, prslki, wind - -- logical, dimension(im), intent(in) :: flag_iter, wet, lake -+ logical, dimension(:), intent(in) :: flag_iter, wet, lake - - ! --- outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & - & cmm, chh, gflux, evap, hflx, ep - - character(len=*), intent(out) :: errmsg -diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f -index ab67f84..c18fd9d 100644 ---- a/physics/sfc_sice.f -+++ b/physics/sfc_sice.f -@@ -157,25 +157,25 @@ - real (kind=kind_phys), intent(in) :: sbc, hvap, tgice, cp, eps, & - & epsm1, grav, rvrdm1, t0c, rd - -- real (kind=kind_phys), dimension(im), intent(in) :: ps, & -+ real (kind=kind_phys), dimension(:), intent(in) :: ps, & - & t1, q1, sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wind, oceanfrac - - ! integer, dimension(im), intent(in) :: islimsk -- integer, dimension(im), intent(in) :: islmsk_cice -+ integer, dimension(:), intent(in) :: islmsk_cice - real (kind=kind_phys), intent(in) :: delt, min_seaice, & - & min_lakeice - -- logical, dimension(im), intent(in) :: flag_iter, icy -+ logical, dimension(:), intent(in) :: flag_iter, icy - - ! --- input/outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: hice, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: hice, & - & fice, tice, weasd, tskin, tprcp, ep - -- real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice -+ real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice - - ! --- outputs: -- real (kind=kind_phys), dimension(im), intent(inout) :: snwdph, & -+ real (kind=kind_phys), dimension(:), intent(inout) :: snwdph, & - & qsurf, snowmt, gflux, cmm, chh, evap, hflx - - character(len=*), intent(out) :: errmsg -diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 -index 83270a0..da9c089 100644 ---- a/physics/shinhongvdif.F90 -+++ b/physics/shinhongvdif.F90 -@@ -107,7 +107,7 @@ - integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw - real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt - ! 3D in -- real(kind=kind_phys), dimension(im, km) , & -+ real(kind=kind_phys), dimension(:,:) , & - intent(in ) :: phil, & - pi2d, & - p2d, & -@@ -117,21 +117,21 @@ - real(kind=kind_phys), dimension( im, km, ntrac ) , & - intent(in ) :: qx - -- real(kind=kind_phys), dimension( im, km+1 ) , & -+ real(kind=kind_phys), dimension( :,: ) , & - intent(in ) :: p2di, & - phii - ! 3D in&out -- real(kind=kind_phys), dimension(im, km) , & -+ real(kind=kind_phys), dimension(:,:) , & - intent(inout) :: utnp, & - vtnp, & - ttnp -- real(kind=kind_phys), dimension(im, km, ntrac ) , & -+ real(kind=kind_phys), dimension(:,:, : ) , & - intent(inout) :: qtnp - ! 2D in -- integer, dimension(im) , & -+ integer, dimension(:) , & - intent(in ) :: landmask - -- real(kind=kind_phys), dimension(im) , & -+ real(kind=kind_phys), dimension(:) , & - intent(in ) :: heat, & - evap, & - br, & -@@ -145,10 +145,10 @@ - v10, & - dx - ! 2D: out -- integer, dimension(im) , & -+ integer, dimension(:) , & - intent(out ) :: kpbl1d - -- real(kind=kind_phys), dimension(im) , & -+ real(kind=kind_phys), dimension(:) , & - intent(out ) :: hpbl, & - dusfc, & - dvsfc, & -@@ -1435,13 +1435,13 @@ - ! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: cm -- real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & -+ real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & - intent(in ) :: r2 - ! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(inout) :: au, & - cu -- real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & -+ real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & - intent(inout) :: f2 - ! - real(kind=kind_phys) :: fk -@@ -1582,7 +1582,7 @@ - qol2st,qol2un,qdzl,rdz,sq,srel,szq,tem,thm,vkrmz,rlambda, & - rlb,rln,f - real(kind=kind_phys) :: ckp -- real(kind=kind_phys), dimension( kts:kte ) :: q1, & -+ real(kind=kind_phys), dimension( kts:kte ) :: q1, & - en2 - real(kind=kind_phys), dimension( kts+1:kte ) :: dth, & - elm, & -@@ -1748,12 +1748,12 @@ - ! - logical, intent(in ) :: pblflg - ! -- real(kind=kind_phys), dimension( kts:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: uxk, & - vxk, & - thxk, & - thvxk -- real(kind=kind_phys), dimension( kts+1:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: s2, & - ri, & - akm, & -@@ -1764,10 +1764,10 @@ - vfxpbl, & - qfxpbl - ! -- real(kind=kind_phys), dimension( kts:kte+1 ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: z - ! -- real(kind=kind_phys), dimension( kts:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(inout) :: q2 - ! - ! local vars -@@ -1855,16 +1855,16 @@ - ! - logical, intent(in ) :: pblflg - ! -- real(kind=kind_phys), dimension( kts:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: hgame, & - ptke1 -- real(kind=kind_phys), dimension( kts+1:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: el, & - akhk -- real(kind=kind_phys), dimension( kts:kte+1 ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in ) :: z - ! -- real(kind=kind_phys), dimension( kts:kte ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(inout) :: q2 - ! - ! local vars -diff --git a/physics/ysuvdif.F90 b/physics/ysuvdif.F90 -index 51ed599..420dfb7 100644 ---- a/physics/ysuvdif.F90 -+++ b/physics/ysuvdif.F90 -@@ -62,33 +62,33 @@ - integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw - real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt - -- real(kind=kind_phys), dimension( im,km ), & -+ real(kind=kind_phys), dimension( :,: ), & - intent(in) :: pi2d,p2d,phil,ux,vx,swh,hlw,tx - -- real(kind=kind_phys), dimension( im,km,ntrac ) , & -+ real(kind=kind_phys), dimension( :,:,: ) , & - intent(in ) :: qx - -- real(kind=kind_phys), dimension( im, km+1 ) , & -+ real(kind=kind_phys), dimension( :,: ) , & - intent(in ) :: p2di,phii - -- real(kind=kind_phys), dimension( im ) , & -+ real(kind=kind_phys), dimension( : ) , & - intent(in) :: stress,zorl,heat,evap,wspd,br,psim,psih,psfcpa, & - u10,v10,xmu -- integer, dimension(im) ,& -+ integer, dimension(:) ,& - intent(in ) :: landmask - ! - !---------------------------------------------------------------------------------- - ! input/output variables - ! -- real(kind=kind_phys), dimension( im,km ) , & -+ real(kind=kind_phys), dimension( :,: ) , & - intent(inout) :: utnp,vtnp,ttnp -- real(kind=kind_phys), dimension( im,km,ntrac ) , & -+ real(kind=kind_phys), dimension( :,:,: ) , & - intent(inout) :: qtnp - ! - !--------------------------------------------------------------------------------- - ! output variables -- integer, dimension( im ), intent(out ) :: kpbl1d -- real(kind=kind_phys), dimension( im ), & -+ integer, dimension( : ), intent(out ) :: kpbl1d -+ real(kind=kind_phys), dimension( : ), & - intent(out) :: hpbl - - ! error messages From feb39733b0debf606ea6a05ed5d0f89203777bfe Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Mon, 31 Aug 2020 10:18:09 -0600 Subject: [PATCH 007/119] Changes to fortran and metadata tables to pass capgen consistency check. --- physics/GFS_SCNV_generic.F90 | 2 +- physics/GFS_SCNV_generic.meta | 12 ++++++------ physics/GFS_surface_composites.meta | 6 +++--- physics/dcyc2.meta | 12 ++++++------ physics/flake_driver.meta | 6 +++--- physics/lsm_ruc_sfc_sice_interstitial.meta | 6 +++--- physics/m_micro_interstitial.F90 | 12 ++++++------ physics/sfc_drv_ruc.F90 | 16 +++++++++------- physics/sfc_drv_ruc.meta | 2 +- 9 files changed, 38 insertions(+), 36 deletions(-) diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 index ae8fac5f9..1b95585db 100644 --- a/physics/GFS_SCNV_generic.F90 +++ b/physics/GFS_SCNV_generic.F90 @@ -25,7 +25,7 @@ subroutine GFS_SCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, gu0, gv0, gt0, logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t, save_qv + real(kind=kind_phys), dimension(im,levs), intent(out) :: save_u, save_v, save_t, save_qv character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_SCNV_generic.meta b/physics/GFS_SCNV_generic.meta index e11e3fbc3..62472f301 100644 --- a/physics/GFS_SCNV_generic.meta +++ b/physics/GFS_SCNV_generic.meta @@ -167,17 +167,17 @@ type = logical intent = in optional = F -[qdiag3d] - standard_name = flag_tracer_diagnostics_3D - long_name = flag for 3d tracer diagnostic fields +[ldiag3d] + standard_name = flag_diagnostics_3D + long_name = flag for 3d diagnostic fields units = flag dimensions = () type = logical intent = in optional = F -[ldiag3d] - standard_name = flag_diagnostics_3D - long_name = flag for 3d diagnostic fields +[qdiag3d] + standard_name = flag_tracer_diagnostics_3D + long_name = flag for 3d tracer diagnostic fields units = flag dimensions = () type = logical diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 5b9b644e0..0be41b99f 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -31,7 +31,7 @@ units = flag dimensions = (horizontal_dimension) type = logical - intent = in + intent = inout optional = F [cplflx] standard_name = flag_for_flux_coupling @@ -500,7 +500,7 @@ units = flag dimensions = (horizontal_dimension) type = integer - intent = in + intent = inout optional = F [semis_rad] standard_name = surface_longwave_emissivity @@ -1797,7 +1797,7 @@ dimensions = (horizontal_dimension,ice_vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [stc] standard_name = soil_temperature diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e946e3c90..def7b5ae4 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -92,18 +92,18 @@ kind = kind_phys intent = in optional = F -[tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tsfc_ice] + standard_name = surface_skin_temperature_over_ice_interstitial + long_name = surface skin temperature over ice (temporary use as interstitial) units = K dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in optional = F -[tsfc_ice] - standard_name = surface_skin_temperature_over_ice_interstitial - long_name = surface skin temperature over ice (temporary use as interstitial) +[tsfc_wat] + standard_name = surface_skin_temperature_over_ocean_interstitial + long_name = surface skin temperature over ocean (temporary use as interstitial) units = K dimensions = (horizontal_dimension) type = real diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index a40016010..f85490cb7 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -114,7 +114,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [lakedepth] standard_name = lake_depth @@ -217,7 +217,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = in + intent = inout optional = F [hice] standard_name = sea_ice_thickness @@ -235,7 +235,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = in + intent = inout optional = F [fice] standard_name = sea_ice_concentration diff --git a/physics/lsm_ruc_sfc_sice_interstitial.meta b/physics/lsm_ruc_sfc_sice_interstitial.meta index bc3618703..6236b138b 100644 --- a/physics/lsm_ruc_sfc_sice_interstitial.meta +++ b/physics/lsm_ruc_sfc_sice_interstitial.meta @@ -47,7 +47,7 @@ units = flag dimensions = (horizontal_dimension) type = logical - intent = inout + intent = in optional = F [stc] standard_name = soil_temperature @@ -144,7 +144,7 @@ units = flag dimensions = (horizontal_dimension) type = logical - intent = inout + intent = in optional = F [stc] standard_name = soil_temperature @@ -171,7 +171,7 @@ dimensions = (horizontal_dimension,ice_vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 index 930b32b3d..79c249c10 100644 --- a/physics/m_micro_interstitial.F90 +++ b/physics/m_micro_interstitial.F90 @@ -190,12 +190,12 @@ subroutine m_micro_post_run( & real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_rain(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_snow(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_graupel(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_rain_nc(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_snow_nc(1:im,1:levs) + real(kind=kind_phys), intent(out ) :: gq0_graupel_nc(1:im,1:levs) real(kind=kind_phys), intent( out) :: ice(1:im) real(kind=kind_phys), intent( out) :: snow(1:im) real(kind=kind_phys), intent( out) :: graupel(1:im) diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 index 65935ef1c..d768f9301 100644 --- a/physics/sfc_drv_ruc.F90 +++ b/physics/sfc_drv_ruc.F90 @@ -108,7 +108,6 @@ end subroutine lsm_ruc_finalize ! tslb - real, soil temp (k) im,km ! ! sh2o - real, liquid soil moisture im,km ! ! canopy - real, canopy moisture content (mm) im ! -! trans - real, total plant transpiration (m/s) im ! ! tsurf - real, surface skin temperature (after iteration) im ! ! ! ! outputs: ! @@ -122,6 +121,7 @@ end subroutine lsm_ruc_finalize ! evcw - real, canopy water evaporation (m/s) im ! ! sbsno - real, sublimation/deposit from snopack (m/s) im ! ! stm - real, total soil column moisture content (m) im ! +! trans - real, total plant transpiration (m/s) im ! ! zorl - real, surface roughness im ! ! wetness - real, normalized soil wetness im ! ! ! @@ -194,7 +194,7 @@ subroutine lsm_ruc_run & ! inputs real (kind=kind_phys), dimension(lsoil_ruc), intent(inout ) :: zs real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & & snwdph, tskin, tskin_wat, & - & srflag, canopy, trans, tsurf, zorl, tsnow, & + & srflag, canopy, tsurf, zorl, tsnow, & & sfcqc, sfcqv, sfcdew, fice, tice, sfalb, smcwlt2, smcref2 ! --- in real (kind=kind_phys), dimension(im), intent(in) :: & @@ -204,12 +204,14 @@ subroutine lsm_ruc_run & ! inputs real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & & smois, tslb, sh2o, keepfr, smfrkeep -! --- output: real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & - & qsurf , gflux , evap , runof , drain , & - & runoff, srunoff, hflx, cmm, chh, & - & rhosnf, evbs, evcw, sbsno, stm, wetness, & - & acsnow, snowfallac + & qsurf , runoff, srunoff, cmm, chh, stm, wetness, acsnow, & + & snowfallac + +! --- output: + real (kind=kind_phys), dimension(im), intent(out) :: trans, & + & gflux, drain, evap, hflx, rhosnf, runof, evbs, evcw, & + & sbsno logical, intent(in) :: flag_init, flag_restart character(len=*), intent(out) :: errmsg diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 4721418d3..a1f8d2e25 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -218,7 +218,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dlwflx] standard_name = surface_downwelling_longwave_flux From ee38a142650fe9d764f6005bacc41e2d512c73fa Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Tue, 1 Sep 2020 13:46:27 -0600 Subject: [PATCH 008/119] Fixes for intent mismatch, out of order arguments and subroutines not found errors found by capgen. --- physics/GFS_MP_generic.F90 | 4 +- physics/GFS_MP_generic.meta | 6 +- physics/GFS_PBL_generic.meta | 12 +-- physics/GFS_cloud_diagnostics.meta | 52 +++++----- physics/GFS_rrtmgp_gfdlmp_pre.meta | 140 +++++++++++++-------------- physics/GFS_rrtmgp_setup.meta | 2 + physics/GFS_rrtmgp_zhaocarr_pre.meta | 106 ++++++++++---------- physics/GFS_surface_generic.meta | 30 +++--- physics/cires_ugwp.meta | 6 +- physics/cs_conv.F90 | 6 +- physics/drag_suite.meta | 2 +- physics/gscond.f | 4 +- physics/gscond.meta | 10 ++ 13 files changed, 196 insertions(+), 184 deletions(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 8810cc7cf..a9d3c5648 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -26,8 +26,8 @@ subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q + real(kind=kind_phys), dimension(im, levs), intent(out) :: save_t, save_qv + real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_MP_generic.meta b/physics/GFS_MP_generic.meta index 8a912544a..6b98245f0 100644 --- a/physics/GFS_MP_generic.meta +++ b/physics/GFS_MP_generic.meta @@ -95,7 +95,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [save_qv] standard_name = water_vapor_specific_humidity_save @@ -113,7 +113,7 @@ dimensions = (horizontal_dimension,vertical_dimension,number_of_tracers) type = real kind = kind_phys - intent = inout + intent = out optional = F [errmsg] standard_name = ccpp_error_message @@ -333,7 +333,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = in + intent = inout optional = F [rain1] standard_name = lwe_thickness_of_explicit_precipitation_amount diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index 51962c37b..b0f5ef7c3 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -1322,18 +1322,18 @@ kind = kind_phys intent = in optional = F -[hefac] - standard_name = surface_upward_latent_heat_flux_reduction_factor - long_name = surface upward latent heat flux reduction factor from canopy heat storage +[hffac] + standard_name = surface_upward_sensible_heat_flux_reduction_factor + long_name = surface upward sensible heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in optional = F -[hffac] - standard_name = surface_upward_sensible_heat_flux_reduction_factor - long_name = surface upward sensible heat flux reduction factor from canopy heat storage +[hefac] + standard_name = surface_upward_latent_heat_flux_reduction_factor + long_name = surface upward latent heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_dimension) type = real diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index f78a76490..cc10000fe 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -43,6 +43,15 @@ intent = in kind = kind_phys optional = F +[de_lgth] + standard_name = cloud_decorrelation_length + long_name = cloud decorrelation length + units = km + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + intent = in + optional = F [p_lay] standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa long_name = air pressure at vertical layer for radiation calculation @@ -70,31 +79,6 @@ kind = kind_phys intent = in optional = F -[mtopa] - standard_name = model_layer_number_at_cloud_top - long_name = vertical indices for low, middle and high cloud tops - units = index - dimensions = (horizontal_dimension,3) - type = integer - intent = out - optional = F -[mbota] - standard_name = model_layer_number_at_cloud_base - long_name = vertical indices for low, middle and high cloud bases - units = index - dimensions = (horizontal_dimension,3) - type = integer - intent = out - optional = F -[de_lgth] - standard_name = cloud_decorrelation_length - long_name = cloud decorrelation length - units = km - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - intent = in - optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -131,6 +115,22 @@ kind = kind_phys intent = in optional = F +[mbota] + standard_name = model_layer_number_at_cloud_base + long_name = vertical indices for low, middle and high cloud bases + units = index + dimensions = (horizontal_dimension,3) + type = integer + intent = out + optional = F +[mtopa] + standard_name = model_layer_number_at_cloud_top + long_name = vertical indices for low, middle and high cloud tops + units = index + dimensions = (horizontal_dimension,3) + type = integer + intent = out + optional = F [cldsa] standard_name = cloud_area_fraction_for_radiation long_name = fraction of clouds for low, middle, high, total and BL @@ -156,4 +156,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.meta b/physics/GFS_rrtmgp_gfdlmp_pre.meta index 932ffeb8f..aa60d3ca9 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.meta +++ b/physics/GFS_rrtmgp_gfdlmp_pre.meta @@ -34,30 +34,6 @@ type = integer intent = in optional = F -[lsswr] - standard_name = flag_to_calc_sw - long_name = logical flags for sw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[lslwr] - standard_name = flag_to_calc_lw - long_name = logical flags for lw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[effr_in] - standard_name = flag_for_cloud_effective_radii - long_name = flag for cloud effective radii calculations in GFDL microphysics - units = - dimensions = () - type = logical - intent = in - optional = F [i_cldliq] standard_name = index_for_liquid_cloud_condensate long_name = tracer index for cloud condensate (or liquid water) @@ -106,42 +82,6 @@ type = integer intent = in optional = F -[effrin_cldliq] - standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um - long_name = eff. radius of cloud liquid water particle in micrometer - units = um - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldice] - standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um - long_name = eff. radius of cloud ice water particle in micrometer - units = um - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldrain] - standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um - long_name = effective radius of cloud rain particle in micrometers - units = um - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldsnow] - standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um - long_name = effective radius of cloud snow particle in micrometers - units = um - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [yearlen] standard_name = number_of_days_in_year long_name = number of days in a year @@ -150,6 +90,30 @@ type = integer intent = in optional = F +[lsswr] + standard_name = flag_to_calc_sw + long_name = logical flags for sw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[lslwr] + standard_name = flag_to_calc_lw + long_name = logical flags for lw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[effr_in] + standard_name = flag_for_cloud_effective_radii + long_name = flag for cloud effective radii calculations in GFDL microphysics + units = + dimensions = () + type = logical + intent = in + optional = F [julian] standard_name = julian_day long_name = julian day @@ -195,6 +159,42 @@ kind = kind_phys intent = in optional = F +[effrin_cldliq] + standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um + long_name = eff. radius of cloud liquid water particle in micrometer + units = um + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldice] + standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um + long_name = eff. radius of cloud ice water particle in micrometer + units = um + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldrain] + standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um + long_name = effective radius of cloud rain particle in micrometers + units = um + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldsnow] + standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um + long_name = effective radius of cloud snow particle in micrometers + units = um + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [tracer] standard_name = chemical_tracers long_name = chemical tracers @@ -240,15 +240,6 @@ kind = kind_phys intent = in optional = F -[de_lgth] - standard_name = cloud_decorrelation_length - long_name = cloud decorrelation length - units = km - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - intent = out - optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction @@ -357,6 +348,15 @@ kind = kind_phys intent = out optional = F +[de_lgth] + standard_name = cloud_decorrelation_length + long_name = cloud decorrelation length + units = km + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + intent = out + optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -382,4 +382,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_rrtmgp_setup.meta b/physics/GFS_rrtmgp_setup.meta index aec1b4374..9f7ba9c34 100644 --- a/physics/GFS_rrtmgp_setup.meta +++ b/physics/GFS_rrtmgp_setup.meta @@ -31,6 +31,8 @@ units = flag dimensions = () type = integer + intent = in + optional = F [imp_physics_wsm6] intent = in optional = F diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.meta b/physics/GFS_rrtmgp_zhaocarr_pre.meta index 052da5798..b0e94c892 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.meta +++ b/physics/GFS_rrtmgp_zhaocarr_pre.meta @@ -18,6 +18,14 @@ type = integer intent = in optional = F +[ncnd] + standard_name = number_of_cloud_condensate_types + long_name = number of cloud condensate types + units = count + dimensions = () + type = integer + intent = in + optional = F [nTracers] standard_name = number_of_tracers long_name = number of tracers @@ -26,14 +34,14 @@ type = integer intent = in optional = F -[ncnd] - standard_name = number_of_cloud_condensate_types - long_name = number of cloud condensate types - units = count +[i_cldliq] + standard_name = index_for_liquid_cloud_condensate + long_name = tracer index for cloud condensate (or liquid water) + units = index dimensions = () - type = integer + type = integer intent = in - optional = F + optional = F [lsswr] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -74,14 +82,6 @@ type = logical intent = in optional = F -[i_cldliq] - standard_name = index_for_liquid_cloud_condensate - long_name = tracer index for cloud condensate (or liquid water) - units = index - dimensions = () - type = integer - intent = in - optional = F [lat] standard_name = latitude long_name = latitude @@ -90,6 +90,15 @@ type = real intent = in kind = kind_phys +[lsmask] + standard_name = sea_land_ice_mask_real + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + intent = in + optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation @@ -108,15 +117,15 @@ kind = kind_phys intent = in optional = F -[tv_lay] - standard_name = virtual_temperature - long_name = layer virtual temperature +[t_lay] + standard_name = air_temperature_at_layer_for_RRTMGP + long_name = air temperature at vertical layer for radiation calculation units = K dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [relhum] standard_name = relative_humidity long_name = layer relative humidity @@ -126,15 +135,15 @@ kind = kind_phys intent = in optional = F -[t_lay] - standard_name = air_temperature_at_layer_for_RRTMGP - long_name = air temperature at vertical layer for radiation calculation +[tv_lay] + standard_name = virtual_temperature + long_name = layer virtual temperature units = K dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [effrin_cldliq] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -198,19 +207,10 @@ kind = kind_phys intent = in optional = F -[lsmask] - standard_name = sea_land_ice_mask_real - long_name = landmask: sea/land/ice=0/1/2 - units = flag - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[con_ttp] - standard_name = triple_point_temperature_of_water - long_name = triple point temperature of water - units = K +[con_eps] + standard_name = ratio_of_dry_air_to_water_vapor_gas_constants + long_name = rd/rv + units = none dimensions = () type = real kind = kind_phys @@ -234,15 +234,6 @@ kind = kind_phys intent = in optional = F -[con_eps] - standard_name = ratio_of_dry_air_to_water_vapor_gas_constants - long_name = rd/rv - units = none - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F [con_epsm1] standard_name = ratio_of_dry_air_to_water_vapor_gas_constants_minus_one long_name = (rd/rv) - 1 @@ -261,6 +252,15 @@ kind = kind_phys intent = in optional = F +[con_ttp] + standard_name = triple_point_temperature_of_water + long_name = triple point temperature of water + units = K + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [con_rd] standard_name = gas_constant_dry_air long_name = ideal gas constant for dry air @@ -360,11 +360,11 @@ kind = kind_phys intent = out optional = F -[cloud_overlap_param] - standard_name = cloud_overlap_param - long_name = cloud overlap parameter +[de_lgth] + standard_name = cloud_decorrelation_length + long_name = cloud decorrelation length units = km - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = out @@ -378,11 +378,11 @@ kind = kind_phys intent = out optional = F -[de_lgth] - standard_name = cloud_decorrelation_length - long_name = cloud decorrelation length +[cloud_overlap_param] + standard_name = cloud_overlap_param + long_name = cloud overlap parameter units = km - dimensions = (horizontal_dimension) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = out @@ -403,4 +403,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_surface_generic.meta b/physics/GFS_surface_generic.meta index 86b52b87c..4d1467fd9 100644 --- a/physics/GFS_surface_generic.meta +++ b/physics/GFS_surface_generic.meta @@ -268,15 +268,6 @@ kind = kind_phys intent = in optional = F -[lndp_prt_list] - standard_name =magnitude_of_perturbations_for_landperts - long_name = magnitude of perturbations for landperts - units = variable - dimensions = (number_of_land_surface_variables_perturbed) - type = real - kind = kind_phys - intent = in - optional = F [lndp_var_list] standard_name = variables_to_be_perturbed_for_landperts long_name = variables to be perturbed for landperts @@ -286,6 +277,15 @@ kind = len=3 intent = in optional = F +[lndp_prt_list] + standard_name =magnitude_of_perturbations_for_landperts + long_name = magnitude of perturbations for landperts + units = variable + dimensions = (number_of_land_surface_variables_perturbed) + type = real + kind = kind_phys + intent = in + optional = F [z01d] standard_name = perturbation_of_momentum_roughness_length long_name = perturbation of momentum roughness length @@ -1333,18 +1333,18 @@ kind = kind_phys intent = out optional = F -[hefac] - standard_name = surface_upward_latent_heat_flux_reduction_factor - long_name = surface upward latent heat flux reduction factor from canopy heat storage +[hffac] + standard_name = surface_upward_sensible_heat_flux_reduction_factor + long_name = surface upward sensible heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_dimension) type = real kind = kind_phys intent = out optional = F -[hffac] - standard_name = surface_upward_sensible_heat_flux_reduction_factor - long_name = surface upward sensible heat flux reduction factor from canopy heat storage +[hefac] + standard_name = surface_upward_latent_heat_flux_reduction_factor + long_name = surface upward latent heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_dimension) type = real diff --git a/physics/cires_ugwp.meta b/physics/cires_ugwp.meta index d323324d2..1ce2e5a93 100644 --- a/physics/cires_ugwp.meta +++ b/physics/cires_ugwp.meta @@ -689,7 +689,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [du3dt_ogw] standard_name = time_integral_of_change_in_x_wind_due_to_orographic_gravity_wave_drag @@ -698,7 +698,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [du3dt_tms] standard_name = time_integral_of_change_in_x_wind_due_to_turbulent_orographic_form_drag @@ -707,7 +707,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [dudt] standard_name = tendency_of_x_wind_due_to_model_physics diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index 386349422..13b3a3680 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -1,4 +1,4 @@ -!> \file cs_conv.F90 +u> \file cs_conv.F90 !! This file contains the Chikira-Sugiyama Convection scheme. module cs_conv_pre @@ -348,6 +348,7 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & cnv_dqldt, clcn, cnv_fice, & cnv_ndrop, cnv_nice, cf_upi ! *GJF + integer, intent(in) :: lprnt, ipr integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -397,14 +398,13 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & integer KTMAX(IJSDIM) !< max of KT real(r8) :: ftintm, wrk, wrk1, tem - integer i, k, n, ISTS, IENS, kp1, ipr + integer i, k, n, ISTS, IENS, kp1 !DD borrowed from RAS to go form total condensate to ice/water separately ! parameter (tf=130.16, tcr=160.16, tcrf=1.0/(tcr-tf),tcl=2.0) ! parameter (tf=230.16, tcr=260.16, tcrf=1.0/(tcr-tf)) real(r8), parameter :: tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf), tcl=2.0 logical, save :: first=.true. - logical lprnt ! Initialize CCPP error handling variables errmsg = '' diff --git a/physics/drag_suite.meta b/physics/drag_suite.meta index dfcac8582..a8c9587b1 100644 --- a/physics/drag_suite.meta +++ b/physics/drag_suite.meta @@ -270,7 +270,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dtaux2d_ls] standard_name = x_momentum_tendency_from_large_scale_gwd diff --git a/physics/gscond.f b/physics/gscond.f index 28f24763c..1f41cc2b7 100644 --- a/physics/gscond.f +++ b/physics/gscond.f @@ -10,14 +10,14 @@ module zhaocarr_gscond ! \brief Brief description of the subroutine ! -!> \section arg_table_gscond_init Argument Table +!> \section arg_table_zhaocarr_gscond_init Argument Table !! subroutine zhaocarr_gscond_init end subroutine zhaocarr_gscond_init ! \brief Brief description of the subroutine ! -!> \section arg_table_gscond_finalize Argument Table +!> \section arg_table_zhaocarr_gscond_finalize Argument Table !! subroutine zhaocarr_gscond_finalize end subroutine zhaocarr_gscond_finalize diff --git a/physics/gscond.meta b/physics/gscond.meta index 57156358f..578280606 100644 --- a/physics/gscond.meta +++ b/physics/gscond.meta @@ -1,3 +1,13 @@ +[ccpp-arg-table] + name = zhaocarr_gscond_init + type = scheme + +######################################################################## +[ccpp-arg-table] + name = zhaocarr_gscond_finalize + type = scheme + +######################################################################## [ccpp-arg-table] name = zhaocarr_gscond_run type = scheme From c52a094aa0794a67f534ac50a8ec3add7d604bff Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Wed, 2 Sep 2020 10:29:19 -0600 Subject: [PATCH 009/119] More fixes to intent mismatches, no matching Fortran routine found, and out of order arguments for transition to capgen. --- physics/GFS_GWD_generic.F90 | 9 +++++++++ physics/GFS_GWD_generic.meta | 4 ++-- physics/cu_gf_driver.F90 | 12 ++++++------ physics/module_MYJPBL_wrapper.meta | 26 +++++++++++++------------- physics/module_MYJSFC_wrapper.meta | 16 ++++++++-------- physics/module_MYNNPBL_wrapper.F90 | 8 +++++--- physics/module_MYNNSFC_wrapper.F90 | 11 ++++++----- physics/module_SGSCloud_RadPre.F90 | 6 ++++++ physics/module_SGSCloud_RadPre.meta | 16 ++++++++-------- physics/mp_fer_hires.F90 | 6 +++--- physics/mp_fer_hires.meta | 12 ++++++------ 11 files changed, 72 insertions(+), 54 deletions(-) diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index 09c969162..f4934aed9 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -6,6 +6,9 @@ module GFS_GWD_generic_pre contains +!! \section arg_table_GFS_GWD_generic_pre_init Argument Table +!! \htmlinclude GFS_GWD_generic_pre_init.html +!! subroutine GFS_GWD_generic_pre_init() end subroutine GFS_GWD_generic_pre_init @@ -128,6 +131,9 @@ subroutine GFS_GWD_generic_pre_run( & end subroutine GFS_GWD_generic_pre_run !> @} +!! \section arg_table_GFS_GWD_generic_pre_finalize Argument Table +!! \htmlinclude GFS_GWD_generic_pre_finalize.html +!! subroutine GFS_GWD_generic_pre_finalize() end subroutine GFS_GWD_generic_pre_finalize @@ -185,6 +191,9 @@ subroutine GFS_GWD_generic_post_run(lssav, ldiag3d, dtf, dusfcg, dvsfcg, dudt, d end subroutine GFS_GWD_generic_post_run !> @} +!! \section arg_table_GFS_GWD_generic_post_finalize Argument Table +!! \htmlinclude GFS_GWD_generic_post_finalize.html +!! subroutine GFS_GWD_generic_post_finalize() end subroutine GFS_GWD_generic_post_finalize diff --git a/physics/GFS_GWD_generic.meta b/physics/GFS_GWD_generic.meta index 614184975..7611d5fc9 100644 --- a/physics/GFS_GWD_generic.meta +++ b/physics/GFS_GWD_generic.meta @@ -161,7 +161,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dvdt] standard_name = tendency_of_y_wind_due_to_model_physics @@ -170,7 +170,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dtdt] standard_name = tendency_of_air_temperature_due_to_model_physics diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 5c43709d1..91214cdeb 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -114,15 +114,15 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & du3dt_SCNV,dv3dt_SCNV,dt3dt_SCNV,dq3dt_SCNV, & du3dt_DCNV,dv3dt_DCNV,dt3dt_DCNV,dq3dt_DCNV - integer, dimension (im), intent(inout) :: hbot,htop,kcnv - integer, dimension (im), intent(in) :: xland + integer, dimension (im), intent(out) :: hbot,htop,kcnv + integer, dimension (im), intent(in) :: xland real(kind=kind_phys), dimension (im), intent(in) :: pbl integer, dimension (im) :: tropics ! ruc variable - real(kind=kind_phys), dimension (im) :: hfx2,qfx2,psuri - real(kind=kind_phys), dimension (im,km) :: ud_mf,dd_mf,dt_mf - real(kind=kind_phys), dimension (im), intent(inout) :: raincv,cld1d - real(kind=kind_phys), dimension (im,km) :: t2di,p2di + real(kind=kind_phys), dimension (im), intent(in) :: hfx2,qfx2,psuri + real(kind=kind_phys), dimension (im,km), intent(out) :: ud_mf,dd_mf,dt_mf + real(kind=kind_phys), dimension (im), intent(out) :: raincv,cld1d + real(kind=kind_phys), dimension (im,km), intent(in) :: t2di,p2di ! Specific humidity from FV3 real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum diff --git a/physics/module_MYJPBL_wrapper.meta b/physics/module_MYJPBL_wrapper.meta index fa1fe17c4..e445c3afe 100644 --- a/physics/module_MYJPBL_wrapper.meta +++ b/physics/module_MYJPBL_wrapper.meta @@ -347,7 +347,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [kpbl] standard_name = vertical_index_at_top_of_atmosphere_boundary_layer @@ -399,7 +399,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [ch] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air @@ -408,7 +408,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [wind] standard_name = wind_speed_at_lowest_model_layer @@ -437,19 +437,19 @@ kind = kind_phys intent = inout optional = F -[hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward sensible heat flux - units = K m s-1 +[evap] + standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward latent heat flux + units = kg kg-1 m s-1 dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in optional = F -[evap] - standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward latent heat flux - units = kg kg-1 m s-1 +[hflx] + standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward sensible heat flux + units = K m s-1 dimensions = (horizontal_dimension) type = real kind = kind_phys @@ -570,7 +570,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [gamq] standard_name = countergradient_mixing_term_for_water_vapor @@ -579,7 +579,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index c26728f0f..ce963b6e8 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -202,7 +202,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [phy_myj_qsfc] standard_name = surface_specific_humidity_for_MYJ_schemes @@ -373,7 +373,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [ch] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air @@ -382,7 +382,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [stress] standard_name = surface_wind_stress @@ -400,7 +400,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [ffh] standard_name = Monin_Obukhov_similarity_function_for_heat @@ -409,7 +409,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [fm10] standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m @@ -418,7 +418,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [fh2] standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m @@ -427,7 +427,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = F [landfrac] standard_name = land_area_fraction @@ -742,7 +742,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 8fd727148..91c023bc4 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -10,6 +10,9 @@ MODULE mynnedmf_wrapper contains +!> \section arg_table_mynnedmf_wrapper_init Argument Table +!! \htmlinclude mynnedmf_wrapper_init.html +!! subroutine mynnedmf_wrapper_init (lheatstrg, errmsg, errflg) implicit none @@ -297,11 +300,10 @@ SUBROUTINE mynnedmf_wrapper_run( & & wet, dry, icy real(kind=kind_phys), dimension(im), intent(inout) :: & - & pblh + & pblh,dusfc_diag,dvsfc_diag,dtsfc_diag,dqsfc_diag real(kind=kind_phys), dimension(im), intent(out) :: & & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & - & dtsfci_diag,dqsfci_diag,dtsfc_diag,dqsfc_diag, & - & dusfci_diag,dvsfci_diag,dusfc_diag,dvsfc_diag, & + & dtsfci_diag,dqsfci_diag,dusfci_diag,dvsfci_diag, & & maxMF integer, dimension(im), intent(inout) :: & & kpbl,nupdraft,ktop_plume diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index 496db7580..c945a2761 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -116,11 +116,12 @@ SUBROUTINE mynnsfc_wrapper_run( & & sigmaf,shdmax,z0pert,ztpert !MYNN-1D - REAL :: delt - INTEGER :: im, levs - INTEGER :: iter, k, i, itimestep, lsm - LOGICAL :: flag_init,flag_restart,lprnt - INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & + REAL, intent(in) :: delt + INTEGER, intent(in) :: im, levs + INTEGER, intent(in) :: iter, itimestep, lsm + LOGICAL, intent(in) :: flag_init,flag_restart,lprnt + INTEGER :: k, i + INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & & IMS,IME,JMS,JME,KMS,KME, & & ITS,ITE,JTS,JTE,KTS,KTE diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 5a1a2744f..248d9d23d 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -10,9 +10,15 @@ module sgscloud_radpre contains +!> \section arg_table_sgscloud_radpre_init Argument Table +!! \htmlinclude sgscloud_radpre_init.html +!! subroutine sgscloud_radpre_init () end subroutine sgscloud_radpre_init +!> \section arg_table_sgscloud_radpre_finalize Argument Table +!! \htmlinclude sgscloud_radpre_finalize.html +!! subroutine sgscloud_radpre_finalize () end subroutine sgscloud_radpre_finalize diff --git a/physics/module_SGSCloud_RadPre.meta b/physics/module_SGSCloud_RadPre.meta index 2658e8638..d9d21a3ee 100644 --- a/physics/module_SGSCloud_RadPre.meta +++ b/physics/module_SGSCloud_RadPre.meta @@ -43,6 +43,14 @@ type = logical intent = in optional = F +[do_mynnedmf] + standard_name = do_mynnedmf + long_name = flag to activate MYNN-EDMF + units = flag + dimensions = () + type = logical + intent = in + optional = F [qc] standard_name = cloud_condensed_water_mixing_ratio long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) @@ -317,14 +325,6 @@ type = integer intent = inout optional = F -[do_mynnedmf] - standard_name = do_mynnedmf - long_name = flag to activate MYNN-EDMF - units = flag - dimensions = () - type = logical - intent = in - optional = F [imp_physics] standard_name = flag_for_microphysics_scheme long_name = choice of microphysics scheme diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 index 95e521141..f599c78f2 100644 --- a/physics/mp_fer_hires.F90 +++ b/physics/mp_fer_hires.F90 @@ -162,9 +162,9 @@ SUBROUTINE mp_fer_hires_run(NCOL, NLEV, DT ,SPEC_ADV & real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) real(kind_phys), intent(out ) :: sr(1:ncol) - real(kind_phys), intent(inout) :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rimef(1:ncol,1:nlev) + real(kind_phys), intent(out ) :: f_ice(1:ncol,1:nlev) + real(kind_phys), intent(out ) :: f_rain(1:ncol,1:nlev) + real(kind_phys), intent(out ) :: f_rimef(1:ncol,1:nlev) real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) diff --git a/physics/mp_fer_hires.meta b/physics/mp_fer_hires.meta index a7a33378a..385406533 100644 --- a/physics/mp_fer_hires.meta +++ b/physics/mp_fer_hires.meta @@ -275,18 +275,18 @@ kind = kind_phys intent = inout optional = F -[qi] - standard_name = ice_water_mixing_ratio_updated_by_physics - long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) updated by physics +[qr] + standard_name = rain_water_mixing_ratio_updated_by_physics + long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[qr] - standard_name = rain_water_mixing_ratio_updated_by_physics - long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) updated by physics +[qi] + standard_name = ice_water_mixing_ratio_updated_by_physics + long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real From 85fa5577d03d19dc6f71e2591c49f14c03977253 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Tue, 5 Jan 2021 11:18:31 -0700 Subject: [PATCH 010/119] Rearrange metadata table entries and add intent to keep capgen happy. --- physics/GFS_cloud_diagnostics.meta | 52 ++++++------ physics/GFS_rrtmgp_gfdlmp_pre.meta | 120 +++++++++++++-------------- physics/GFS_rrtmgp_zhaocarr_pre.meta | 46 +++++----- physics/gfdl_sfc_layer.meta | 6 ++ 4 files changed, 115 insertions(+), 109 deletions(-) diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index 840b3b21a..1e68928f0 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -47,6 +47,15 @@ intent = in kind = kind_phys optional = F +[de_lgth] + standard_name = cloud_decorrelation_length + long_name = cloud decorrelation length + units = km + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [p_lay] standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa long_name = air pressure at vertical layer for radiation calculation @@ -74,31 +83,6 @@ kind = kind_phys intent = in optional = F -[mtopa] - standard_name = model_layer_number_at_cloud_top - long_name = vertical indices for low, middle and high cloud tops - units = index - dimensions = (horizontal_loop_extent,3) - type = integer - intent = out - optional = F -[mbota] - standard_name = model_layer_number_at_cloud_base - long_name = vertical indices for low, middle and high cloud bases - units = index - dimensions = (horizontal_loop_extent,3) - type = integer - intent = out - optional = F -[de_lgth] - standard_name = cloud_decorrelation_length - long_name = cloud decorrelation length - units = km - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -135,6 +119,22 @@ kind = kind_phys intent = in optional = F +[mtopa] + standard_name = model_layer_number_at_cloud_top + long_name = vertical indices for low, middle and high cloud tops + units = index + dimensions = (horizontal_loop_extent,3) + type = integer + intent = out + optional = F +[mbota] + standard_name = model_layer_number_at_cloud_base + long_name = vertical indices for low, middle and high cloud bases + units = index + dimensions = (horizontal_loop_extent,3) + type = integer + intent = out + optional = F [cldsa] standard_name = cloud_area_fraction_for_radiation long_name = fraction of clouds for low, middle, high, total and BL @@ -160,4 +160,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.meta b/physics/GFS_rrtmgp_gfdlmp_pre.meta index 3841afc9b..020ccece9 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.meta +++ b/physics/GFS_rrtmgp_gfdlmp_pre.meta @@ -39,30 +39,6 @@ type = integer intent = in optional = F -[doSWrad] - standard_name = flag_to_calc_sw - long_name = logical flags for sw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doLWrad] - standard_name = flag_to_calc_lw - long_name = logical flags for lw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[effr_in] - standard_name = flag_for_cloud_effective_radii - long_name = flag for cloud effective radii calculations in GFDL microphysics - units = flag - dimensions = () - type = logical - intent = in - optional = F [i_cldliq] standard_name = index_for_liquid_cloud_condensate long_name = tracer index for cloud condensate (or liquid water) @@ -111,42 +87,6 @@ type = integer intent = in optional = F -[effrin_cldliq] - standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um - long_name = eff. radius of cloud liquid water particle in micrometer - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldice] - standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um - long_name = eff. radius of cloud ice water particle in micrometer - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldrain] - standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um - long_name = effective radius of cloud rain particle in micrometers - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[effrin_cldsnow] - standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um - long_name = effective radius of cloud snow particle in micrometers - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [yearlen] standard_name = number_of_days_in_year long_name = number of days in a year @@ -155,6 +95,30 @@ type = integer intent = in optional = F +[doSWrad] + standard_name = flag_to_calc_sw + long_name = logical flags for sw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[doLWrad] + standard_name = flag_to_calc_lw + long_name = logical flags for lw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[effr_in] + standard_name = flag_for_cloud_effective_radii + long_name = flag for cloud effective radii calculations in GFDL microphysics + units = flag + dimensions = () + type = logical + intent = in + optional = F [julian] standard_name = julian_day long_name = julian day @@ -200,6 +164,42 @@ kind = kind_phys intent = in optional = F +[effrin_cldliq] + standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um + long_name = eff. radius of cloud liquid water particle in micrometer + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldice] + standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um + long_name = eff. radius of cloud ice water particle in micrometer + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldrain] + standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um + long_name = effective radius of cloud rain particle in micrometers + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[effrin_cldsnow] + standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um + long_name = effective radius of cloud snow particle in micrometers + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [tracer] standard_name = chemical_tracers long_name = chemical tracers diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.meta b/physics/GFS_rrtmgp_zhaocarr_pre.meta index 0cc454d2e..e3812bb74 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.meta +++ b/physics/GFS_rrtmgp_zhaocarr_pre.meta @@ -23,6 +23,14 @@ type = integer intent = in optional = F +[ncnd] + standard_name = number_of_cloud_condensate_types + long_name = number of cloud condensate types + units = count + dimensions = () + type = integer + intent = in + optional = F [nTracers] standard_name = number_of_tracers long_name = number of tracers @@ -31,14 +39,14 @@ type = integer intent = in optional = F -[ncnd] - standard_name = number_of_cloud_condensate_types - long_name = number of cloud condensate types - units = count +[i_cldliq] + standard_name = index_for_liquid_cloud_condensate + long_name = tracer index for cloud condensate (or liquid water) + units = index dimensions = () - type = integer + type = integer intent = in - optional = F + optional = F [lsswr] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -79,14 +87,6 @@ type = logical intent = in optional = F -[i_cldliq] - standard_name = index_for_liquid_cloud_condensate - long_name = tracer index for cloud condensate (or liquid water) - units = index - dimensions = () - type = integer - intent = in - optional = F [lat] standard_name = latitude long_name = latitude @@ -95,6 +95,15 @@ type = real intent = in kind = kind_phys +[lsmask] + standard_name = sea_land_ice_mask_real + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation @@ -203,15 +212,6 @@ kind = kind_phys intent = in optional = F -[lsmask] - standard_name = sea_land_ice_mask_real - long_name = landmask: sea/land/ice=0/1/2 - units = flag - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [con_ttp] standard_name = triple_point_temperature_of_water long_name = triple point temperature of water diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index 77024c813..a9829fec3 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -783,6 +783,8 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + intent = inout + optional = F [qss_lnd] standard_name = surface_specific_humidity_over_land long_name = surface air saturation specific humidity over land @@ -790,6 +792,8 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + intent = inout + optional = F [qss_ice] standard_name = surface_specific_humidity_over_ice long_name = surface air saturation specific humidity over ice @@ -797,6 +801,8 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + intent = inout + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 8e7e1b78ad58cbdb66746340a52792356cf194ea Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Wed, 6 Jan 2021 14:22:16 -0700 Subject: [PATCH 011/119] Fix order of variables and differing intents. --- physics/GFS_rrtmgp_thompsonmp_pre.meta | 154 ++++++++++++------------- physics/dcyc2.meta | 70 +++++------ physics/sfc_drv_ruc.meta | 6 +- 3 files changed, 115 insertions(+), 115 deletions(-) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 90ec59760..482e6a557 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -55,46 +55,6 @@ type = logical intent = in optional = F -[effr_in] - standard_name = flag_for_cloud_effective_radii - long_name = flag for cloud effective radii calculations in GFDL microphysics - units = flag - dimensions = () - type = logical - intent = in - optional = F -[uni_cld] - standard_name = flag_for_uni_cld - long_name = flag for uni_cld - units = flag - dimensions = () - type = logical - intent = in - optional = F -[lmfshal] - standard_name = flag_for_lmfshal - long_name = flag for lmfshal - units = flag - dimensions = () - type = logical - intent = in - optional = F -[lmfdeep2] - standard_name = flag_for_scale_aware_mass_flux_convection - long_name = flag for some scale-aware mass-flux convection scheme active - units = flag - dimensions = () - type = logical - intent = in - optional = F -[ltaerosol] - standard_name = flag_for_aerosol_physics - long_name = flag for aerosol physics - units = flag - dimensions = () - type = logical - intent = in - optional = F [i_cldliq] standard_name = index_for_liquid_cloud_condensate long_name = tracer index for cloud condensate (or liquid water) @@ -167,6 +127,50 @@ type = integer intent = in optional = F +[effr_in] + standard_name = flag_for_cloud_effective_radii + long_name = flag for cloud effective radii calculations in GFDL microphysics + units = flag + dimensions = () + type = logical + intent = in + optional = F +[p_lev] + standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa + long_name = air pressure at vertical interface for radiation calculation + units = hPa + dimensions = (horizontal_dimension,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[p_lay] + standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa + long_name = air pressure at vertical layer for radiation calculation + units = hPa + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[tv_lay] + standard_name = virtual_temperature + long_name = layer virtual temperature + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[t_lay] + standard_name = air_temperature_at_layer_for_RRTMGP + long_name = air temperature at vertical layer for radiation calculation + units = K + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [effrin_cldliq] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -243,42 +247,6 @@ type = logical intent = in optional = F -[p_lev] - standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa - long_name = air pressure at vertical interface for radiation calculation - units = hPa - dimensions = (horizontal_dimension,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[p_lay] - standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa - long_name = air pressure at vertical layer for radiation calculation - units = hPa - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[tv_lay] - standard_name = virtual_temperature - long_name = layer virtual temperature - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[t_lay] - standard_name = air_temperature_at_layer_for_RRTMGP - long_name = air temperature at vertical layer for radiation calculation - units = K - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [qs_lay] standard_name = saturation_vapor_pressure long_name = saturation vapor pressure @@ -333,6 +301,38 @@ kind = kind_phys intent = in optional = F +[uni_cld] + standard_name = flag_for_uni_cld + long_name = flag for uni_cld + units = flag + dimensions = () + type = logical + intent = in + optional = F +[lmfshal] + standard_name = flag_for_lmfshal + long_name = flag for lmfshal + units = flag + dimensions = () + type = logical + intent = in + optional = F +[lmfdeep2] + standard_name = flag_for_scale_aware_mass_flux_convection + long_name = flag for some scale-aware mass-flux convection scheme active + units = flag + dimensions = () + type = logical + intent = in + optional = F +[ltaerosol] + standard_name = flag_for_aerosol_physics + long_name = flag for aerosol physics + units = flag + dimensions = () + type = logical + intent = in + optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction @@ -439,4 +439,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index 342227206..02611d224 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -178,15 +178,6 @@ kind = kind_phys intent = in optional = F -[sfculw] - standard_name = surface_upwelling_longwave_flux_on_radiation_time_step - long_name = total sky sfc upward lw flux - units = W m-2 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [swh] standard_name = tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_time_step long_name = total sky shortwave heating rate on radiation time step @@ -353,6 +344,32 @@ type = logical intent = in optional = F +[use_LW_jacobian] + standard_name = flag_to_calc_RRTMGP_LW_jacobian + long_name = logical flag to control RRTMGP LW calculation + units = flag + dimensions = () + type = logical + intent = in + optional = F +[sfculw] + standard_name = surface_upwelling_longwave_flux_on_radiation_time_step + long_name = total sky sfc upward lw flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[sfculw_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface + long_name = RRTMGP Jacobian upward longwave flux at surface + units = W m-2 K-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [dtdt] standard_name = tendency_of_air_temperature_due_to_model_physics long_name = total radiative heating rate at current time @@ -398,6 +415,15 @@ kind = kind_phys intent = out optional = F +[adjsfculw] + standard_name = surface_upwelling_longwave_flux + long_name = surface upwelling longwave flux at current time + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = F [adjsfculw_lnd] standard_name = surface_upwelling_longwave_flux_over_land_interstitial long_name = surface upwelling longwave flux at current time over land (temporary use as interstitial) @@ -425,15 +451,6 @@ kind = kind_phys intent = out optional = F -[adjsfculw] - standard_name = surface_upwelling_longwave_flux - long_name = surface upwelling longwave flux at current time - units = W m-2 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = out - optional = F [xmu] standard_name = zenith_angle_temporal_adjustment_factor_for_shortwave_fluxes long_name = zenith angle temporal adjustment factor for shortwave fluxes @@ -524,23 +541,6 @@ kind = kind_phys intent = out optional = F -[use_LW_jacobian] - standard_name = flag_to_calc_RRTMGP_LW_jacobian - long_name = logical flag to control RRTMGP LW calculation - units = flag - dimensions = () - type = logical - intent = in - optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface - units = W m-2 K-1 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 25cb82c0b..b49c35df0 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -144,7 +144,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tsfc_lnd] standard_name = surface_skin_temperature @@ -153,7 +153,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tsfc_wat] standard_name = sea_surface_temperature @@ -162,7 +162,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tg3] standard_name = deep_soil_temperature From 72b01adb0308e74f266b91d954feec3147ea3f97 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Wed, 6 Jan 2021 16:44:36 -0700 Subject: [PATCH 012/119] Fix CCPPError: No matching Fortran routine found for sfc_sice_run --- physics/sfc_sice.f | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f index ab67f849e..daf42fd89 100644 --- a/physics/sfc_sice.f +++ b/physics/sfc_sice.f @@ -14,9 +14,6 @@ end subroutine sfc_sice_finalize !>\defgroup gfs_sice_main GFS Three-layer Thermodynomics Sea-Ice Scheme Module !! \brief This is three-layer thermodynomics sea-ice model based on Winton (2000) \cite winton_2000. -!! \section arg_table_sfc_sice_run Argument Table -!! \htmlinclude sfc_sice_run.html -!! !> \section general_sice_run GFS Sea Ice Driver General Algorithm !!The model has four prognostic variables: the snow layer thickness \f$h_s\f$, the ice layer thickness !! \f$h_i\f$, the upper and lower ice layer temperatures located at the midpoints of the layers @@ -38,19 +35,22 @@ end subroutine sfc_sice_finalize !! the water line to ice, and 3) to equalize the thickness of the two !! ice layers. !> \section detailed_sice_run GFS Sea Ice Driver Detailed Algorithm +!! +!! \section arg_table_sfc_sice_run Argument Table +!! \htmlinclude sfc_sice_run.html +!! !> @{ subroutine sfc_sice_run & - & ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: - & t0c, rd, ps, t1, q1, delt, & - & sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & - & cm, ch, prsl1, prslki, prsik1, prslk1, wind, & - & flag_iter, lprnt, ipr, & - & hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: - & snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! - & frac_grid, icy, islmsk_cice, & - & min_lakeice, min_seaice, oceanfrac, & - & errmsg, errflg - & ) + ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: + t0c, rd, ps, t1, q1, delt, & + sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & + cm, ch, prsl1, prslki, prsik1, prslk1, wind, & + flag_iter, lprnt, ipr, & + hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: + snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! + frac_grid, icy, islmsk_cice, & + min_lakeice, min_seaice, oceanfrac, & + errmsg, errflg ) ! ===================================================================== ! ! description: ! From dc0f118a4a73b5763c0454a1e817ad5fea186124 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Thu, 7 Jan 2021 10:45:31 -0700 Subject: [PATCH 013/119] Add missing intent statements --- physics/sfc_noah_wrfv4.meta | 2 +- physics/unified_ugwp.meta | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 1895c56bf..23d49ecc8 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -749,7 +749,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/unified_ugwp.meta b/physics/unified_ugwp.meta index 675a68edd..d7846890f 100644 --- a/physics/unified_ugwp.meta +++ b/physics/unified_ugwp.meta @@ -69,6 +69,8 @@ units = none dimensions = (8) type = integer + intent = in + optional = F [lonr] standard_name = number_of_equatorial_longitude_points long_name = number of global points in x-dir (i) along the equator @@ -363,6 +365,8 @@ dimensions = () type = real kind = kind_phys + intent = in + optional = F [kdt] standard_name = index_of_time_step long_name = current forecast iteration @@ -724,6 +728,8 @@ units = none dimensions = (8) type = integer + intent = in + optional = F [xlat] standard_name = latitude long_name = grid latitude From 7cbb6ae3c29edce0a9772f30b38e21f856f410da Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Thu, 4 Feb 2021 11:11:15 -0700 Subject: [PATCH 014/119] Change intent from out to inout to match fortran. --- physics/sfc_drv_ruc.meta | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 141b8fc6f..8b38b202f 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -697,7 +697,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [snoalb] standard_name = upper_bound_on_max_albedo_over_deep_snow @@ -731,7 +731,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [smcwlt2] standard_name = volume_fraction_of_condensed_water_in_soil_at_wilting_point @@ -893,7 +893,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [weasd_ice] standard_name = water_equivalent_accumulated_snow_depth_over_ice @@ -992,7 +992,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [tsurf_lnd] standard_name = surface_skin_temperature_after_iteration_over_land @@ -1055,7 +1055,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evap_lnd] standard_name = kinematic_surface_upward_latent_heat_flux_over_land @@ -1064,7 +1064,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [hflx_lnd] standard_name = kinematic_surface_upward_sensible_heat_flux_over_land @@ -1073,7 +1073,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [runof] standard_name = surface_runoff_flux @@ -1082,7 +1082,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [runoff] standard_name = total_runoff @@ -1109,7 +1109,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cm_lnd] standard_name = surface_drag_coefficient_for_momentum_in_air_over_land @@ -1136,7 +1136,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evcw] standard_name = canopy_upward_latent_heat_flux @@ -1145,7 +1145,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [stm] standard_name = soil_moisture_content @@ -1244,7 +1244,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evap_ice] standard_name = kinematic_surface_upward_latent_heat_flux_over_ice @@ -1253,7 +1253,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ep1d_ice] standard_name = surface_upward_potential_latent_heat_flux_over_ice @@ -1271,7 +1271,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cm_ice] standard_name = surface_drag_coefficient_for_momentum_in_air_over_ice @@ -1307,7 +1307,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [sbsno] standard_name = snow_deposition_sublimation_upward_latent_heat_flux @@ -1316,7 +1316,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cmm_lnd] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land @@ -1325,7 +1325,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [chh_lnd] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land @@ -1334,7 +1334,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cmm_ice] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ice @@ -1343,7 +1343,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [chh_ice] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ice @@ -1352,7 +1352,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [flag_iter] standard_name = flag_for_iteration From 373ac912a85756b558237e0b5d35685d464e1c91 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Tue, 23 Feb 2021 17:56:26 +0000 Subject: [PATCH 015/119] Initial commit --- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 8 ++++---- physics/rrtmgp_lw_aerosol_optics.F90 | 2 +- physics/rrtmgp_sw_aerosol_optics.F90 | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index 0d80e8e35..570b29cc5 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -156,9 +156,9 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do qc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq) / (1.-q_lay(iCol,iLay)) qi_mp(iCol,iLay) = tracer(iCol,iLay,i_cldice) / (1.-q_lay(iCol,iLay)) qs_mp(iCol,iLay) = tracer(iCol,iLay,i_cldsnow) / (1.-q_lay(iCol,iLay)) - nc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq_nc) / (1.-q_lay(iCol,iLay)) ni_mp(iCol,iLay) = tracer(iCol,iLay,i_cldice_nc) / (1.-q_lay(iCol,iLay)) if (ltaerosol) then + nc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq_nc) / (1.-q_lay(iCol,iLay)) nwfa(iCol,iLay) = tracer(iCol,iLay,i_twa) else nc_mp(iCol,iLay) = nt_c*orho(iCol,iLay) @@ -215,13 +215,13 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do else if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) if(.not. lmfshal) alpha0 = 2000. - ! Xu-Randall (1996) cloud-fraction + ! Xu-Randall (1996) cloud-fraction do iLay = 1, nLev do iCol = 1, nCol cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & cld_condensate(iCol,iLay,4) - cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & - qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) + cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & + qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) enddo enddo endif diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index b8a21e85a..e34d34e38 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -81,7 +81,7 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer if (.not. doLWrad) return ! Call module_radiation_aerosols::setaer(),to setup aerosols property profile - call setaer(p_lev, p_lay, p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, ncol, nLev, & + call setaer(p_lev/100., p_lay/100., p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, ncol, nLev, & nLev+1, .true., .true., aerosolssw, aerosolslw, aerodp) ! Allocate RRTMGP DDT: Aerosol optics [nCol,nlev,nBands] diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 index fb9306b99..af6a4e46e 100644 --- a/physics/rrtmgp_sw_aerosol_optics.F90 +++ b/physics/rrtmgp_sw_aerosol_optics.F90 @@ -85,7 +85,7 @@ subroutine rrtmgp_sw_aerosol_optics_run(doSWrad, nCol, nLev, nTracer, nTracerAer if (nDay .gt. 0) then ! Call module_radiation_aerosols::setaer(),to setup aerosols property profile - call setaer(p_lev, p_lay, p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, nCol, nLev, & + call setaer(p_lev/100., p_lay/100., p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, nCol, nLev, & nLev+1, .true., .true., aerosolssw2, aerosolslw, aerodp) ! Store aerosol optical properties From c985ceeba7226833745f0cdc7a05e372a245987b Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Mon, 1 Mar 2021 23:33:53 +0000 Subject: [PATCH 016/119] Initial commit. Save temperature from previous timestep when using RRTMGP --- physics/GFS_rad_time_vary.fv3.F90 | 11 ++++++----- physics/GFS_rad_time_vary.fv3.meta | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/physics/GFS_rad_time_vary.fv3.F90 b/physics/GFS_rad_time_vary.fv3.F90 index a081ddcf1..ff4cf96ab 100644 --- a/physics/GFS_rad_time_vary.fv3.F90 +++ b/physics/GFS_rad_time_vary.fv3.F90 @@ -16,9 +16,10 @@ module GFS_rad_time_vary !! \htmlinclude GFS_rad_time_vary_timestep_init.html !! subroutine GFS_rad_time_vary_timestep_init ( & - lslwr, lsswr, isubc_lw, isubc_sw, icsdsw, icsdlw, cnx, cny, isc, jsc, & - imap, jmap, sec, kdt, imp_physics, imp_physics_zhao_carr, ps_2delt, & - ps_1delt, t_2delt, t_1delt, qv_2delt, qv_1delt, t, qv, ps, errmsg, errflg) + lslwr, lsswr, do_RRTMGP, use_LW_jacobian, isubc_lw, isubc_sw, icsdsw, & + icsdlw, cnx, cny, isc, jsc, imap, jmap, sec, kdt, imp_physics, & + imp_physics_zhao_carr, ps_2delt, ps_1delt, t_2delt, t_1delt, qv_2delt, & + qv_1delt, t, qv, ps, errmsg, errflg) use physparam, only: ipsd0, ipsdlim, iaerflg use mersenne_twister, only: random_setseed, random_index, random_stat @@ -30,7 +31,7 @@ subroutine GFS_rad_time_vary_timestep_init ( ! Interface variables integer, intent(in) :: isubc_lw, isubc_sw, cnx, cny, isc, jsc, kdt integer, intent(in) :: imp_physics, imp_physics_zhao_carr - logical, intent(in) :: lslwr, lsswr + logical, intent(in) :: lslwr, lsswr, do_RRTMGP, use_LW_jacobian integer, intent(inout) :: icsdsw(:), icsdlw(:) integer, intent(in) :: imap(:), jmap(:) real(kind_phys), intent(in) :: sec @@ -73,7 +74,7 @@ subroutine GFS_rad_time_vary_timestep_init ( endif ! isubc_lw and isubc_sw - if (imp_physics == imp_physics_zhao_carr) then + if (imp_physics == imp_physics_zhao_carr .or. (do_RRTMGP .and. use_LW_jacobian)) then if (kdt == 1) then t_2delt = t t_1delt = t diff --git a/physics/GFS_rad_time_vary.fv3.meta b/physics/GFS_rad_time_vary.fv3.meta index ffe33810c..efed2c114 100644 --- a/physics/GFS_rad_time_vary.fv3.meta +++ b/physics/GFS_rad_time_vary.fv3.meta @@ -23,6 +23,22 @@ type = logical intent = in optional = F +[do_RRTMGP] + standard_name = flag_for_rrtmgp_radiation_scheme + long_name = flag for RRTMGP scheme + units = flag + dimensions = () + type = logical + intent = in + optional = F +[use_LW_jacobian] + standard_name = flag_to_calc_RRTMGP_LW_jacobian + long_name = logical flag to control RRTMGP LW calculation + units = flag + dimensions = () + type = logical + intent = in + optional = F [isubc_lw] standard_name = flag_for_lw_clouds_sub_grid_approximation long_name = flag for lw clouds sub-grid approximation From 1223d7af8ec61a755573da6645b3c17269ce8e01 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Wed, 3 Mar 2021 13:39:35 -0700 Subject: [PATCH 017/119] Fix intent statements as requested by Dom. --- physics/GFS_MP_generic.F90 | 4 ++-- physics/GFS_MP_generic.meta | 6 +++--- physics/GFS_SCNV_generic.F90 | 2 +- physics/GFS_SCNV_generic.meta | 8 ++++---- physics/cires_ugwp.F90 | 2 +- physics/cires_ugwp.meta | 6 +++--- physics/cs_conv.F90 | 2 +- physics/gfdl_sfc_layer.F90 | 5 +++-- physics/gfdl_sfc_layer.meta | 6 +++--- physics/m_micro_interstitial.F90 | 2 +- physics/m_micro_interstitial.meta | 2 +- physics/module_MYJSFC_wrapper.F90 | 2 +- physics/module_MYJSFC_wrapper.meta | 14 +++++++------- physics/mp_fer_hires.F90 | 6 +++--- physics/mp_fer_hires.meta | 6 +++--- physics/sfc_drv_ruc.F90 | 3 ++- physics/sfc_drv_ruc.meta | 2 +- 17 files changed, 40 insertions(+), 38 deletions(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index ce8291ee2..435a80509 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -22,8 +22,8 @@ subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs), intent(out) :: save_t, save_qv - real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q + real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv + real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_MP_generic.meta b/physics/GFS_MP_generic.meta index b9c9b87ad..f833c08b1 100644 --- a/physics/GFS_MP_generic.meta +++ b/physics/GFS_MP_generic.meta @@ -96,7 +96,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_qv] standard_name = water_vapor_specific_humidity_save @@ -105,7 +105,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_q] standard_name = tracer_concentration_save @@ -114,7 +114,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) type = real kind = kind_phys - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 index 1b95585db..ae8fac5f9 100644 --- a/physics/GFS_SCNV_generic.F90 +++ b/physics/GFS_SCNV_generic.F90 @@ -25,7 +25,7 @@ subroutine GFS_SCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, gu0, gv0, gt0, logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0, gq0_water_vapor - real(kind=kind_phys), dimension(im,levs), intent(out) :: save_u, save_v, save_t, save_qv + real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t, save_qv character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_SCNV_generic.meta b/physics/GFS_SCNV_generic.meta index 3c0e2db0c..dea2f039c 100644 --- a/physics/GFS_SCNV_generic.meta +++ b/physics/GFS_SCNV_generic.meta @@ -82,7 +82,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_v] standard_name = y_wind_save @@ -91,7 +91,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_t] standard_name = air_temperature_save @@ -100,7 +100,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_qv] standard_name = water_vapor_specific_humidity_save @@ -109,7 +109,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [flag_for_scnv_generic_tend] standard_name = flag_for_generic_shallow_convection_tendency diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 index 672a2ac81..6aab7ed16 100644 --- a/physics/cires_ugwp.F90 +++ b/physics/cires_ugwp.F90 @@ -188,7 +188,7 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr logical, intent(in) :: ldiag3d, lssav ! These arrays only allocated if ldiag_ugwp = .true. - real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt diff --git a/physics/cires_ugwp.meta b/physics/cires_ugwp.meta index d809e3830..e2afbf70f 100644 --- a/physics/cires_ugwp.meta +++ b/physics/cires_ugwp.meta @@ -697,7 +697,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [du3dt_ogw] standard_name = time_integral_of_change_in_x_wind_due_to_orographic_gravity_wave_drag @@ -706,7 +706,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [du3dt_tms] standard_name = time_integral_of_change_in_x_wind_due_to_turbulent_orographic_form_drag @@ -715,7 +715,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [dudt] standard_name = tendency_of_x_wind_due_to_model_physics diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index d56ff020f..36e9c454c 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -1,4 +1,4 @@ -u> \file cs_conv.F90 +!> \file cs_conv.F90 !! This file contains the Chikira-Sugiyama Convection scheme. module cs_conv_pre diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 93e38c982..35f81501f 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -144,8 +144,9 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, & - qss_ocn, qss_lnd, qss_ice + fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice + + real(kind=kind_phys), intent(out), dimension(im) :: qss_ocn, qss_lnd, qss_ice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index a9829fec3..c70040745 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -783,7 +783,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [qss_lnd] standard_name = surface_specific_humidity_over_land @@ -792,7 +792,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [qss_ice] standard_name = surface_specific_humidity_over_ice @@ -801,7 +801,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 index 61f92db60..9cfb6f56e 100644 --- a/physics/m_micro_interstitial.F90 +++ b/physics/m_micro_interstitial.F90 @@ -175,7 +175,7 @@ subroutine m_micro_post_run( & real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) + real(kind=kind_phys), intent(in ) :: gq0_ice(1:im,1:levs) real(kind=kind_phys), intent(out ) :: gq0_rain(1:im,1:levs) real(kind=kind_phys), intent(out ) :: gq0_snow(1:im,1:levs) real(kind=kind_phys), intent(out ) :: gq0_graupel(1:im,1:levs) diff --git a/physics/m_micro_interstitial.meta b/physics/m_micro_interstitial.meta index 7961cb2db..2cc3d3a9a 100644 --- a/physics/m_micro_interstitial.meta +++ b/physics/m_micro_interstitial.meta @@ -392,7 +392,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [gq0_rain] standard_name = rain_water_mixing_ratio_updated_by_physics diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 index e3dcf4111..f46291a46 100644 --- a/physics/module_MYJSFC_wrapper.F90 +++ b/physics/module_MYJSFC_wrapper.F90 @@ -102,7 +102,7 @@ SUBROUTINE myjsfc_wrapper_run( & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q real(kind=kind_phys),dimension(im),intent(inout) :: & & pblh, zorl, ustar, rib - real(kind=kind_phys),dimension(im),intent(out) :: & + real(kind=kind_phys),dimension(im),intent(inout) :: & & cm, ch, stress, ffm, ffh, fm10, fh2 real(kind=kind_phys), dimension(im), intent(inout) :: & & landfrac, lakefrac, oceanfrac, fice diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index 7c1afed2f..d2623fdac 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -379,7 +379,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ch] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air @@ -388,7 +388,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [stress] standard_name = surface_wind_stress @@ -397,7 +397,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ffm] standard_name = Monin_Obukhov_similarity_function_for_momentum @@ -406,7 +406,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ffh] standard_name = Monin_Obukhov_similarity_function_for_heat @@ -415,7 +415,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [fm10] standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m @@ -424,7 +424,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [fh2] standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m @@ -433,7 +433,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [landfrac] standard_name = land_area_fraction diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 index 606b18df4..fd6f76a4d 100644 --- a/physics/mp_fer_hires.F90 +++ b/physics/mp_fer_hires.F90 @@ -54,9 +54,9 @@ subroutine mp_fer_hires_init(ncol, nlev, dtp, imp_physics, & logical, intent(in) :: restart character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - real(kind_phys), intent(out), optional :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rimef(1:ncol,1:nlev) + real(kind_phys), intent(out) :: f_ice(1:ncol,1:nlev) + real(kind_phys), intent(out) :: f_rain(1:ncol,1:nlev) + real(kind_phys), intent(out) :: f_rimef(1:ncol,1:nlev) ! Local variables diff --git a/physics/mp_fer_hires.meta b/physics/mp_fer_hires.meta index 6db03801a..20412d8a6 100644 --- a/physics/mp_fer_hires.meta +++ b/physics/mp_fer_hires.meta @@ -64,7 +64,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [f_rain] standard_name = fraction_of_rain_water_cloud long_name = fraction of rain water cloud @@ -73,7 +73,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [f_rimef] standard_name = rime_factor long_name = rime factor @@ -82,7 +82,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [mpicomm] standard_name = mpi_comm long_name = MPI communicator diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 index 240393221..606019b61 100644 --- a/physics/sfc_drv_ruc.F90 +++ b/physics/sfc_drv_ruc.F90 @@ -344,7 +344,8 @@ subroutine lsm_ruc_run & ! inputs ! --- in/out: integer, dimension(im), intent(inout) :: soiltyp, vegtype real (kind=kind_phys), dimension(lsoil_ruc), intent(in) :: zs - real (kind=kind_phys), dimension(im), intent(inout) :: srflag, & + real (kind=kind_phys), dimension(im), intent(in) :: srflag + real (kind=kind_phys), dimension(im), intent(inout) :: & & canopy, trans, smcwlt2, smcref2, & ! for land & weasd_lnd, snwdph_lnd, tskin_lnd, & diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 8b38b202f..ed7e7676c 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -697,7 +697,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [snoalb] standard_name = upper_bound_on_max_albedo_over_deep_snow From 7aee09635642d69ce3840e9bcfb6886c74723c20 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 4 Mar 2021 00:18:58 +0000 Subject: [PATCH 018/119] Jacobian of LW (Up/Down) applied to adjustment of radiation tendency between timesteps. --- physics/GFS_rrtmgp_pre.F90 | 43 ++------------------ physics/dcyc2.f | 74 ++++++++++++++++++++++++--------- physics/dcyc2.meta | 83 +++++++++++++++++++++++++++++++++++++- physics/rrtmgp_aux.F90 | 76 ++++++++++++++++++++++++++++++++++ physics/rrtmgp_lw_rte.F90 | 18 ++++----- physics/rrtmgp_lw_rte.meta | 11 ++++- 6 files changed, 235 insertions(+), 70 deletions(-) diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 220248231..2db662de0 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -9,7 +9,7 @@ module GFS_rrtmgp_pre getozn ! Routine to setup ozone ! RRTMGP types use mo_gas_concentrations, only: ty_gas_concs - use rrtmgp_aux, only: check_error_msg + use rrtmgp_aux, only: check_error_msg,cmp_tlev real(kind_phys), parameter :: & amd = 28.9644_kind_phys, & ! Molecular weight of dry-air (g/mol) @@ -163,7 +163,7 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nTracers, i_o3, lsswr, lslwr, fhswr, f logical :: top_at_1 real(kind_phys),dimension(nCol,nLev) :: vmr_o3, vmr_h2o real(kind_phys) :: es, tem1, tem2 - real(kind_phys), dimension(nCol,nLev) :: o3_lay, tem2da, tem2db + real(kind_phys), dimension(nCol,nLev) :: o3_lay real(kind_phys), dimension(nCol,nLev, NF_VGAS) :: gas_vmr character(len=32), dimension(gas_concentrations%get_num_gases()) :: active_gases @@ -212,43 +212,7 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nTracers, i_o3, lsswr, lslwr, fhswr, f enddo ! Temperature at layer-interfaces - if (top_at_1) then - tem2da(1:nCol,2:iSFC) = log(p_lay(1:nCol,2:iSFC)) - tem2db(1:nCol,2:iSFC) = log(p_lev(1:nCol,2:iSFC)) - do iCol = 1, nCol - tem2da(iCol,1) = log(p_lay(iCol,1) ) - tem2db(iCol,1) = log(max(minGPpres, p_lev(iCol,1)) ) - tem2db(iCol,iSFC) = log(p_lev(iCol,iSFC) ) - enddo - ! - t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) - do iLay = 2, iSFC - do iCol = 1, nCol - t_lev(iCol,iLay) = t_lay(iCol,iLay) + (t_lay(iCol,iLay-1) - t_lay(iCol,iLay))& - * (tem2db(iCol,iLay) - tem2da(iCol,iLay)) & - / (tem2da(iCol,iLay-1) - tem2da(iCol,iLay)) - enddo - enddo - t_lev(1:NCOL,iSFC+1) = tsfc(1:NCOL) - else - tem2da(1:nCol,2:iTOA) = log(p_lay(1:nCol,2:iTOA)) - tem2db(1:nCol,2:iTOA) = log(p_lev(1:nCol,2:iTOA)) - do iCol = 1, nCol - tem2da(iCol,1) = log(p_lay(iCol,1)) - tem2db(iCol,1) = log(p_lev(iCol,1)) - tem2db(iCol,iTOA) = log(max(minGPpres, p_lev(iCol,iTOA)) ) - enddo - ! - t_lev(1:NCOL,1) = tsfc(1:NCOL) - do iLay = 1, iTOA-1 - do iCol = 1, nCol - t_lev(iCol,iLay+1) = t_lay(iCol,iLay) + (t_lay(iCol,iLay+1) - t_lay(iCol,iLay))& - * (tem2db(iCol,iLay+1) - tem2da(iCol,iLay)) & - / (tem2da(iCol,iLay+1) - tem2da(iCol,iLay)) - enddo - enddo - t_lev(1:NCOL,iTOA+1) = t_lay(1:NCOL,iTOA) - endif + call cmp_tlev(nCol,nLev,minGPpres,p_lay,t_lay,p_lev,tsfc,t_lev) ! Compute a bunch of thermodynamic fields needed by the cloud microphysics schemes. ! Relative humidity, saturation mixing-ratio, vapor mixing-ratio, virtual temperature, @@ -319,5 +283,4 @@ end subroutine GFS_rrtmgp_pre_run ! ######################################################################################### subroutine GFS_rrtmgp_pre_finalize () end subroutine GFS_rrtmgp_pre_finalize - end module GFS_rrtmgp_pre diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 389496d07..1aaddb22a 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -180,7 +180,9 @@ subroutine dcyc2t3_run & & sfcnirbmd,sfcnirdfd,sfcvisbmd,sfcvisdfd, & & im, levs, deltim, fhswr, & & dry, icy, wet, & - & use_LW_jacobian, sfculw, sfculw_jac, & + & minGPpres, use_LW_jacobian, sfculw, sfculw_jac, sfcdlw_jac,& + & t_lay, tgrs, p_lay, p_lev, flux2D_lwUP, flux2D_lwDOWN, & + & t_lev, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: & dtdt,dtdtc, & @@ -194,7 +196,8 @@ subroutine dcyc2t3_run & ! use machine, only : kind_phys use physcons, only : con_pi, con_sbc - + use mo_heating_rates,only : compute_heating_rate + use rrtmgp_aux, only : cmp_tlev implicit none ! ! --- constant parameters: @@ -214,11 +217,11 @@ subroutine dcyc2t3_run & logical, dimension(im), intent(in) :: dry, icy, wet logical, intent(in) :: use_LW_jacobian real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & - & deltim, fhswr + & deltim, fhswr, minGPpres real(kind=kind_phys), dimension(im), intent(in) :: & & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & - & sfcdsw, sfcnsw, sfculw, sfculw_jac + & sfcdsw, sfcnsw, sfculw real(kind=kind_phys), dimension(im), intent(in) :: & & tsfc_lnd, tsfc_ice, tsfc_wat, & @@ -229,7 +232,10 @@ subroutine dcyc2t3_run & & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & - &, swhc, hlwc + & ,swhc, hlwc, p_lay, t_lay + real(kind=kind_phys), dimension(im,levs+1), intent(in) :: p_lev, & + & flux2D_lwUP, flux2D_lwDOWN, sfculw_jac, sfcdlw_jac, t_lev, & + & tgrs ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & @@ -251,6 +257,9 @@ subroutine dcyc2t3_run & integer :: i, k, nstp, nstl, it, istsun(im) real(kind=kind_phys) :: cns, coszn, tem1, tem2, anginc, & & rstl, solang, dT + real(kind=kind_phys), dimension(im,levs) :: htrlw + real(kind=kind_phys), dimension(im,levs+1) :: flxlwup_adj, & + & flxlwdn_adj, t_lev2 ! !===> ... begin here ! @@ -300,11 +309,7 @@ subroutine dcyc2t3_run & tem2 = tem1 * tem1 adjsfcdlw(i) = sfcdlw(i) * tem2 * tem2 !> - LW time-step adjustment: - if (use_LW_Jacobian) then - ! F_adj = F_o + (dF/dT) * dT - dT = tf(i) - tsflw(i) - adjsfculw(i) = sfculw(i) + sfculw_jac(i) * dT - else + if (.not. use_LW_Jacobian) then !! - adjust \a sfc downward LW flux to account for t changes in the lowest model layer. !! compute 4th power of the ratio of \c tf in the lowest model layer over the mean value \c tsflw. if (dry(i)) then @@ -353,14 +358,47 @@ subroutine dcyc2t3_run & enddo !> - adjust SW heating rates with zenith angle change and -!! add with LW heating to temperature tendency. - - do k = 1, levs - do i = 1, im - dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + hlw(i,k) - dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) - enddo - enddo +! add with LW heating to temperature tendency. + if (use_LW_jacobian) then + ! + ! Compute temperatute at level interfaces. + ! + call cmp_tlev(im, levs, minGPpres, p_lay, t_lay, p_lev, tsflw, & + & t_lev2) + ! + ! Adjust up/downward fluxes (at layer interfaces). + ! + do k = 1, levs+1 + do i = 1, im + dT = t_lev(i,k) - t_lev2(i,k) + flxlwup_adj(i,k) = flux2D_lwUP(i,k) + & + & sfculw_jac(i,k)*dT + flxlwdn_adj(i,k) = flux2D_lwDOWN(i,k) + & + & sfcdlw_jac(i,k)*dT + enddo + enddo + ! + ! Compute new heating rate (within each layer). + ! + errmsg = compute_heating_rate(flxlwup_adj, flxlwdn_adj, & + & p_lev, htrlw) + ! + ! Add radiative heating rates to physics heating rate + ! + do k = 1, levs + do i = 1, im + dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + htrlw(i,k) + dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) + enddo + enddo + else + do k = 1, levs + do i = 1, im + dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + hlw(i,k) + dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) + enddo + enddo + endif ! return !................................... diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index efba0a5f5..33c38c635 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -524,6 +524,15 @@ kind = kind_phys intent = out optional = F +[minGPpres] + standard_name = minimum_pressure_in_RRTMGP + long_name = minimum pressure allowed in RRTMGP + units = Pa + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [use_LW_jacobian] standard_name = flag_to_calc_RRTMGP_LW_jacobian long_name = logical flag to control RRTMGP LW calculation @@ -536,11 +545,83 @@ standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface long_name = RRTMGP Jacobian upward longwave flux at surface units = W m-2 K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys intent = in optional = F +[sfcdlw_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_downward_at_surface + long_name = RRTMGP Jacobian downward longwave flux at surface + units = W m-2 K-1 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[t_lay] + standard_name = air_temperature_at_layer_for_RRTMGP + long_name = air temperature at vertical layer for radiation calculation + units = K + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[t_lev] + standard_name = air_temperature_at_interface_for_RRTMGP + long_name = air temperature at vertical interface for radiation calculation + units = K + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[tgrs] + standard_name = air_temperature + long_name = model layer mean temperature + units = K + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[p_lay] + standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa + long_name = air pressure at vertical layer for radiation calculation + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[p_lev] + standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa + long_name = air pressure level + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwUP] + standard_name = RRTMGP_lw_flux_profile_upward_allsky + long_name = RRTMGP upward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwDOWN] + standard_name = RRTMGP_lw_flux_profile_downward_allsky + long_name = RRTMGP downward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/rrtmgp_aux.F90 b/physics/rrtmgp_aux.F90 index d39705e7a..2fa4972b8 100644 --- a/physics/rrtmgp_aux.F90 +++ b/physics/rrtmgp_aux.F90 @@ -7,6 +7,78 @@ module rrtmgp_aux rrtmgp_minP, & ! Minimum pressure allowed in RRTMGP rrtmgp_minT ! Minimum temperature allowed in RRTMGP contains + + ! ######################################################################################### + ! ######################################################################################### + subroutine cmp_tlev(nCol,nLev,minP,p_lay,t_lay,p_lev,tsfc,t_lev) + ! Inputs + integer, intent(in) :: & + nCol,nLev + real(kind_phys),intent(in) :: & + minP + real(kind_phys),dimension(nCol),intent(in) :: & + tsfc + real(kind_phys),dimension(nCol,nLev),intent(in) :: & + p_lay,t_lay + real(kind_phys),dimension(nCol,nLev+1),intent(in) :: & + p_lev + + ! Outputs + real(kind_phys),dimension(nCol,nLev+1),intent(out) :: & + t_lev + + ! Local + integer :: iCol,iLay, iSFC, iTOA, top_at_1 + real(kind_phys), dimension(nCol,nLev) :: tem2da, tem2db + + top_at_1 = (p_lev(1,1) .lt. p_lev(1, nLev)) + if (top_at_1) then + iSFC = nLev + iTOA = 1 + else + iSFC = 1 + iTOA = nLev + endif + + if (iTOA .eq. 1) then + tem2da(1:nCol,2:iSFC) = log(p_lay(1:nCol,2:iSFC)) + tem2db(1:nCol,2:iSFC) = log(p_lev(1:nCol,2:iSFC)) + do iCol = 1, nCol + tem2da(iCol,1) = log(p_lay(iCol,1) ) + tem2db(iCol,1) = log(max(minP, p_lev(iCol,1)) ) + tem2db(iCol,iSFC) = log(p_lev(iCol,iSFC) ) + enddo + t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) + do iLay = 2, iSFC + do iCol = 1, nCol + t_lev(iCol,iLay) = t_lay(iCol,iLay) + (t_lay(iCol,iLay-1) - t_lay(iCol,iLay))& + * (tem2db(iCol,iLay) - tem2da(iCol,iLay)) & + / (tem2da(iCol,iLay-1) - tem2da(iCol,iLay)) + enddo + enddo + t_lev(1:NCOL,iSFC+1) = tsfc(1:NCOL) + else + tem2da(1:nCol,2:iTOA) = log(p_lay(1:nCol,2:iTOA)) + tem2db(1:nCol,2:iTOA) = log(p_lev(1:nCol,2:iTOA)) + do iCol = 1, nCol + tem2da(iCol,1) = log(p_lay(iCol,1)) + tem2db(iCol,1) = log(p_lev(iCol,1)) + tem2db(iCol,iTOA) = log(max(minP, p_lev(iCol,iTOA)) ) + enddo + + t_lev(1:NCOL,1) = tsfc(1:NCOL) + do iLay = 1, iTOA-1 + do iCol = 1, nCol + t_lev(iCol,iLay+1) = t_lay(iCol,iLay) + (t_lay(iCol,iLay+1) - t_lay(iCol,iLay))& + * (tem2db(iCol,iLay+1) - tem2da(iCol,iLay)) & + / (tem2da(iCol,iLay+1) - tem2da(iCol,iLay)) + enddo + enddo + t_lev(1:NCOL,iTOA+1) = t_lay(1:NCOL,iTOA) + endif + + end subroutine cmp_tlev + ! ######################################################################################### ! SUBROUTINE check_error_msg ! ######################################################################################### @@ -20,4 +92,8 @@ subroutine check_error_msg(routine_name, error_msg) return end if end subroutine check_error_msg + + + + end module rrtmgp_aux diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index a9e6d1839..7da40177e 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -31,7 +31,8 @@ end subroutine rrtmgp_lw_rte_init subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & - fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, sfculw_jac, errmsg, errflg) + fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, sfculw_jac, sfcdlw_jac, & + errmsg, errflg) ! Inputs logical, intent(in) :: & @@ -56,9 +57,9 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, lw_optical_props_clouds ! RRTMGP DDT: longwave cloud radiative properties ! Outputs - real(kind_phys), dimension(ncol), intent(inout) :: & - sfculw_jac ! Jacobian of upwelling LW surface radiation (W/m2/K) real(kind_phys), dimension(ncol,nLev+1), intent(inout) :: & + sfculw_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) + sfcdlw_jac, & ! Jacobian of downwelling LW surface radiation (W/m2/K) fluxlwUP_allsky, & ! All-sky flux (W/m2) fluxlwDOWN_allsky, & ! All-sky flux (W/m2) fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) @@ -73,7 +74,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, flux_allsky, flux_clrsky real(kind_phys), dimension(ncol,nLev+1,lw_gas_props%get_nband()),target :: & fluxLW_up_allsky, fluxLW_up_clrsky, fluxLW_dn_allsky, fluxLW_dn_clrsky - real(kind_phys), dimension(nCol,nLev+1) :: fluxlwUP_jac,fluxlwDOWN_jac logical :: & top_at_1 integer :: iSFC, iTOA @@ -144,9 +144,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) - sfculw_jac = fluxlwUP_jac(:,iSFC) + flux_up_Jac = sfculw_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) + flux_dn_Jac = sfcdlw_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clouds, & ! IN - optical-properties @@ -171,9 +170,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) - sfculw_jac = fluxlwUP_jac(:,iSFC) + flux_up_Jac = sfculw_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) + flux_dn_Jac = sfcdlw_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clrsky, & ! IN - optical-properties diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index 4d68ec4b6..0825f6e26 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -154,7 +154,16 @@ standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface long_name = RRTMGP Jacobian upward longwave flux at surface units = W m-2 K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = inout + optional = F +[sfcdlw_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_downward_at_surface + long_name = RRTMGP Jacobian downward longwave flux at surface + units = W m-2 K-1 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys intent = inout From 1d598eea8c0d261e3754fe5b1f602ffb65c09af2 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 4 Mar 2021 19:08:38 +0000 Subject: [PATCH 019/119] Bug fixes for l127 configuration using RRTMGP --- physics/GFS_rrtmgp_pre.F90 | 2 +- physics/GFS_rrtmgp_pre.meta | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 220248231..811d3c467 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -206,7 +206,7 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nTracers, i_o3, lsswr, lslwr, fhswr, f do iCol=1,NCOL do iLay=1,nLev if (t_lay(iCol,iLay) .le. minGPtemp) then - t_lay = minGPtemp + epsilon(minGPtemp) + t_lay(iCol,iLay) = minGPtemp + epsilon(minGPtemp) endif enddo enddo diff --git a/physics/GFS_rrtmgp_pre.meta b/physics/GFS_rrtmgp_pre.meta index cb53b8f86..698008fd1 100644 --- a/physics/GFS_rrtmgp_pre.meta +++ b/physics/GFS_rrtmgp_pre.meta @@ -237,7 +237,7 @@ dimensions = () type = real kind = kind_phys - intent = out + intent = in optional = F [raddt] standard_name = time_step_for_radiation From 4e85c8b178340b10acee168c3bab80b7d569ff41 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 4 Mar 2021 20:48:29 +0000 Subject: [PATCH 020/119] Changes to metadata. --- physics/dcyc2.f | 2 +- physics/dcyc2.meta | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 1aaddb22a..987c9f52e 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -363,7 +363,7 @@ subroutine dcyc2t3_run & ! ! Compute temperatute at level interfaces. ! - call cmp_tlev(im, levs, minGPpres, p_lay, t_lay, p_lev, tsflw, & + call cmp_tlev(im, levs, minGPpres, p_lay, tgrs, p_lev, tsflw, & & t_lev2) ! ! Adjust up/downward fluxes (at layer interfaces). diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index 33c38c635..8ca126f51 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -587,18 +587,18 @@ intent = in optional = F [p_lay] - standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa - long_name = air pressure at vertical layer for radiation calculation - units = hPa + standard_name = air_pressure + long_name = mean layer pressure + units = Pa dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in optional = F [p_lev] - standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa - long_name = air pressure level - units = hPa + standard_name = air_pressure_at_interface + long_name = air pressure at model layer interfaces + units = Pa dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys From 0fd915ff6ed44e87325ac523bbcce2fd39542aab Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 4 Mar 2021 22:53:20 +0000 Subject: [PATCH 021/119] Some small changes --- physics/dcyc2.f | 13 ++++++------- physics/dcyc2.meta | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 987c9f52e..b8c79dd55 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -180,9 +180,9 @@ subroutine dcyc2t3_run & & sfcnirbmd,sfcnirdfd,sfcvisbmd,sfcvisdfd, & & im, levs, deltim, fhswr, & & dry, icy, wet, & - & minGPpres, use_LW_jacobian, sfculw, sfculw_jac, sfcdlw_jac,& - & t_lay, tgrs, p_lay, p_lev, flux2D_lwUP, flux2D_lwDOWN, & - & t_lev, & + & minGPpres, tsfc, use_LW_jacobian, sfculw, sfculw_jac, & + & sfcdlw_jac, t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, & + & flux2D_lwDOWN, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: & dtdt,dtdtc, & @@ -221,7 +221,7 @@ subroutine dcyc2t3_run & real(kind=kind_phys), dimension(im), intent(in) :: & & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & - & sfcdsw, sfcnsw, sfculw + & sfcdsw, sfcnsw, sfculw, tsfc real(kind=kind_phys), dimension(im), intent(in) :: & & tsfc_lnd, tsfc_ice, tsfc_wat, & @@ -234,8 +234,7 @@ subroutine dcyc2t3_run & real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & & ,swhc, hlwc, p_lay, t_lay real(kind=kind_phys), dimension(im,levs+1), intent(in) :: p_lev, & - & flux2D_lwUP, flux2D_lwDOWN, sfculw_jac, sfcdlw_jac, t_lev, & - & tgrs + & flux2D_lwUP, flux2D_lwDOWN, sfculw_jac, sfcdlw_jac, t_lev ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & @@ -363,7 +362,7 @@ subroutine dcyc2t3_run & ! ! Compute temperatute at level interfaces. ! - call cmp_tlev(im, levs, minGPpres, p_lay, tgrs, p_lev, tsflw, & + call cmp_tlev(im, levs, minGPpres, p_lay, t_lay, p_lev, tsfc, & & t_lev2) ! ! Adjust up/downward fluxes (at layer interfaces). diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index 8ca126f51..f7d27b575 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -124,6 +124,15 @@ kind = kind_phys intent = in optional = F +[tsfc] + standard_name = surface_skin_temperature + long_name = surface skin temperature + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [sfcemis_lnd] standard_name = surface_longwave_emissivity_over_land_interstitial long_name = surface lw emissivity in fraction over land (temporary use as interstitial) @@ -559,15 +568,6 @@ kind = kind_phys intent = in optional = F -[t_lay] - standard_name = air_temperature_at_layer_for_RRTMGP - long_name = air temperature at vertical layer for radiation calculation - units = K - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [t_lev] standard_name = air_temperature_at_interface_for_RRTMGP long_name = air temperature at vertical interface for radiation calculation @@ -577,7 +577,7 @@ kind = kind_phys intent = in optional = F -[tgrs] +[t_lay] standard_name = air_temperature long_name = model layer mean temperature units = K From ae4e43a03220a7495e9f8fe32e2c53b46063b324 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Fri, 5 Mar 2021 08:08:00 -0500 Subject: [PATCH 022/119] A bug fix related NSST model in the coupled mode and a reduction of z_w_max (30 m to 20 m) --- physics/module_nst_parameters.f90 | 4 +++- physics/sfc_nst.f | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/physics/module_nst_parameters.f90 b/physics/module_nst_parameters.f90 index 502ef976a..6d8c8794b 100644 --- a/physics/module_nst_parameters.f90 +++ b/physics/module_nst_parameters.f90 @@ -6,6 +6,8 @@ !! \ingroup gfs_nst_main !! This module contains constants and parameters used in GFS !! near surface sea temperature scheme. +!! history: +!! 20210305: X.Li, reduce z_w_max from 30 m to 20 m module module_nst_parameters use machine, only : kind_phys & ,kind_rad ! for astronomy (date) calculations @@ -42,7 +44,7 @@ module module_nst_parameters ,eps_z_w=0.01 & !< criteria to finish iterations for z_w ,eps_conv=0.01 & !< criteria to finish iterations for d_conv ,eps_sfs=0.01 & !< criteria to finish iterations for d_sfs - ,z_w_max=30.0 & !< max warm layer thickness + ,z_w_max=20.0 & !< max warm layer thickness ,z_w_min=0.2 & !< min warm layer thickness ,z_w_ini=0.2 & !< initial warm layer thickness in dtl_onset ,z_c_max=0.01 & !< maximum of sub-layer thickness (m) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 9e6a1c0cc..f9c0cdfc7 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,7 +27,7 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & @@ -186,7 +186,7 @@ subroutine sfc_nst_run & integer, intent(in) :: im, kdt, ipr, nstf_name1, nstf_name4, & & nstf_name5 real (kind=kind_phys), intent(in) :: hvap, cp, hfus, jcal, eps, & - & epsm1, rvrdm1, rd, rhw0, sbc, pi + & epsm1, rvrdm1, rd, rhw0, sbc, pi, tgice real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & & t1, q1, tref, cm, ch, prsl1, prslki, prsik1, prslk1, & & xlon,xcosz, & @@ -553,7 +553,7 @@ subroutine sfc_nst_run & !> - Call get_dtzm_point() to computes \a dtz and \a tsurf. call get_dtzm_point(xt(i),xz(i),dt_cool(i),z_c(i), & zsea1,zsea2,dtz) - tsurf(i) = max(271.2_kp, tref(i) + dtz ) + tsurf(i) = max(tgice, tref(i) + dtz ) ! if (lprnt .and. i == ipr) print *,' tsurf=',tsurf(i),' tref=', ! &tref(i),' xz=',xz(i),' dt_cool=',dt_cool(i) @@ -668,7 +668,7 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, + & (im,wet,tgice,tsfco,tsfc_wat,tsurf_wat,tseal,xt,xz,dt_cool, & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys @@ -681,8 +681,9 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads logical, dimension(im), intent(in) :: wet + real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: - & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + & tsfco, tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac logical, intent(in) :: cplflx ! --- input/outputs: @@ -700,7 +701,7 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm + real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 ! Initialize CCPP error handling variables errmsg = '' @@ -722,13 +723,14 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then + z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, & - & z_c, wet, zero, omz1, im, 1, nthreads, dtzm) + & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) do i=1,im if (wet(i) .and. oceanfrac(i) > zero) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update +! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile +! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -773,7 +775,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & + & ( im, kdt, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) @@ -786,12 +788,12 @@ subroutine sfc_nst_post_run & integer, parameter :: kp = kind_phys ! --- inputs: - integer, intent(in) :: im, nthreads + integer, intent(in) :: im, kdt, nthreads logical, dimension(im), intent(in) :: wet, icy real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 - real (kind=kind_phys), dimension(im), intent(in) :: xt, xz, & + real (kind=kind_phys), dimension(im), intent(inout) :: xt, xz, & & dt_cool, z_c, tref, xlon ! --- input/outputs: From 80203958726d93f72b1f893317883386f382f57e Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Fri, 5 Mar 2021 10:00:23 -0500 Subject: [PATCH 023/119] Modifed sfc_nst.meta (related to the update in sfc_nst.f) --- physics/sfc_nst.meta | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 2c32ca106..dce87e8c4 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -114,6 +114,15 @@ kind = kind_phys intent = in optional = F +[tgice] + standard_name = freezing_point_temperature_of_seawater + long_name = freezing point temperature of seawater + units = K + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [ps] standard_name = surface_air_pressure long_name = surface pressure @@ -671,6 +680,24 @@ type = logical intent = in optional = F +[tgice] + standard_name = freezing_point_temperature_of_seawater + long_name = freezing point temperature of seawater + units = K + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F +[tsfco] + standard_name = sea_surface_temperature + long_name = sea surface temperature + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [tsfc_wat] standard_name = surface_skin_temperature_over_ocean_interstitial long_name = surface skin temperature over ocean (temporary use as interstitial) @@ -804,6 +831,14 @@ type = integer intent = in optional = F +[kdt] + standard_name = index_of_time_step + long_name = current time step index + units = index + dimensions = () + type = integer + intent = in + optional = F [rlapse] standard_name = air_temperature_lapse_rate_constant long_name = environmental air temperature lapse rate constant From 0c37afde177e34a2efa71364bfc51e77d99f5efb Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 5 Mar 2021 21:06:57 +0000 Subject: [PATCH 024/119] Full profile LW flux adjustment using RRTMGP Jacobians. --- physics/dcyc2.f | 18 ++++++++++-------- physics/dcyc2.meta | 20 ++++++++++---------- physics/rrtmgp_lw_rte.F90 | 20 ++++++++++---------- physics/rrtmgp_lw_rte.meta | 12 ++++++------ 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index b8c79dd55..58b88d442 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -15,10 +15,10 @@ module dcyc2t3 public :: dcyc2t3_init, dcyc2t3_run, dcyc2t3_finalize contains - + subroutine dcyc2t3_init() end subroutine dcyc2t3_init - + subroutine dcyc2t3_finalize() end subroutine dcyc2t3_finalize @@ -180,8 +180,8 @@ subroutine dcyc2t3_run & & sfcnirbmd,sfcnirdfd,sfcvisbmd,sfcvisdfd, & & im, levs, deltim, fhswr, & & dry, icy, wet, & - & minGPpres, tsfc, use_LW_jacobian, sfculw, sfculw_jac, & - & sfcdlw_jac, t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, & + & minGPpres, tsfc, use_LW_jacobian, sfculw, fluxlwUP_jac, & + & fluxlwDOWN_jac, t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, & & flux2D_lwDOWN, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: @@ -234,7 +234,8 @@ subroutine dcyc2t3_run & real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & & ,swhc, hlwc, p_lay, t_lay real(kind=kind_phys), dimension(im,levs+1), intent(in) :: p_lev, & - & flux2D_lwUP, flux2D_lwDOWN, sfculw_jac, sfcdlw_jac, t_lev + & flux2D_lwUP, flux2D_lwDOWN, fluxlwUP_jac, fluxlwDOWN_jac, & + & t_lev ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & @@ -364,16 +365,17 @@ subroutine dcyc2t3_run & ! call cmp_tlev(im, levs, minGPpres, p_lay, t_lay, p_lev, tsfc, & & t_lev2) + ! ! Adjust up/downward fluxes (at layer interfaces). ! do k = 1, levs+1 do i = 1, im - dT = t_lev(i,k) - t_lev2(i,k) + dT = t_lev2(i,k) - t_lev(i,k) flxlwup_adj(i,k) = flux2D_lwUP(i,k) + & - & sfculw_jac(i,k)*dT + & fluxlwUP_jac(i,k)*dT flxlwdn_adj(i,k) = flux2D_lwDOWN(i,k) + & - & sfcdlw_jac(i,k)*dT + & fluxlwDOWN_jac(i,k)*dT enddo enddo ! diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index f7d27b575..e240d0446 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -549,19 +549,19 @@ dimensions = () type = logical intent = in - optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface + optional = F +[fluxlwUP_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward + long_name = RRTMGP Jacobian upward longwave flux profile units = W m-2 K-1 dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys intent = in - optional = F -[sfcdlw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_downward_at_surface - long_name = RRTMGP Jacobian downward longwave flux at surface + optional = F +[fluxlwDOWN_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_downward + long_name = RRTMGP Jacobian downward longwave flux at profile units = W m-2 K-1 dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real @@ -578,8 +578,8 @@ intent = in optional = F [t_lay] - standard_name = air_temperature - long_name = model layer mean temperature + standard_name = air_temperature_updated_by_physics + long_name = model layer mean temperature updated by physics units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 7da40177e..1a53f538c 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -28,10 +28,10 @@ end subroutine rrtmgp_lw_rte_init !! \section arg_table_rrtmgp_lw_rte_run !! \htmlinclude rrtmgp_lw_rte_run.html !! - subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & - nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & - lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & - fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, sfculw_jac, sfcdlw_jac, & + subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & + nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & + lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & + fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, fluxlwUP_jac, fluxlwDOWN_jac, & errmsg, errflg) ! Inputs @@ -58,8 +58,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! Outputs real(kind_phys), dimension(ncol,nLev+1), intent(inout) :: & - sfculw_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) - sfcdlw_jac, & ! Jacobian of downwelling LW surface radiation (W/m2/K) + fluxlwUP_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) + fluxlwDOWN_jac, & ! Jacobian of downwelling LW surface radiation (W/m2/K) fluxlwUP_allsky, & ! All-sky flux (W/m2) fluxlwDOWN_allsky, & ! All-sky flux (W/m2) fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) @@ -144,8 +144,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = sfculw_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = sfcdlw_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) + flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) + flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clouds, & ! IN - optical-properties @@ -170,8 +170,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = sfculw_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = sfcdlw_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) + flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) + flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clrsky, & ! IN - optical-properties diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index 0825f6e26..0ef9bd016 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -150,18 +150,18 @@ kind = kind_phys intent = inout optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface +[fluxlwUP_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward + long_name = RRTMGP Jacobian upward longwave flux profile units = W m-2 K-1 dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys intent = inout optional = F -[sfcdlw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_downward_at_surface - long_name = RRTMGP Jacobian downward longwave flux at surface +[fluxlwDOWN_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_downward + long_name = RRTMGP Jacobian downward longwave flux at profile units = W m-2 K-1 dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real From 55d395f35301b39b6bafdc49b1109af9f07dc17b Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Mon, 8 Mar 2021 14:48:20 +0000 Subject: [PATCH 025/119] Updated sfc_nst.f, sfc_nst.meta, module_nst_water_prop.f90 and flake_driver.F90 --- physics/flake_driver.F90 | 17 ++- physics/module_nst_water_prop.f90 | 7 +- physics/sfc_nst.f | 46 +++++--- physics/sfc_nst.meta | 170 +++++++++++++++++------------- 4 files changed, 146 insertions(+), 94 deletions(-) diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index b882c7404..474aea24d 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -187,6 +187,9 @@ SUBROUTINE flake_driver_run ( & REAL (KIND = kind_phys) :: & lake_depth_max, T_bot_2_in, T_bot_2_out, dxlat,tb,tr,tt,temp,Kbar, DelK + +REAL (KIND = kind_phys) :: x, y + INTEGER :: i,ipr,iter LOGICAL :: lflk_botsed_use @@ -237,9 +240,19 @@ SUBROUTINE flake_driver_run ( & ! else ! T_sfc(i) = tsurf(i) ! endif - T_sfc(i) = 0.2*tt + 0.8* tsurf(i) + T_sfc(i) = 0.1*tt + 0.9* tsurf(i) endif + x = 0.03279*julian + if(xlat(i) .ge. 0.0) then + y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + T_sfc(i) = T_sfc(i) + 0.3*y + tb = tb + 0.05*y + else + y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + T_sfc(i) = T_sfc(i) - 0.3*y + tb = tb - 0.05*y + endif T_bot(i) = tb T_B1(i) = tb @@ -275,7 +288,7 @@ SUBROUTINE flake_driver_run ( & ! print*,'inside flake driver' ! print*, julian,xlat(i),w_albedo(I),w_extinc(i),lakedepth(i),elev(i),tb,tt,tsurf(i),T_sfc(i) - endif !lake fraction and depth + endif !lake endif !flag enddo 1001 format ( 'At icount=', i5, ' x = ', f5.2,5x, 'y = ', & diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index 39020526c..e02a60c62 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,6 +682,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! +! lake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -697,7 +698,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet + logical, dimension(nx,ny), intent(in) :: wet, lake ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -713,7 +714,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) ) then + if ( wet(i,j) .and. .not. lake(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 9e6a1c0cc..5e65b0eae 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -8,12 +8,15 @@ module sfc_nst ! \brief This subroutine is empty since there are no procedures that need to be done to initialize the GFS NSST code. !! This subroutine is empty since there are no procedures that need to be done to initialize the GFS NSST code. +!! +!! \section arg_table_sfc_nst_init Argument Table !! subroutine sfc_nst_init end subroutine sfc_nst_init ! \brief This subroutine is empty since there are no procedures that need to be done to finalize the GFS NSST code. !! This subroutine is empty since there are no procedures that need to be done to finalize the GFS NSST code. +!! \section arg_table_sfc_nst_finalize Argument Table !! subroutine sfc_nst_finalize end subroutine sfc_nst_finalize @@ -28,7 +31,7 @@ end subroutine sfc_nst_finalize subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: & pi, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & + & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -47,7 +50,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, xlon, sinlat, stress, ! +! prsl1, prslki, wet, lake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,6 +97,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! +! lake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -194,7 +198,8 @@ subroutine sfc_nst_run & real (kind=kind_phys), intent(in) :: timestep real (kind=kind_phys), intent(in) :: solhr - logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet + logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet, & + & lake ! &, icy logical, intent(in) :: lprnt @@ -259,14 +264,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. lake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. lake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -582,7 +587,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -655,10 +660,14 @@ module sfc_nst_pre !! The NSST scheme is one of the three schemes used to represent the !! surface in the GFS physics suite. The other two are the Noah land !! surface model and the sice simplified ice model. +!! +!! \section arg_table_sfc_nst_init Argument Table !! subroutine sfc_nst_pre_init end subroutine sfc_nst_pre_init +!! \section arg_table_sfc_nst_finalize Argument Table +!! subroutine sfc_nst_pre_finalize end subroutine sfc_nst_pre_finalize @@ -668,7 +677,7 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, + & (im, wet, lake, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys @@ -680,7 +689,7 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet + logical, dimension(im), intent(in) :: wet, lake real (kind=kind_phys), dimension(im), intent(in) :: & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac logical, intent(in) :: cplflx @@ -707,7 +716,7 @@ subroutine sfc_nst_pre_run errflg = 0 do i=1,im - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -722,10 +731,11 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then - call get_dtzm_2d (xt, xz, dt_cool, & - & z_c, wet, zero, omz1, im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, + & z_c, wet, lake, zero, omz1, im, 1, + & nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero) then + if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update @@ -754,11 +764,15 @@ module sfc_nst_post ! \defgroup GFS_NSST_POST GFS Near-Surface Sea Temperature Post !! \brief Brief description of the parameterization +!! +!! \section arg_table_sfc_nst_post_init Argument Table !! subroutine sfc_nst_post_init end subroutine sfc_nst_post_init ! \brief Brief description of the subroutine +!! +!! \section arg_table_sfc_nst_post_finalize Argument Table !! subroutine sfc_nst_post_finalize end subroutine sfc_nst_post_finalize @@ -773,7 +787,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & + & ( im, rlapse, tgice, wet, lake,icy, oro, oro_uf, nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) @@ -787,7 +801,7 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, icy + logical, dimension(im), intent(in) :: wet, icy, lake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 @@ -828,12 +842,12 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, zsea1, zsea2, & + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, lake, zsea1, zsea2, & & im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 2c32ca106..ba0876b01 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -118,7 +118,7 @@ standard_name = surface_air_pressure long_name = surface pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -127,7 +127,7 @@ standard_name = x_wind_at_lowest_model_layer long_name = x component of surface layer wind units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -136,7 +136,7 @@ standard_name = y_wind_at_lowest_model_layer long_name = y component of surface layer wind units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -145,7 +145,7 @@ standard_name = air_temperature_at_lowest_model_layer long_name = surface layer mean temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -154,7 +154,7 @@ standard_name = water_vapor_specific_humidity_at_lowest_model_layer long_name = surface layer mean specific humidity units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -163,7 +163,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -172,7 +172,7 @@ standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean long_name = surface exchange coeff for momentum over ocean units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -181,7 +181,7 @@ standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean long_name = surface exchange coeff heat & moisture over ocean units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -190,7 +190,7 @@ standard_name = air_pressure_at_lowest_model_layer long_name = surface layer mean pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -199,7 +199,7 @@ standard_name = ratio_of_exner_function_between_midlayer_and_interface_at_lowest_model_layer long_name = Exner function ratio bt midlayer and interface at 1st layer units = ratio - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -208,7 +208,7 @@ standard_name = dimensionless_exner_function_at_lowest_model_interface long_name = dimensionless Exner function at the ground surface units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -217,7 +217,7 @@ standard_name = dimensionless_exner_function_at_lowest_model_layer long_name = dimensionless Exner function at the lowest model layer units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -226,7 +226,15 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) + type = logical + intent = in + optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -234,7 +242,7 @@ standard_name = longitude long_name = longitude units = radian - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -243,7 +251,7 @@ standard_name = sine_of_latitude long_name = sine of latitude units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -252,7 +260,7 @@ standard_name = surface_wind_stress_over_ocean long_name = surface wind stress over ocean units = m2 s-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -261,7 +269,7 @@ standard_name = surface_longwave_emissivity_over_ocean_interstitial long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -270,7 +278,7 @@ standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean long_name = total sky surface downward longwave flux absorbed by the ground over ocean units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -279,7 +287,7 @@ standard_name = surface_net_downwelling_shortwave_flux long_name = total sky sfc net sw flx into ocean units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -288,7 +296,7 @@ standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean long_name = total precipitation amount in each time step over ocean units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -323,7 +331,7 @@ standard_name = instantaneous_cosine_of_zenith_angle long_name = cosine of solar zenith angle units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -332,7 +340,7 @@ standard_name = wind_speed_at_lowest_model_layer long_name = wind speed at lowest model level units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -341,7 +349,7 @@ standard_name = flag_for_iteration long_name = flag for iteration units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -349,7 +357,7 @@ standard_name = flag_for_guess_run long_name = flag for guess run units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -397,7 +405,7 @@ standard_name = surface_skin_temperature_for_nsst long_name = ocean surface skin temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -406,7 +414,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -415,7 +423,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -424,7 +432,7 @@ standard_name = sea_water_salinity long_name = salinity content in diurnal thermocline layer units = ppt m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -433,7 +441,7 @@ standard_name = diurnal_thermocline_layer_x_current long_name = u-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -442,7 +450,7 @@ standard_name = diurnal_thermocline_layer_y_current long_name = v-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -451,7 +459,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -460,7 +468,7 @@ standard_name = ocean_mixed_layer_thickness long_name = mixed layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -469,7 +477,7 @@ standard_name = sensitivity_of_dtl_heat_content_to_surface_temperature long_name = d(xt)/d(ts) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -478,7 +486,7 @@ standard_name = sensitivity_of_dtl_thickness_to_surface_temperature long_name = d(xz)/d(ts) units = m K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -487,7 +495,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -496,7 +504,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -505,7 +513,7 @@ standard_name = coefficient_c_0 long_name = coefficient1 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -514,7 +522,7 @@ standard_name = coefficient_c_d long_name = coefficient2 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -523,7 +531,7 @@ standard_name = coefficient_w_0 long_name = coefficient3 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -532,7 +540,7 @@ standard_name = coefficient_w_d long_name = coefficient4 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -541,7 +549,7 @@ standard_name = free_convection_layer_thickness long_name = thickness of free convection layer units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -550,7 +558,7 @@ standard_name = index_of_dtlm_start long_name = index to start dtlm run or not units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -559,7 +567,7 @@ standard_name = sensible_heat_flux_due_to_rainfall long_name = sensible heat flux due to rainfall units = W - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -568,7 +576,7 @@ standard_name = surface_specific_humidity_over_ocean long_name = surface air saturation specific humidity over ocean units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -577,7 +585,7 @@ standard_name = upward_heat_flux_in_soil_over_ocean long_name = soil heat flux over ocean units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -586,7 +594,7 @@ standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean long_name = momentum exchange coefficient over ocean units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -595,7 +603,7 @@ standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean long_name = thermal exchange coefficient over ocean units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -604,7 +612,7 @@ standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean long_name = kinematic surface upward latent heat flux over ocean units = kg kg-1 m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -613,7 +621,7 @@ standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean long_name = kinematic surface upward sensible heat flux over ocean units = K m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -622,7 +630,7 @@ standard_name = surface_upward_potential_latent_heat_flux_over_ocean long_name = surface upward potential latent heat flux over ocean units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -667,7 +675,15 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) + type = logical + intent = in + optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -675,7 +691,7 @@ standard_name = surface_skin_temperature_over_ocean_interstitial long_name = surface skin temperature over ocean (temporary use as interstitial) units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -684,7 +700,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -693,7 +709,7 @@ standard_name = surface_skin_temperature_for_nsst long_name = ocean surface skin temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -702,7 +718,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -711,7 +727,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -720,7 +736,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -729,7 +745,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -738,7 +754,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -755,7 +771,7 @@ standard_name = sea_area_fraction long_name = fraction of horizontal grid area occupied by ocean units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -826,7 +842,15 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) + type = logical + intent = in + optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -834,7 +858,7 @@ standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = logical intent = in optional = F @@ -842,7 +866,7 @@ standard_name = orography long_name = orography units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -851,7 +875,7 @@ standard_name = orography_unfiltered long_name = unfiltered orography units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -884,7 +908,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -893,7 +917,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -902,7 +926,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -911,7 +935,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -920,7 +944,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -929,7 +953,7 @@ standard_name = longitude long_name = longitude units = radian - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = in @@ -938,7 +962,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -947,7 +971,7 @@ standard_name = surface_skin_temperature_over_ocean_interstitial long_name = surface skin temperature over ocean (temporary use as interstitial) units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -964,7 +988,7 @@ standard_name = mean_change_over_depth_in_sea_water_temperature long_name = mean of dT(z) (zsea1 to zsea2) units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = out From 049fdbe5dd45f480b52a1ee8cada6519d92ac948 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Mon, 8 Mar 2021 16:07:46 +0000 Subject: [PATCH 026/119] Removed redundant code. --- physics/dcyc2.f | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 58b88d442..121de192b 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -389,17 +389,22 @@ subroutine dcyc2t3_run & do k = 1, levs do i = 1, im dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + htrlw(i,k) - dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) enddo enddo else do k = 1, levs do i = 1, im dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + hlw(i,k) - dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) enddo enddo endif + + ! Add clear-sky radiative heating rates to clear-sky physics heating rate + do k = 1, levs + do i = 1, im + dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) + enddo + enddo ! return !................................... From d550e982a2cc9ed02c25f683707fbbb6028fa866 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Tue, 9 Mar 2021 20:21:36 +0000 Subject: [PATCH 027/119] Added adjustment with Jacobian to surface flux, used for coupling. --- physics/dcyc2.f | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 121de192b..2f045a91f 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -254,7 +254,7 @@ subroutine dcyc2t3_run & integer, intent(out) :: errflg ! --- locals: - integer :: i, k, nstp, nstl, it, istsun(im) + integer :: i, k, nstp, nstl, it, istsun(im),iSFC real(kind=kind_phys) :: cns, coszn, tem1, tem2, anginc, & & rstl, solang, dT real(kind=kind_phys), dimension(im,levs) :: htrlw @@ -267,6 +267,13 @@ subroutine dcyc2t3_run & errmsg = '' errflg = 0 +! Vertical ordering? + if (p_lev(1,1) .lt. p_lev(1, levs)) then + iSFC = levs + else + iSFC = 1 + endif + tem1 = fhswr / deltim nstp = max(6, nint(tem1)) nstl = max(1, nint(nstp/tem1)) @@ -309,10 +316,14 @@ subroutine dcyc2t3_run & tem2 = tem1 * tem1 adjsfcdlw(i) = sfcdlw(i) * tem2 * tem2 !> - LW time-step adjustment: - if (.not. use_LW_Jacobian) then + if (use_LW_Jacobian) then + ! F_adj = F_o + (dF/dT) * dT + dT = tf(i) - tsflw(i) + adjsfculw(i) = sfculw(i) + fluxlwUP_jac(i,iSFC) * dT + else !! - adjust \a sfc downward LW flux to account for t changes in the lowest model layer. !! compute 4th power of the ratio of \c tf in the lowest model layer over the mean value \c tsflw. - if (dry(i)) then + if (dry(i)) then tem2 = tsfc_lnd(i) * tsfc_lnd(i) adjsfculw_lnd(i) = sfcemis_lnd(i) * con_sbc * tem2 * tem2 & + (one - sfcemis_lnd(i)) * adjsfcdlw(i) From 568c65bd3355a586f0b633dfd9a1984629b07157 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 11 Mar 2021 15:43:29 +0000 Subject: [PATCH 028/119] Pass cloud-fraction through GP-2-mpinterfaces when using SGS clouds. --- physics/GFS_rrtmgp_gfdlmp_pre.F90 | 3 +- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 39 +++++++++++--------------- physics/GFS_rrtmgp_thompsonmp_pre.meta | 17 ----------- physics/GFS_suite_interstitial.F90 | 10 +++++-- physics/GFS_suite_interstitial.meta | 9 ++++++ physics/dcyc2.f | 6 ++-- physics/dcyc2.meta | 9 ++++++ 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 index 1f3d34973..dfb807fde 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 +++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 @@ -166,7 +166,8 @@ subroutine GFS_rrtmgp_gfdlmp_pre_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cld where(cld_reice .gt. radice_upr) cld_reice = radice_upr endif - ! Cloud-fraction + ! Cloud-fraction. For mynnedmf, cld_frac is adjusted for precipitation here, otherwise + ! it passes through this interface. It is adjusted prior in sgscloudradpre. if (do_mynnedmf .and. kdt .gt. 1) then do iLay = 1, nLev do iCol = 1, nCol diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index 570b29cc5..73a1b9474 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -38,9 +38,9 @@ end subroutine GFS_rrtmgp_thompsonmp_pre_init subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, doLWrad, & i_cldliq, i_cldice, i_cldrain, i_cldsnow, i_cldgrpl, i_cldtot, i_cldliq_nc, & i_cldice_nc, i_twa, effr_in, p_lev, p_lay, tv_lay, t_lay, effrin_cldliq, & - effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, cld_frac_mg, con_g, & - con_rd, uni_cld, lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, & - imfdeepcnv_gf, doGP_cldoptics_PADE, doGP_cldoptics_LUT, & + effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, con_g, con_rd, & + lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, imfdeepcnv_gf, & + doGP_cldoptics_PADE, doGP_cldoptics_LUT, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & cld_rerain, precip_frac, errmsg, errflg) @@ -65,7 +65,6 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do doSWrad, & ! Call SW radiation? doLWrad, & ! Call LW radiation effr_in, & ! Use cloud effective radii provided by model? - uni_cld, & ! Use provided cloud-fraction? lmfshal, & ! Flag for mass-flux shallow convection scheme used by Xu-Randall lmfdeep2, & ! Flag for some scale-aware mass-flux convection scheme active ltaerosol, & ! Flag for aerosol option @@ -82,8 +81,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do qs_lay, & ! Saturation vapor pressure (Pa) q_lay, & ! water-vapor mixing ratio (kg/kg) relhum, & ! Relative humidity - p_lay, & ! Pressure at model-layers (Pa) - cld_frac_mg ! Cloud-fraction from MG scheme. WTF????? + p_lay ! Pressure at model-layers (Pa) real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & @@ -207,24 +205,19 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do cld_resnow(1:nCol,1:nLev) = effrin_cldsnow(1:nCol,1:nLev) cld_rerain(1:nCol,1:nLev) = rerain_def - ! Compute cloud-fraction. Else, use value provided - if(.not. do_mynnedmf .or. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv - ! Cloud-fraction - if (uni_cld) then - cld_frac(1:nCol,1:nLev) = cld_frac_mg(1:nCol,1:nLev) - else - if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) - if(.not. lmfshal) alpha0 = 2000. - ! Xu-Randall (1996) cloud-fraction - do iLay = 1, nLev - do iCol = 1, nCol - cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & - cld_condensate(iCol,iLay,4) - cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & - qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) - enddo + ! Compute cloud-fraction. Else, use cld_frac passes through un-touched. Handled in sgs_cloudpre. + if(.not. do_mynnedmf .or. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv + if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) + if(.not. lmfshal) alpha0 = 2000. + ! Xu-Randall (1996) cloud-fraction + do iLay = 1, nLev + do iCol = 1, nCol + cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & + cld_condensate(iCol,iLay,4) + cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & + qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) enddo - endif + enddo endif ! Precipitation fraction (Hack. For now use cloud-fraction) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 90ec59760..b3040fc1a 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -63,14 +63,6 @@ type = logical intent = in optional = F -[uni_cld] - standard_name = flag_for_uni_cld - long_name = flag for uni_cld - units = flag - dimensions = () - type = logical - intent = in - optional = F [lmfshal] standard_name = flag_for_lmfshal long_name = flag for lmfshal @@ -194,15 +186,6 @@ kind = kind_phys intent = inout optional = F -[cld_frac_mg] - standard_name = cloud_fraction_for_MG - long_name = cloud fraction used by Morrison-Gettelman MP - units = frac - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [do_mynnedmf] standard_name = do_mynnedmf long_name = flag to activate MYNN-EDMF diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index c465f74e7..5cd625e59 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -165,7 +165,7 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl do_shoc, frac_grid, imfshalcnv, dtf, xcosz, adjsfcdsw, adjsfcdlw, cice, pgr, ulwsfc_cice, lwhd, htrsw, htrlw, xmu, ctei_rm, & work1, work2, prsi, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, cp, hvap, prslk, suntim, adjsfculw, adjsfculw_lnd, & adjsfculw_ice, adjsfculw_wat, dlwsfc, ulwsfc, psmean, dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp, & - ctei_rml, ctei_r, kinver, dry, icy, wet, frland, huge, use_LW_jacobian, errmsg, errflg) + ctei_rml, ctei_r, kinver, dry, icy, wet, frland, huge, use_LW_jacobian, htrlwu, errmsg, errflg) implicit none @@ -179,7 +179,7 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 real(kind=kind_phys), intent(in ), dimension(im) :: cice - real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, htrlwu, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd integer, intent(inout), dimension(im) :: kinver @@ -290,7 +290,11 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl else do k=1,levs do i=1,im - dt3dt_lw(i,k) = dt3dt_lw(i,k) + htrlw(i,k)*dtf + if (use_LW_jacobian) then + dt3dt_lw(i,k) = dt3dt_lw(i,k) + htrlwu(i,k)*dtf + else + dt3dt_lw(i,k) = dt3dt_lw(i,k) + htrlw(i,k)*dtf + endif dt3dt_sw(i,k) = dt3dt_sw(i,k) + htrsw(i,k)*dtf*xmu(i) enddo enddo diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index fdf1716f1..c6f9ac5ec 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -609,6 +609,15 @@ type = logical intent = in optional = F +[htrlwu] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [adjsfculw] standard_name = surface_upwelling_longwave_flux long_name = surface upwelling longwave flux at current time diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 2f045a91f..81e09bc39 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -185,7 +185,7 @@ subroutine dcyc2t3_run & & flux2D_lwDOWN, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: - & dtdt,dtdtc, & + & dtdt,dtdtc,htrlw, & ! --- outputs: & adjsfcdsw,adjsfcnsw,adjsfcdlw,adjsfculw, & & adjsfculw_lnd,adjsfculw_ice,adjsfculw_wat,xmu,xcosz, & @@ -239,7 +239,8 @@ subroutine dcyc2t3_run & ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & - &, dtdtc + &, dtdtc, & + & htrlw ! --- outputs: real(kind=kind_phys), dimension(im), intent(out) :: & @@ -257,7 +258,6 @@ subroutine dcyc2t3_run & integer :: i, k, nstp, nstl, it, istsun(im),iSFC real(kind=kind_phys) :: cns, coszn, tem1, tem2, anginc, & & rstl, solang, dT - real(kind=kind_phys), dimension(im,levs) :: htrlw real(kind=kind_phys), dimension(im,levs+1) :: flxlwup_adj, & & flxlwdn_adj, t_lev2 ! diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e240d0446..ec92a6f31 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -568,6 +568,15 @@ kind = kind_phys intent = in optional = F +[htrlw] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F [t_lev] standard_name = air_temperature_at_interface_for_RRTMGP long_name = air temperature at vertical interface for radiation calculation From 8c60ce57e11d8561b221cab6bff8bb80d1ceb71d Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 17 Mar 2021 16:25:23 -0600 Subject: [PATCH 029/119] Remove/replace interstitial zorl composites with persistent versions --- physics/GFS_cloud_diagnostics.meta | 2 +- physics/GFS_debug.F90 | 5 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 2 +- physics/GFS_surface_composites.F90 | 57 +++++----------- physics/GFS_surface_composites.meta | 90 -------------------------- physics/gfdl_sfc_layer.meta | 6 +- physics/h2o_def.meta | 2 +- physics/module_MYJSFC_wrapper.meta | 6 +- physics/module_MYNNSFC_wrapper.meta | 6 +- physics/module_sf_exchcoef.f90 | 0 physics/sfc_diff.meta | 6 +- physics/sfc_drv.meta | 2 +- physics/sfc_drv_ruc.meta | 4 +- physics/sfc_noah_wrfv4.meta | 2 +- physics/sfc_noahmp_drv.meta | 2 +- 15 files changed, 37 insertions(+), 155 deletions(-) mode change 100755 => 100644 physics/module_sf_exchcoef.f90 diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index 840b3b21a..e87b19f75 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -160,4 +160,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 3e8e987c7..2a8318f46 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -436,6 +436,8 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorl' , Sfcprop%zorl) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -1254,9 +1256,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xlai1d ', Interstitial%xlai1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xmu ', Interstitial%xmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%z01d ', Interstitial%z01d ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ice ', Interstitial%zorl_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_land ', Interstitial%zorl_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ocean ', Interstitial%zorl_ocean ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zt1d ', Interstitial%zt1d ) ! UGWP call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tau_mtb ', Interstitial%tau_mtb ) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 90ec59760..82cec72f7 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -439,4 +439,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..fe0fc4097 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -25,9 +25,8 @@ end subroutine GFS_surface_composites_pre_finalize !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & - landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & - zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & + landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, lake, ocean, wet, & + hice, cice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -45,12 +44,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + real(kind=kind_phys), dimension(im), intent(in ) :: snowd, tprcp, uustar, weasd, qss, hflx - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(im), intent(inout) :: tsfc, tsfco, tsfcl, tisfc, tsurf real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & - tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & - tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & + tprcp_lnd, tprcp_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat,tsurf_lnd, tsurf_ice, & + uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice real(kind=kind_phys), dimension(im), intent( out) :: tice real(kind=kind_phys), intent(in ) :: tgice @@ -169,26 +168,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx enddo endif -! if (.not. cplflx .or. .not. frac_grid) then -! if (cplwav2atm) then -! do i=1,im -! zorll(i) = zorl(i) -! enddo -! else -! do i=1,im -! zorll(i) = zorl(i) -! zorlo(i) = zorl(i) -! enddo -! endif -! endif - do i=1,im tprcp_wat(i) = tprcp(i) tprcp_lnd(i) = tprcp(i) tprcp_ice(i) = tprcp(i) if (wet(i)) then ! Water uustar_wat(i) = uustar(i) - zorl_wat(i) = zorlo(i) tsfc_wat(i) = tsfco(i) tsurf_wat(i) = tsfco(i) ! weasd_wat(i) = weasd(i) @@ -202,7 +187,6 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) weasd_lnd(i) = weasd(i) - zorl_lnd(i) = zorll(i) tsfc_lnd(i) = tsfcl(i) tsurf_lnd(i) = tsfcl(i) snowd_lnd(i) = snowd(i) @@ -213,7 +197,6 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) weasd_ice(i) = weasd(i) - zorl_ice(i) = zorli(i) tsfc_ice(i) = tisfc(i) tsurf_ice(i) = tisfc(i) snowd_ice(i) = snowd(i) @@ -345,14 +328,12 @@ end subroutine GFS_surface_composites_post_init subroutine GFS_surface_composites_post_finalize() end subroutine GFS_surface_composites_post_finalize -#if 0 !> \section arg_table_GFS_surface_composites_post_run Argument Table !! \htmlinclude GFS_surface_composites_post_run.html !! -#endif subroutine GFS_surface_composites_post_run ( & im, kice, km, cplflx, cplwav2atm, frac_grid, flag_cice, islmsk, dry, wet, icy, landfrac, lakefrac, oceanfrac, & - zorl, zorlo, zorll, zorli, zorl_wat, zorl_lnd, zorl_ice, & + zorl, zorlo, zorll, zorli, & cd, cd_wat, cd_lnd, cd_ice, cdq, cdq_wat, cdq_lnd, cdq_ice, rb, rb_wat, rb_lnd, rb_ice, stress, stress_wat, stress_lnd, & stress_ice, ffmm, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh, ffhh_wat, ffhh_lnd, ffhh_ice, uustar, uustar_wat, uustar_lnd, & uustar_ice, fm10, fm10_wat, fm10_lnd, fm10_ice, fh2, fh2_wat, fh2_lnd, fh2_ice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -368,7 +349,7 @@ subroutine GFS_surface_composites_post_run ( logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy integer, dimension(im), intent(in) :: islmsk real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & - zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & + cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & chh_wat, chh_lnd, chh_ice, gflx_wat, gflx_lnd, gflx_ice, ep1d_wat, ep1d_lnd, ep1d_ice, weasd_wat, weasd_lnd, weasd_ice, & @@ -408,7 +389,7 @@ subroutine GFS_surface_composites_post_run ( txi = cice(i) * wfrac ! txi = ice fraction wrt whole cell txo = max(zero, wfrac-txi) ! txo = open water fraction - zorl(i) = txl*zorl_lnd(i) + txi*zorl_ice(i) + txo*zorl_wat(i) + zorl(i) = txl*zorll(i) + txi*zorli(i) + txo*zorlo(i) cd(i) = txl*cd_lnd(i) + txi*cd_ice(i) + txo*cd_wat(i) cdq(i) = txl*cdq_lnd(i) + txi*cdq_ice(i) + txo*cdq_wat(i) rb(i) = txl*rb_lnd(i) + txi*rb_ice(i) + txo*rb_wat(i) @@ -443,10 +424,6 @@ subroutine GFS_surface_composites_post_run ( endif tsfc(i) = txl*tsfc_lnd(i) + txi*tice(i) + txo*tsfc_wat(i) - zorll(i) = zorl_lnd(i) - zorli(i) = zorl_ice(i) - zorlo(i) = zorl_wat(i) - if (dry(i)) then tsfcl(i) = tsfc_lnd(i) ! over land elseif (wet(i)) then @@ -496,7 +473,7 @@ subroutine GFS_surface_composites_post_run ( do i=1,im if (islmsk(i) == 1) then - zorl(i) = zorl_lnd(i) + zorl(i) = zorll(i) cd(i) = cd_lnd(i) cdq(i) = cdq_lnd(i) rb(i) = rb_lnd(i) @@ -524,7 +501,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero elseif (islmsk(i) == 0) then - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) cd(i) = cd_wat(i) cdq(i) = cdq_wat(i) rb(i) = rb_wat(i) @@ -552,7 +529,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero else ! islmsk(i) == 2 - zorl(i) = zorl_ice(i) + zorl(i) = zorli(i) cd(i) = cd_ice(i) cdq(i) = cdq_ice(i) rb(i) = rb_ice(i) @@ -578,7 +555,7 @@ subroutine GFS_surface_composites_post_run ( tisfc(i) = tice(i) if (.not. flag_cice(i)) then ! tisfc(i) = tice(i) ! over lake ice (and sea ice when uncoupled) - zorl(i) = cice(i) * zorl_ice(i) + (one - cice(i)) * zorl_wat(i) + zorl(i) = cice(i) * zorli(i) + (one - cice(i)) * zorlo(i) tsfc(i) = tsfc_ice(i) ! over lake (and ocean when uncoupled) elseif (wet(i)) then if (cice(i) >= min_seaice) then ! this was already done for lake ice in sfc_sice @@ -590,7 +567,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = txi * stress_ice(i) + txo * stress_wat(i) qss(i) = txi * qss_ice(i) + txo * qss_wat(i) ep1d(i) = txi * ep1d_ice(i) + txo * ep1d_wat(i) - zorl(i) = txi * zorl_ice(i) + txo * zorl_wat(i) + zorl(i) = txi * zorli(i) + txo * zorlo(i) else evap(i) = evap_wat(i) hflx(i) = hflx_wat(i) @@ -598,7 +575,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = stress_wat(i) qss(i) = qss_wat(i) ep1d(i) = ep1d_wat(i) - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) endif endif if (wet(i)) then @@ -612,10 +589,6 @@ subroutine GFS_surface_composites_post_run ( end do endif - zorll(i) = zorl_lnd(i) - zorlo(i) = zorl_wat(i) - zorli(i) = zorl_ice(i) - enddo endif ! if (frac_grid) diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..192056047 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -158,69 +158,6 @@ kind = kind_phys intent = inout optional = F -[zorl] - standard_name = surface_roughness_length - long_name = surface roughness length - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorll] - standard_name = surface_roughness_length_over_land - long_name = surface roughness length over land - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorli] - standard_name = surface_roughness_length_over_ice - long_name = surface roughness length over ice - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -980,33 +917,6 @@ kind = kind_phys intent = inout optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index 77024c813..995769839 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -534,7 +534,7 @@ intent = inout optional = F [znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -543,7 +543,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -552,7 +552,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 21f3b903f..94ec7be2c 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -26,4 +26,4 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys - active = (flag_for_stratospheric_water_vapor_physics) \ No newline at end of file + active = (flag_for_stratospheric_water_vapor_physics) diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index e1e6ab2b9..d9d6fb8a0 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -472,7 +472,7 @@ intent = inout optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -481,7 +481,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -490,7 +490,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta index e3e870ff2..5ffbb8db1 100644 --- a/physics/module_MYNNSFC_wrapper.meta +++ b/physics/module_MYNNSFC_wrapper.meta @@ -411,7 +411,7 @@ intent = in optional = F [znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -420,7 +420,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -429,7 +429,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/module_sf_exchcoef.f90 b/physics/module_sf_exchcoef.f90 old mode 100755 new mode 100644 diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 9f03b3bf1..23b47d414 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -332,7 +332,7 @@ intent = in optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -341,7 +341,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -350,7 +350,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv.meta b/physics/sfc_drv.meta index ff1766774..9f2e51df3 100644 --- a/physics/sfc_drv.meta +++ b/physics/sfc_drv.meta @@ -566,7 +566,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 229bce1fc..d66d8849e 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -1013,7 +1013,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -1220,7 +1220,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 1895c56bf..a7e07059e 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -402,7 +402,7 @@ intent = inout optional = F [z0k] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = m dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index 32fc2f15a..1fd655c64 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -704,7 +704,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) From 26340ba007e561e4757c81e4ab7b6b07fca1b44c Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 18 Mar 2021 18:16:04 +0000 Subject: [PATCH 030/119] Updated sfc_nst.f & sfc_nst.meta --- physics/sfc_nst.f | 2 +- physics/sfc_nst.meta | 152 +++++++++++++++++++++---------------------- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 5e65b0eae..8e653c4de 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -787,7 +787,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, rlapse, tgice, wet, lake,icy, oro, oro_uf, nstf_name1, & + & ( im, rlapse, tgice, wet, lake,icy, oro, oro_uf, nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index ba0876b01..29766f6c8 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -118,7 +118,7 @@ standard_name = surface_air_pressure long_name = surface pressure units = Pa - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -127,7 +127,7 @@ standard_name = x_wind_at_lowest_model_layer long_name = x component of surface layer wind units = m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -136,7 +136,7 @@ standard_name = y_wind_at_lowest_model_layer long_name = y component of surface layer wind units = m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -145,7 +145,7 @@ standard_name = air_temperature_at_lowest_model_layer long_name = surface layer mean temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -154,7 +154,7 @@ standard_name = water_vapor_specific_humidity_at_lowest_model_layer long_name = surface layer mean specific humidity units = kg kg-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -163,7 +163,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -172,7 +172,7 @@ standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean long_name = surface exchange coeff for momentum over ocean units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -181,7 +181,7 @@ standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean long_name = surface exchange coeff heat & moisture over ocean units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -190,7 +190,7 @@ standard_name = air_pressure_at_lowest_model_layer long_name = surface layer mean pressure units = Pa - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -199,7 +199,7 @@ standard_name = ratio_of_exner_function_between_midlayer_and_interface_at_lowest_model_layer long_name = Exner function ratio bt midlayer and interface at 1st layer units = ratio - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -208,7 +208,7 @@ standard_name = dimensionless_exner_function_at_lowest_model_interface long_name = dimensionless Exner function at the ground surface units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -217,7 +217,7 @@ standard_name = dimensionless_exner_function_at_lowest_model_layer long_name = dimensionless Exner function at the lowest model layer units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -226,7 +226,7 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -234,7 +234,7 @@ standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -242,7 +242,7 @@ standard_name = longitude long_name = longitude units = radian - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -251,7 +251,7 @@ standard_name = sine_of_latitude long_name = sine of latitude units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -260,7 +260,7 @@ standard_name = surface_wind_stress_over_ocean long_name = surface wind stress over ocean units = m2 s-2 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -269,7 +269,7 @@ standard_name = surface_longwave_emissivity_over_ocean_interstitial long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) units = frac - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -278,7 +278,7 @@ standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean long_name = total sky surface downward longwave flux absorbed by the ground over ocean units = W m-2 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -287,7 +287,7 @@ standard_name = surface_net_downwelling_shortwave_flux long_name = total sky sfc net sw flx into ocean units = W m-2 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -296,7 +296,7 @@ standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean long_name = total precipitation amount in each time step over ocean units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -331,7 +331,7 @@ standard_name = instantaneous_cosine_of_zenith_angle long_name = cosine of solar zenith angle units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -340,7 +340,7 @@ standard_name = wind_speed_at_lowest_model_layer long_name = wind speed at lowest model level units = m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -349,7 +349,7 @@ standard_name = flag_for_iteration long_name = flag for iteration units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -357,7 +357,7 @@ standard_name = flag_for_guess_run long_name = flag for guess run units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -405,7 +405,7 @@ standard_name = surface_skin_temperature_for_nsst long_name = ocean surface skin temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -414,7 +414,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -423,7 +423,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -432,7 +432,7 @@ standard_name = sea_water_salinity long_name = salinity content in diurnal thermocline layer units = ppt m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -441,7 +441,7 @@ standard_name = diurnal_thermocline_layer_x_current long_name = u-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -450,7 +450,7 @@ standard_name = diurnal_thermocline_layer_y_current long_name = v-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -459,7 +459,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -468,7 +468,7 @@ standard_name = ocean_mixed_layer_thickness long_name = mixed layer thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -477,7 +477,7 @@ standard_name = sensitivity_of_dtl_heat_content_to_surface_temperature long_name = d(xt)/d(ts) units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -486,7 +486,7 @@ standard_name = sensitivity_of_dtl_thickness_to_surface_temperature long_name = d(xz)/d(ts) units = m K-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -495,7 +495,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -504,7 +504,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -513,7 +513,7 @@ standard_name = coefficient_c_0 long_name = coefficient1 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -522,7 +522,7 @@ standard_name = coefficient_c_d long_name = coefficient2 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -531,7 +531,7 @@ standard_name = coefficient_w_0 long_name = coefficient3 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -540,7 +540,7 @@ standard_name = coefficient_w_d long_name = coefficient4 to calculate d(tz)/d(ts) units = none - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -549,7 +549,7 @@ standard_name = free_convection_layer_thickness long_name = thickness of free convection layer units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -558,7 +558,7 @@ standard_name = index_of_dtlm_start long_name = index to start dtlm run or not units = index - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -567,7 +567,7 @@ standard_name = sensible_heat_flux_due_to_rainfall long_name = sensible heat flux due to rainfall units = W - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -576,7 +576,7 @@ standard_name = surface_specific_humidity_over_ocean long_name = surface air saturation specific humidity over ocean units = kg kg-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -585,7 +585,7 @@ standard_name = upward_heat_flux_in_soil_over_ocean long_name = soil heat flux over ocean units = W m-2 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -594,7 +594,7 @@ standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean long_name = momentum exchange coefficient over ocean units = m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -603,7 +603,7 @@ standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean long_name = thermal exchange coefficient over ocean units = kg m-2 s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -612,7 +612,7 @@ standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean long_name = kinematic surface upward latent heat flux over ocean units = kg kg-1 m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -621,7 +621,7 @@ standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean long_name = kinematic surface upward sensible heat flux over ocean units = K m s-1 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -630,7 +630,7 @@ standard_name = surface_upward_potential_latent_heat_flux_over_ocean long_name = surface upward potential latent heat flux over ocean units = W m-2 - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -675,7 +675,7 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -683,7 +683,7 @@ standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -691,7 +691,7 @@ standard_name = surface_skin_temperature_over_ocean_interstitial long_name = surface skin temperature over ocean (temporary use as interstitial) units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -700,7 +700,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -709,7 +709,7 @@ standard_name = surface_skin_temperature_for_nsst long_name = ocean surface skin temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -718,7 +718,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -727,7 +727,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -736,7 +736,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -745,7 +745,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -754,7 +754,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -771,7 +771,7 @@ standard_name = sea_area_fraction long_name = fraction of horizontal grid area occupied by ocean units = frac - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -842,7 +842,7 @@ standard_name = flag_nonzero_wet_surface_fraction long_name = flag indicating presence of some ocean or lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -850,7 +850,7 @@ standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -858,7 +858,7 @@ standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction units = flag - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = logical intent = in optional = F @@ -866,7 +866,7 @@ standard_name = orography long_name = orography units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -875,7 +875,7 @@ standard_name = orography_unfiltered long_name = unfiltered orography units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -908,7 +908,7 @@ standard_name = diurnal_thermocline_layer_heat_content long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -917,7 +917,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -926,7 +926,7 @@ standard_name = sub_layer_cooling_amount long_name = sub-layer cooling amount units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -935,7 +935,7 @@ standard_name = sub_layer_cooling_thickness long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -944,7 +944,7 @@ standard_name = sea_surface_reference_temperature long_name = reference/foundation temperature units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -953,7 +953,7 @@ standard_name = longitude long_name = longitude units = radian - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in @@ -962,7 +962,7 @@ standard_name = surface_skin_temperature_after_iteration_over_ocean long_name = surface skin temperature after iteration over ocean units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -971,7 +971,7 @@ standard_name = surface_skin_temperature_over_ocean_interstitial long_name = surface skin temperature over ocean (temporary use as interstitial) units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = inout @@ -988,7 +988,7 @@ standard_name = mean_change_over_depth_in_sea_water_temperature long_name = mean of dT(z) (zsea1 to zsea2) units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = out From 17ccdcf03fcf22d1c5df89e646e1b28c04160c2b Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 18 Mar 2021 22:27:32 +0000 Subject: [PATCH 031/119] Updated sfc_nst.f to remove unnecessary statements --- physics/sfc_nst.f | 7 ------- 1 file changed, 7 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 8e653c4de..38a910169 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -8,15 +8,12 @@ module sfc_nst ! \brief This subroutine is empty since there are no procedures that need to be done to initialize the GFS NSST code. !! This subroutine is empty since there are no procedures that need to be done to initialize the GFS NSST code. -!! -!! \section arg_table_sfc_nst_init Argument Table !! subroutine sfc_nst_init end subroutine sfc_nst_init ! \brief This subroutine is empty since there are no procedures that need to be done to finalize the GFS NSST code. !! This subroutine is empty since there are no procedures that need to be done to finalize the GFS NSST code. -!! \section arg_table_sfc_nst_finalize Argument Table !! subroutine sfc_nst_finalize end subroutine sfc_nst_finalize @@ -660,14 +657,10 @@ module sfc_nst_pre !! The NSST scheme is one of the three schemes used to represent the !! surface in the GFS physics suite. The other two are the Noah land !! surface model and the sice simplified ice model. -!! -!! \section arg_table_sfc_nst_init Argument Table !! subroutine sfc_nst_pre_init end subroutine sfc_nst_pre_init -!! \section arg_table_sfc_nst_finalize Argument Table -!! subroutine sfc_nst_pre_finalize end subroutine sfc_nst_pre_finalize From c94849fa7c67586018bcc5382a26cbbf4703c5de Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 18 Mar 2021 23:48:54 +0000 Subject: [PATCH 032/119] Updated rte-rrtmgp hash --- physics/rte-rrtmgp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/rte-rrtmgp b/physics/rte-rrtmgp index 33c8a984c..baee74ef1 160000 --- a/physics/rte-rrtmgp +++ b/physics/rte-rrtmgp @@ -1 +1 @@ -Subproject commit 33c8a984c17cf41be5d4c2928242e1b4239bfc40 +Subproject commit baee74ef1d1c9cac838bf5f8867e7d2721c0ee7a From 9a338f108b2653ef1af500f24cbb612c564eafcd Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 19 Mar 2021 10:47:49 -0600 Subject: [PATCH 033/119] physics/rrtmgp_aux.F90: fix bug for integer variable that should be a logical variable --- physics/rrtmgp_aux.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/physics/rrtmgp_aux.F90 b/physics/rrtmgp_aux.F90 index 2fa4972b8..8dc331d59 100644 --- a/physics/rrtmgp_aux.F90 +++ b/physics/rrtmgp_aux.F90 @@ -28,7 +28,8 @@ subroutine cmp_tlev(nCol,nLev,minP,p_lay,t_lay,p_lev,tsfc,t_lev) t_lev ! Local - integer :: iCol,iLay, iSFC, iTOA, top_at_1 + integer :: iCol,iLay, iSFC, iTOA + logical :: top_at_1 real(kind_phys), dimension(nCol,nLev) :: tem2da, tem2db top_at_1 = (p_lev(1,1) .lt. p_lev(1, nLev)) @@ -47,7 +48,7 @@ subroutine cmp_tlev(nCol,nLev,minP,p_lay,t_lay,p_lev,tsfc,t_lev) tem2da(iCol,1) = log(p_lay(iCol,1) ) tem2db(iCol,1) = log(max(minP, p_lev(iCol,1)) ) tem2db(iCol,iSFC) = log(p_lev(iCol,iSFC) ) - enddo + enddo t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) do iLay = 2, iSFC do iCol = 1, nCol From dbd65a868a5ff13f24b3206b50eaabb38472aaf6 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 19 Mar 2021 10:48:10 -0600 Subject: [PATCH 034/119] CMakeLists.txt: compile certain files without OpenMP --- CMakeLists.txt | 216 ++++++++++++++++++++++++++++--------------------- 1 file changed, 126 insertions(+), 90 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 441f047f6..923c373e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,9 @@ set(AUTHORS "Grant Firl" "Dom Heinzeller" "Man Zhang" "Laurie Carson") if (OPENMP) include(detect_openmp) detect_openmp() - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}") + #set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + #set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}") message(STATUS "Enable OpenMP support for C/C++/Fortran compiler") else (OPENMP) message (STATUS "Disable OpenMP support for C/C++/Fortran compiler") @@ -107,31 +107,95 @@ set(SCHEMES_SFX_OPT "") set(SCHEMES_SFX_PREC "") # Create a duplicate of the SCHEMES list for handling floating point precision flags set(SCHEMES2 ${SCHEMES}) + +# List of files that need to be compiled without OpenMP +set(SCHEMES_OPENMP_OFF ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_constants.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_reorder.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels-openacc/mo_gas_optics_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_string.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_rrtmgp_util_reorder_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/mo_testing_io.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/clear_sky_regression.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_rrtmgp_clr_all_sky.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/solar_variability/mo_solar_variability.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_heating_rates.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_bygpoint.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_compute_bc.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_sampling.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_load_coefficients.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_sw.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/mo_rfmip_io.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_lw.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_simple_netcdf.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/rrtmgp_allsky.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_load_cloud_coefficients.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_garand_atmos_io.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_config.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_source_functions.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_sw.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_fluxes.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_lw.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_rte_solver_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_optical_props_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_util_array.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_optical_props_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_kind.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_optical_props.F90) + #------------------------------------------------------------------------------ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none") + + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fno-range-check") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") + #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + # ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 + # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") + SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -fdefault-real-8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -ffree-form") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fno-range-check") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-ffree-line-length-none -fdefault-real-8 -ffree-form") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + ${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") + PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8 ${OpenMP_Fortran_FLAGS}") + if (PROJECT STREQUAL "CCPP-FV3") # Set 32-bit floating point precision flags for certain files # that are executed in the dynamics (fast physics part) @@ -144,20 +208,33 @@ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") string(REPLACE "-fdefault-double-8" "" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") # Add all of the above files to the list of schemes with special floating point precision flags list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() # Remove files with special floating point precision flags from list - # of files with standard floating point precision flags flags + # of files with standard floating point precision flags if (SCHEMES_SFX_PREC) list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) - endif (SCHEMES_SFX_PREC) + endif () + + if (PROJECT STREQUAL "CCPP-FV3") + # Remove files that need to be compiled without OpenMP from list + # of files with standard compiler flags, and assign no-OpenMP flags + if (SCHEMES_OPENMP_OFF) + list(REMOVE_ITEM SCHEMES2 ${SCHEMES_OPENMP_OFF}) + endif () + # Assign standard floating point precision flags to all remaining schemes and caps + SET_PROPERTY(SOURCE ${SCHEMES_OPENMP_OFF} + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + endif() + # Assign standard floating point precision flags to all remaining schemes and caps SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ${OpenMP_Fortran_FLAGS} ") + endif (PROJECT STREQUAL "CCPP-FV3") elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") @@ -201,14 +278,14 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") # that are executed in the dynamics (fast physics part) if (DYN32) if (${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) - # Reduce floating point precision from 64-bit to 32-bit, if necessary - set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) - string(REPLACE "-real-size 64" "-real-size 32" - CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") - # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) + # Reduce floating point precision from 64-bit to 32-bit, if necessary + set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) + string(REPLACE "-real-size 64" "-real-size 32" + CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") + SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") + # Add all of the above files to the list of schemes with special floating point precision flags + list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() @@ -217,86 +294,50 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") if (SCHEMES_SFX_PREC) list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) endif (SCHEMES_SFX_PREC) + + # Remove files that need to be compiled without OpenMP from list + # of files with standard compiler flags, and assign no-OpenMP flags + if (SCHEMES_OPENMP_OFF) + list(REMOVE_ITEM SCHEMES2 ${SCHEMES_OPENMP_OFF}) + # Assign standard floating point precision flags to all remaining schemes and caps + SET_PROPERTY(SOURCE ${SCHEMES_OPENMP_OFF} + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + endif () + # Assign standard floating point precision flags to all remaining schemes and caps SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ${OpenMP_Fortran_FLAGS} ") else (PROJECT STREQUAL "CCPP-FV3") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -r8) + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-r8 -free") + PROPERTIES COMPILE_FLAGS "-r8 -free ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-r8 -ftz") + PROPERTIES COMPILE_FLAGS "-r8 -ftz ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free") + PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-r8") + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-r8") + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-r8") + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") endif (PROJECT STREQUAL "CCPP-FV3") -elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "PGI") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -r8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-r8 -Mfree") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-r8 -Mnofptrap") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-r8 -Mfree") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-r8") - if (PROJECT STREQUAL "CCPP-FV3") - # Set 32-bit floating point precision flags for certain files - # that are executed in the dynamics (fast physics part) - if (DYN32) - # Reduce floating point precision from 64-bit to 32-bit, if necessary - set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) - string(REPLACE "-r8" "-r4" - CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") - # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) - endif (DYN32) - - # Remove files with special floating point precision flags from list - # of files with standard floating point precision flags flags - if (SCHEMES_SFX_PREC) - list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) - endif (SCHEMES_SFX_PREC) - # Assign standard floating point precision flags to all remaining schemes and caps - SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") - endif (PROJECT STREQUAL "CCPP-FV3") -else (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") +else() message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${CMAKE_Fortran_COMPILER_ID}) message (FATAL_ERROR "This program has only been compiled with gfortran, pgf90 and ifort. If another compiler is needed, the appropriate flags must be added in ${GFS_PHYS_SRC}/CMakeLists.txt") -endif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") +endif() # The auto-generated caps can contain calls to physics schemes in # which some of the arguments (pointers, arrays) are not associated/allocated. @@ -310,12 +351,7 @@ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -fcheck=no-pointer,no-bounds ") elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -check nopointers,nobounds ") -elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "PGI") - if (CMAKE_Fortran_FLAGS MATCHES ".*chkptr.*") - message (FATAL_ERROR "PGI compiler option chkptr cannot be used for CCPP physics") - endif (CMAKE_Fortran_FLAGS MATCHES ".*chkptr.*") - set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -Mnobounds ") -endif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") +endif () #------------------------------------------------------------------------------ add_library(ccppphys STATIC ${SCHEMES} ${SCHEMES_SFX_OPT} ${CAPS}) From 4e9b59a87e5e5bd24a4badc8b1aea384465b8b61 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 24 Mar 2021 17:06:53 +0000 Subject: [PATCH 035/119] Moved allocation of LW interstitials to GFS_typedefs. Removed downward LW Jacobian from RRTMGP flux adjustement. --- physics/dcyc2.f | 10 ++-- physics/dcyc2.meta | 9 ---- physics/rrtmgp_lw_aerosol_optics.F90 | 26 ++++++++--- physics/rrtmgp_lw_aerosol_optics.meta | 32 ++++++++++++- physics/rrtmgp_lw_cloud_optics.F90 | 66 ++++++++++++++++----------- physics/rrtmgp_lw_cloud_optics.meta | 36 ++++++++++++++- physics/rrtmgp_lw_cloud_sampling.F90 | 14 +----- physics/rrtmgp_lw_cloud_sampling.meta | 4 +- physics/rrtmgp_lw_gas_optics.F90 | 24 ++++++---- physics/rrtmgp_lw_gas_optics.meta | 20 +++++++- physics/rrtmgp_lw_rte.F90 | 13 ++---- physics/rrtmgp_lw_rte.meta | 9 ---- 12 files changed, 166 insertions(+), 97 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 81e09bc39..7677a50ae 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -181,8 +181,7 @@ subroutine dcyc2t3_run & & im, levs, deltim, fhswr, & & dry, icy, wet, & & minGPpres, tsfc, use_LW_jacobian, sfculw, fluxlwUP_jac, & - & fluxlwDOWN_jac, t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, & - & flux2D_lwDOWN, & + & t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, flux2D_lwDOWN, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: & dtdt,dtdtc,htrlw, & @@ -234,8 +233,7 @@ subroutine dcyc2t3_run & real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & & ,swhc, hlwc, p_lay, t_lay real(kind=kind_phys), dimension(im,levs+1), intent(in) :: p_lev, & - & flux2D_lwUP, flux2D_lwDOWN, fluxlwUP_jac, fluxlwDOWN_jac, & - & t_lev + & flux2D_lwUP, flux2D_lwDOWN, fluxlwUP_jac, t_lev ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & @@ -385,14 +383,12 @@ subroutine dcyc2t3_run & dT = t_lev2(i,k) - t_lev(i,k) flxlwup_adj(i,k) = flux2D_lwUP(i,k) + & & fluxlwUP_jac(i,k)*dT - flxlwdn_adj(i,k) = flux2D_lwDOWN(i,k) + & - & fluxlwDOWN_jac(i,k)*dT enddo enddo ! ! Compute new heating rate (within each layer). ! - errmsg = compute_heating_rate(flxlwup_adj, flxlwdn_adj, & + errmsg = compute_heating_rate(flxlwup_adj, flux2D_lwDOWN, & & p_lev, htrlw) ! ! Add radiative heating rates to physics heating rate diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index ec92a6f31..10216e79b 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -559,15 +559,6 @@ kind = kind_phys intent = in optional = F -[fluxlwDOWN_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_downward - long_name = RRTMGP Jacobian downward longwave flux at profile - units = W m-2 K-1 - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F [htrlw] standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step long_name = total sky longwave heating rate on physics time step diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index e34d34e38..e36572384 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -21,7 +21,25 @@ module rrtmgp_lw_aerosol_optics ! ######################################################################################### ! SUBROUTINE rrtmgp_lw_aerosol_optics_init() ! ######################################################################################### - subroutine rrtmgp_lw_aerosol_optics_init() +!! \section arg_table_rrtmgp_lw_aerosol_optics_init +!! \htmlinclude rrtmgp_lw_aerosol_optics.html +!! + subroutine rrtmgp_lw_aerosol_optics_init(lw_optical_props_aerosol, errmsg, errflg) + ! Inputs + type(ty_optical_props_1scl),intent(inout) :: & + lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) + ! Outputs + integer, intent(out) :: & + errflg ! CCPP error flag + character(len=*), intent(out) :: & + errmsg ! CCPP error message + + ! Initialize CCPP error handling variables + errmsg = '' + errflg = 0 + + errmsg = lw_optical_props_aerosol%init(lw_gas_props%get_band_lims_wavenumber()) + end subroutine rrtmgp_lw_aerosol_optics_init ! ######################################################################################### @@ -61,7 +79,7 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer ! Outputs real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & aerodp ! Vertical integrated optical depth for various aerosol species - type(ty_optical_props_1scl),intent(out) :: & + type(ty_optical_props_1scl),intent(inout) :: & lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) integer, intent(out) :: & errflg ! CCPP error flag @@ -84,10 +102,6 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer call setaer(p_lev/100., p_lay/100., p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, ncol, nLev, & nLev+1, .true., .true., aerosolssw, aerosolslw, aerodp) - ! Allocate RRTMGP DDT: Aerosol optics [nCol,nlev,nBands] - call check_error_msg('rrtmgp_lw_aerosol_optics_run',lw_optical_props_aerosol%alloc_1scl( & - ncol, nlev, lw_gas_props%get_band_lims_wavenumber())) - ! Copy aerosol optical information to RRTMGP DDT lw_optical_props_aerosol%tau = aerosolslw(:,:,:,1) * (1. - aerosolslw(:,:,:,2)) diff --git a/physics/rrtmgp_lw_aerosol_optics.meta b/physics/rrtmgp_lw_aerosol_optics.meta index 4aa1e9e9e..728031e8a 100644 --- a/physics/rrtmgp_lw_aerosol_optics.meta +++ b/physics/rrtmgp_lw_aerosol_optics.meta @@ -3,6 +3,36 @@ type = scheme dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 +######################################################################## +[ccpp-arg-table] + name = rrtmgp_lw_aerosol_optics_init + type = scheme +[lw_optical_props_aerosol] + standard_name = longwave_optical_properties_for_aerosols + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_1scl + intent = inout + optional = F +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=* + intent = out + optional = F +[errflg] + standard_name = ccpp_error_flag + long_name = error flag for error handling in CCPP + units = flag + dimensions = () + type = integer + intent = out + optional = F + ######################################################################## [ccpp-arg-table] name = rrtmgp_lw_aerosol_optics_run @@ -152,7 +182,7 @@ units = DDT dimensions = () type = ty_optical_props_1scl - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index a59fe42a9..33d69053b 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -70,24 +70,30 @@ module rrtmgp_lw_cloud_optics !! \section arg_table_rrtmgp_lw_cloud_optics_init !! \htmlinclude rrtmgp_lw_cloud_optics.html !! - subroutine rrtmgp_lw_cloud_optics_init(doG_cldoptics, & - doGP_cldoptics_PADE, doGP_cldoptics_LUT, nrghice, rrtmgp_root_dir, & - rrtmgp_lw_file_clouds, mpicomm, mpirank, mpiroot, errmsg, errflg) + subroutine rrtmgp_lw_cloud_optics_init(nrghice, mpicomm, mpirank, mpiroot, & + doG_cldoptics, doGP_cldoptics_PADE, doGP_cldoptics_LUT, rrtmgp_root_dir, & + rrtmgp_lw_file_clouds, lw_optical_props_clouds, lw_optical_props_precip, & + lw_optical_props_cloudsByBand, lw_optical_props_precipByBand, errmsg, errflg) ! Inputs + type(ty_optical_props_2str),intent(inout) :: & + lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) + lw_optical_props_precipByBand, & ! RRTMGP DDT: Longwave optical properties in each band (precipitation) + lw_optical_props_clouds, & ! RRTMGP DDT: Shortwave optical properties by spectral point (clouds) + lw_optical_props_precip ! RRTMGP DDT: Shortwave optical properties by spectral point (precipitation) logical, intent(in) :: & - doG_cldoptics, & ! Use legacy RRTMG cloud-optics? - doGP_cldoptics_PADE, & ! Use RRTMGP cloud-optics: PADE approximation? - doGP_cldoptics_LUT ! Use RRTMGP cloud-optics: LUTs? + doG_cldoptics, & ! Use legacy RRTMG cloud-optics? + doGP_cldoptics_PADE, & ! Use RRTMGP cloud-optics: PADE approximation? + doGP_cldoptics_LUT ! Use RRTMGP cloud-optics: LUTs? integer, intent(inout) :: & - nrghice ! Number of ice-roughness categories - integer, intent(in) :: & - mpicomm, & ! MPI communicator - mpirank, & ! Current MPI rank - mpiroot ! Master MPI rank + nrghice ! Number of ice-roughness categories + integer, intent(in) :: & + mpicomm, & ! MPI communicator + mpirank, & ! Current MPI rank + mpiroot ! Master MPI rank character(len=128),intent(in) :: & - rrtmgp_root_dir, & ! RTE-RRTMGP root directory - rrtmgp_lw_file_clouds ! RRTMGP file containing coefficients used to compute clouds optical properties + rrtmgp_root_dir, & ! RTE-RRTMGP root directory + rrtmgp_lw_file_clouds ! RRTMGP file containing coefficients used to compute clouds optical properties ! Outputs character(len=*), intent(out) :: & @@ -104,6 +110,24 @@ subroutine rrtmgp_lw_cloud_optics_init(doG_cldoptics, & errmsg = '' errflg = 0 + ! + ! Initialize GP DDTs (use same spectral configuration as gas-optics) + ! + ! Cloud optics + ! + call check_error_msg('lw_cloud_optics_init', lw_optical_props_cloudsByBand%init(& + lw_gas_props%get_band_lims_wavenumber())) + call check_error_msg('lw_cloud_optics_init', lw_optical_props_clouds%init(& + lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) + ! + ! Precipitation optics + ! + call check_error_msg('lw_precip_optics_init', lw_optical_props_precipByBand%init(& + lw_gas_props%get_band_lims_wavenumber())) + call check_error_msg('lw_precip_optics_init', lw_optical_props_precip%init(& + lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) + + ! If not using RRTMGP cloud optics, return. if (doG_cldoptics) return @@ -422,7 +446,7 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error flag - type(ty_optical_props_2str),intent(out) :: & + type(ty_optical_props_2str),intent(inout) :: & lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) lw_optical_props_precipByBand ! RRTMGP DDT: Longwave optical properties in each band (precipitation) real(kind_phys), dimension(ncol,nLev), intent(inout) :: & @@ -446,13 +470,7 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw ! Compute cloud-optics for RTE. if (doGP_cldoptics_PADE .or. doGP_cldoptics_LUT) then - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_cloudsByBand%alloc_2str(& - ncol, nLev, lw_cloud_props%get_band_lims_wavenumber())) - lw_optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_precipByBand%alloc_2str(& - ncol, nLev, lw_cloud_props%get_band_lims_wavenumber())) - lw_optical_props_precipByBand%tau(:,:,:) = 0._kind_phys - + ! i) RRTMGP cloud-optics. call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_cloud_props%cloud_optics(& cld_lwp, & ! IN - Cloud liquid water path (g/m2) @@ -482,12 +500,6 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw enddo endif if (doG_cldoptics) then - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_cloudsByBand%alloc_2str(& - ncol, nLev, lw_gas_props%get_band_lims_wavenumber())) - lw_optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_precipByBand%alloc_2str(& - ncol, nLev, lw_gas_props%get_band_lims_wavenumber())) - lw_optical_props_precipByBand%tau(:,:,:) = 0._kind_phys ! ii) RRTMG cloud-optics. if (any(cld_frac .gt. 0)) then call rrtmg_lw_cloud_optics(ncol, nLev, nbndsGPlw, cld_lwp, cld_reliq, cld_iwp,& diff --git a/physics/rrtmgp_lw_cloud_optics.meta b/physics/rrtmgp_lw_cloud_optics.meta index 14852f3a0..7c8c56c6d 100644 --- a/physics/rrtmgp_lw_cloud_optics.meta +++ b/physics/rrtmgp_lw_cloud_optics.meta @@ -39,6 +39,38 @@ type = integer intent = inout optional = F +[lw_optical_props_clouds] + standard_name = longwave_optical_properties_for_cloudy_atmosphere + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_2str + intent = inout + optional = F +[lw_optical_props_precip] + standard_name = longwave_optical_properties_for_precipitation + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_2str + intent = inout + optional = F +[lw_optical_props_cloudsByBand] + standard_name = longwave_optical_properties_for_cloudy_atmosphere_by_band + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_2str + intent = inout + optional = F +[lw_optical_props_precipByBand] + standard_name = longwave_optical_properties_for_precipitation_by_band + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_2str + intent = inout + optional = F [rrtmgp_root_dir] standard_name = directory_for_rte_rrtmgp_source_code long_name = directory for rte+rrtmgp source code @@ -306,7 +338,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [lw_optical_props_precipByBand] standard_name = longwave_optical_properties_for_precipitation_by_band @@ -314,7 +346,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 index 8274dbd13..3ec96c90c 100644 --- a/physics/rrtmgp_lw_cloud_sampling.F90 +++ b/physics/rrtmgp_lw_cloud_sampling.F90 @@ -84,7 +84,7 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error code - type(ty_optical_props_2str),intent(out) :: & + type(ty_optical_props_2str),intent(inout) :: & lw_optical_props_clouds, & ! RRTMGP DDT: Shortwave optical properties by spectral point (clouds) lw_optical_props_precip ! RRTMGP DDT: Shortwave optical properties by spectral point (precipitation) @@ -106,12 +106,6 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! #################################################################################### ! First sample the clouds... ! #################################################################################### - - ! Allocate space RRTMGP DDTs [nCol,nLev,nGpt] - call check_error_msg('rrtmgp_lw_cloud_sampling_run',& - lw_optical_props_clouds%alloc_2str(nCol, nLev, lw_gas_props)) - lw_optical_props_clouds%tau(:,:,:) = 0._kind_phys - lw_optical_props_clouds%ssa(:,:,:) = 0._kind_phys ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed @@ -177,12 +171,6 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! Next sample the precipitation... ! #################################################################################### - ! Allocate space RRTMGP DDTs [nCol,nLev,nGpt] - call check_error_msg('rrtmgp_lw_cloud_sampling_run',& - lw_optical_props_precip%alloc_2str(nCol, nLev, lw_gas_props)) - lw_optical_props_precip%tau(:,:,:) = 0._kind_phys - lw_optical_props_precip%ssa(:,:,:) = 0._kind_phys - ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed do iCol = 1, ncol diff --git a/physics/rrtmgp_lw_cloud_sampling.meta b/physics/rrtmgp_lw_cloud_sampling.meta index 4e54d14b0..24d31bec0 100644 --- a/physics/rrtmgp_lw_cloud_sampling.meta +++ b/physics/rrtmgp_lw_cloud_sampling.meta @@ -207,7 +207,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [lw_optical_props_precip] standard_name = longwave_optical_properties_for_precipitation @@ -215,7 +215,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index ac3a8d7f0..4928b2d9f 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -76,10 +76,15 @@ module rrtmgp_lw_gas_optics !! \section arg_table_rrtmgp_lw_gas_optics_init !! \htmlinclude rrtmgp_lw_gas_optics_init.html !! - subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - gas_concentrations, mpicomm, mpirank, mpiroot, minGPpres, minGPtemp, errmsg, errflg) + subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm, & + mpirank, mpiroot, gas_concentrations, lw_optical_props_clrsky, sources, minGPpres, & + minGPtemp, errmsg, errflg) ! Inputs + type(ty_optical_props_1scl), intent(inout) :: & + lw_optical_props_clrsky + type(ty_source_func_lw),intent(inout) :: & + sources ! RRTMGP DDT: longwave source functions type(ty_gas_concs), intent(inout) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) character(len=128),intent(in) :: & @@ -447,6 +452,12 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, scale_by_complement_upperLW, kminor_start_lowerLW, kminor_start_upperLW, totplnkLW,& planck_fracLW, rayl_lowerLW, rayl_upperLW, optimal_angle_fitLW)) + call check_error_msg('rrtmgp_lw_gas_optical_props_init', lw_optical_props_clrsky%init( & + lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) + + call check_error_msg('rrtmgp_lw_gas_optics_sources_init', sources%init( & + lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) + ! The minimum pressure allowed in GP RTE calculations. Used to bound uppermost layer ! temperature (GFS_rrtmgp_pre.F90) minGPpres = lw_gas_props%get_press_min() @@ -485,9 +496,9 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error code - type(ty_optical_props_1scl),intent(out) :: & + type(ty_optical_props_1scl),intent(inout) :: & lw_optical_props_clrsky ! RRTMGP DDT: longwave clear-sky radiative properties - type(ty_source_func_lw),intent(out) :: & + type(ty_source_func_lw),intent(inout) :: & sources ! RRTMGP DDT: longwave source functions ! Initialize CCPP error handling variables @@ -496,11 +507,6 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ if (.not. doLWrad) return - call check_error_msg('rrtmgp_lw_gas_optics_run',& - lw_optical_props_clrsky%alloc_1scl(ncol, nLev, lw_gas_props)) - call check_error_msg('rrtmgp_lw_gas_optics_run',& - sources%alloc(ncol, nLev, lw_gas_props)) - ! Gas-optics call check_error_msg('rrtmgp_lw_gas_optics_run',lw_gas_props%gas_optics(& p_lay, & ! IN - Pressure @ layer-centers (Pa) diff --git a/physics/rrtmgp_lw_gas_optics.meta b/physics/rrtmgp_lw_gas_optics.meta index 92e35e06f..48b97bde6 100644 --- a/physics/rrtmgp_lw_gas_optics.meta +++ b/physics/rrtmgp_lw_gas_optics.meta @@ -34,6 +34,22 @@ type = ty_gas_concs intent = inout optional = F +[lw_optical_props_clrsky] + standard_name = longwave_optical_properties_for_clear_sky + long_name = Fortran DDT containing RRTMGP optical properties + units = DDT + dimensions = () + type = ty_optical_props_1scl + intent = inout + optional = F +[sources] + standard_name = longwave_source_function + long_name = Fortran DDT containing RRTMGP source functions + units = DDT + dimensions = () + type = ty_source_func_lw + intent = inout + optional = F [mpirank] standard_name = mpi_rank long_name = current MPI rank @@ -181,7 +197,7 @@ units = DDT dimensions = () type = ty_optical_props_1scl - intent = out + intent = inout optional = F [sources] standard_name = longwave_source_function @@ -189,7 +205,7 @@ units = DDT dimensions = () type = ty_source_func_lw - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 1a53f538c..f72308c48 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -31,8 +31,7 @@ end subroutine rrtmgp_lw_rte_init subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & - fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, fluxlwUP_jac, fluxlwDOWN_jac, & - errmsg, errflg) + fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, fluxlwUP_jac, errmsg, errflg) ! Inputs logical, intent(in) :: & @@ -59,7 +58,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! Outputs real(kind_phys), dimension(ncol,nLev+1), intent(inout) :: & fluxlwUP_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) - fluxlwDOWN_jac, & ! Jacobian of downwelling LW surface radiation (W/m2/K) fluxlwUP_allsky, & ! All-sky flux (W/m2) fluxlwDOWN_allsky, & ! All-sky flux (W/m2) fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) @@ -105,7 +103,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! ! Add aerosol optics to gas optics call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_aerosol%increment(lw_optical_props_clrsky)) - call lw_optical_props_aerosol%finalize() ! Call RTE solver if (doLWclrsky) then @@ -133,7 +130,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, if (doGP_lwscat) then ! Add clear-sky optics to cloud-optics (2-stream) call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_clrsky%increment(lw_optical_props_clouds)) - call lw_optical_props_clrsky%finalize() if (use_LW_jacobian) then ! Compute LW Jacobians @@ -144,8 +140,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) + flux_up_Jac = fluxlwUP_jac)) ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clouds, & ! IN - optical-properties @@ -159,7 +154,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, else ! Add cloud optics to clear-sky optics (scalar) call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_clouds%increment(lw_optical_props_clrsky)) - call lw_optical_props_clouds%finalize() if (use_LW_jacobian) then ! Compute LW Jacobians @@ -170,8 +164,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) + flux_up_Jac = fluxlwUP_jac)) ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clrsky, & ! IN - optical-properties diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index 0ef9bd016..2e8a558ab 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -159,15 +159,6 @@ kind = kind_phys intent = inout optional = F -[fluxlwDOWN_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_downward - long_name = RRTMGP Jacobian downward longwave flux at profile - units = W m-2 K-1 - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = inout - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 89e84b3329dce8cd83112a21a6d98dbbe96c6028 Mon Sep 17 00:00:00 2001 From: Laurie Carson Date: Wed, 24 Mar 2021 11:09:36 -0600 Subject: [PATCH 036/119] physics/docs directory updates from release/public-v5 --- physics/docs/ccpp_dox_layout.xml | 18 +- physics/docs/ccppv5_doxyfile | 476 ++++++++++++ physics/docs/img/MYNN-SFCLAY_call_order.png | Bin 0 -> 170162 bytes physics/docs/img/mesocam.png | Bin 0 -> 146029 bytes physics/docs/library.bib | 682 +++++++++-------- physics/docs/pdftxt/CPT_adv_suite.txt | 3 +- physics/docs/pdftxt/CU_GF_deep.txt | 48 ++ physics/docs/pdftxt/GFS_NOAHMP.txt | 27 + physics/docs/pdftxt/GFS_UGWPv0.txt | 2 +- physics/docs/pdftxt/GFSv15p2_suite.txt | 362 ++++++--- physics/docs/pdftxt/GFSv16beta_suite.txt | 377 +++++---- physics/docs/pdftxt/GSD_adv_suite.txt | 11 +- physics/docs/pdftxt/MYNN_EDMF.txt | 76 ++ physics/docs/pdftxt/MYNN_SFCLAYER.txt | 52 ++ physics/docs/pdftxt/RRFS_SGSCLOUD.txt | 23 + physics/docs/pdftxt/RRFS_v1alpha_suite.txt | 210 +++++ physics/docs/pdftxt/RUCLSM.txt | 100 +++ physics/docs/pdftxt/THOMPSON.txt | 85 ++ physics/docs/pdftxt/all_shemes_list.txt | 191 ++--- physics/docs/pdftxt/all_shemes_list.txt.FV3 | 6 +- physics/docs/pdftxt/code_overview.txt | 2 +- physics/docs/pdftxt/code_overview.txt.Aug17 | 2 +- physics/docs/pdftxt/mainpage.txt | 33 +- .../docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt | 8 +- .../suite_FV3_GFS_v15p2_no_nsst.xml.txt | 2 +- .../docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt | 2 +- .../suite_FV3_GFS_v16beta_no_nsst.xml.txt | 2 +- .../docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt | 91 +++ physics/docs/pdftxt/suite_input.nml.txt | 723 ++++++++++-------- 29 files changed, 2614 insertions(+), 1000 deletions(-) create mode 100644 physics/docs/ccppv5_doxyfile create mode 100644 physics/docs/img/MYNN-SFCLAY_call_order.png create mode 100644 physics/docs/img/mesocam.png create mode 100644 physics/docs/pdftxt/CU_GF_deep.txt create mode 100644 physics/docs/pdftxt/GFS_NOAHMP.txt create mode 100644 physics/docs/pdftxt/MYNN_EDMF.txt create mode 100644 physics/docs/pdftxt/MYNN_SFCLAYER.txt create mode 100644 physics/docs/pdftxt/RRFS_SGSCLOUD.txt create mode 100644 physics/docs/pdftxt/RRFS_v1alpha_suite.txt create mode 100644 physics/docs/pdftxt/RUCLSM.txt create mode 100644 physics/docs/pdftxt/THOMPSON.txt create mode 100644 physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt diff --git a/physics/docs/ccpp_dox_layout.xml b/physics/docs/ccpp_dox_layout.xml index 527034db2..38112e6d9 100644 --- a/physics/docs/ccpp_dox_layout.xml +++ b/physics/docs/ccpp_dox_layout.xml @@ -2,23 +2,9 @@ - + - - - - - - - - - - - - - - - + diff --git a/physics/docs/ccppv5_doxyfile b/physics/docs/ccppv5_doxyfile new file mode 100644 index 000000000..1c1046c8c --- /dev/null +++ b/physics/docs/ccppv5_doxyfile @@ -0,0 +1,476 @@ +# Doxyfile 1.8.11 +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "CCPP Scientific Documentation" +PROJECT_NUMBER = "" +PROJECT_BRIEF = "v5.0.0" +PROJECT_LOGO = img/dtc_logo.png +OUTPUT_DIRECTORY = doc +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = NO +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = YES +TAB_SIZE = 4 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = YES +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = .f=FortranFree \ + .F=FortranFree \ + .F90=FortranFree \ + .f90=FortranFree +MARKDOWN_SUPPORT = YES +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = YES +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_PACKAGE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES + +CASE_SENSE_NAMES = NO + +HIDE_SCOPE_NAMES = NO + +HIDE_COMPOUND_REFERENCE= NO + +SHOW_INCLUDE_FILES = NO + +SHOW_GROUPED_MEMB_INC = NO + +FORCE_LOCAL_INCLUDES = NO + +INLINE_INFO = YES + +SORT_MEMBER_DOCS = NO + +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = YES +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = ccpp_dox_layout.xml +CITE_BIB_FILES = library.bib +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = +WARN_LOGFILE = +INPUT = pdftxt/mainpage.txt \ + pdftxt/all_shemes_list.txt \ + pdftxt/GFSv15p2_suite.txt \ +### pdftxt/GFSv15p2_no_nsst_suite.txt \ +### pdftxt/suite_FV3_GFS_v15p2.xml.txt \ + pdftxt/GFSv16beta_suite.txt \ +### pdftxt/GFSv16beta_no_nsst_suite.txt \ +### pdftxt/suite_FV3_GFS_v16beta.xml.txt \ + pdftxt/GSD_adv_suite.txt \ + pdftxt/CPT_adv_suite.txt \ + pdftxt/RRFS_v1alpha_suite.txt \ + pdftxt/RRFS_SGSCLOUD.txt \ + pdftxt/GFS_RRTMG.txt \ + pdftxt/GFS_SFCLYR.txt \ +### pdftxt/MYNN_SFCLAYER.txt \ + pdftxt/GFS_NSST.txt \ + pdftxt/GFS_OCEAN.txt \ + pdftxt/GFS_NOAH.txt \ + pdftxt/GFS_SFCSICE.txt \ + pdftxt/GFS_HEDMF.txt \ + pdftxt/GFS_SATMEDMFVDIFQ.txt \ + pdftxt/GFS_NOAHMP.txt \ + pdftxt/GFS_UGWPv0.txt \ + pdftxt/GFS_GWDPS.txt \ + pdftxt/GFS_OZPHYS.txt \ + pdftxt/GFS_H2OPHYS.txt \ + pdftxt/GFS_RAYLEIGH.txt \ + pdftxt/GFS_SAMFdeep.txt \ + pdftxt/GFS_SAMFshal.txt \ + pdftxt/GFDL_cloud.txt \ +### pdftxt/GFS_CALPRECIPTYPE.txt \ +### pdftxt/rad_cld.txt \ + pdftxt/CPT_CSAW.txt \ + pdftxt/CPT_MG3.txt \ + pdftxt/MYNN_EDMF.txt \ + pdftxt/CU_GF_deep.txt \ + pdftxt/RUCLSM.txt \ + pdftxt/THOMPSON.txt \ +### pdftxt/GFSphys_namelist.txt \ +### pdftxt/GFS_STOCHY_PHYS.txt \ + pdftxt/suite_input.nml.txt \ +### in-core MP + ../gfdl_fv_sat_adj.F90 \ +### time_vary + ../GFS_time_vary_pre.fv3.F90 \ + ../GFS_rad_time_vary.fv3.F90 \ + ../GFS_phys_time_vary.fv3.F90 \ + ../ozne_def.f \ + ../ozinterp.f90 \ + ../h2o_def.f \ + ../h2ointerp.f90 \ + ../aerclm_def.F \ + ../aerinterp.F90 \ + ../iccn_def.F \ + ../iccninterp.F90 \ + ../sfcsub.F \ + ../gcycle.F90 \ +### Radiation + ../GFS_rrtmg_pre.F90 \ + ../GFS_rrtmg_post.F90 \ + ../GFS_rrtmg_setup.F90 \ + ../rrtmg_sw_pre.F90 \ + ../module_SGSCloud_RadPre.F90 \ + ../module_SGSCloud_RadPost.F90 \ + ../radsw_main.f \ + ../rrtmg_sw_post.F90 \ + ../rrtmg_lw_pre.F90 \ + ../radlw_main.f \ + ../rrtmg_lw_post.F90 \ + ../radiation_aerosols.f \ + ../radiation_astronomy.f \ + ../radiation_clouds.f \ + ../radiation_gases.f \ + ../radiation_surface.f \ + ../radlw_param.f \ + ../radlw_datatb.f \ + ../radsw_param.f \ + ../radsw_datatb.f \ + ../dcyc2.f \ +### Land Surface + ../sfc_diff.f \ +### ../module_MYNNSFC_wrapper.F90 \ +### ../module_sf_mynn.F90 \ + ../sfc_nst.f \ + ../sfc_ocean.F \ + ../module_nst_model.f90 \ + ../module_nst_parameters.f90 \ + ../module_nst_water_prop.f90 \ + ../sfc_drv.f \ + ../sflx.f \ + ../namelist_soilveg.f \ + ../set_soilveg.f \ + ../sfc_noahmp_drv.f \ + ../module_sf_noahmplsm.f90 \ + ../module_sf_noahmp_glacier.f90 \ + ../noahmp_tables.f90 \ + ../GFS_surface_generic.F90 \ +### Sea Ice Surface + ../sfc_sice.f \ +### PBL + ../moninedmf.f \ + ../mfpbl.f \ + ../tridi.f \ +### satmedmf +### ../satmedmfvdif.F \ + ../satmedmfvdifq.F \ + ../mfpbltq.f \ + ../mfscuq.f \ + ../tridi.f \ +### Orographic Gravity Wave + ../GFS_GWD_generic.F90 \ + ../cires_ugwp.F90 \ + ../gwdps.f \ + ../ugwp_driver_v0.F \ + ../cires_ugwp_triggers.F90 \ + ../cires_ugwp_module.F90 \ + ../cires_ugwp_utils.F90 \ + ../cires_ugwp_solvers.F90 \ + ../cires_ugwp_post.F90 \ +### ../cires_ugwp_initialize.F90 \ + ../cires_vert_wmsdis.F90 \ + ../cires_vert_orodis.F90 \ + ../cires_vert_lsatdis.F90 \ +### Rayleigh Dampling + ../rayleigh_damp.f \ +### Prognostic Ozone + ../ozphys_2015.f \ +### ../ozphys.f \ +### stratospheric h2o + ../h2ophys.f \ +### Deep Convection + ../samfdeepcnv.f \ +### Convective Gravity Wave +### ../gwdc.f \ +### Shallow Convection + ../samfshalcnv.f \ + ../cnvc90.f \ +### Microphysics +### ../gscond.f \ +### ../precpd.f \ + ../module_bfmicrophysics.f \ +### GFDL cloud MP + ../gfdl_cloud_microphys.F90 \ + ../module_gfdl_cloud_microphys.F90 \ + ../GFS_MP_generic.F90 \ + ../calpreciptype.f90 \ +### stochy + ../GFS_stochastics.F90 \ +### ../surface_perturbation.F90 \ +### ../../stochastic_physics/stochastic_physics.F90 \ +### CPT + ../m_micro.F90 \ + ../m_micro_interstitial.F90 \ +### ../micro_mg2_0.F90 \ + ../micro_mg3_0.F90 \ + ../micro_mg_utils.F90 \ + ../cldmacro.F \ + ../aer_cloud.F \ + ../cldwat2m_micro.F \ + ../wv_saturation.F \ + ../cs_conv_aw_adj.F90 \ + ../cs_conv.F90 \ + ../cu_gf_driver.F90 \ + ../cu_gf_driver_pre.F90 \ + ../cu_gf_deep.F90 \ + ../cu_gf_sh.F90 \ + ../module_MYNNPBL_wrapper.F90 \ + ../module_bl_mynn.F90 \ +### ../module_MYNNSFC_wrapper.F90 \ +### ../module_sf_mynn.F90 \ + ../sfc_drv_ruc.F90 \ + ../module_sf_ruclsm.F90 \ + ../namelist_soilveg_ruc.F90 \ + ../set_soilveg_ruc.F90 \ + ../module_soil_pre.F90 \ + ../mp_thompson_pre.F90 \ + ../module_mp_thompson_make_number_concentrations.F90 \ + ../mp_thompson.F90 \ + ../module_mp_thompson.F90 \ + ../module_mp_radar.F90 \ + ../mp_thompson_post.F90 \ +### utils + ../funcphys.f90 \ + ../physparam.f \ + ../physcons.F90 \ + ../radcons.f90 \ + ../mersenne_twister.f +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.f \ + *.F \ + *.F90 \ + *.f90 \ + *.nml \ + *.txt +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = ./ +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = img +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#CLANG_ASSISTED_PARSING = NO +#CLANG_OPTIONS = +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = ccpp_dox_extra_style.css +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = YES +GENERATE_TREEVIEW = YES +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = YES +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2 +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = a4 +EXTRA_PACKAGES = amsmath +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = YES +LATEX_SOURCE_CODE = NO + +LATEX_BIB_STYLE = plainnat + +LATEX_TIMESTAMP = NO + +GENERATE_RTF = NO + +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = NO +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = CCPP \ + MULTI_GASES \ + 0 +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +PERL_PATH = /usr/bin/perl +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +DIA_PATH = +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = YES +UML_LOOK = YES +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = YES +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = svg +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 200 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/physics/docs/img/MYNN-SFCLAY_call_order.png b/physics/docs/img/MYNN-SFCLAY_call_order.png new file mode 100644 index 0000000000000000000000000000000000000000..825a4c5e39ec8180beee300797f56e53ab5d6728 GIT binary patch literal 170162 zcmY(q2UrtN^e#*W-8pk+&d%&)<~{G6jeKIL#d3xF3IzoPi;niAXA~4v zTND(O5e#&fl5N(pj>`)TRLww*f}$dp>C}eyGJV@t`Y3Z zONxSG&6S=1AuVCxyEMa5k z`o>-Y=?uTrrl5cz6)ta`?LBR7Bb}XGJQR>hcm791;qv}JvE-fG|D)pRsC38F;K^+b zS9kl{4<$enQg@WE+`fGq;%@g=;n}0d|EKt6O6iV+rzc!NQWAkcNFZb+T-~9P((>~1 zl2Q*OA3PAh)DZXZaq+Z4io19S{O?NspL!nId)T_e;GQs7m)rlH2;6H z|6>Ot`JeIs&%^xhmi~|QvZ=~fAd>&L+mx^9w+X+ZpirgId8GCnNx6|tpJl1#br6eP zYt(yLvFy@2LwAc>BJG_o3uE?^geNN6R6%#GZ|8+3P*JK=$qHU&pu`#cTlV+;n3rx0a!C0Q_ffWlWi*#gblz_mO*D28Q%Q-XH2Ff3~&zx^yPY)wLsWtaY~S z#4pICXxQ&pQ+w0}(JfFmx-!T3*(7oxdWO_c-_?WC?-B9jtIX+2CbR{$1vSZ+&t2JS zWKnPINVh)=l6JE4cdeQ1_{p>_T2^!vG|zoc?08?60zhNMzFE(fLh##eJnY=8p5r~7 z3kX01qA_7Qzc^+w;N<+ zU8cEk#YRS(PDjKAfE(;^bAxOQXqorD72r+J`5U^k*wM;0GCX{(5;_hPTGS@ z(muOO^b2m7scKgv(9h5@&kOZZi(13rJ+zo~8EBC^R;@xS#DnaA)XvwLb8(#0^+_|zcj>r(?o7f^ z~i>B+a)7ZL>Z-jG)MBefWI^R;3P zH@%>o?wx>sEAmL{qU6P{r08zI#mQWkEiWnU8Q%@9NtLu%Uac>}ou-{{fL;%s#>+vh z1U$D}!9?}|R!aF<&fHO_92>d$D608Gz&RnnkQ8a-4Q&EElt>M7_g`SL`haL$f32jA zJnpsP%^{B#le2EMgm@@PNs5_QiJ3Bk0W0AZwp~TEn{oWF7bEb#c4P)$>E?`&sQ!mz zzs8yle%5R^oh*J3i20D(xMA-$q(=YZ)JfO4?I3`40})(LPl>g>*x|dlHfH(Wx$uSN zkP;!wV{z3ez?U1soM}?ozEw-W9L-&v&DD_CzTpbg!0eqlr``+cO*`dC>k0YZ@9sT*sQ5Hid%UC?X!$%kuu zgCA=?_pZA9rSnMiGWm$?FV#t|yX!hEtfOAq#*QJg9 zn*G1#qI=M6ub14M4rRhwaP>bCqJflxZq@kPbJN3FUoui%0DGl^3acJABYxrX7>m<-)DP= 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.0.co;2}, @@ -451,7 +542,7 @@ @article{Luo_2003 Number = {2}, Pages = {334--351}, Publisher = {American Meteorological Society}, - Title = {Effects of Frozen Soil on Soil Temperature, Spring Infiltration, and Runoff: Results from the PILPS 2(d) Experiment at Valdai, Russia}, + Title = {Effects of Frozen Soil on Soil Temperature, Spring Infiltration, and Runoff: Results from the {PILPS} 2(d) Experiment at {V}aldai, {R}ussia}, Url = {http://dx.doi.org/10.1175/1525-7541(2003)4<334:EOFSOS>2.0.CO;2}, Volume = {4}, Year = {2003}, @@ -459,7 +550,7 @@ @article{Luo_2003 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1525-7541(2003)4%3C334:eofsos%3E2.0.co;2}} @article{Slater_2001, - Author = {Slater, A. G. and Schlosser, C. A. and Desborough, C. E. and Pitman, A. J. and Henderson-Sellers, A. and Robock, A. and Vinnikov, K. Ya and Entin, J. and Mitchell, K. and Chen, F. and et al.}, + Author = {Slater, A. G. and Schlosser, C. A. and Desborough, C. E. and et al.}, Date-Added = {2019-05-06 14:11:52 -0600}, Date-Modified = {2019-05-06 14:11:52 -0600}, Doi = {10.1175/1525-7541(2001)002<0007:trosil>2.0.co;2}, @@ -469,7 +560,7 @@ @article{Slater_2001 Number = {1}, Pages = {7--25}, Publisher = {American Meteorological Society}, - Title = {The Representation of Snow in Land Surface Schemes: Results from PILPS 2(d)}, + Title = {The Representation of Snow in Land Surface Schemes: Results from {PILPS} 2(d)}, Url = {http://dx.doi.org/10.1175/1525-7541(2001)002<0007:TROSIL>2.0.CO;2}, Volume = {2}, Year = {2001}, @@ -477,7 +568,7 @@ @article{Slater_2001 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1525-7541(2001)002%3C0007:trosil%3E2.0.co;2}} @article{Schlosser_1997, - Author = {Schlosser, C. Adam and Robock, Alan and Vinnikov, Konstantin Ya and Speranskaya, Nina A. and Xue, Yongkang}, + Author = {Schlosser, C. A. and Robock, A. and Vinnikov, K. Y. and Speranskaya, N. A. and Xue, Y.-K.}, Date-Added = {2019-05-06 14:10:42 -0600}, Date-Modified = {2019-05-06 14:10:42 -0600}, Doi = {10.1175/1520-0493(1997)125<3279:ylshms>2.0.co;2}, @@ -487,7 +578,7 @@ @article{Schlosser_1997 Number = {12}, Pages = {3279--3296}, Publisher = {American Meteorological Society}, - Title = {18-Year Land-Surface Hydrology Model Simulations for a Midlatitude Grassland Catchment in Valdai, Russia}, + Title = {18-Year Land-Surface Hydrology Model Simulations for a Midlatitude Grassland Catchment in {V}aldai, {R}ussia}, Url = {http://dx.doi.org/10.1175/1520-0493(1997)125<3279:YLSHMS>2.0.CO;2}, Volume = {125}, Year = {1997}, @@ -495,7 +586,7 @@ @article{Schlosser_1997 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1997)125%3C3279:ylshms%3E2.0.co;2}} @article{Berbery_1999, - Author = {Berbery, Ernesto Hugo and Mitchell, Kenneth E. and Benjamin, Stanley and Smirnova, Tatiana and Ritchie, Harold and Hogue, Richard and Radeva, Ekaterina}, + Author = {Berbery, E. H. and Mitchell, K. E. and Benjamin, S. and Smirnova, T. and Ritchie, H. and Hogue, R. and Radeva, E.}, Date-Added = {2019-05-06 14:08:00 -0600}, Date-Modified = {2019-05-06 14:08:00 -0600}, Doi = {10.1029/1999jd900128}, @@ -513,7 +604,7 @@ @article{Berbery_1999 Bdsk-Url-2 = {http://dx.doi.org/10.1029/1999jd900128}} @article{Benjamin_2004b, - Author = {Benjamin, Stanley G. and Grell, Georg A. and Brown, John M. and Smirnova, Tatiana G. and Bleck, Rainer}, + Author = {Benjamin, S. G. and Grell, G. A. and Brown, J. M. and Smirnova, T. G. and Bleck, R.}, Date-Added = {2019-05-06 14:05:46 -0600}, Date-Modified = {2019-05-06 14:06:43 -0600}, Doi = {10.1175/1520-0493(2004)132<0473:mwpwtr>2.0.co;2}, @@ -523,7 +614,7 @@ @article{Benjamin_2004b Number = {2}, Pages = {473--494}, Publisher = {American Meteorological Society}, - Title = {Mesoscale Weather Prediction with the RUC Hybrid Isentropic--Terrain-Following Coordinate Model}, + Title = {Mesoscale Weather Prediction with the {RUC} Hybrid Isentropic--Terrain-Following Coordinate Model}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0473:MWPWTR>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -531,7 +622,7 @@ @article{Benjamin_2004b Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0473:mwpwtr%3E2.0.co;2}} @article{Benjamin_2004a, - Author = {Benjamin, Stanley G. and D{\'e}v{\'e}nyi, Dezs{\"o} and Weygandt, Stephen S. and Brundage, Kevin J. and Brown, John M. and Grell, Georg A. and Kim, Dongsoo and Schwartz, Barry E. and Smirnova, Tatiana G. and Smith, Tracy Lorraine and et al.}, + Author = {Benjamin, S. G. and D{\'e}v{\'e}nyi, D. and Weygandt, S. S. and Brundage, K. J. and Brown, J. M. and Grell, G. A. and Kim, D. and Schwartz, B. E. and Smirnova, T. G. and Smith, T. L. and et al.}, Date-Added = {2019-05-06 14:04:23 -0600}, Date-Modified = {2019-05-06 14:06:36 -0600}, Doi = {10.1175/1520-0493(2004)132<0495:ahactr>2.0.co;2}, @@ -541,7 +632,7 @@ @article{Benjamin_2004a Number = {2}, Pages = {495--518}, Publisher = {American Meteorological Society}, - Title = {An Hourly Assimilation--Forecast Cycle: The RUC}, + Title = {An Hourly Assimilation--Forecast Cycle: The {RUC}}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0495:AHACTR>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -549,18 +640,18 @@ @article{Benjamin_2004a Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0495:ahactr%3E2.0.co;2}} @article{Smirnova_2000, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G. and Kim, Dongsoo}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G. and Kim, D.}, Date-Modified = {2019-06-05 15:32:20 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, Number = {D3}, Pages = {4077--4086}, - Title = {Parameterization of cold-season processes in the MAPS land-surface scheme}, + Title = {Parameterization of cold-season processes in the {MAPS} land-surface scheme}, Volume = {105}, Year = {2000}, Bdsk-Url-1 = {http://dx.doi.org/10.1029/1999JD901047}} @article{Smirnova_2016, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G. and Kenyon, Jaymes S.}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G. and Kenyon, J. S.}, Date-Added = {2019-05-06 13:55:32 -0600}, Date-Modified = {2019-05-06 13:55:32 -0600}, Doi = {10.1175/mwr-d-15-0198.1}, @@ -570,7 +661,7 @@ @article{Smirnova_2016 Number = {5}, Pages = {1851--1865}, Publisher = {American Meteorological Society}, - Title = {Modifications to the Rapid Update Cycle Land Surface Model (RUC LSM) Available in the Weather Research and Forecasting (WRF) Model}, + Title = {Modifications to the Rapid Update Cycle Land Surface Model ({RUC LSM}) Available in the {W}eather {R}esearch and {F}orecasting ({WRF}) Model}, Url = {http://dx.doi.org/10.1175/MWR-D-15-0198.1}, Volume = {144}, Year = {2016}, @@ -578,7 +669,7 @@ @article{Smirnova_2016 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr-d-15-0198.1}} @article{Morrison_2008, - Author = {Morrison, Hugh and Gettelman, Andrew}, + Author = {Morrison, H. and Gettelman, A.}, Date-Added = {2019-05-03 12:49:59 -0600}, Date-Modified = {2019-05-03 12:49:59 -0600}, Doi = {10.1175/2008jcli2105.1}, @@ -588,7 +679,7 @@ @article{Morrison_2008 Number = {15}, Pages = {3642--3659}, Publisher = {American Meteorological Society}, - Title = {A New Two-Moment Bulk Stratiform Cloud Microphysics Scheme in the Community Atmosphere Model, Version 3 (CAM3). Part I: Description and Numerical Tests}, + Title = {A New Two-Moment Bulk Stratiform Cloud Microphysics Scheme in the {C}ommunity {A}tmosphere {M}odel, {V}ersion 3 ({CAM3}). {P}art {I}: Description and Numerical Tests}, Url = {http://dx.doi.org/10.1175/2008JCLI2105.1}, Volume = {21}, Year = {2008}, @@ -606,7 +697,7 @@ @article{Gettelman_2015_2 Number = {3}, Pages = {1288--1307}, Publisher = {American Meteorological Society}, - Title = {Advanced Two-Moment Bulk Microphysics for Global Models. Part II: Global Model Solutions and Aerosol--Cloud Interactions*}, + Title = {Advanced Two-Moment Bulk Microphysics for Global Models. {P}art {II}: Global Model Solutions and Aerosol--Cloud Interactions}, Url = {http://dx.doi.org/10.1175/JCLI-D-14-00103.1}, Volume = {28}, Year = {2015}, @@ -624,7 +715,7 @@ @article{Gettelman_2015_1 Number = {3}, Pages = {1268--1287}, Publisher = {American Meteorological Society}, - Title = {Advanced Two-Moment Bulk Microphysics for Global Models. Part I: Off-Line Tests and Comparison with Other Schemes}, + Title = {Advanced Two-Moment Bulk Microphysics for Global Models. {P}art {I}: Off-Line Tests and Comparison with Other Schemes}, Url = {http://dx.doi.org/10.1175/JCLI-D-14-00102.1}, Volume = {28}, Year = {2015}, @@ -632,18 +723,18 @@ @article{Gettelman_2015_1 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jcli-d-14-00102.1}} @techreport{olson_et_al_2019, - Author = {J.B. Olson and J.S.Kenyon and W.A. Angevine and J.M. Brown and M. Pagowski and K. Suselj}, + Author = {J. B. Olson and J. S. Kenyon and W. A. Angevine and J. M. Brown and M. Pagowski and K. Suselj}, Date-Added = {2019-05-01 15:29:00 -0600}, Date-Modified = {2019-05-01 15:32:09 -0600}, Institution = {NOAA OAR GSD-61}, Month = {March}, - Title = {A description of the MYNN-EDMF scheme and the coupling to other components in WRF-ARW}, + Title = {A description of the {MYNN-EDMF} scheme and the coupling to other components in {WRF-ARW}}, Type = {Technical Memorandum}, Year = {2019}} @conference{olson_and_brown_2009, Address = {Omaha, Nebraska}, - Author = {J.B. Olson and J.M.Brown}, + Author = {J. B. Olson and J. M. Brown}, Booktitle = {23rd Conf. on Weather Analysis and Forecasting/19th Conf. on Numerical Weather Prediction}, Date-Added = {2019-05-01 15:13:42 -0600}, Date-Modified = {2019-05-01 15:18:06 -0600}, @@ -653,7 +744,7 @@ @conference{olson_and_brown_2009 Year = {2009}} @article{Nakanishi_2006, - Author = {Nakanishi, Mikio and Niino, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-05-01 15:10:22 -0600}, Date-Modified = {2019-05-01 15:10:22 -0600}, Doi = {10.1007/s10546-005-9030-8}, @@ -663,14 +754,14 @@ @article{Nakanishi_2006 Number = {2}, Pages = {397--407}, Publisher = {Springer Nature}, - Title = {An Improved Mellor--Yamada Level-3 Model: Its Numerical Stability and Application to a Regional Prediction of Advection Fog}, + Title = {An Improved {M}ellor--{Y}amada Level-3 Model: Its Numerical Stability and Application to a Regional Prediction of Advection Fog}, Url = {http://dx.doi.org/10.1007/s10546-005-9030-8}, Volume = {119}, Year = {2006}, Bdsk-Url-1 = {http://dx.doi.org/10.1007/s10546-005-9030-8}} @article{Nakanishi_2004, - Author = {Nakanishi, Mikio and Niino, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-05-01 15:06:36 -0600}, Date-Modified = {2019-05-01 15:06:36 -0600}, Doi = {10.1023/b:boun.0000020164.04146.98}, @@ -680,7 +771,7 @@ @article{Nakanishi_2004 Number = {1}, Pages = {1--31}, Publisher = {Springer Nature}, - Title = {An Improved Mellor--Yamada Level-3 Model with Condensation Physics: Its Design and Verification}, + Title = {An Improved {M}ellor--{Y}amada Level-3 Model with Condensation Physics: Its Design and Verification}, Url = {http://dx.doi.org/10.1023/B:BOUN.0000020164.04146.98}, Volume = {112}, Year = {2004}, @@ -688,7 +779,7 @@ @article{Nakanishi_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1023/b:boun.0000020164.04146.98}} @article{Mellor_1982, - Author = {Mellor, George L. and Yamada, Tetsuji}, + Author = {Mellor, G. L. and Yamada, T.}, Date-Added = {2019-05-01 15:00:12 -0600}, Date-Modified = {2019-05-01 15:00:12 -0600}, Doi = {10.1029/rg020i004p00851}, @@ -705,7 +796,7 @@ @article{Mellor_1982 Bdsk-Url-2 = {http://dx.doi.org/10.1029/rg020i004p00851}} @article{Mellor_1974, - Author = {Mellor, George L. and Yamada, Tetsuji}, + Author = {Mellor, G. L. and Yamada, T.}, Date-Added = {2019-05-01 14:57:26 -0600}, Date-Modified = {2019-05-01 14:57:26 -0600}, Doi = {10.1175/1520-0469(1974)031<1791:ahotcm>2.0.co;2}, @@ -723,7 +814,7 @@ @article{Mellor_1974 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1974)031%3C1791:ahotcm%3E2.0.co;2}} @article{Nakanish_2001, - Author = {Nakanish, Mikio}, + Author = {Nakanish, M.}, Date-Added = {2019-04-25 11:08:11 -0600}, Date-Modified = {2019-04-25 11:08:11 -0600}, Doi = {10.1023/a:1018915827400}, @@ -733,7 +824,7 @@ @article{Nakanish_2001 Number = {3}, Pages = {349--378}, Publisher = {Springer Nature}, - Title = {Improvement Of The Mellor--Yamada Turbulence Closure Model Based On Large-Eddy Simulation Data}, + Title = {Improvement Of The {M}ellor--{Y}amada Turbulence Closure Model Based On Large-Eddy Simulation Data}, Url = {http://dx.doi.org/10.1023/A:1018915827400}, Volume = {99}, Year = {2001}, @@ -751,7 +842,7 @@ @article{kennedy_and_shapiro_1980 Year = {1980}} @article{Siebesma_2007, - Author = {Siebesma, A. Pier and Soares, Pedro M. M. and Teixeira, Jo{\~a}o}, + Author = {Siebesma, A. P. and Soares, P. M. M. and Teixeira, J.}, Date-Added = {2019-04-24 12:11:29 -0600}, Date-Modified = {2019-04-24 12:11:29 -0600}, Doi = {10.1175/jas3888.1}, @@ -769,7 +860,7 @@ @article{Siebesma_2007 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jas3888.1}} @article{Han_2016, - Author = {Han, Jongil and Witek, Marcin L. and Teixeira, Joao and Sun, Ruiyu and Pan, Hua-Lu and Fletcher, Jennifer K. and Bretherton, Christopher S.}, + Author = {Han, J. and Witek, M. L. and Teixeira, J. and Sun, R. and Pan, H.-L. and Fletcher, J. K. and Bretherton, C. S.}, Date-Added = {2019-04-24 12:08:21 -0600}, Date-Modified = {2019-04-24 12:08:21 -0600}, Doi = {10.1175/waf-d-15-0053.1}, @@ -779,7 +870,7 @@ @article{Han_2016 Number = {1}, Pages = {341--352}, Publisher = {American Meteorological Society}, - Title = {Implementation in the NCEP GFS of a Hybrid Eddy-Diffusivity Mass-Flux (EDMF) Boundary Layer Parameterization with Dissipative Heating and Modified Stable Boundary Layer Mixing}, + Title = {Implementation in the {NCEP} {GFS} of a Hybrid Eddy-Diffusivity Mass-Flux ({EDMF}) Boundary Layer Parameterization with Dissipative Heating and Modified Stable Boundary Layer Mixing}, Url = {http://dx.doi.org/10.1175/WAF-D-15-0053.1}, Volume = {31}, Year = {2016}, @@ -805,7 +896,7 @@ @article{Vickers_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jam2160.1}} @article{Bechtold_1998, - Author = {Bechtold, Peter and Siebesma, Pier}, + Author = {Bechtold, P. and Siebesma, P.}, Date-Added = {2019-04-22 11:24:42 -0600}, Date-Modified = {2019-04-22 11:24:42 -0600}, Doi = {10.1175/1520-0469(1998)055<0888:oarobl>2.0.co;2}, @@ -823,7 +914,7 @@ @article{Bechtold_1998 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1998)055%3C0888:oarobl%3E2.0.co;2}} @article{Ito_2015, - Author = {Ito, Junshi and Niino, Hiroshi and Nakanishi, Mikio and Moeng, Chin-Hoh}, + Author = {Ito, J. and Niino, H. and Nakanishi, M. and Moeng, C-H.}, Date-Added = {2019-04-22 10:27:42 -0600}, Date-Modified = {2019-04-22 10:27:42 -0600}, Doi = {10.1007/s10546-015-0045-5}, @@ -840,7 +931,7 @@ @article{Ito_2015 Bdsk-Url-1 = {http://dx.doi.org/10.1007/s10546-015-0045-5}} @article{Tripoli_1981, - Author = {Tripoli, Gregory J. and Cotton, William R.}, + Author = {Tripoli, G. J. and Cotton, W. R.}, Date-Added = {2019-04-22 10:18:40 -0600}, Date-Modified = {2019-04-22 10:18:40 -0600}, Doi = {10.1175/1520-0493(1981)109<1094:tuollw>2.0.co;2}, @@ -858,7 +949,7 @@ @article{Tripoli_1981 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1981)109%3C1094:tuollw%3E2.0.co;2}} @article{NAKANISHI_2009, - Author = {NAKANISHI, Mikio and NIINO, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-04-22 10:00:34 -0600}, Date-Modified = {2019-04-22 10:00:34 -0600}, Doi = {10.2151/jmsj.87.895}, @@ -874,7 +965,7 @@ @article{NAKANISHI_2009 Bdsk-Url-1 = {http://dx.doi.org/10.2151/jmsj.87.895}} @article{Chaboureau_2005, - Author = {Chaboureau, Jean-Pierre}, + Author = {Chaboureau, J.-P.}, Date-Added = {2019-04-21 16:19:12 -0600}, Date-Modified = {2019-04-21 16:19:12 -0600}, Doi = {10.1029/2004jd005645}, @@ -882,7 +973,7 @@ @article{Chaboureau_2005 Journal = {Journal of Geophysical Research}, Number = {D17}, Publisher = {American Geophysical Union (AGU)}, - Title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides (TROCCINOX)}, + Title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides ({TROCCINOX})}, Url = {http://dx.doi.org/10.1029/2004JD005645}, Volume = {110}, Year = {2005}, @@ -890,7 +981,7 @@ @article{Chaboureau_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2004jd005645}} @article{Chaboureau_2002, - Author = {Chaboureau, Jean-Pierre and Bechtold, Peter}, + Author = {Chaboureau, J.-P. and Bechtold, P.}, Date-Added = {2019-04-21 16:17:45 -0600}, Date-Modified = {2019-04-21 16:17:45 -0600}, Doi = {10.1175/1520-0469(2002)059<2362:ascpdf>2.0.co;2}, @@ -908,7 +999,7 @@ @article{Chaboureau_2002 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(2002)059%3C2362:ascpdf%3E2.0.co;2}} @article{Kuwano_Yoshida_2010, - Author = {Kuwano-Yoshida, Akira and Enomoto, Takeshi and Ohfuchi, Wataru}, + Author = {Kuwano-Yoshida, A. and Enomoto, T. and Ohfuchi, W.}, Date-Added = {2019-04-21 16:12:47 -0600}, Date-Modified = {2019-04-21 16:12:47 -0600}, Doi = {10.1002/qj.660}, @@ -918,7 +1009,7 @@ @article{Kuwano_Yoshida_2010 Number = {651}, Pages = {1583--1597}, Publisher = {Wiley}, - Title = {An improved PDF cloud scheme for climate simulations}, + Title = {An improved {PDF} cloud scheme for climate simulations}, Url = {http://dx.doi.org/10.1002/qj.660}, Volume = {136}, Year = {2010}, @@ -943,7 +1034,7 @@ @article{Sommeria_1977 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1977)034%3C0344:sscimo%3E2.0.co;2}} @article{Benjamin_2016, - Author = {Benjamin, Stanley G. and Weygandt, Stephen S. and Brown, John M. and Hu, Ming and Alexander, Curtis R. and Smirnova, Tatiana G. and Olson, Joseph B. and James, Eric P. and Dowell, David C. and Grell, Georg A. and et al.}, + Author = {Benjamin, S. G. and Weygandt, S. S. and Brown, J. M. and Hu, M. and Alexander, C. R. and Smirnova, T. G. and Olson, J. B. and James, E. P. and Dowell, D. C. and Grell, G. A. and et al.}, Date-Added = {2019-04-19 11:32:56 -0600}, Date-Modified = {2019-04-19 11:32:56 -0600}, Doi = {10.1175/mwr-d-15-0242.1}, @@ -961,7 +1052,7 @@ @article{Benjamin_2016 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr-d-15-0242.1}} @article{Arakawa_2004, - Author = {Arakawa, Akio}, + Author = {Arakawa, A.}, Date-Added = {2019-02-01 17:35:16 -0700}, Date-Modified = {2019-02-01 17:35:16 -0700}, Doi = {10.1175/1520-0442(2004)017<2493:ratcpp>2.0.co;2}, @@ -979,7 +1070,7 @@ @article{Arakawa_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0442(2004)017%3C2493:ratcpp%3E2.0.co;2}} @article{Thompson_2004, - Author = {Thompson, Gregory and Rasmussen, Roy M. and Manning, Kevin}, + Author = {Thompson, G. and Rasmussen, R. M. and Manning, K.}, Date-Added = {2019-01-22 16:11:17 -0700}, Date-Modified = {2019-01-22 16:11:17 -0700}, Doi = {10.1175/1520-0493(2004)132<0519:efowpu>2.0.co;2}, @@ -989,7 +1080,7 @@ @article{Thompson_2004 Number = {2}, Pages = {519--542}, Publisher = {American Meteorological Society}, - Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. Part I: Description and Sensitivity Analysis}, + Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. {P}art {I}: Description and Sensitivity Analysis}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0519:EFOWPU>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -997,7 +1088,7 @@ @article{Thompson_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0519:efowpu%3E2.0.co;2}} @article{Abdul_Razzak_2000, - Author = {Abdul-Razzak, Hayder and Ghan, Steven J.}, + Author = {Abdul-Razzak, H. and Ghan, S. J.}, Date-Added = {2019-01-22 11:02:36 -0700}, Date-Modified = {2019-06-05 15:28:16 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, @@ -1009,7 +1100,7 @@ @article{Abdul_Razzak_2000 Bdsk-Url-1 = {http://dx.doi.org/10.1029/1999JD901161}} @article{Barahona_2014, - Author = {Barahona, D. and Molod, A. and Bacmeister, J. and Nenes, A. and Gettelman, A. and Morrison, H. and Phillips, V. and Eichmann, A.}, + Author = {Barahona, D. and Molod, A. and Bacmeister, J. and et al.}, Date-Added = {2019-01-22 10:47:07 -0700}, Date-Modified = {2019-01-22 10:47:07 -0700}, Doi = {10.5194/gmd-7-1733-2014}, @@ -1019,14 +1110,14 @@ @article{Barahona_2014 Number = {4}, Pages = {1733--1766}, Publisher = {Copernicus GmbH}, - Title = {Development of two-moment cloud microphysics for liquid and ice within the NASA Goddard Earth Observing System Model (GEOS-5)}, + Title = {Development of two-moment cloud microphysics for liquid and ice within the NASA Goddard Earth Observing System Model ({GEOS-5})}, Url = {http://dx.doi.org/10.5194/gmd-7-1733-2014}, Volume = {7}, Year = {2014}, Bdsk-Url-1 = {http://dx.doi.org/10.5194/gmd-7-1733-2014}} @article{Barahona_2008, - Author = {Barahona, Donifan and Nenes, Athanasios}, + Author = {Barahona, D. and Nenes, A.}, Date-Added = {2019-01-22 10:12:34 -0700}, Date-Modified = {2019-01-22 10:12:34 -0700}, Doi = {10.1029/2007jd009355}, @@ -1043,7 +1134,7 @@ @article{Barahona_2008 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2007jd009355}} @article{Fountoukis_2005, - Author = {Fountoukis, Christos}, + Author = {Fountoukis, C.}, Date-Added = {2019-01-22 10:07:41 -0700}, Date-Modified = {2019-01-22 10:07:41 -0700}, Doi = {10.1029/2004jd005591}, @@ -1059,7 +1150,7 @@ @article{Fountoukis_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2004jd005591}} @article{Nenes_2003, - Author = {Nenes, Athanasios}, + Author = {Nenes, A.}, Date-Added = {2019-01-22 10:02:59 -0700}, Date-Modified = {2019-01-22 10:02:59 -0700}, Doi = {10.1029/2002jd002911}, @@ -1092,7 +1183,7 @@ @article{Barahona_2009 Bdsk-Url-1 = {http://dx.doi.org/10.5194/acp-9-369-2009}} @article{Smirnova_1997, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G.}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G.}, Date-Added = {2019-01-14 15:20:01 -0700}, Date-Modified = {2019-01-14 15:20:01 -0700}, Doi = {10.1175/1520-0493(1997)125<1870:podsmc>2.0.co;2}, @@ -1110,7 +1201,7 @@ @article{Smirnova_1997 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1997)125%3C1870:podsmc%3E2.0.co;2}} @article{Gregory_2001, - Author = {Gregory, David}, + Author = {Gregory, D.}, Date-Added = {2018-11-06 11:45:59 -0700}, Date-Modified = {2018-11-06 11:45:59 -0700}, Doi = {10.1002/qj.49712757104}, @@ -1127,7 +1218,7 @@ @article{Gregory_2001 Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712757104}} @article{Pan_1998, - Author = {Pan, Dzong-Ming and Randall, Davi D. A.}, + Author = {Pan, D.-M. and Randall, D. A.}, Date-Added = {2018-11-06 11:43:33 -0700}, Date-Modified = {2018-11-06 11:43:33 -0700}, Doi = {10.1002/qj.49712454714}, @@ -1144,7 +1235,7 @@ @article{Pan_1998 Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712454714}} @article{Arakawa_2013, - Author = {Arakawa, Akio and Wu, Chien-Ming}, + Author = {Arakawa, A. and Wu, C.-M.}, Date-Added = {2018-11-06 11:41:28 -0700}, Date-Modified = {2018-11-06 11:41:28 -0700}, Doi = {10.1175/jas-d-12-0330.1}, @@ -1154,7 +1245,7 @@ @article{Arakawa_2013 Number = {7}, Pages = {1977--1992}, Publisher = {American Meteorological Society}, - Title = {A Unified Representation of Deep Moist Convection in Numerical Modeling of the Atmosphere. Part I}, + Title = {A Unified Representation of Deep Moist Convection in Numerical Modeling of the Atmosphere. {P}art {I}}, Url = {http://dx.doi.org/10.1175/JAS-D-12-0330.1}, Volume = {70}, Year = {2013}, @@ -1162,7 +1253,7 @@ @article{Arakawa_2013 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jas-d-12-0330.1}} @article{Chikira_2010, - Author = {Chikira, Minoru and Sugiyama, Masahiro}, + Author = {Chikira, M. and Sugiyama, M.}, Date-Added = {2018-11-06 11:35:55 -0700}, Date-Modified = {2018-11-06 11:35:55 -0700}, Doi = {10.1175/2010jas3316.1}, @@ -1172,7 +1263,7 @@ @article{Chikira_2010 Number = {7}, Pages = {2171--2193}, Publisher = {American Meteorological Society}, - Title = {A Cumulus Parameterization with State-Dependent Entrainment Rate. Part I: Description and Sensitivity to Temperature and Humidity Profiles}, + Title = {A Cumulus Parameterization with State-Dependent Entrainment Rate. {P}art {I}: Description and Sensitivity to Temperature and Humidity Profiles}, Url = {http://dx.doi.org/10.1175/2010JAS3316.1}, Volume = {67}, Year = {2010}, @@ -1180,7 +1271,7 @@ @article{Chikira_2010 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2010jas3316.1}} @article{Lewis_2005, - Author = {Lewis, John M.}, + Author = {Lewis, J. M.}, Date-Added = {2018-09-21 11:27:20 -0600}, Date-Modified = {2018-09-21 11:27:20 -0600}, Doi = {10.1175/mwr2949.1}, @@ -1198,7 +1289,7 @@ @article{Lewis_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr2949.1}} @article{Zhu_2018, - Author = {Zhu, Yuejian and Zhou, Xiaqiong and Li, Wei and Hou, Dingchen and Melhauser, Christopher and Sinsky, Eric and Pe{\~n}a, Malaquias and Fu, Bing and Guan, Hong and Kolczynski, Walter and et al.}, + Author = {Zhu, Y. and Zhou, X. and Li, W. and Hou, D. and Melhauser, C. and Sinsky, E. and Pe{\~n}a, M. and Fu, B. and Guan, H. and Kolczynski, W. and et al.}, Date-Added = {2018-09-07 11:48:50 -0600}, Date-Modified = {2019-06-05 15:33:03 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, @@ -1211,7 +1302,7 @@ @article{Zhu_2018 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2018jd028506}} @article{Shutts_2005, - Author = {Shutts, Glenn}, + Author = {Shutts, G.}, Date-Added = {2018-09-07 11:46:20 -0600}, Date-Modified = {2018-09-07 11:46:20 -0600}, Doi = {10.1256/qj.04.106}, @@ -1261,12 +1352,12 @@ @article{buizza_et_al_1999 Date-Modified = {2018-09-05 13:43:07 -0600}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2887-2908}, - Title = {Stochastic representation of model uncertainties in the ECMWF ensemble prediction system}, + Title = {Stochastic representation of model uncertainties in the {ECMWF} ensemble prediction system}, Volume = {125}, Year = {1999}} @article{donahue_and_caldwell_2018, - Author = {A.S. Donahue and P.M. Caldwell}, + Author = {A. S. Donahue and P. M. Caldwell}, Date-Added = {2018-08-22 11:38:12 -0600}, Date-Modified = {2018-08-22 11:42:12 -0600}, Journal = {Journal of Advances in Modeling Earth Systems}, @@ -1276,7 +1367,7 @@ @article{donahue_and_caldwell_2018 Year = {2018}} @article{tompkins_and_berner_2008, - Author = {A.M. Tompkins and J. Berner}, + Author = {A. M. Tompkins and J. Berner}, Date-Added = {2018-08-21 16:39:36 -0600}, Date-Modified = {2018-08-21 20:28:30 -0600}, Journal = {J. Geophys. Res.}, @@ -1286,7 +1377,7 @@ @article{tompkins_and_berner_2008 Year = {2008}} @techreport{palmer_et_al_2009, - Author = {T.N. Palmer and R. Buizza and F. Doblas-Reyes and T. Jung and M. Leutbecher and G.J. Shutts and M. Steinheimer and A. Weisheimer}, + Author = {T. N. Palmer and R. Buizza and F. Doblas-Reyes and T. Jung and M. Leutbecher and G. J. Shutts and M. Steinheimer and A. Weisheimer}, Date-Added = {2018-08-21 16:35:56 -0600}, Date-Modified = {2018-08-21 16:39:32 -0600}, Institution = {ECMWF}, @@ -1301,7 +1392,7 @@ @article{berner_et_al_2009 Date-Modified = {2018-08-21 16:33:44 -0600}, Journal = {J. Atmos. Sci.}, Pages = {603-626}, - Title = {A spectral stochastic kinetic energy backscatter scheme and its impact on flow-dependent predictability in the ECMWF ensemble prediction system}, + Title = {A spectral stochastic kinetic energy backscatter scheme and its impact on flow-dependent predictability in the {ECMWF} ensemble prediction system}, Volume = {66}, Year = {2009}} @@ -1311,7 +1402,7 @@ @article{schuur_et_al_2012 Date-Modified = {2018-08-21 10:40:09 -0600}, Journal = {Journal of Applied Meteorology and Climatology}, Pages = {763-779}, - Title = {Classification of precipitation types during transitional winter weather using the RUC model and polarimetric radar retrievals}, + Title = {Classification of precipitation types during transitional winter weather using the {RUC} model and polarimetric radar retrievals}, Volume = {51}, Year = {2012}} @@ -1356,7 +1447,7 @@ @conference{baldwin_et_al_1994 Date-Modified = {2018-08-21 10:01:46 -0600}, Organization = {Amer. Meteor. Soc.}, Pages = {30-31}, - Title = {Precipitation type prediction using a decision tree approach with NMC's mesoscale Eta Model}, + Title = {Precipitation type prediction using a decision tree approach with {NMC}'s mesoscale {E}ta Model}, Year = {1994}} @techreport{cullen_and_salmond_2002, @@ -1365,7 +1456,7 @@ @techreport{cullen_and_salmond_2002 Date-Modified = {2018-08-02 20:08:03 +0000}, Institution = {ECMWF}, Number = {357}, - Title = {On the use of a predictor-corrector scheme to couple the dynamics with the physical parametrizations in the ECMWF model}, + Title = {On the use of a predictor-corrector scheme to couple the dynamics with the physical parametrizations in the {ECMWF} model}, Type = {Tech. Memo}, Year = {2002}} @@ -1385,7 +1476,7 @@ @proceedings{beljaars_1991 Date-Added = {2018-07-27 22:06:59 +0000}, Date-Modified = {2018-07-27 22:30:21 +0000}, Organization = {ECMWF}, - Publisher = {the ECMWF Seminar on Numerical Methods in Atmospheric Models}, + Publisher = {the {ECMWF} Seminar on Numerical Methods in Atmospheric Models}, Title = {Numerical schemes for parameterizations}, Year = {1991}} @@ -1404,7 +1495,7 @@ @article{fritts_and_nastrom_1980 Date-Modified = {2018-07-26 22:42:09 +0000}, Journal = {J. Atmos. Sci.}, Pages = {111-127}, - Title = {Sources of mesoscale variability of gravity waves. Part II: frontal, convective, and jet stream excitation}, + Title = {Sources of mesoscale variability of gravity waves. {P}art {II}: frontal, convective, and jet stream excitation}, Volume = {49}, Year = {1980}} @@ -1414,14 +1505,14 @@ @proceedings{wmo_greenhouse_gas_bulletin_2017 Month = {October 2017}, Number = {13}, Organization = {World Meteorological Organization}, - Title = {WMO greenhouse gas bulletin}, + Title = {{WMO} greenhouse gas bulletin}, Year = {2017}} @article{soloviev_and_vershinsky_1982, - Author = {A.V. Soloviev and N.V. Vershinsky}, + Author = {A. V. Soloviev and N. V. Vershinsky}, Date-Added = {2018-07-22 01:43:03 +0000}, Date-Modified = {2018-07-22 01:47:32 +0000}, - Journal = {Deep Sea Research Part A. Oceanographic Research Papers}, + Journal = {Deep Sea Research {P}art {A}. Oceanographic Research Papers}, Number = {12}, Pages = {1437-1449}, Title = {The vertical structure of the thin surface layer of the ocean under conditions of low wind speed}, @@ -1440,17 +1531,17 @@ @article{zeng_and_beljaars_2005 Year = {2005}} @article{mccormack_et_al_2008, - Author = {J.P. McCormack and K.W. Hoppel and D.E. Siskind}, + Author = {J. P. McCormack and K. W. Hoppel and D. E. Siskind}, Date-Added = {2018-07-20 17:19:45 +0000}, Date-Modified = {2018-07-20 17:22:12 +0000}, Journal = {Atmos. Chem. Phys.}, Pages = {7519-7532}, - Title = {Parameterization of middle atmospheric water vapor photochemistry for high-altitude NWP and data assimilation}, + Title = {Parameterization of middle atmospheric water vapor photochemistry for high-altitude {NWP} and data assimilation}, Volume = {8}, Year = {2008}} @techreport{long_1986, - Author = {P.J. Long}, + Author = {P. J. Long}, Date-Added = {2018-07-18 22:00:29 +0000}, Date-Modified = {2018-07-18 22:03:03 +0000}, Institution = {U.S. Department of Commerce, National Oceanic and Atmospheric Administration, National Weather Service, National Meteorological Center}, @@ -1460,7 +1551,7 @@ @techreport{long_1986 Year = {1986}} @techreport{long_1984, - Author = {P.J. Long}, + Author = {P. J. Long}, Date-Added = {2018-07-18 21:57:22 +0000}, Date-Modified = {2018-07-18 22:00:25 +0000}, Institution = {U.S. Department of Commerce, National Oceanic and Atmospheric Administration, National Weather Service, National Meteorological Center}, @@ -1478,7 +1569,7 @@ @manual{miyakoda_and_sirutis_1986 Year = {1986}} @article{chen_and_lin_2011, - Author = {J.-H Chen and S.-J Lin}, + Author = {J.-H. Chen and S.-J. Lin}, Date-Added = {2018-07-18 19:04:23 +0000}, Date-Modified = {2018-07-18 19:10:04 +0000}, Journal = {Geophysical Research Letters}, @@ -1489,7 +1580,7 @@ @article{chen_and_lin_2011 Year = {2011}} @article{lord_et_al_1984, - Author = {S.J. Lord and H.E. Willoughby and J.M. Piotrowicz}, + Author = {S. J. Lord and H. E. Willoughby and J. M. Piotrowicz}, Date-Added = {2018-07-18 18:50:27 +0000}, Date-Modified = {2018-07-18 18:54:09 +0000}, Journal = {J. Atmos. Sci.}, @@ -1501,7 +1592,7 @@ @article{lord_et_al_1984 Year = {1984}} @article{krueger_et_al_1995, - Author = {S.K. Krueger and Q. Fu and K. N. Liou and H-N. S. Chin}, + Author = {S. K. Krueger and Q. Fu and K. N. Liou and H.-N. S. Chin}, Date-Added = {2018-07-18 18:46:23 +0000}, Date-Modified = {2018-07-18 18:49:52 +0000}, Journal = {Journal of Applied Meteorology}, @@ -1517,12 +1608,12 @@ @article{zheng_et_al_2017 Date-Modified = {2018-07-18 17:45:38 +0000}, Journal = {Monthly Weather Review}, Pages = {3969-3987}, - Title = {Improving the stable surface layer in the NCEP Global Forecast System}, + Title = {Improving the stable surface layer in the {NCEP} {G}lobal {F}orecast {S}ystem}, Volume = {145}, Year = {2017}} @article{hong_et_al_2004, - Author = {S-Y. Hong and J. Dudhia and S-H. Chen}, + Author = {S-Y. Hong and J. Dudhia and S.-H. Chen}, Date-Added = {2018-07-06 19:29:40 +0000}, Date-Modified = {2018-07-06 19:36:23 +0000}, Journal = {Monthly Weather Review}, @@ -1532,7 +1623,7 @@ @article{hong_et_al_2004 Year = {2004}} @article{heymsfield_and_donner_1990, - Author = {A. J. Heymsfield and L.J. Donner}, + Author = {A. J. Heymsfield and L. J. Donner}, Date-Added = {2018-07-06 18:58:01 +0000}, Date-Modified = {2018-07-06 19:00:50 +0000}, Journal = {J. Atmos. Sci.}, @@ -1548,7 +1639,7 @@ @article{deng_and_mace_2008 Date-Modified = {2018-07-06 19:01:59 +0000}, Journal = {Geophysical Research Letters}, Number = {L17808}, - Title = {Cirrus cloud microphysical properties and air motion statistics using cloud radar Doppler moments: water content, partical size, and sedimentation relationships}, + Title = {Cirrus cloud microphysical properties and air motion statistics using cloud radar {D}oppler moments: water content, partical size, and sedimentation relationships}, Volume = {35}, Year = {2008}} @@ -1558,23 +1649,23 @@ @article{lin_et_al_1994 Date-Modified = {2018-07-06 19:01:30 +0000}, Journal = {Monthly Weather Review}, Pages = {1575-1593}, - Title = {A class of the van Leer-type transport schemes and its application to the moisture transport in a general circulation model}, + Title = {A class of the van {L}eer-type transport schemes and its application to the moisture transport in a general circulation model}, Volume = {122}, Year = {1994}} @article{rutledge_and_hobbs_1984, - Author = {S.A. Rutledge and P.V. Hobbs}, + Author = {S. A. Rutledge and P. V. Hobbs}, Date-Added = {2018-07-05 16:45:48 +0000}, Date-Modified = {2018-07-05 16:49:04 +0000}, Journal = {J. Atmos. Sci.}, Number = {20}, Pages = {2949-2972}, - Title = {The mesoscale and microscale structure and organization of clouds and precipitation in midlatitude cyclones. XII: a diagnostic modeling study of precipitation development in narrow cold-frontal rainbands}, + Title = {The mesoscale and microscale structure and organization of clouds and precipitation in midlatitude cyclones. {XII}: a diagnostic modeling study of precipitation development in narrow cold-frontal rainbands}, Volume = {41}, Year = {1984}} @article{chen_and_lin_2013, - Author = {J-H. Chen and S-J. Lin}, + Author = {J.-H. Chen and S.-J. Lin}, Date-Added = {2018-07-03 18:13:27 +0000}, Date-Modified = {2018-07-03 18:17:40 +0000}, Journal = {J. Climate}, @@ -1591,7 +1682,7 @@ @inproceedings{untch_et_al_1999 Date-Modified = {2018-02-28 15:50:58 +0000}, Pages = {45-52}, Publisher = {Netherlands}, - Title = {Increased stratospheric resolution in the ECMWF forecasting system}, + Title = {Increased stratospheric resolution in the {ECMWF} forecasting system}, Year = {1999}} @article{dethof_and_holm_2004, @@ -1600,7 +1691,7 @@ @article{dethof_and_holm_2004 Date-Modified = {2018-02-26 22:56:19 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2851-2872}, - Title = {Ozone assimilation in the ERA-40 reanalysis project}, + Title = {Ozone assimilation in the {ERA-40} reanalysis project}, Volume = {130}, Year = {2004}} @@ -1629,7 +1720,7 @@ @article{john_and_buehler_2004 Date-Added = {2018-02-26 22:38:57 +0000}, Date-Modified = {2018-02-26 22:41:05 +0000}, Journal = {Geophysical Research Letters}, - Title = {The impact of ozone lines on AMSU-B radiances}, + Title = {The impact of ozone lines on {AMSU-B} radiances}, Volume = {31}, Year = {2004}} @@ -1639,7 +1730,7 @@ @article{derber_and_wu_1998 Date-Modified = {2018-02-26 22:37:30 +0000}, Journal = {Monthly Weather Review}, Pages = {2287-2299}, - Title = {The use of TOVS cloud-cleared radiances in the NCEP SSI analysis system}, + Title = {The use of {TOVS} cloud-cleared radiances in the {NCEP} {SSI} analysis system}, Volume = {126}, Year = {1998}} @@ -1708,12 +1799,12 @@ @book{pond_and_pickard_1983 Year = {1983}} @article{zeng_et_al_1998, - Author = {X. Zeng and M. Zhao and R.E. Dickinson}, + Author = {X. Zeng and M. Zhao and R. E. Dickinson}, Date-Added = {2018-02-13 23:09:56 +0000}, Date-Modified = {2018-02-13 23:12:08 +0000}, Journal = {J. Climate}, Pages = {2628-2644}, - Title = {Intercomparison of bulk aerodynamic algorithm for the comutation of sea surface Fluxes using TOGA COARE and TAO data}, + Title = {Intercomparison of bulk aerodynamic algorithm for the comutation of sea surface Fluxes using {TOGA} {COARE} and {TAO} data}, Volume = {11}, Year = {1998}} @@ -1723,7 +1814,7 @@ @article{dorman_and_sellers_1989 Date-Modified = {2018-02-01 00:02:39 +0000}, Journal = {Journal of Applied Meteorology}, Pages = {833-855}, - Title = {A global climatology of albedo, roughness length and stomatal resistance for atmospheric general circulation models as represented by the simple biosphere model (SiB)}, + Title = {A global climatology of albedo, roughness length and stomatal resistance for atmospheric general circulation models as represented by the simple biosphere model ({S}i{B})}, Volume = {28}, Year = {1989}} @@ -1733,7 +1824,7 @@ @misc{zobler_1999 Date-Modified = {2018-01-31 23:56:02 +0000}, Howpublished = {Available on-line [http://www.daac.ornl.gov]}, Month = {1999}, - Title = {Global soil types, 1-Degree Grid (Zobler). Dataset}} + Title = {Global soil types, 1-Degree Grid ({Z}obler). Dataset}} @techreport{zobler_1986, Address = {New York, New York, USA}, @@ -1746,13 +1837,13 @@ @techreport{zobler_1986 Year = {1986}} @article{hirsch_et_al_2015, - Author = {A. L. Hirsch and A.J. Pitman and J. Kala and R. Lorenz and M. G. Donat}, + Author = {A. L. Hirsch and A. J. Pitman and J. Kala and R. Lorenz and M. G. Donat}, Date-Added = {2018-01-31 23:30:18 +0000}, Date-Modified = {2018-01-31 23:32:47 +0000}, Journal = {Earth Interactions}, Number = {12}, Pages = {1-24}, - Title = {Modulation of land-use change impacts on temperature extremes via land-atmosphere coupling over Australia}, + Title = {Modulation of land-use change impacts on temperature extremes via land-atmosphere coupling over {A}ustralia}, Volume = {19}, Year = {2015}} @@ -1797,7 +1888,7 @@ @article{andersen_and_shepherd_2014 Year = {2014}} @article{guillod_et_al_2015, - Author = {B.P. Guillod and B. Orlowsky and D. G. Miralles and A. J. Teuling and S. I. Seneviratne}, + Author = {B. P. Guillod and B. Orlowsky and D. G. Miralles and A. J. Teuling and S. I. Seneviratne}, Date-Added = {2018-01-31 22:46:31 +0000}, Date-Modified = {2018-01-31 22:55:08 +0000}, Journal = {Nature Communications}, @@ -1812,7 +1903,7 @@ @article{milovac_et_al_2016 Date-Modified = {2018-01-31 22:43:31 +0000}, Journal = {J. Geophys. Res. Atmos.}, Pages = {624-649}, - Title = {Investigation of PBL schemes combining the WRF model simulations with scanning waver vapor differential absorption lidar measurements}, + Title = {Investigation of {PBL} schemes combining the {WRF} model simulations with scanning waver vapor differential absorption lidar measurements}, Volume = {121}, Year = {2016}} @@ -1822,7 +1913,7 @@ @article{paimazumder_and_done_2016 Date-Modified = {2018-01-31 22:33:52 +0000}, Journal = {J. Geophys. Res. Atmos.}, Pages = {12581-12592}, - Title = {Potential predictability sources of the 2012 U.S. drought in observations and a regional model ensemble}, + Title = {Potential predictability sources of the 2012 {U.S.} drought in observations and a regional model ensemble}, Volume = {121}, Year = {2016}} @@ -1847,7 +1938,7 @@ @article{ek_and_holtslag_2004 Year = {2004}} @article{ek_and_mahrt_1994, - Author = {M. Ek and L. Mahrt}, + Author = {M. B. Ek and L. Mahrt}, Date-Added = {2018-01-31 17:41:59 +0000}, Date-Modified = {2018-01-31 17:43:53 +0000}, Journal = {Monthly Weather Review}, @@ -1862,12 +1953,12 @@ @article{zheng_et_al_2012 Date-Modified = {2018-01-29 23:51:19 +0000}, Journal = {J. Geophys. Res.}, Number = {D06117}, - Title = {Improvement of daytime land surface skin temperature over arid regions in the NCEP GFS model and its impact on satellite data assimilation}, + Title = {Improvement of daytime land surface skin temperature over arid regions in the {NCEP} {GFS} model and its impact on satellite data assimilation}, Volume = {117}, Year = {2012}} @article{zeng_and_dickinson_1998, - Author = {X. Zeng and R.E. Dickinson}, + Author = {X. Zeng and R. E. Dickinson}, Date-Added = {2018-01-29 23:46:03 +0000}, Date-Modified = {2018-01-29 23:47:43 +0000}, Journal = {J. Climate}, @@ -1879,12 +1970,12 @@ @article{zeng_and_dickinson_1998 @conference{zheng_et_al_2009, Address = {Omaha, Nebraska}, Author = {W. Zheng and H. Wei and J. Meng and M. Ek and K. Mitchell and J. Derber and X. Zeng and Z. Wang}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBWLi4vLi4vLi4vLi4vLi4vRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGZPEQIgAAAAAAIgAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADT4djXSCsAAANl5rUfSW1wcm92ZW1lbnRfb2ZfTGFuZCMzNjVGRjBGLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2X/D9aQ780AAAAAAAAAAAAFAAMAAAkgAAAAAAAAAAAAAAAAAAAACE5PQUhfTFNNABAACAAA0+ItNwAAABEACAAA1pFSPQAAAAEAEANl5rUAD8YgAA/GDwAGL94AAgBRTWFjaW50b3NoIEhEOlVzZXJzOgBtYW4uemhhbmc6AERlc2t0b3A6AE5PQUhfTFNNOgBJbXByb3ZlbWVudF9vZl9MYW5kIzM2NUZGMEYucGRmAAAOAG4ANgBJAG0AcAByAG8AdgBlAG0AZQBuAHQAXwBvAGYAXwBMAGEAbgBkAF8AUwB1AHIAZgBhAGMAZQBfAFMAawBpAG4AXwBUAGUAbQBwAGUAcgBhAHQAdQByAGUAXwBpAG4AXwBOAEMALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAFdVc2Vycy9tYW4uemhhbmcvRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGYAABMAAS8AABUAAgAQ//8AAAAIAA0AGgAkAH0AAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACoQ==}, Date-Added = {2018-01-26 22:19:06 +0000}, Date-Modified = {2018-01-29 23:51:37 +0000}, - Organization = {The 23rd Conference on Weather Analysis and Forecasting (WAF)/19th Conference on Numerical Weather Prediction(NWP)}, - Title = {Improvement of land surface skin temperature in NCEP Operational NWP models and its impact on satellite Data Assimilation}, - Year = {2009}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBWLi4vLi4vLi4vLi4vLi4vRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGZPEQIgAAAAAAIgAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADT4djXSCsAAANl5rUfSW1wcm92ZW1lbnRfb2ZfTGFuZCMzNjVGRjBGLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2X/D9aQ780AAAAAAAAAAAAFAAMAAAkgAAAAAAAAAAAAAAAAAAAACE5PQUhfTFNNABAACAAA0+ItNwAAABEACAAA1pFSPQAAAAEAEANl5rUAD8YgAA/GDwAGL94AAgBRTWFjaW50b3NoIEhEOlVzZXJzOgBtYW4uemhhbmc6AERlc2t0b3A6AE5PQUhfTFNNOgBJbXByb3ZlbWVudF9vZl9MYW5kIzM2NUZGMEYucGRmAAAOAG4ANgBJAG0AcAByAG8AdgBlAG0AZQBuAHQAXwBvAGYAXwBMAGEAbgBkAF8AUwB1AHIAZgBhAGMAZQBfAFMAawBpAG4AXwBUAGUAbQBwAGUAcgBhAHQAdQByAGUAXwBpAG4AXwBOAEMALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAFdVc2Vycy9tYW4uemhhbmcvRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGYAABMAAS8AABUAAgAQ//8AAAAIAA0AGgAkAH0AAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACoQ==}} + Organization = {The 23rd Conference on Weather Analysis and Forecasting ({WAF})/19th Conference on Numerical Weather Prediction({NWP})}, + Title = {Improvement of land surface skin temperature in {NCEP} Operational {NWP} models and its impact on satellite Data Assimilation}, + Year = {2009}} @article{chen_et_al_1997, Author = {F. Chen and Z. Janjic and K. Mitchell}, @@ -1893,7 +1984,7 @@ @article{chen_et_al_1997 Journal = {Boundary-Layer Meteorology}, Number = {3}, Pages = {391-421}, - Title = {Impact of atmospheric surface-layer parameterizations in the new land-surface scheme of the NCEP mesoscale Eta model}, + Title = {Impact of atmospheric surface-layer parameterizations in the new land-surface scheme of the {NCEP} mesoscale {E}ta model}, Volume = {85}, Year = {1997}} @@ -1922,7 +2013,7 @@ @article{arakawa_and_wu_2013 Date-Modified = {2018-01-24 18:57:10 +0000}, Journal = {J. Atmos. Sci.}, Pages = {1977-1992}, - Title = {A unified representation of deep moist convection in numerical modeling of the atmosphere. Part I}, + Title = {A unified representation of deep moist convection in numerical modeling of the atmosphere. {P}art {I}}, Volume = {70}, Year = {2013}} @@ -1932,12 +2023,12 @@ @article{han_et_al_2017 Date-Modified = {2018-01-24 18:53:21 +0000}, Journal = {Weather and Forecasting}, Pages = {2005-2017}, - Title = {Updates in the NCEP GFS cumulus convective schemes with scale and aerosol awareness}, + Title = {Updates in the {NCEP} {GFS} cumulus convective schemes with scale and aerosol awareness}, Volume = {32}, Year = {2017}} @article{grell_and_freitas_2014, - Author = {G.A. Grell and S.R. Freitas}, + Author = {G. A. Grell and S. R. Freitas}, Date-Added = {2018-01-24 18:44:56 +0000}, Date-Modified = {2018-01-24 18:47:21 +0000}, Journal = {Atmos. Chem. Phys.}, @@ -1953,7 +2044,7 @@ @article{Koren_et_al_1999 Journal = {J. Geophys. Res.}, Number = {D16}, Pages = {19569-19585}, - Title = {A parameterization of snowpack and frozen ground intended for NCEP weather and climate models}, + Title = {A parameterization of snowpack and frozen ground intended for {NCEP} weather and climate models}, Volume = {104}, Year = {1999}} @@ -1964,7 +2055,7 @@ @article{ek_et_al_2003 Journal = {J. Geophys. Res.}, Number = {D22}, Pages = {8851}, - Title = {Implementation of Noah land-surface model advances in the NCEP operational mesoscale Eta model}, + Title = {Implementation of {N}oah land-surface model advances in the {NCEP} operational mesoscale {E}ta model}, Volume = {108}, Year = {2003}} @@ -1985,7 +2076,7 @@ @article{raisanen_and_barker_2004 Date-Modified = {2016-10-11 20:53:35 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2069-2085}, - Title = {Evaluation and optimization of sampling errors for the Monte Carlo Independent Column Approximation}, + Title = {Evaluation and optimization of sampling errors for the {M}onte {C}arlo {I}ndependent {C}olumn {A}pproximation}, Volume = {130}, Year = {2004}} @@ -2016,7 +2107,7 @@ @article{raisanen_2002 Date-Modified = {2016-10-11 20:41:23 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2397-2416}, - Title = {Two-stream approximations revisited: A new improvement and tests with GCM data}, + Title = {Two-stream approximations revisited: A new improvement and tests with {GCM} data}, Volume = {128}, Year = {2002}} @@ -2031,13 +2122,13 @@ @article{king_and_harshvardhan_1986 Year = {1986}} @url{Li_2015, - Author = {Xu Li}, + Author = {X. Li}, Title = {The development of the NSST within the NCEP GFS/CFS}, Url = {http://cpo.noaa.gov/sites/cpo/MAPP/workshops/rtf_technical_ws/presentations/21_Xu_Li.pdf}, Bdsk-Url-1 = {http://cpo.noaa.gov/sites/cpo/MAPP/workshops/rtf_technical_ws/presentations/21_Xu_Li.pdf}} @webpage{li_and_derber_2009, - Author = {Xu Li and John Derber}, + Author = {X. Li and J. Derber}, Date-Modified = {2020-02-24 17:06:35 +0000}, Title = {Near Sea Surface Temperatures (NSST) Analysis in NCEP GFS}, Url = {http://data.jcsda.org/Workshops/6th-workshop-onDA/Session-4/JCSDA_2008_Li.pdf}, @@ -2086,7 +2177,7 @@ @article{liou_1973 Date-Modified = {2016-06-21 17:22:03 +0000}, Journal = {Journal of the Atmospheric Sciences}, Pages = {1303-1326}, - Title = {A numerical experiment on Chandrasekhar's discrete-ordinate method for radiative transfer: Applications to cloudy and hazy atmospheres}, + Title = {A numerical experiment on {C}handrasekhar's discrete-ordinate method for radiative transfer: Applications to cloudy and hazy atmospheres}, Volume = {30}, Year = {1973}} @@ -2106,23 +2197,24 @@ @article{joseph_et_al_1976 Date-Modified = {2016-06-21 16:50:31 +0000}, Journal = {Journal of the Atmospheric Sciences}, Pages = {2452-2459}, - Title = {The Delta-Eddington approximation for radiative flux transfer}, + Title = {The {D}elta-{E}ddington approximation for radiative flux transfer}, Volume = {33}, Year = {1976}} @article{iacono_et_al_2008, Annote = {doi:10.1029/2008JD009944}, - Author = {M.J. Iacono and J.S. Delamere and E.J. Mlawer and M. W. Shephard and S. A. Clough and W.D. Collins}, + Author = {M. J. Iacono and J. S. Delamere and E. J. Mlawer and M. W. Shephard and S. A. Clough and W. D. Collins}, Date-Added = {2016-06-19 23:25:28 +0000}, Date-Modified = {2016-06-19 23:32:46 +0000}, Journal = {J. Geophys. Res.}, - Title = {Radiative forcing by long-lived greenhouse gases: Calculations with the AER radiative transfer models}, + Title = {Radiative forcing by long-lived greenhouse gases: Calculations with the {AER} radiative transfer models}, Volume = {113}, Year = {2008}} @article{grant_2001, Abstract = {A closure for the fluxes of mass, heat, and moisture at cloud base in the cumulus-capped boundary layer is developed. The cloud-base mass flux is obtained from a simplifed turbulence kinetic energy (TKE) budget for the sub-cloud layer, in which cumulus convection is assumed to be associated with a transport of TKE from the sub-cloud layer to the cloud layer.The heat and moisture fluxes are obtained from a jump model based on the virtual-potential-temperature equation. A key part of this parametrization is the parametrization of the virtual-temperature flux at the top of the transition zone between the sub-cloud and cloud layers.It is argued that pressure fluctuations must be responsible for the transport of TKE from the cloud layer to the sub-cloud layer.}, Author = {A. L. M. Grant}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JhbnQvMjAwMS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoiV4IMjAwMS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgJuNOHLk4AAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyYW50AAAQAAgAANHneLIAAAARAAgAANOHgq4AAAABABgAKIleAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyYW50OgAyMDAxLnBkZgAADgASAAgAMgAwADAAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmFudC8yMDAxLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-06-15 22:11:22 +0000}, Date-Modified = {2018-07-06 19:02:34 +0000}, Doi = {10.1002/qj.49712757209}, @@ -2136,13 +2228,13 @@ @article{grant_2001 Url = {http://dx.doi.org/10.1002/qj.49712757209}, Volume = {127}, Year = {2001}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JhbnQvMjAwMS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoiV4IMjAwMS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgJuNOHLk4AAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyYW50AAAQAAgAANHneLIAAAARAAgAANOHgq4AAAABABgAKIleAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyYW50OgAyMDAxLnBkZgAADgASAAgAMgAwADAAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmFudC8yMDAxLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712757209}} @article{zhang_and_wu_2003, Abstract = {Abstract This study uses a 2D cloud-resolving model to investigate the vertical transport of horizontal momentum and to understand the role of a convection-generated perturbation pressure field in the momentum transport by convective systems during part of the Tropical Ocean and Global Atmosphere Coupled Ocean?Atmosphere Response Experiment (TOGA COARE) Intensive Observation Period. It shows that convective updrafts transport a significant amount of momentum vertically. This transport is downgradient in the easterly wind regime, but upgradient during a westerly wind burst. The differences in convective momentum transport between easterly and westerly wind regimes are examined. The perturbation pressure gradient accounts for an important part of the apparent momentum source. In general it is opposite in sign to the product of cloud mass flux and the vertical wind shear, with smaller magnitude. Examination of the dynamic forcing to the pressure field demonstrates that the linear forcing representing the interaction between the convective updrafts and the large-scale wind shear is the dominant term, while the nonlinear forcing is of secondary importance. Thus, parameterization schemes taking into account the linear interaction between the convective updrafts and the large-scale wind shear can capture the essential features of the perturbation pressure field. The parameterization scheme for momentum transport by Zhang and Cho is evaluated using the model simulation data. The parameterized pressure gradient force using the scheme is in excellent agreement with the simulated one. The parameterized apparent momentum source is also in good agreement with the model simulation. Other parameterization methods for the pressure gradient are also discussed.}, Annote = {doi: 10.1175/1520-0469(2003)060<1120:CMTAPP>2.0.CO;2}, - Author = {Zhang, Guang J. and Wu, Xiaoqing}, + Author = {Zhang, G. J. and Wu, X. Q.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvWmhhbmcvMjAwMy5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqjuYIMjAwMy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrUP9K0L8MAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVpoYW5nAAAQAAgAANHneLIAAAARAAgAANK0kjMAAAABABgAKo7mAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFpoYW5nOgAyMDAzLnBkZgAADgASAAgAMgAwADAAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9aaGFuZy8yMDAzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {2003/05/01}, Date-Added = {2016-06-14 23:39:50 +0000}, @@ -2161,13 +2253,13 @@ @article{zhang_and_wu_2003 Url = {http://dx.doi.org/10.1175/1520-0469(2003)060<1120:CMTAPP>2.0.CO;2}, Volume = {60}, Year = {2003}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvWmhhbmcvMjAwMy5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqjuYIMjAwMy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrUP9K0L8MAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVpoYW5nAAAQAAgAANHneLIAAAARAAgAANK0kjMAAAABABgAKo7mAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFpoYW5nOgAyMDAzLnBkZgAADgASAAgAMgAwADAAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9aaGFuZy8yMDAzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(2003)060%3C1120:CMTAPP%3E2.0.CO;2}} @article{fritsch_and_chappell_1980, Abstract = {Abstract A parameterization formulation for incorporating the effects of midlatitude deep convection into mesoscale-numerical models is presented. The formulation is based on the hypothesis that the buoyant energy available to a parcel, in combination with a prescribed period of time for the convection to remove that energy, can be used to regulate the amount of convection in a mesoscale numerical model grid element. Individual clouds are represented as entraining moist updraft and downdraft plumes. The fraction of updraft condensate evaporated in moist downdrafts is determined from an empirical relationship between the vertical shear of the horizontal wind and precipitation efficiency. Vertical transports of horizontal momentum and warming by compensating subsidence are included in the parameterization. Since updraft and downdraft areas are sometimes a substantial fraction of mesoscale model grid-element areas, grid-point temperatures (adjusted for convection) are an area-weighted mean of updraft, downdraft and environmental temperatures.}, Annote = {doi: 10.1175/1520-0469(1980)037<1722:NPOCDM>2.0.CO;2}, Author = {Fritsch, J. M. and Chappell, C. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvRnJpdHNjaC8xOTgwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAARCuMwgxOTgwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEKs103xvpgAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHRnJpdHNjaAAAEAAIAADR53iyAAAAEQAIAADTfMQGAAAAAQAYARCuMwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBGcml0c2NoOgAxOTgwLnBkZgAADgASAAgAMQA5ADgAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Gcml0c2NoLzE5ODAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {1980/08/01}, Date = {1980/08/01}, @@ -2182,18 +2274,18 @@ @article{fritsch_and_chappell_1980 Number = {8}, Pages = {1722--1733}, Publisher = {American Meteorological Society}, - Title = {Numerical Prediction of Convectively Driven Mesoscale Pressure Systems. Part I: Convective Parameterization}, + Title = {Numerical Prediction of Convectively Driven Mesoscale Pressure Systems. {P}art {I}: Convective Parameterization}, Ty = {JOUR}, Url = {http://dx.doi.org/10.1175/1520-0469(1980)037<1722:NPOCDM>2.0.CO;2}, Volume = {37}, Year = {1980}, Year1 = {1980}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvRnJpdHNjaC8xOTgwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAARCuMwgxOTgwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEKs103xvpgAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHRnJpdHNjaAAAEAAIAADR53iyAAAAEQAIAADTfMQGAAAAAQAYARCuMwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBGcml0c2NoOgAxOTgwLnBkZgAADgASAAgAMQA5ADgAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Gcml0c2NoLzE5ODAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(1980)037%3C1722:NPOCDM%3E2.0.CO;2}} @article{bechtold_et_al_2008, - Abstract = {Advances in simulating atmospheric variability with the ECMWF model are presented that stem from revisions of the convection and diffusion parametrizations. The revisions concern in particular the introduction of a variable convective adjustment time-scale, a convective entrainment rate proportional to the environmental relative humidity, as well as free tropospheric diffusion coefficients for heat and momentum based on Monin--Obukhov functional dependencies.The forecasting system is evaluated against analyses and observations using high-resolution medium-range deterministic and ensemble forecasts, monthly and seasonal integrations, and decadal integrations with coupled atmosphere-ocean models. The results show a significantly higher and more realistic level of model activity in terms of the amplitude of tropical and extratropical mesoscale, synoptic and planetary perturbations. Importantly, with the higher variability and reduced bias not only the probabilistic scores are improved, but also the midlatitude deterministic scores in the short and medium ranges. Furthermore, for the first time the model is able to represent a realistic spectrum of convectively coupled equatorial Kelvin and Rossby waves, and maintains a realistic amplitude of the Madden--Julian oscillation (MJO) during monthly forecasts. However, the propagation speed of the MJO is slower than observed. The higher tropical tropospheric wave activity also results in better stratospheric temperatures and winds through the deposition of momentum.The partitioning between convective and resolved precipitation is unaffected by the model changes with roughly 62% of the total global precipitation being of the convective type. Finally, the changes in convection and diffusion parametrizations resulted in a larger spread of the ensemble forecasts, which allowed the amplitude of the initial perturbations in the ensemble prediction system to decrease by 30%. Copyright {\copyright} 2008 Royal Meteorological Society}, - Author = {Bechtold, Peter and K{\"o}hler, Martin and Jung, Thomas and Doblas-Reyes, Francisco and Leutbecher, Martin and Rodwell, Mark J. and Vitart, Frederic and Balsamo, Gianpaolo}, + Abstract = {Advances in simulating atmospheric variability with the {ECMWF} model are presented that stem from revisions of the convection and diffusion parametrizations. The revisions concern in particular the introduction of a variable convective adjustment time-scale, a convective entrainment rate proportional to the environmental relative humidity, as well as free tropospheric diffusion coefficients for heat and momentum based on Monin--Obukhov functional dependencies.The forecasting system is evaluated against analyses and observations using high-resolution medium-range deterministic and ensemble forecasts, monthly and seasonal integrations, and decadal integrations with coupled atmosphere-ocean models. The results show a significantly higher and more realistic level of model activity in terms of the amplitude of tropical and extratropical mesoscale, synoptic and planetary perturbations. Importantly, with the higher variability and reduced bias not only the probabilistic scores are improved, but also the midlatitude deterministic scores in the short and medium ranges. Furthermore, for the first time the model is able to represent a realistic spectrum of convectively coupled equatorial Kelvin and Rossby waves, and maintains a realistic amplitude of the Madden--Julian oscillation (MJO) during monthly forecasts. However, the propagation speed of the MJO is slower than observed. The higher tropical tropospheric wave activity also results in better stratospheric temperatures and winds through the deposition of momentum.The partitioning between convective and resolved precipitation is unaffected by the model changes with roughly 62% of the total global precipitation being of the convective type. Finally, the changes in convection and diffusion parametrizations resulted in a larger spread of the ensemble forecasts, which allowed the amplitude of the initial perturbations in the ensemble prediction system to decrease by 30%. Copyright {\copyright} 2008 Royal Meteorological Society}, + Author = {Bechtold, P. and K{\"o}hler, M. and Jung, T. and Doblas-Reyes, F. and Leutbecher, M. and Rodwell, M. J. and Vitart, F. and Balsamo, G.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAobfkIMjAwOC5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARZce9OEjEwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJlY2h0b2xkABAACAAA0ed4sgAAABEACAAA04TgrAAAAAEAGAAobfkAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQmVjaHRvbGQ6ADIwMDgucGRmAA4AEgAIADIAMAAwADgALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-06-14 23:11:58 +0000}, Date-Modified = {2016-06-14 23:11:58 +0000}, Doi = {10.1002/qj.289}, @@ -2203,16 +2295,16 @@ @article{bechtold_et_al_2008 Number = {634}, Pages = {1337--1351}, Publisher = {John Wiley & Sons, Ltd.}, - Title = {Advances in simulating atmospheric variability with the ECMWF model: From synoptic to decadal time-scales}, + Title = {Advances in simulating atmospheric variability with the {ECMWF} model: From synoptic to decadal time-scales}, Url = {http://dx.doi.org/10.1002/qj.289}, Volume = {134}, Year = {2008}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAobfkIMjAwOC5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARZce9OEjEwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJlY2h0b2xkABAACAAA0ed4sgAAABEACAAA04TgrAAAAAEAGAAobfkAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQmVjaHRvbGQ6ADIwMDgucGRmAA4AEgAIADIAMAAwADgALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.289}} @article{han_and_pan_2011, Annote = {doi: 10.1175/WAF-D-10-05038.1}, - Author = {Han, Jongil and Pan, Hua-Lu}, + Author = {Han, J. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMTEucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMTEucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC1cfTGvlvAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0xtNzwAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDExLnBkZgAADgASAAgAMgAwADEAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAxMS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Booktitle = {Weather and Forecasting}, Da = {2011/08/01}, Date = {2011/08/01}, @@ -2227,28 +2319,28 @@ @article{han_and_pan_2011 Number = {4}, Pages = {520--533}, Publisher = {American Meteorological Society}, - Title = {Revision of Convection and Vertical Diffusion Schemes in the NCEP Global Forecast System}, + Title = {Revision of Convection and Vertical Diffusion Schemes in the {NCEP} {G}lobal {F}orecast {S}ystem}, Ty = {JOUR}, Url = {http://dx.doi.org/10.1175/WAF-D-10-05038.1}, Volume = {26}, Year = {2011}, Year1 = {2011}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMTEucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMTEucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC1cfTGvlvAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0xtNzwAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDExLnBkZgAADgASAAgAMgAwADEAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAxMS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/WAF-D-10-05038.1}} @article{pan_and_wu_1995, - Author = {Pan, H. -L. and W.-S. Wu}, + Author = {Pan, H.-L. and W.-S. Wu}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvUGFuLzE5OTUucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAwtTNCDE5OTUucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCtU/TGvMJAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANQYW4AABAACAAA0ed4sgAAABEACAAA0xtHaQAAAAEAGADC1M0AKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAUGFuOgAxOTk1LnBkZgAADgASAAgAMQA5ADkANQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9QYW4vMTk5NS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Date-Added = {2016-06-14 23:06:41 +0000}, Date-Modified = {2016-06-14 23:06:41 +0000}, Journal = {NMC Office Note, No. 409}, Pages = {40pp}, - Title = {Implementing a Mass Flux Convection Parameterization Package for the NMC Medium-Range Forecast Model}, - Year = {1995}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvUGFuLzE5OTUucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAwtTNCDE5OTUucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCtU/TGvMJAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANQYW4AABAACAAA0ed4sgAAABEACAAA0xtHaQAAAAEAGADC1M0AKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAUGFuOgAxOTk1LnBkZgAADgASAAgAMQA5ADkANQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9QYW4vMTk5NS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}} + Title = {Implementing a Mass Flux Convection Parameterization Package for the {NMC} Medium-Range Forecast Model}, + Year = {1995}} @article{grell_1993, Annote = {doi: 10.1175/1520-0493(1993)121<0764:PEOAUB>2.0.CO;2}, - Author = {Grell, Georg A.}, + Author = {Grell, G. A.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JlbGwvMTk5My5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoie0IMTk5My5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK4dtMa9LMAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyZWxsAAAQAAgAANHneLIAAAARAAgAANMbSRMAAAABABgAKIntAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyZWxsOgAxOTkzLnBkZgAADgASAAgAMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmVsbC8xOTkzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Booktitle = {Monthly Weather Review}, Da = {1993/03/01}, Date = {1993/03/01}, @@ -2269,11 +2361,11 @@ @article{grell_1993 Volume = {121}, Year = {1993}, Year1 = {1993}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JlbGwvMTk5My5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoie0IMTk5My5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK4dtMa9LMAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyZWxsAAAQAAgAANHneLIAAAARAAgAANMbSRMAAAABABgAKIntAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyZWxsOgAxOTkzLnBkZgAADgASAAgAMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmVsbC8xOTkzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0493(1993)121%3C0764:PEOAUB%3E2.0.CO;2}} @article{arakawa_and_schubert_1974, - Author = {Arakawa, A and Schubert, WH}, + Author = {Arakawa, A. and Schubert, W. H.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQXJha2F3YS8xOTc0LnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAChtVQgxOTc0LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKG1ctM8h9AAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHQXJha2F3YQAAEAAIAADR53iyAAAAEQAIAAC0z4RkAAAAAQAYAChtVQAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBBcmFrYXdhOgAxOTc0LnBkZgAADgASAAgAMQA5ADcANAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9BcmFrYXdhLzE5NzQucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Date-Added = {2016-06-14 23:04:30 +0000}, Date-Modified = {2018-07-18 19:00:17 +0000}, Isi = {A1974S778800004}, @@ -2283,10 +2375,9 @@ @article{arakawa_and_schubert_1974 Journal = {Journal of the Atmospheric Sciences}, Pages = {674--701}, Times-Cited = {1300}, - Title = {Interaction of a cumulus cloud ensemble with the large-scale environment, Part I}, + Title = {Interaction of a cumulus cloud ensemble with the large-scale environment, {P}art {I}}, Volume = {31}, Year = {1974}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQXJha2F3YS8xOTc0LnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAChtVQgxOTc0LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKG1ctM8h9AAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHQXJha2F3YQAAEAAIAADR53iyAAAAEQAIAAC0z4RkAAAAAQAYAChtVQAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBBcmFrYXdhOgAxOTc0LnBkZgAADgASAAgAMQA5ADcANAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9BcmFrYXdhLzE5NzQucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1974S778800004}} @article{harshvardhan_et_al_1989, @@ -2317,7 +2408,7 @@ @article{mccormack_et_al_2006 Date-Modified = {2016-06-06 17:37:45 +0000}, Journal = {Atmos. Chem. Phys.}, Pages = {4943-4972}, - Title = {CHEM2D-OPP: A new linearized gas-phase ozone photochemistry parameterization for high-altitude NWP and climate models}, + Title = {{CHEM2D-OPP}: A new linearized gas-phase ozone photochemistry parameterization for high-altitude {NWP} and climate models}, Volume = {6}, Year = {2006}} @@ -2327,7 +2418,7 @@ @article{kim_1996 Date-Modified = {2016-06-01 20:21:44 +0000}, Journal = {J. Climate}, Pages = {2698-2717}, - Title = {Representation of subgrid-scale orographic effects in a general circulation model. Part I: Impact on the dynamics of simulated January climate}, + Title = {Representation of subgrid-scale orographic effects in a general circulation model. {P}art {I}: Impact on the dynamics of simulated January climate}, Volume = {9}, Year = {1996}} @@ -2411,7 +2502,7 @@ @inbook{sundqvist_1988 Date-Modified = {2016-05-24 23:03:22 +0000}, Pages = {433-461}, Publisher = {M. E. Schlesinger, Ed., Reidel}, - Title = {Physically-based modeling and simulation of climate and climatic changes, Part I}, + Title = {Physically-based modeling and simulation of climate and climatic changes, {P}art {I}}, Year = {1988}} @misc{Rogers_1979, @@ -2445,22 +2536,22 @@ @booklet{kessler_1969 Year = {1969}} @article{rutledge_and_hobbs_1983, - Author = {S.A. Rutledge and P.V. Hobbs}, + Author = {S. A. Rutledge and P. V. Hobbs}, Date-Added = {2016-05-24 04:07:48 +0000}, Date-Modified = {2016-05-24 04:10:43 +0000}, Journal = {J. Atmos. Sci.}, Pages = {1185-1206}, - Title = {The mesoscale and microscale structure and organization of clouds and precipitation in mid-latitude cyclones. VIII: A model for the 'seeder-feeder' process in warm-frontal rainbands}, + Title = {The mesoscale and microscale structure and organization of clouds and precipitation in mid-latitude cyclones. {VIII}: A model for the 'seeder-feeder' process in warm-frontal rainbands}, Volume = {40}, Year = {1983}} @article{zhao_and_carr_1997, - Author = {Q. Zhao and F.H. Carr}, + Author = {Q. Zhao and F. H. Carr}, Date-Added = {2016-05-24 03:57:40 +0000}, Date-Modified = {2016-05-24 04:02:27 +0000}, Journal = {Monthly Weather Review}, Pages = {1931-1953}, - Title = {A prognostic cloud scheme for operational NWP models}, + Title = {A prognostic cloud scheme for operational {NWP} models}, Volume = {125}, Year = {1997}} @@ -2492,7 +2583,7 @@ @article{chun_et_al_2004 Journal = {J. Climate}, Keywords = {convective gwd}, Pages = {3530-3547}, - Title = {Impact of a convectively forced gravity wave drag parameterization in NCAR CCM3}, + Title = {Impact of a convectively forced gravity wave drag parameterization in {NCAR CCM3}}, Volume = {17}, Year = {2004}} @@ -2508,7 +2599,7 @@ @article{chun_and_baik_1998 Year = {1998}} @article{akmaev_1991, - Author = {R.A. Akmaev}, + Author = {R. A. Akmaev}, Date-Added = {2016-05-20 20:41:25 +0000}, Date-Modified = {2016-05-20 20:44:22 +0000}, Journal = {Monthly Weather Review}, @@ -2519,7 +2610,8 @@ @article{akmaev_1991 @article{siebesma_et_al_2007, Abstract = {A better conceptual understanding and more realistic parameterizations of convective boundary layers in climate and weather prediction models have been major challenges in meteorological research. In particular, parameterizations of the dry convective boundary layer, in spite of the absence of water phase-changes and its consequent simplicity as compared to moist convection, typically suffer from problems in attempting to represent realistically the boundary layer growth and what is often referred to as countergradient fluxes. The eddy-diffusivity (ED) approach has been relatively successful in representing some characteristics of neutral boundary layers and surface layers in general. The mass-flux (MF) approach, on the other hand, has been used for the parameterization of shallow and deep moist convection. In this paper, a new approach that relies on a combination of the ED and MF parameterizations (EDMF) is proposed for the dry convective boundary layer. It is shown that the EDMF approach follows naturally from a decomposition of the turbulent fluxes into 1) a part that includes strong organized updrafts, and 2) a remaining turbulent field. At the basis of the EDMF approach is the concept that nonlocal subgrid transport due to the strong updrafts is taken into account by the MF approach, while the remaining transport is taken into account by an ED closure. Large-eddy simulation (LES) results of the dry convective boundary layer are used to support the theoretical framework of this new approach and to determine the parameters of the EDMF model. The performance of the new formulation is evaluated against LES results, and it is shown that the EDMF closure is able to reproduce the main properties of dry convective boundary layers in a realistic manner. Furthermore, it will be shown that this approach has strong advantages over the more traditional countergradient approach, especially in the entrainment layer. As a result, this EDMF approach opens the way to parameterize the clear and cumulus-topped boundary layer in a simple and unified way.}, - Author = {Siebesma, A. Pier and Soares, Pedro M. M. and Teixeira, Joao}, + Author = {Siebesma, A. P. and Soares, P. M. M. and Teixeira, J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqYEwIMjAwNy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACphyMc7+4hQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAACFNpZWJlc21hABAACAAA0ed4sgAAABEACAAAxzxd+AAAAAEAGAAqYEwAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAU2llYmVzbWE6ADIwMDcucGRmAA4AEgAIADIAMAAwADcALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {DOI 10.1175/JAS3888.1}, @@ -2533,12 +2625,12 @@ @article{siebesma_et_al_2007 Title = {A combined eddy-diffusivity mass-flux approach for the convective boundary layer}, Volume = {64}, Year = {2007}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqYEwIMjAwNy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACphyMc7+4hQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAACFNpZWJlc21hABAACAAA0ed4sgAAABEACAAAxzxd+AAAAAEAGAAqYEwAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAU2llYmVzbWE6ADIwMDcucGRmAA4AEgAIADIAMAAwADcALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/000245742600011}} @article{soares_et_al_2004, Abstract = {Recently, a new consistent way of parametrizing simultaneously local and non-local turbulent transport for the convective atmospheric boundary layer has been proposed and tested for the clear boundary layer. This approach assumes that in the convective boundary layer the subgrid-scale fluxes result from two different mixing scales: small eddies, that are parametrized by an eddy-diffusivity approach, and thermals, which are represented by a mass-flux contribution. Since the interaction between the cloud layer and the underlying sub-cloud layer predominantly takes place through strong updraughts, this approach offers an interesting avenue of establishing a unified description of the turbulent transport in the cumulus-topped boundary layer. This paper explores the possibility of such a new approach for the cumulus-topped boundary layer. In the sub-cloud and cloud layers, the mass-flux term represents the effect of strong updraughts. These are modelled by a simple entraining parcel, which determines the mean properties of the strong updraughts, the boundary-layer height, the lifting condensation level and cloud top. The residual smaller-scale turbulent transport is parametrized with an eddy-diffusivity approach that uses a turbulent kinetic energy closure. The new scheme is implemented and tested in the research model MesoNH. Copyright {\copyright} 2004 Royal Meteorological Society}, Author = {Soares, P. M. M. and Miranda, P. M. A. and Siebesma, A. P. and Teixeira, J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBCLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmTxEBxgAAAAABxgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWIC2CDIwMDQucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYf6DSsqNwAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAAZTb2FyZXMAEAAIAADR53iyAAAAEQAIAADSswXgAAAAAQAYAFiAtgAobJYAKGyLAChnewAbXgcAAphcAAIAXE1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBTb2FyZXM6ADIwMDQucGRmAA4AEgAIADIAMAAwADQALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAElVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmAAATAAEvAAAVAAIADf//AAAACAANABoAJABpAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjM=}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {10.1256/qj.03.223}, @@ -2552,11 +2644,11 @@ @article{soares_et_al_2004 Url = {http://dx.doi.org/10.1256/qj.03.223}, Volume = {130}, Year = {2004}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBCLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmTxEBxgAAAAABxgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWIC2CDIwMDQucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYf6DSsqNwAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAAZTb2FyZXMAEAAIAADR53iyAAAAEQAIAADSswXgAAAAAQAYAFiAtgAobJYAKGyLAChnewAbXgcAAphcAAIAXE1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBTb2FyZXM6ADIwMDQucGRmAA4AEgAIADIAMAAwADQALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAElVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmAAATAAEvAAAVAAIADf//AAAACAANABoAJABpAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjM=}, Bdsk-Url-1 = {http://dx.doi.org/10.1256/qj.03.223}} @article{troen_and_mahrt_1986, - Author = {Troen, IB and Mahrt, L.}, + Author = {Troen, I. B. and Mahrt, L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvVHJvZW4vMTk4Ni5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAABNeegIMTk4Ni5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13kNKUWwUAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVRyb2VuAAAQAAgAANHneLIAAAARAAgAANKUvXUAAAABABgATXnoAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFRyb2VuOgAxOTg2LnBkZgAADgASAAgAMQA5ADgANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Ucm9lbi8xOTg2LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {10.1007/BF00122760}, @@ -2570,13 +2662,13 @@ @article{troen_and_mahrt_1986 Url = {http://dx.doi.org/10.1007/BF00122760}, Volume = {37}, Year = {1986}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvVHJvZW4vMTk4Ni5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAABNeegIMTk4Ni5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13kNKUWwUAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVRyb2VuAAAQAAgAANHneLIAAAARAAgAANKUvXUAAAABABgATXnoAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFRyb2VuOgAxOTg2LnBkZgAADgASAAgAMQA5ADgANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Ucm9lbi8xOTg2LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1007/BF00122760}} @article{macvean_and_mason_1990, Abstract = {Abstract In a recent paper, Kuo and Schubert demonstrated the lack of observational support for the relevance of the criterion for cloud-top entrainment instability proposed by Randall and by Deardorff. Here we derive a new criterion, based on a model of the instability as resulting from the energy released close to cloud top, by Mixing between saturated boundary-layer air and unsaturated air from above the capping inversion. The condition is derived by considering the net conversion from potential to kinetic energy in a system consisting of two layers of fluid straddling cloud-top, when a small amount of mixing occurs between these layers. This contrasts with previous analyses, which only considered the change in buoyancy of the cloud layer when unsaturated air is mixed into it. In its most general form, this new criterion depends on the ratio of the depths of the layers involved in the mixing. It is argued that, for a self-sustaining instability, there must be a net release of kinetic energy on the same depth and time scales as the entrainment process itself. There are two plausible ways in which this requirement may be satisfied. Either one takes the depths of the layers involved in the mixing to each be comparable to the vertical scale of the entrainment process, which is typically of order tens of meters or less, or alternatively, one must allow for the efficiency with which energy released by mixing through a much deeper lower layer becomes available to initiate further entrainment. In both cases the same criterion for instability results. This criterion is much more restrictive than that proposed by Randall and by Deardorff; furthermore, the observational data is then consistent with the predictions of the current theory. Further analysis provides estimates of the turbulent fluxes associated with cloud-top entrainment instability. This analysis effectively constitutes an energetically consistent turbulence closure for models of boundary layers with cloud. The implications for such numerical models are discussed. Comparisons are also made with other possible criteria for cloud-top entrainment instability which have recently been suggested.}, Annote = {doi: 10.1175/1520-0469(1990)047<1012:CTEITS>2.0.CO;2}, Author = {MacVean, M. K. and Mason, P. J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTWFjVmVhbi8xOTkwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAFx8zwgxOTkwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXHyn0rkkRQAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHTWFjVmVhbgAAEAAIAADR53iyAAAAEQAIAADSuYa1AAAAAQAYAFx8zwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBNYWNWZWFuOgAxOTkwLnBkZgAADgASAAgAMQA5ADkAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9NYWNWZWFuLzE5OTAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {1990/04/01}, Date-Added = {2016-05-20 17:16:05 +0000}, @@ -2595,11 +2687,11 @@ @article{macvean_and_mason_1990 Url = {http://dx.doi.org/10.1175/1520-0469(1990)047<1012:CTEITS>2.0.CO;2}, Volume = {47}, Year = {1990}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTWFjVmVhbi8xOTkwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAFx8zwgxOTkwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXHyn0rkkRQAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHTWFjVmVhbgAAEAAIAADR53iyAAAAEQAIAADSuYa1AAAAAQAYAFx8zwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBNYWNWZWFuOgAxOTkwLnBkZgAADgASAAgAMQA5ADkAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9NYWNWZWFuLzE5OTAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(1990)047%3C1012:CTEITS%3E2.0.CO;2}} @article{louis_1979, - Author = {Louis, JF}, + Author = {Louis, J. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG91aXMvMTk3OS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAonogIMTk3OS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiej8FuU4pQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUxvdWlzAAAQAAgAANHneLIAAAARAAgAAMFutfoAAAABABgAKJ6IAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvdWlzOgAxOTc5LnBkZgAADgASAAgAMQA5ADcAOQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Mb3Vpcy8xOTc5LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-05-20 17:15:52 +0000}, Date-Modified = {2016-05-20 17:15:52 +0000}, Isi = {A1979HT69700004}, @@ -2612,12 +2704,12 @@ @article{louis_1979 Title = {A PARAMETRIC MODEL OF VERTICAL EDDY FLUXES IN THE ATMOSPHERE}, Volume = {17}, Year = {1979}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG91aXMvMTk3OS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAonogIMTk3OS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiej8FuU4pQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUxvdWlzAAAQAAgAANHneLIAAAARAAgAAMFutfoAAAABABgAKJ6IAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvdWlzOgAxOTc5LnBkZgAADgASAAgAMQA5ADcAOQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Mb3Vpcy8xOTc5LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1979HT69700004}} @article{lock_et_al_2000, Abstract = {A new boundary layer turbulent mixing scheme has been developed for use in the UKMO weather forecasting and climate prediction models. This includes a representation of nonlocal mixing (driven by both surface fluxes and cloud-top processes) in unstable layers, either coupled to or decoupled from the surface, and an explicit entrainment parameterization. The scheme is formulated in moist conserved variables so that it can treat both dry and cloudy layers. Details of the scheme and examples of its performance in single-column model tests are presented.}, - Author = {Lock, AP and Brown, AR and Bush, MR and Martin, GM and Smith, RNB}, + Author = {Lock, A. P. and Brown, A. R. and Bush, M. R. and Martin, G. M. and Smith, R.N.B.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAACibewgyMDAwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJuLywPrPAAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAETG9jawAQAAgAANHneLIAAAARAAgAAMsETawAAAABABgAKJt7AChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvY2s6ADIwMDAucGRmAA4AEgAIADIAMAAwADAALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Date-Added = {2016-05-20 17:15:36 +0000}, Date-Modified = {2016-05-20 17:15:36 +0000}, Isi = {000089461100008}, @@ -2630,13 +2722,13 @@ @article{lock_et_al_2000 Title = {A new boundary layer mixing scheme. {P}art {I}: Scheme description and single-column model tests}, Volume = {128}, Year = {2000}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAACibewgyMDAwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJuLywPrPAAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAETG9jawAQAAgAANHneLIAAAARAAgAAMsETawAAAABABgAKJt7AChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvY2s6ADIwMDAucGRmAA4AEgAIADIAMAAwADAALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/000089461100008}} @article{hong_and_pan_1996, Abstract = {Abstract In this paper, the incorporation of a simple atmospheric boundary layer diffusion scheme into the NCEP Medium-Range Forecast Model is described. A boundary layer diffusion package based on the Troen and Mahrt nonlocal diffusion concept has been tested for possible operational implementation. The results from this approach are compared with those from the local diffusion approach, which is the current operational scheme, and verified against FIFE observations during 9?10 August 1987. The comparisons between local and nonlocal approaches are extended to the forecast for a heavy rain case of 15?17 May 1995. The sensitivity of both the boundary layer development and the precipitation forecast to the tuning parameters in the nonlocal diffusion scheme is also investigated. Special attention is given to the interaction of boundary layer processes with precipitation physics. Some results of parallel runs during August 1995 are also presented.}, Annote = {doi: 10.1175/1520-0493(1996)124<2322:NBLVDI>2.0.CO;2}, - Author = {Hong, Song-You and Pan, Hua-Lu}, + Author = {Hong, S.-Y. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAE18FggxOTk2LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATXvY0pRb8QAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAESG9uZwAQAAgAANHneLIAAAARAAgAANKUvmEAAAABABgATXwWAChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEhvbmc6ADE5OTYucGRmAA4AEgAIADEAOQA5ADYALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Booktitle = {Monthly Weather Review}, Da = {1996/10/01}, Date = {1996/10/01}, @@ -2657,13 +2749,13 @@ @article{hong_and_pan_1996 Volume = {124}, Year = {1996}, Year1 = {1996}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAE18FggxOTk2LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATXvY0pRb8QAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAESG9uZwAQAAgAANHneLIAAAARAAgAANKUvmEAAAABABgATXwWAChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEhvbmc6ADE5OTYucGRmAA4AEgAIADEAOQA5ADYALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0493(1996)124%3C2322:NBLVDI%3E2.0.CO;2}} @article{han_and_pan_2006, Abstract = {Abstract A parameterization of the convection-induced pressure gradient force (PGF) in convective momentum transport (CMT) is tested for hurricane intensity forecasting using NCEP's operational Global Forecast System (GFS) and its nested Regional Spectral Model (RSM). In the parameterization the PGF is assumed to be proportional to the product of the cloud mass flux and vertical wind shear. Compared to control forecasts using the present operational GFS and RSM where the PGF effect in CMT is taken into account empirically, the new PGF parameterization helps increase hurricane intensity by reducing the vertical momentum exchange, giving rise to a closer comparison to the observations. In addition, the new PGF parameterization forecasts not only show more realistically organized precipitation patterns with enhanced hurricane intensity but also reduce the forecast track error. Nevertheless, the model forecasts with the new PGF parameterization still largely underpredict the observed intensity. One of the many possible reasons for the large underprediction may be the absence of hurricane initialization in the models.}, Annote = {doi: 10.1175/MWR3090.1}, - Author = {Han, Jongil and Pan, Hua-Lu}, + Author = {Han, J. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMDYucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMDYucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABazFjStCvVAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0rSORQAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDA2LnBkZgAADgASAAgAMgAwADAANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAwNi5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Booktitle = {Monthly Weather Review}, Da = {2006/02/01}, Date-Added = {2016-05-20 17:11:17 +0000}, @@ -2682,11 +2774,11 @@ @article{han_and_pan_2006 Url = {http://dx.doi.org/10.1175/MWR3090.1}, Volume = {134}, Year = {2006}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMDYucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMDYucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABazFjStCvVAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0rSORQAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDA2LnBkZgAADgASAAgAMgAwADAANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAwNi5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/MWR3090.1}} @article{businger_et_al_1971, - Author = {Businger, JA and Wyngaard, JC and Izumi, Y and Bradley, EF}, + Author = {Businger, J. A. and Wyngaard, J. C. and Izumi, Y. and Bradley, E. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAodUUIMTk3MS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh1cbTPIxwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJ1c2luZ2VyABAACAAA0ed4sgAAABEACAAAtM+FjAAAAAEAGAAodUUAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQnVzaW5nZXI6ADE5NzEucGRmAA4AEgAIADEAOQA3ADEALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-05-20 17:10:50 +0000}, Date-Modified = {2018-07-18 18:58:08 +0000}, Isi = {A1971I822800004}, @@ -2699,11 +2791,10 @@ @article{businger_et_al_1971 Title = {Flux-profile relationships in the atmospheric surface layer}, Volume = {28}, Year = {1971}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAodUUIMTk3MS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh1cbTPIxwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJ1c2luZ2VyABAACAAA0ed4sgAAABEACAAAtM+FjAAAAAEAGAAodUUAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQnVzaW5nZXI6ADE5NzEucGRmAA4AEgAIADEAOQA3ADEALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1971I822800004}} @article{xu_and_randall_1996, - Author = {K-M. Xu and D. A. Randall}, + Author = {K.-M. Xu and D. A. Randall}, Date-Added = {2016-05-20 16:22:45 +0000}, Date-Modified = {2016-05-20 16:24:47 +0000}, Journal = {J. Atmos. Sci.}, @@ -2727,7 +2818,7 @@ @article{clough_et_al_1992 Year = {1992}} @techreport{chou_and_suarez_1999, - Author = {M.D. Chou and M. J. Suarez}, + Author = {M. D. Chou and M. J. Suarez}, Date-Added = {2016-05-20 15:27:31 +0000}, Date-Modified = {2016-05-20 15:30:02 +0000}, Institution = {NASA}, @@ -2737,7 +2828,7 @@ @techreport{chou_and_suarez_1999 Year = {1999}} @article{sato_et_al_1993, - Author = {M. Sato and J.E. Hansan and M. P. McCormick and J. B. Pollack}, + Author = {M. Sato and J. E. Hansan and M. P. McCormick and J. B. Pollack}, Date-Added = {2016-05-20 04:23:08 +0000}, Date-Modified = {2018-02-20 19:58:29 +0000}, Journal = {J. Geophys. Res.}, @@ -2755,7 +2846,7 @@ @article{chin_et_al_2000 Month = {October}, Number = {D20}, Pages = {24671-24687}, - Title = {Atmospheric sulfur cycle simulated in the global model GOCART: Model description and global properties}, + Title = {Atmospheric sulfur cycle simulated in the global model {GOCART}: Model description and global properties}, Volume = {105}, Year = {2000}} @@ -2765,17 +2856,17 @@ @article{hess_et_al_1998 Date-Modified = {2016-05-20 15:08:21 +0000}, Journal = {Bull. Am. Meteor. Soc.}, Pages = {831-844}, - Title = {Optical properties of aerosols and clouds: The software package OPAC.}, + Title = {Optical properties of aerosols and clouds: The software package {OPAC}}, Volume = {79}, Year = {1998}} @article{iacono_et_al_2000, - Author = {M.J. Iacono and E.J. Mlawer and S. A. Clough and J.-J. Morcrette}, + Author = {M. J. Iacono and E. J. Mlawer and S. A. Clough and J.-J. Morcrette}, Date-Added = {2016-05-20 03:45:26 +0000}, Date-Modified = {2016-05-20 15:08:59 +0000}, Journal = {J. Geophys. Res.}, Pages = {14873-14890}, - Title = {Impact of an improved longwave radiation model, RRTM, on the energy budget and thermodynamic properties of the NCAR community climate model, CCM3}, + Title = {Impact of an improved longwave radiation model, {RRTM}, on the energy budget and thermodynamic properties of the {NCAR} community climate model, {CCM3}}, Volume = {105}, Year = {2000}} @@ -2785,32 +2876,32 @@ @article{clough_et_al_2005 Date-Modified = {2016-05-20 15:10:30 +0000}, Journal = {J. Quant. Spectrosc. Radiat. Transfer}, Pages = {233-244}, - Title = {Atmospheric radiative transfer modeling: A summary of the AER codes}, + Title = {Atmospheric radiative transfer modeling: A summary of the {AER} codes}, Volume = {91}, Year = {2005}} @article{heymsfield_and_mcfarquhar_1996, - Author = {A.J. Heymsfield and G. M. McFarquhar}, + Author = {A. J. Heymsfield and G. M. McFarquhar}, Date-Added = {2016-05-20 03:35:53 +0000}, Date-Modified = {2016-05-24 17:35:50 +0000}, Journal = {J. Atmos. Sci.}, Pages = {2424-2451}, - Title = {High albedos of cirrus in the tropical Pacific warm pool: Microphysical interpretations from CEPEX and from Kwajalein, Marshall Islands}, + Title = {High albedos of cirrus in the tropical {P}acific warm pool: Microphysical interpretations from {CEPEX} and from {K}wajalein, {M}arshall {I}slands}, Volume = {53}, Year = {1996}} @article{mlawer_et_al_1997, - Author = {E.J. Mlawer and S.J. Taubman and P.D. Brown and M. J. Iacono and S. A. Clough}, + Author = {E. J. Mlawer and S. J. Taubman and P. D. Brown and M. J. Iacono and S. A. Clough}, Date-Added = {2016-05-20 03:32:32 +0000}, Date-Modified = {2016-05-20 15:12:05 +0000}, Journal = {J. Geophys. Res.}, Number = {16663-16682}, - Title = {Radiative transfer for inhomogenerous atmospheres: RRTM, a validated correlated-k model for the longwave}, + Title = {Radiative transfer for inhomogenerous atmospheres: {RRTM}, a validated correlated-k model for the longwave}, Volume = {102}, Year = {1997}} @article{Schwarzkopf_and_Fels_1991, - Author = {M.D. Schwarzkopf and S.B. Fels}, + Author = {M. D. Schwarzkopf and S. B. Fels}, Date-Added = {2016-05-20 03:29:16 +0000}, Date-Modified = {2016-05-20 15:12:19 +0000}, Journal = {J. Geophys. Res.}, @@ -2820,46 +2911,46 @@ @article{Schwarzkopf_and_Fels_1991 Year = {1991}} @article{briegleb_1992, - Author = {B.P. Briegleb}, + Author = {B. P. Briegleb}, Date-Added = {2016-05-20 03:09:50 +0000}, Date-Modified = {2016-05-20 15:12:27 +0000}, Journal = {J. Geophys. Res.}, Pages = {7603-7612}, - Title = {Delta-Eddington approximation for solar radiation in the NCAR community climate model}, + Title = {Delta-Eddington approximation for solar radiation in the {NCAR} community climate model}, Volume = {97}, Year = {1992}} @conference{alpert_et_al_1988, Address = {Baltimore, MD}, - Author = {J. Alpert and M. Kanamitsu and P.M. Caplan and J.G. Sela and G. H. White and E. Kalnay}, + Author = {J. C. Alpert and M. Kanamitsu and P. M. Caplan and J. G. Sela and G. H. White and E. Kalnay}, Date-Added = {2016-05-19 22:40:01 +0000}, Date-Modified = {2018-10-26 15:54:19 -0600}, Organization = {Eighth Conf. on Numerical Weather Prediction, Amer. Meteor. Soc.}, Pages = {726-733}, - Title = {Mountain induced gravity wave drag parameterization in the NMC medium-range forecast model}, + Title = {Mountain induced gravity wave drag parameterization in the {NMC} medium-range forecast model}, Year = {1988}} @conference{alpert_et_al_1996, Address = {Norfolk}, - Author = {J.C. Alpert and S-Y. Hong and Y-J. Kim}, + Author = {J. C. Alpert and S-Y. Hong and Y-J. Kim}, Date-Added = {2016-05-19 22:36:02 +0000}, Date-Modified = {2016-05-20 15:14:15 +0000}, Organization = {11 Conf. on NWP}, Pages = {322-323}, - Title = {Sensitivity of cyclogenesis to lower troposphere enhancement of gravity wave drag using the EMC MRF}, + Title = {Sensitivity of cyclogenesis to lower troposphere enhancement of gravity wave drag using the {EMC MRF}}, Year = {1996}} @conference{alpert_2006, - Author = {J.C. Alpert}, + Author = {J. C. Alpert}, Booktitle = {20th Conf. WAF/16 Conf. NWP}, Date-Added = {2016-05-19 21:24:23 +0000}, Date-Modified = {2016-05-20 15:14:34 +0000}, Number = {P2.4}, - Title = {Sub-grid scale mountain blocking at NCEP}, + Title = {Sub-grid scale mountain blocking at {NCEP}}, Year = {2006}} @article{ebert_and_curry_1992, - Author = {E.E. Ebert and J.A. Curry}, + Author = {E. E. Ebert and J. A. Curry}, Date-Added = {2016-05-19 21:19:00 +0000}, Date-Modified = {2016-05-20 15:12:43 +0000}, Journal = {J. Geophys. Res.}, @@ -2890,17 +2981,18 @@ @article{kim_and_arakawa_1995 @techreport{hou_et_al_2002, Author = {Y. Hou and S. Moorthi and K. Campana}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAiLi4vLi4vemhhbmctbGliL2hvdV9ldF9hbF8yMDAyLnBkZk8RAdwAAAAAAdwAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAAM/T1mZIKwAAAFKkjRJob3VfZXRfYWxfMjAwMi5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUqai02OGCgAAAAAAAAAAAAIAAgAACSAAAAAAAAAAAAAAAAAAAAAJemhhbmctbGliAAAQAAgAAM/UKsYAAAARAAgAANNj2moAAAABABgAUqSNAE1lSgAj19QACTbFAAk2xAACZvkAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBtYW56aGFuZzoARG9jdW1lbnRzOgBNYW4uWmhhbmc6AGdtdGItZG9jOgB6aGFuZy1saWI6AGhvdV9ldF9hbF8yMDAyLnBkZgAADgAmABIAaABvAHUAXwBlAHQAXwBhAGwAXwAyADAAMAAyAC4AcABkAGYADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgBIVXNlcnMvbWFuemhhbmcvRG9jdW1lbnRzL01hbi5aaGFuZy9nbXRiLWRvYy96aGFuZy1saWIvaG91X2V0X2FsXzIwMDIucGRmABMAAS8AABUAAgAP//8AAAAIAA0AGgAkAEkAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACKQ==}, Date-Added = {2016-05-19 19:52:22 +0000}, Date-Modified = {2016-05-20 15:14:59 +0000}, Institution = {NCEP}, Number = {441}, Title = {Parameterization of Solar Radiation Transfer}, Type = {office note}, - Year = {2002}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAiLi4vLi4vemhhbmctbGliL2hvdV9ldF9hbF8yMDAyLnBkZk8RAdwAAAAAAdwAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAAM/T1mZIKwAAAFKkjRJob3VfZXRfYWxfMjAwMi5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUqai02OGCgAAAAAAAAAAAAIAAgAACSAAAAAAAAAAAAAAAAAAAAAJemhhbmctbGliAAAQAAgAAM/UKsYAAAARAAgAANNj2moAAAABABgAUqSNAE1lSgAj19QACTbFAAk2xAACZvkAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBtYW56aGFuZzoARG9jdW1lbnRzOgBNYW4uWmhhbmc6AGdtdGItZG9jOgB6aGFuZy1saWI6AGhvdV9ldF9hbF8yMDAyLnBkZgAADgAmABIAaABvAHUAXwBlAHQAXwBhAGwAXwAyADAAMAAyAC4AcABkAGYADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgBIVXNlcnMvbWFuemhhbmcvRG9jdW1lbnRzL01hbi5aaGFuZy9nbXRiLWRvYy96aGFuZy1saWIvaG91X2V0X2FsXzIwMDIucGRmABMAAS8AABUAAgAP//8AAAAIAA0AGgAkAEkAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACKQ==}} + Year = {2002}} @article{hu_and_stamnes_1993, - Author = {Y.X. Hu and K. Stamnes}, + Author = {Y. X. Hu and K. Stamnes}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAnLi4vLi4vemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmTxEB8AAAAAAB8AACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAAz9PWZkgrAAAAUqSNF2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSpJHTY3R+AAAAAAAAAAAAAgACAAAJIAAAAAAAAAAAAAAAAAAAAAl6aGFuZy1saWIAABAACAAAz9QqxgAAABEACAAA02PI3gAAAAEAGABSpI0ATWVKACPX1AAJNsUACTbEAAJm+QACAGBNYWNpbnRvc2ggSEQ6VXNlcnM6AG1hbnpoYW5nOgBEb2N1bWVudHM6AE1hbi5aaGFuZzoAZ210Yi1kb2M6AHpoYW5nLWxpYjoAaHVfYW5kX3N0YW1uZXNfMTk5My5wZGYADgAwABcAaAB1AF8AYQBuAGQAXwBzAHQAYQBtAG4AZQBzAF8AMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIATVVzZXJzL21hbnpoYW5nL0RvY3VtZW50cy9NYW4uWmhhbmcvZ210Yi1kb2MvemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAATAAEvAAAVAAIAD///AAAACAANABoAJABOAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAkI=}, Date-Added = {2016-05-19 19:31:56 +0000}, Date-Modified = {2016-05-20 15:13:12 +0000}, Journal = {J. Climate}, @@ -2908,11 +3000,10 @@ @article{hu_and_stamnes_1993 Pages = {728-742}, Title = {An accurate parameterization of the radiative properties of water clouds suitable for use in climate models}, Volume = {6}, - Year = {1993}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAnLi4vLi4vemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmTxEB8AAAAAAB8AACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAAz9PWZkgrAAAAUqSNF2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSpJHTY3R+AAAAAAAAAAAAAgACAAAJIAAAAAAAAAAAAAAAAAAAAAl6aGFuZy1saWIAABAACAAAz9QqxgAAABEACAAA02PI3gAAAAEAGABSpI0ATWVKACPX1AAJNsUACTbEAAJm+QACAGBNYWNpbnRvc2ggSEQ6VXNlcnM6AG1hbnpoYW5nOgBEb2N1bWVudHM6AE1hbi5aaGFuZzoAZ210Yi1kb2M6AHpoYW5nLWxpYjoAaHVfYW5kX3N0YW1uZXNfMTk5My5wZGYADgAwABcAaAB1AF8AYQBuAGQAXwBzAHQAYQBtAG4AZQBzAF8AMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIATVVzZXJzL21hbnpoYW5nL0RvY3VtZW50cy9NYW4uWmhhbmcvZ210Yi1kb2MvemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAATAAEvAAAVAAIAD///AAAACAANABoAJABOAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAkI=}} + Year = {1993}} @article{alexander_et_al_2010, - Author = {Alexander, M. J. and Geller, M. and McLandress, C. and Polavarapu, S. and Preusse, P. and Sassi, F. and Sato, K. and Eckermann, S. and Ern, M. and Hertzog, A. and Kawatani, Y. and Pulido, M. and Shaw, T. A. and Sigmond, M. and Vincent, R. and Watanabe, S.}, + Author = {Alexander, M. J. and Geller, M. and McLandress, C. and et al.}, Doi = {10.1002/qj.637}, Eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/qj.637}, Journal = {Quarterly Journal of the Royal Meteorological Society}, @@ -2956,7 +3047,7 @@ @article{weinstock_1984 Bdsk-Url-2 = {http://dx.doi.org/10.1029/JA089iA01p00345}} @article{holton_1983, - Author = {Holton, James R.}, + Author = {Holton, J. R.}, Doi = {10.1175/1520-0469(1983)040<2497:TIOGWB>2.0.CO;2}, Eprint = {https://doi.org/10.1175/1520-0469(1983)040<2497:TIOGWB>2.0.CO;2}, Journal = {Journal of the Atmospheric Sciences}, @@ -2970,7 +3061,7 @@ @article{holton_1983 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1983)040%3C2497:TIOGWB%3E2.0.CO;2}} @article{geller_et_al_2013, - Author = {Geller, M. A. and Alexander, M. Joan and Love, P. T. and Bacmeister, J. and Ern, M. and Hertzog, A. and Manzini, E. and Preusse, P. and Sato, K. and Scaife, A. A. and Zhou, T.}, + Author = {Geller, M. A. and Alexander, M. J. and Love, P. T. and et al.}, Doi = {10.1175/JCLI-D-12-00545.1}, Eprint = {https://doi.org/10.1175/JCLI-D-12-00545.1}, Journal = {Journal of Climate}, @@ -2998,23 +3089,23 @@ @article{garcia_et_al_2017 Bdsk-Url-2 = {http://dx.doi.org/10.1175/JAS-D-16-0104.1}} @inproceedings{yudin_et_al_2016, - Author = {Yudin, V.A. and Akmaev, R.A. and Fuller-Rowell, T.J. and Alpert, J.C.}, + Author = {Yudin, V. A. and Akmaev, R. A. and Fuller-Rowell, T. J. and Alpert, J. C.}, Booktitle = {International SPARC Gravity Wave Symposium}, Number = {1}, Pages = {012024}, - Title = {Gravity wave physics in the NOAA Environmental Modeling System}, + Title = {Gravity wave physics in the {NOAA} Environmental Modeling System}, Volume = {48}, Year = {2016}} @inproceedings{alpert_et_al_2018, - Author = {Alpert, Jordan C and Yudin, Valery and Fuller-Rowell, Tim and Akmaev, Rashid A}, + Author = {Alpert, J. C. and Yudin, V. A. and Fuller-Rowell, T. J. and Akmaev, R. A.}, Booktitle = {98th American Meteorological Society Annual Meeting}, Organization = {AMS}, - Title = {Integrating Unified Gravity Wave Physics Research into the Next Generation Global Prediction System for NCEP Research to Operations}, + Title = {Integrating Unified Gravity Wave Physics Research into the Next Generation Global Prediction System for {NCEP} Research to Operations}, Year = {2018}} @article{eckermann_2011, - Author = {Eckermann, Stephen D.}, + Author = {Eckermann, S. D.}, Doi = {10.1175/2011JAS3684.1}, Eprint = {https://doi.org/10.1175/2011JAS3684.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3042,22 +3133,22 @@ @article{lott_et_al_2012 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2012GL051001}} @conference{yudin_et_al_2018, - Author = {Yudin, V. A and Akmaev, R. A. and Alpert, J. C. and Fuller-Rowell T. J., and Karol S. I.}, + Author = {Yudin, V. A. and Akmaev, R. A. and Alpert, J. C. and Fuller-Rowell T. J., and Karol S. I.}, Booktitle = {25th Conference on Numerical Weather Prediction}, Date-Added = {2018-06-04 10:50:44 -0600}, Date-Modified = {2018-06-04 10:54:39 -0600}, Editor = {Am. Meteorol. Soc.}, - Title = {Gravity Wave Physics and Dynamics in the FV3-based Atmosphere Models Extended into the Mesosphere}, + Title = {Gravity Wave Physics and Dynamics in the {FV3}-based Atmosphere Models Extended into the Mesosphere}, Year = {2018}} @article{hines_1997, - Author = {Colin O. Hines}, + Author = {C. O. Hines}, Doi = {https://doi.org/10.1016/S1364-6826(96)00080-6}, Issn = {1364-6826}, Journal = {Journal of Atmospheric and Solar-Terrestrial Physics}, Number = {4}, Pages = {387 - 400}, - Title = {Doppler-spread parameterization of gravity-wave momentum deposition in the middle atmosphere. Part 2: Broad and quasi monochromatic spectra, and implementation}, + Title = {Doppler-spread parameterization of gravity-wave momentum deposition in the middle atmosphere. {P}art {II}: Broad and quasi monochromatic spectra, and implementation}, Url = {http://www.sciencedirect.com/science/article/pii/S1364682696000806}, Volume = {59}, Year = {1997}, @@ -3079,7 +3170,7 @@ @article{alexander_and_dunkerton_1999 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1999)056%3C4167:ASPOMF%3E2.0.CO;2}} @article{scinocca_2003, - Author = {Scinocca, John F.}, + Author = {Scinocca, J. F.}, Doi = {10.1175/1520-0469(2003)060<0667:AASNGW>2.0.CO;2}, Eprint = {https://doi.org/10.1175/1520-0469(2003)060<0667:AASNGW>2.0.CO;2}, Journal = {Journal of the Atmospheric Sciences}, @@ -3093,7 +3184,7 @@ @article{scinocca_2003 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(2003)060%3C0667:AASNGW%3E2.0.CO;2}} @article{shaw_and_shepherd_2009, - Author = {Shaw, Tiffany A. and Shepherd, Theodore G.}, + Author = {Shaw, T. A. and Shepherd, T. G.}, Doi = {10.1175/2009JAS3051.1}, Eprint = {https://doi.org/10.1175/2009JAS3051.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3112,7 +3203,7 @@ @article{molod_et_al_2015 Journal = {Geoscientific Model Development}, Number = {5}, Pages = {1339--1356}, - Title = {Development of the GEOS-5 atmospheric general circulation model: evolution from MERRA to MERRA2}, + Title = {Development of the {GEOS-5} atmospheric general circulation model: evolution from {MERRA} to {MERRA2}}, Url = {https://www.geosci-model-dev.net/8/1339/2015/}, Volume = {8}, Year = {2015}, @@ -3120,7 +3211,7 @@ @article{molod_et_al_2015 Bdsk-Url-2 = {http://dx.doi.org/10.5194/gmd-8-1339-2015}} @article{richter_et_al_2010, - Author = {Richter, Jadwiga H. and Sassi, Fabrizio and Garcia, Rolando R.}, + Author = {Richter, J. H. and Sassi, F. and Garcia, R. R.}, Doi = {10.1175/2009JAS3112.1}, Eprint = {https://doi.org/10.1175/2009JAS3112.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3134,14 +3225,14 @@ @article{richter_et_al_2010 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2009JAS3112.1}} @article{richter_et_al_2014, - Author = {Richter, Jadwiga H. and Solomon, Abraham and Bacmeister, Julio T.}, + Author = {Richter, J. H. and Solomon, A. and Bacmeister, J. T.}, Doi = {10.1002/2013MS000303}, Eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1002/2013MS000303}, Journal = {Journal of Advances in Modeling Earth Systems}, Keywords = {climate modeling, vertical resolution, modeling, climate, global circulation model, general circulation model}, Number = {2}, Pages = {357-383}, - Title = {Effects of vertical resolution and nonorographic gravity wave drag on the simulated climate in the Community Atmosphere Model, version 5}, + Title = {Effects of vertical resolution and nonorographic gravity wave drag on the simulated climate in the {C}ommunity {A}tmosphere {M}odel, version 5}, Url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1002/2013MS000303}, Volume = {6}, Year = {2014}, @@ -3149,13 +3240,14 @@ @article{richter_et_al_2014 Bdsk-Url-2 = {http://dx.doi.org/10.1002/2013MS000303}} @article{gelaro_et_al_2017, - Author = {Gelaro, et al.}, + Author = {R. Gelaro and W. McCarty and M. J. Suarez and R. Todling and et al.}, + Date-Modified = {2021-02-03 21:24:37 +0000}, Doi = {10.1175/JCLI-D-16-0758.1}, Eprint = {https://doi.org/10.1175/JCLI-D-16-0758.1}, Journal = {Journal of Climate}, Number = {14}, Pages = {5419-5454}, - Title = {The Modern-Era Retrospective Analysis for Research and Applications, Version 2 (MERRA-2)}, + Title = {The {M}odern-{E}ra {R}etrospective {A}nalysis for {R}esearch and {A}pplications, {V}ersion 2 ({MERRA-2})}, Url = {https://doi.org/10.1175/JCLI-D-16-0758.1}, Volume = {30}, Year = {2017}, @@ -3177,7 +3269,7 @@ @article{garcia_et_al_2007 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2006JD007485}} @article{eckermann_et_al_2009, - Author = {Stephen D. Eckermann and Karl W. Hoppel and Lawrence Coy and John P. McCormack and David E. Siskind and Kim Nielsen and Andrew Kochenash and Michael H. Stevens and Christoph R. Englert and Werner Singer and Mark Hervig}, + Author = {Eckermann, S. D. and K. W. Hoppel and L. Coy and J. P. McCormack and D. E. Siskind and K. Nielsen and A. Kochenash and M. H. Stevens and C. R. Englert and W. Singer and M. Hervig}, Doi = {https://doi.org/10.1016/j.jastp.2008.09.036}, Issn = {1364-6826}, Journal = {Journal of Atmospheric and Solar-Terrestrial Physics}, @@ -3193,7 +3285,7 @@ @article{eckermann_et_al_2009 Bdsk-Url-2 = {https://doi.org/10.1016/j.jastp.2008.09.036}} @inproceedings{alpert_et_al_2019, - Author = {Alpert, Jordan C and Yudin, Valery A and Strobach, Edward}, + Author = {Alpert, J. C. and Yudin, V. A. and Strobach, E.}, Booktitle = {AGU Fall Meeting 2019}, Organization = {AGU}, Title = {Atmospheric Gravity Wave Sources Correlated with Resolved-scale GW Activity and Sub-grid Scale Parameterization in the FV3gfs Model}, @@ -3205,7 +3297,7 @@ @article{ern_et_al_2018 Journal = {Earth System Science Data}, Number = {2}, Pages = {857--892}, - Title = {GRACILE: a comprehensive climatology of atmospheric gravity wave parameters based on satellite limb soundings}, + Title = {{GRACILE}: a comprehensive climatology of atmospheric gravity wave parameters based on satellite limb soundings}, Url = {https://www.earth-syst-sci-data.net/10/857/2018/}, Volume = {10}, Year = {2018}, @@ -3213,48 +3305,22 @@ @article{ern_et_al_2018 Bdsk-Url-2 = {http://dx.doi.org/10.5194/essd-10-857-2018}} @inproceedings{yudin_et_al_2019, - Author = {Yudin V.A. , S. I. Karol, R.A. Akmaev, T. Fuller-Rowell, D. Kleist, A. Kubaryk, and C. Thompson}, + Author = {Yudin, V. A. and S. I. Karol and R. A. Akmaev and et al.}, Booktitle = {Space Weather Workshop}, Title = {Longitudinal Variability of Wave Dynamics in Weather Models Extended into the Mesosphere and Thermosphere}, Year = {2019}} -@article{kim_and_doyle_2005, - Author = {Y.-J. Kim and J.D. Arakawa}, - Doi = {10.1256/qj.04.160}, - Url = {https://doi.org/10.1256/qj.04.160}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1893-1921}, - Title = {Extension of an orographic-drag parametrization scheme to incorporate orographic inisotropy and flow blocking}, - Volume = {131}, - Year = {2005}} - -@article{steeneveld_et_al_2008, - Author = {Steeneveld, G. J.,A.A. M. Holtslag, C. J. Nappo, B. J. H. van de Wiel, and L. Mahrt}, - Doi = {10.1175/2008JAMC1816.1}, - Url = {https://doi.org/10.1175/2008JAMC1816.1}, - Journal = {J. Appl. Meteor.}, - Pages = {2518-2530}, - Title = {Exploring the possible role of small-scale terrain drag on stable boundary layers over land}, - Volume = {47}, - Year = {2008}} - -@article{tsiringakis_et_al_2017, - Author = {Tsiringakis,A., G. J. Steeneveld, and A.A. M. Holtslag}, - Doi = {10.1002/qj.3021}, - Url = {https://doi.org/10.1002/qj.3021}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1504-1516}, - Title = {Small-scale orographic gravity wave drag in stable boundary layers and its impact on synoptic systems and near-surface meteorology}, - Volume = {143}, - Year = {2017}} - -@article{beljaars_et_al_2004, - Author = {Beljaars, A.C.M., A.R.Brown, and N.Wood}, - Doi = {10.1256/qj.03.73}, - Url = {https://doi.org/10.1256/qj.03.73}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1327-1347}, - Title = {A new parametrization of turbulent orographic form drag}, - Volume = {130}, - Year = {2004}} - +@comment{BibDesk Static Groups{ + + + + + + group name + Group + keys + + + + +}} diff --git a/physics/docs/pdftxt/CPT_adv_suite.txt b/physics/docs/pdftxt/CPT_adv_suite.txt index 26d514d51..72afcefe7 100644 --- a/physics/docs/pdftxt/CPT_adv_suite.txt +++ b/physics/docs/pdftxt/CPT_adv_suite.txt @@ -18,13 +18,12 @@ The csawmg physics suite uses the parameterizations in the following order: - \ref GFS_SAMFshal - \ref CPT_MG3 - \ref mod_cs_conv_aw_adj - - \ref GFS_CALPRECIPTYPE \section sdf_cpt_suite Suite Definition File \code - + diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt new file mode 100644 index 000000000..a17b58d07 --- /dev/null +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -0,0 +1,48 @@ +/** +\page CU_GF Grell-Freitas Scale and Aerosol Aware Convection Scheme +\section gfcu_descrip Description + +The Grell-Freitas (GF) scheme as described in Grell and Freitas (2014, GF1) \cite grell_and_freitas_2014 and +Freitas et al. (2018, FG) \cite freitas_et_al_2018 follow the mass flux approach published by Grell (1993) \cite grell_1993. +Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing +stochastics through allowing parameter perturbations. In GF1 scale awareness, and the aerosol dependence through rain generation (following +Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the +cloud concentration nuclei at cloud base were added. FG included mixed phase physics impact, momentum transport (as in ECMWF), + a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction +and transition from shallow, congestus and deep convection regimes. The vertical massflux distribution of shallow, congestus and +deep convection regimes is characterized by Probability Density Functions (PDF's). The three PDF's are meant to represent the average +statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents +a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived +from the PDF's. The deep convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the congestus type convection +as well as the shallow convection are not scale-aware. Aerosol dependence is implemented through dependence of rain generation and +evaporation formulations depending on the cloud concentration nuclei at cloud base. Aerosol dependence is considered experimental and +is turned off at this point. GF is able to transport tracers. + +A paper describing the latest changes and modifications is in progress and will be submitted to GMD. + +\b Operational \b Impacts \b in \b RAP/HRRR + + - Uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes + - Takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed +internally or with temporal and spatial correlation patterns + - For higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can +transition as grid spacing decreases into a shallow convection scheme + - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated +precipitating convective cloud and shallow convective clouds + +\section intra_rough_gf Intraphysics Communication +The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each +convective cloud layer containing convective cloud. The detrained condensate interacts with short- and longwave radiation by +contributing to the "opaqueness" to radiation of each grid layer. Additionally, detrained condensate is added to any existing condensate, +to be treated by the complex grid-scale microphysics scheme. This allows for a crude emulation of stratiform precipitation regions +in the RAP. + +Additionally, the shallow convection and PBL schemes pass cloud information to the radiation scheme, which improved cloud/radiation +interaction and retention of the inversion typically found above mixed layers. + +\ref arg_table_cu_gf_driver_run + +\section gen_gfgsd General Algorithm +\ref gen_gf_driver + +*/ diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt new file mode 100644 index 000000000..7a3636b5f --- /dev/null +++ b/physics/docs/pdftxt/GFS_NOAHMP.txt @@ -0,0 +1,27 @@ +/** +\page NoahMP GFS NoahMP Land Surface Model +\section des_noahmp Description + +This implementation of the NoahMP Land Surface Model (LSM) is adapted from the version implemented in WRF v3.7 with additions by NOAA EMC staff to work with the UFS Atmosphere model. Authoritative documentation of the NoahMP scheme can be accessed at the following links: + +[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation") + +[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation") + +A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. + +The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows: ++ \ref noahmpdrv_run() calls + + \ref transfer_mp_parameters() + + \ref noahmp_options() + + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier) + + \ref noahmp_sflx() if over other vegetation types + + \ref penman() + +Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes. + +\section intra_noahmp Intraphysics Communication + + GFS NoahMP LSM Driver (\ref arg_table_noahmpdrv_run) +\section gen_al_noahmp General Algorithm of Driver ++ \ref general_noahmpdrv +*/ diff --git a/physics/docs/pdftxt/GFS_UGWPv0.txt b/physics/docs/pdftxt/GFS_UGWPv0.txt index e6ea3b6f4..82cd06f68 100644 --- a/physics/docs/pdftxt/GFS_UGWPv0.txt +++ b/physics/docs/pdftxt/GFS_UGWPv0.txt @@ -1,5 +1,5 @@ /** -\page GFS_UGWP_v0 CIRES Unified Gravity Wave Physics Scheme - Version 0 +\page GFS_UGWP_v0 Unified Gravity Wave Physics Scheme - Version 0 \section des_UGWP Description Gravity waves (GWs) are generated by a variety of sources in the atmosphere diff --git a/physics/docs/pdftxt/GFSv15p2_suite.txt b/physics/docs/pdftxt/GFSv15p2_suite.txt index 944fd49f1..4b4f71181 100644 --- a/physics/docs/pdftxt/GFSv15p2_suite.txt +++ b/physics/docs/pdftxt/GFSv15p2_suite.txt @@ -21,113 +21,269 @@ The GFS_v15p2 physics suite uses the parameterizations in the following order: - \ref GFS_SAMFdeep - \ref GFS_SAMFshal - \ref GFDL_cloud - - \ref GFS_CALPRECIPTYPE \section sdf_gfsv15p2 Suite Definition File -- For NEMSIO initialization data: \subpage suite_FV3_GFS_v15p2_xml +\code + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + phys_tend + + + + +\endcode + \section gfs15p2_nml_opt_des Namelist -- \b &gfs_physics_nml -\n \c fhzero = 6 -\n \c h2o_phys = .true. -\n \c ldiag3d = .false. -\n \c fhcyc = 24 -\n \c use_ufo = .true. -\n \c pre_rad = .false. -\n \c ncld = 5 -\n \c imp_physics = 11 -\n \c pdfcld = .false. -\n \c fhswr = 3600. -\n \c fhlwr = 3600. -\n \c ialb = 1 -\n \c iems = 1 -\n \c iaer = 111 -\n \c ico2 = 2 -\n \c isubc_sw = 2 -\n \c isubc_lw = 2 -\n \c isol = 2 -\n \c lwhtr = .true. -\n \c swhtr = .true. -\n \c cnvgwd = .true. -\n \c shal_cnv = .true. -\n \c cal_pre = .false. -\n \c redrag = .true. -\n \c dspheat = .true. -\n \c hybedmf = .true. -\n \c random_clds = .false. -\n \c trans_trac = .true. -\n \c cnvcld = .true. -\n \c imfshalcnv = 2 -\n \c imfdeepcnv = 2 -\n \c cdmbgwd = 3.5,0.25 [1.0,1.2] [0.2,2.5] [0.125,3.0] ! [C768] [C384] [C192] [C96]L64 -\n \c prslrd0 = 0. -\n \c ivegsrc = 1 -\n \c isot = 1 -\n \c debug = .false. -\n \c oz_phys = .F. -\n \c oz_phys_2015 = .T. -\n \c nstf_name = @[NSTF_NAME] -\n \c nst_anl = .true. -\n \c psautco = 0.0008,0.0005 -\n \c prautco = 0.00015,0.00015 -\n \c lgfdlmprad = .true. -\n \c effr_in = .true. -\n \c do_sppt = .false. -\n \c do_shum = .false. -\n \c do_skeb = .false. -\n \c do_sfcperts = .false. - -- \b &gfdl_cloud_microphysics_nml -\n \c sedi_transport = .true. -\n \c do_sedi_heat = .false. -\n \c rad_snow = .true. -\n \c rad_graupel = .true. -\n \c rad_rain = .true. -\n \c const_vi = .F. -\n \c const_vs = .F. -\n \c const_vg = .F. -\n \c const_vr = .F. -\n \c vi_max = 1. -\n \c vs_max = 2. -\n \c vg_max = 12. -\n \c vr_max = 12. -\n \c qi_lim = 1. -\n \c prog_ccn = .false. -\n \c do_qa = .true. -\n \c fast_sat_adj = .true. -\n \c tau_l2v = 225. -\n \c tau_v2l = 150. -\n \c tau_g2v = 900. -\n \c rthresh = 10.e-6 -\n \c dw_land = 0.16 -\n \c dw_ocean = 0.10 -\n \c ql_gen = 1.0e-3 -\n \c ql_mlt = 1.0e-3 -\n \c qi0_crt = 8.0E-5 -\n \c qs0_crt = 1.0e-3 -\n \c tau_i2s = 1000. -\n \c c_psaci = 0.05 -\n \c c_pgacs = 0.01 -\n \c rh_inc = 0.30 -\n \c rh_inr = 0.30 -\n \c rh_ins = 0.30 -\n \c ccn_l = 300. -\n \c ccn_o = 100. -\n \c c_paut = 0.5 -\n \c c_cracw = 0.8 -\n \c use_ppm = .false. -\n \c use_ccn = .true. -\n \c mono_prof = .true. -\n \c z_slope_liq = .true. -\n \c z_slope_ice = .true. -\n \c de_ice = .false. -\n \c fix_negative = .true. -\n \c icloud_f = 1 -\n \c mp_time = 150. - -\note nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2 \f$ -- \f$^1\f$ NSST is on and coupled with spin up off -- \f$^2\f$ NSST is on and coupled with spin up on +\code +&gfs_physics_nml + cdmbgwd = 3.5,0.25 + cal_pre = .false. + cnvcld = .true. + cnvgwd = .true. + debug = .false. + do_myjpbl = .false. + do_myjsfc = .false. + do_sfcperts = .false. + do_shum = .false. + do_skeb = .false. + do_sppt = .false. + do_tofd = .false. + do_ugwp = .false. + do_ysu = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.0 + fhlwr = 3600.0 + fhswr = 3600.0 + fhzero = 6.0 + h2o_phys = .true. + hybedmf = .true. + iaer = 111 + ialb = 1 + iau_inc_files = '' + ico2 = 2 + iems = 1 + imfdeepcnv = 2 + imfshalcnv = 2 + imp_physics = 11 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + ldiag_ugwp = .false. + lgfdlmprad = .true. + lheatstrg = .false. + lsm = 1 + lwhtr = .true. + ncld = 5 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name* = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .true. + shinhong = .false. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. + xkzm_h = 1.0 + xkzm_m = 1.0 + xkzminv = 0.3 +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .true. + fast_sat_adj = .true. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 1e-05 + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 90. + +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ + +&nam_sfcperts + iseed_sfc = 0 + nsfcpert = 6 + pertalb = -999.0 + pertlai = -999.0 + pertshc = -999.0 + pertvegf = -999.0 + pertz0 = -999.0 + pertzt = -999.0 + sfc_lscale = 500000 + sfc_tau = 21600 + sppt_land = .false. +/ + + +\endcode + +- nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2 \f$ + - \f$^1\f$ NSST is on and coupled with spin up off + - \f$^2\f$ NSST is on and coupled with spin up on */ diff --git a/physics/docs/pdftxt/GFSv16beta_suite.txt b/physics/docs/pdftxt/GFSv16beta_suite.txt index 8389d0c40..4ad277df7 100644 --- a/physics/docs/pdftxt/GFSv16beta_suite.txt +++ b/physics/docs/pdftxt/GFSv16beta_suite.txt @@ -24,153 +24,252 @@ The GFS_v16beta physics suite uses the parameterizations in the following order: - \ref GFS_SAMFdeep - \ref GFS_SAMFshal - \ref GFDL_cloud - - \ref GFS_CALPRECIPTYPE \section sdf_gfsv16b Suite Definition File -- For NEMSIO initialization data: \subpage suite_FV3_GFS_v16beta_xml +\code + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + +\endcode -\section gfs16beta_nml_opt_des Namelist -- \b &gfs_physics_nml -\n \c fhzero = 6 -\n \c h2o_phys = .true. -\n \c ldiag3d = .false. -\n \c fhcyc = 24 -\n \c use_ufo = .true. -\n \c pre_rad = .false. -\n \c ncld = 5 -\n \c imp_physics = 11 -\n \c pdfcld = .false. -\n \c fhswr = 3600. -\n \c fhlwr = 3600. -\n \c ialb = 1 -\n \c iems = 1 -\n \c iaer = 5111 -\n \c icliq_sw = 2 -\n \c iovr_lw = 3 -\n \c iovr_sw = 3 -\n \c ico2 = 2 -\n \c isubc_sw = 2 -\n \c isubc_lw = 2 -\n \c isol = 2 -\n \c lwhtr = .true. -\n \c swhtr = .true. -\n \c cnvgwd = .true. -\n \c shal_cnv = .true. -\n \c cal_pre = .false. -\n \c redrag = .true. -\n \c dspheat = .true. -\n \c hybedmf = .false. -\n \c satmedmf = .true. -\n \c isatmedmf = 1 -\n \c lheatstrg = .true. -\n \c random_clds = .false. -\n \c trans_trac = .true. -\n \c cnvcld = .true. -\n \c imfshalcnv = 2 -\n \c imfdeepcnv = 2 -\n \c cdmbgwd = 4.0,0.15,1.0,1.0 [1.1,0.72,1.0,1.0] [0.23,1.5,1.0,1.0] [0.14,1.8,1.0,1.0] ! [C768] [C384] [C192] [C96]L64 -\n \c prslrd0 = 0. -\n \c ivegsrc = 1 -\n \c isot = 1 -\n \c lsoil = 4 -\n \c lsm = 1 -\n \c iopt_dveg = 1 -\n \c iopt_crs = 1 -\n \c iopt_btr = 1 -\n \c iopt_run = 1 -\n \c iopt_sfc = 1 -\n \c iopt_frz = 1 -\n \c iopt_inf = 1 -\n \c iopt_rad = 1 -\n \c iopt_alb = 2 -\n \c iopt_snf = 4 -\n \c iopt_tbot = 2 -\n \c iopt_stc = 1 -\n \c debug = .false. -\n \c oz_phys = .F. -\n \c oz_phys_2015 = .T. -\n \c nstf_name = @[NSTF_NAME] -\n \c nst_anl = .true. -\n \c psautco = 0.0008,0.0005 -\n \c prautco = 0.00015,0.00015 -\n \c lgfdlmprad = .true. -\n \c effr_in = .true. -\n \c ldiag_ugwp = .false. -\n \c do_ugwp = .false. -\n \c do_tofd = .true. -\n \c do_sppt = .false. -\n \c do_shum = .false. -\n \c do_skeb = .false. -\n \c do_sfcperts = .false. +\section gfs16beta_nml_opt_des Namelist + +\code +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .false. + fhcyc = 24 + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 11 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + iaer = 5111 + icliq_sw = 2 + iovr_lw = 3 + iovr_sw = 3 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 4.0,0.15,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 1 + iopt_dveg = 1 + iopt_crs = 1 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_alb = 2 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 1 + debug = .false. + oz_phys = .F. + oz_phys_2015 = .T. + nstf_name = @[NSTF_NAME] + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. +/ -- \b &gfdl_cloud_microphysics_nml -\n \c sedi_transport = .true. -\n \c do_sedi_heat = .false. -\n \c rad_snow = .true. -\n \c rad_graupel = .true. -\n \c rad_rain = .true. -\n \c const_vi = .F. -\n \c const_vs = .F. -\n \c const_vg = .F. -\n \c const_vr = .F. -\n \c vi_max = 1. -\n \c vs_max = 2. -\n \c vg_max = 12. -\n \c vr_max = 12. -\n \c qi_lim = 1. -\n \c prog_ccn = .false. -\n \c do_qa = .true. -\n \c fast_sat_adj = .true. -\n \c tau_l2v = 225. -\n \c tau_v2l = 150. -\n \c tau_g2v = 900. -\n \c rthresh = 10.e-6 -\n \c dw_land = 0.16 -\n \c dw_ocean = 0.10 -\n \c ql_gen = 1.0e-3 -\n \c ql_mlt = 1.0e-3 -\n \c qi0_crt = 8.0E-5 -\n \c qs0_crt = 1.0e-3 -\n \c tau_i2s = 1000. -\n \c c_psaci = 0.05 -\n \c c_pgacs = 0.01 -\n \c rh_inc = 0.30 -\n \c rh_inr = 0.30 -\n \c rh_ins = 0.30 -\n \c ccn_l = 300. -\n \c ccn_o = 100. -\n \c c_paut = 0.5 -\n \c c_cracw = 0.8 -\n \c use_ppm = .false. -\n \c use_ccn = .true. -\n \c mono_prof = .true. -\n \c z_slope_liq = .true. -\n \c z_slope_ice = .true. -\n \c de_ice = .false. -\n \c fix_negative = .true. -\n \c icloud_f = 1 -\n \c mp_time = 150. -\n \c reiflag = 2 +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .true. + fast_sat_adj = .true. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. + reiflag = 2 +/ +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 27 +/ -- \b &cires_ugwp_nml -\n \c knob_ugwp_solver = 2 -\n \c knob_ugwp_source = 1,1,0,0 -\n \c knob_ugwp_wvspec = 1,25,25,25 -\n \c knob_ugwp_azdir = 2,4,4,4 -\n \c knob_ugwp_stoch = 0,0,0,0 -\n \c knob_ugwp_effac = 1,1,1,1 -\n \c knob_ugwp_doaxyz = 1 -\n \c knob_ugwp_doheat = 1 -\n \c knob_ugwp_dokdis = 1 -\n \c knob_ugwp_ndx4lh = 1 -\n \c knob_ugwp_version = 0 -\n \c launch_level = 27 +\endcode -\note nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ -- \f$^1\f$ NSST is on and coupled with spin up off -- \f$^2\f$ NSST is on and coupled with spin up on +- nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ + - \f$^1\f$ NSST is on and coupled with spin up off + - \f$^2\f$ NSST is on and coupled with spin up on */ diff --git a/physics/docs/pdftxt/GSD_adv_suite.txt b/physics/docs/pdftxt/GSD_adv_suite.txt index 1f2dbe7fa..24cabe61a 100644 --- a/physics/docs/pdftxt/GSD_adv_suite.txt +++ b/physics/docs/pdftxt/GSD_adv_suite.txt @@ -16,23 +16,22 @@ The GSD_v1 physics suite uses the parameterizations in the following order: - \ref GFS_RRTMG - \ref GFS_SFCLYR - \ref GFS_NSST - - \ref GSD_RUCLSM - - \ref GSD_MYNNEDMF + - \ref RUCLSM + - \ref MYNNEDMF - \ref GFS_UGWP_v0 - \ref GFS_RAYLEIGH - \ref GFS_OZPHYS - \ref GFS_H2OPHYS - - \ref GSD_CU_GF + - \ref CU_GF - \ref cu_gf_deep_group - \ref cu_gf_sh_group - - \ref GSD_THOMPSON - - \ref GFS_CALPRECIPTYPE + - \ref THOMPSON \section sdf_gsdsuite Suite Definition File \code - + diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt new file mode 100644 index 000000000..aebe6b9fb --- /dev/null +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -0,0 +1,76 @@ +/** +\page MYNNEDMF MYNN-EDMF Boundary Layer and Shallow Cloud Scheme +\section mynnedmf_descrip Description + +The Mellor-Yamada-Nakanishi-Niino (Nakanishi and Niino 2009 \cite NAKANISHI_2009) eddy +diffusivity-mass flux (EDMF) scheme was implemented into CCPP to introduce an alternative +turbulent kinetic energy (TKE)-based planetary boundary layer (PBL) scheme which could +serve as a candidate PBL parameterization for future operational implementations of the Unified Forecast System. +The MYNN-EDMF is currently employed in NOAA's operational Rapid Refresh (RAP; Benjamin et al.2016 \cite Benjamin_2016) +and High-Resolution Rapid Refresh (HRRR) forecast systems. + +The original MYNN scheme was demonstrated to be an improvement over predecessor Mellor-Yamada-type +PBL schemes (e.g., Mellor and Yamada 1974,1982 \cite Mellor_1974 \cite Mellor_1982) when compared against large-eddy +simulation (LES) of a convective PBL (Nakanishi and Niino 2004, 2009 \cite Nakanishi_2004 \cite NAKANISHI_2009), the +prediction of advection fog (Nakanishi and Niino 2006 \cite Nakanishi_2006), and for the representation of coastal +barrier jets (Olson and Brown 2009 \cite olson_and_brown_2009). The MYNN scheme can be configured to function at either +level 2.5 or 3.0 closure and includes a partial-condensation scheme (also known as a cloud PDF or a statistical-cloud +scheme) to represent the effects of subgrid-scale(SGS) clouds on the buoyancy flux (Nakanishi and Niino 2004, 2006, and 2009 +\cite Nakanishi_2004 \cite Nakanishi_2006 \cite NAKANISHI_2009). The closure constants for the original MYNN scheme +were tuned to a database of LES as opposed to observational data. + +The MYNN-EDMF scheme has been extensively developed to improve upon the forecast skill of the original MYNN, +largely driven by requirements to improve forecast skill in support of the NOAA's National Weather Service (NWS), +the Federal Aviation Administration (FAA) and users within the renewable-energy industry.Specifically, fundamental +changes were made to the formulation of the mixing lengths and representation of subgrid-scale(SGS) clouds, but new components have also +been added to improve the representation of non-local mixing, the turbulence interaction with clouds, and the coupling to other +model components (i.e., radiation). A description of the changes to the MYNN scheme are available in Olson et al.(2019) +\cite olson_et_al_2019. + + +\section intra_mynnpbl Intraphysics Communication +- Cloud-Radiation Interaction + +\sa gsd_mynnrad_pre +\sa gsd_mynnrad_post + +The SGS clouds produced by the MYNN-EDMF scheme are coupled to the longwave and shortwave radiation schemes +if the namelist parameter \p icloud_bl is set to 1. In this case, the SGS cloud fraction, \p CLDFRA_BL, and the SGS +cloud-mixing ratio, \b QC_BL, are added to the microphysics arrays within the radiation driver (mynnrad_pre_run()). +The following two steps are performed: + +(1) the cloud fraction of the resolved-scale clouds are computed, using Xu and Randal (1996) \cite xu_and_randall_1996 +by default; + +(2) if the resolved-scale cloud liquid (\f$q_c\f$) or ice ( \f$q_i\f$), is less than \f$10^{-6}kg kg^{-1}\f$ and +\f$10^{-8}kg kg^{-1}\f$, respectively, and there exists a nonzero SGS cloud fraction, then the SGS components are +added to their respective resolved-scale components by a temperature weighting, according to linear approximation +of Hobbs et al.(1974) \cite HOBBS_1974 : +\f[ + W_{ice}=1-min(1,max(0,(T-254)/15)) + W_{h2o}=1-W_{ice} +\f] + +Then we sort the SGS cloud water and liquid as : + +\f$q_c\f$=QC_BL*\f$W_{h2o}\f$*CLDFRA_BL + +\f$q_i\f$=QC_BL*\f$W_{ice}\f$*CLDFRA_BL + +This allows us to only use one 3-D array for both SGS cloud water and ice. The updated \f$q_{c}\f$,\f$q_{i}\f$, and +\p CLDFRA are then used as input into the radiation schemes. After exiting the radiation schemes, the original +values of \f$q_c, q_i\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. + + +The MYNN-EDMF CCPP-compliant interface: +\ref arg_table_mynnedmf_wrapper_run + +\section gen_mynnedmf_conv MYNN-EDMF Scheme General Algorithm + +\image html MYNN-EDMF_call_order.png "Figure 1.The order of subroutines within the MYNN-EDMF (Courtesy of J.B. Olson). The green rectangles within the main subroutine (mynn_bl_driver()) represent subroutine calls. The blue rectangles represent tasks coded within the main driver. A brief description is shown on the right " width=10cm + + +\ref gen_mynn_bl_driver + + +*/ diff --git a/physics/docs/pdftxt/MYNN_SFCLAYER.txt b/physics/docs/pdftxt/MYNN_SFCLAYER.txt new file mode 100644 index 000000000..301bdb5cd --- /dev/null +++ b/physics/docs/pdftxt/MYNN_SFCLAYER.txt @@ -0,0 +1,52 @@ +/** +\page SFC_MYNNSFL MYNN Surface Layer Scheme +\section mynnsfclayer_descrip Description + +The surface layer scheme controls the degree of coupling between the model surface and the atmosphere. +Traditionally, surface layer schemes have been developed to be paired with certain PBL schemes, but this +pairing is too narrow-scoped, since the surface layer physics should be equally as integrated with the +land-surface model (LSM), modern gravity wave drag suites, and wave models. The expansion of model complexity, +such as the inclusion of subgrid-scale landuse variations, vertically distributed sources of drag [i.e., wind +farm drag (Fitch et al. 2012 \cite fitch_et_al_2012 ), small-scale gravity wave drag (Steeneveld et al. 2008 \cite steeneveld_et_al_2008) and topographic form +drag (Beljaars et al. 2004) \cite beljaars_et_al_2004 ], requires that surface layer scheme be developed within a broader context so +assumptions made across all model components are physically consistent. + +The MYNN surface layer scheme was originally developed for the Mellor-Yamada-Nakanishi-Niino (MYNN)-Eddy Diffusivity-Mass +Flux (EDMF) scheme (Nakanishi and Niino 2009 \cite NAKANISHI_2009, Olson et al. 2019 \cite olson_et_al_2019) and has been used in NOAA's operational +Rapid Refresh (RAP; Benjamin et al. 2016 \cite Benjamin_2016 ) and High-Resolution Rapid Refresh (HRRR) forecast systems since 2014. During this time, the scheme has undergone significant development in tandem with other components of the +forecast systems. More recently, several new features have been added in order to accommodate different +capabilities in the Common Community Physics Package (CCPP) (Heinzeller et al. 2019). This updated version of the +surface layer scheme is a candidate to be used in the Rapid Refresh Forecast System (RRFS), which is a component of +NOAA's Unified Forecast System, and a successor to the RAP/HRRR forecast systems. + +The surface layer schemes in CCPP only compute transfer coefficients and pass them to other modules that +compute the surface fluxes and 2-m and 10-m diagnostics. Therefore, switches were added to bypass the calculation +of surface fluxes and diagnostics for typical use, but kept as an option to used in idealized model configurations. + +The surface layer physics represented by the scheme utilizes traditional Monin-Obukhov stability theory (MOST) +(Monin and Obukhov 1954 \cite monin_and_obukhov_1954 ), which is not novel, but still represents a respectable performance benchmark. This scheme +is built in a modular sense, which allows for flexible testing of a variety of different subcomponents within +the MOST-type bulk-flux algorithm. The specific subcomponents that exploit this modular design include the +specification of the surface roughness lengths, the scalar roughness lengths, and the flux-profile relationships +(a.k.a. stability functions). The configuration options for testing different forms of these subcomponents will +be discussed below. + +\section intra_mynnsfc Intraphysics Communication + +The surface-layer scheme is call directly after the radiation and prior to the surface modules (land-surface, sea-ice, and sea-surface temperature +models). The surface layer scheme and the surface modules collectively calculate the necessary input for the boundary-layer schemes (beyond the +basic state variables): u*, z/L, surface heat and moisture fluxes. + +\ref arg_table_mynnsfc_wrapper_run + +\section gen_mynnsfclay MYNN Surface Layer Scheme General Algorithm + +\image html MYNN-SFCLAY_call_order.png "Figure 1.The order of operations within the MYNN surface layer scheme (Courtesy of J.B. Olson)." width=10cm + +Within the MYNN surface layer scheme, there is a dependency check for the first timestep. If true, several arrays are initialized at every +i point. This is done because (1) some variables are calculated in schemes called after the surface layer call and (2) some variables are used within +iterative processes and may not be specified until later in the surface layer scheme. The main order of operations and hightlight relevant subroutines +in sfclay1d_mynn(). + + +*/ diff --git a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt new file mode 100644 index 000000000..2f199c6ce --- /dev/null +++ b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt @@ -0,0 +1,23 @@ +/** +\page SGSCLOUD_page Subgrid-scale Cloud Pre-radiation Interstitial +\section rrfs_sgscloud_descrip Description + +This interstitial module adds the subgrid-scale cloud information to the resolved-scale (microphysics) clouds. This procedure is required when using microphysics schemes that only produce clouds in fully saturated grid cells, like the Thompson microphysics scheme, and when using boundary layer and convection schemes that produce subgrid-scale cloud information (mixing ratio and cloud fraction). This allows the subgrid-scale cloud information to be assembled into the rest of the cloud information prior to calling the radiation schemes. + +\section intra_rrfssgs Intraphysics Communication +- sgscloud_radpre_run(): \ref arg_table_sgscloud_radpre_run + +\section gen_rrfssgs SGSCLOUD Pre-radiation Interstitial General Algorithm + +The order of procedures is outlined below: +\n 1) Back up the original qc and qi in "save arrays" qc_save and qi_save. +\n 2) Partition the condensate from the convection scheme into liquid and ice. +\n 3) Use Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction for the convection scheme subgrid clouds. Note that the MYNN-EDMF PBL scheme subgrid clouds input into this scheme are already partitioned into qc and qi and already have assigned cloud fractions. +\n 4) Add the subgrid cloud mixing ratio and cloud fraction to the original (resolved-scale) qc, qi and cloud fraction coming from the microphysics scheme. Note this information is only added to grid cells when resolved-scale clouds are below a very small threshold value. +\n 5) Recompute the diagnostic high, mid, low, total and boundary layer clouds to be consistent with the clouds seen by the radiation scheme. + +To provide a cloud fraction at t=0 (before the boundary layer or convection schemes are called), Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction is used. After the radiation schemes are called, module_SGSCloud_RadPost.F90 is called to restore the original qc and qi from qc_save and qi_save. + + + +*/ diff --git a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt new file mode 100644 index 000000000..9edbefdb0 --- /dev/null +++ b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt @@ -0,0 +1,210 @@ +/** +\page RRFS_v1alpha_page RRFS_v1alpha Suite + +\section RRFS_v1alpha_suite_overview Overview + +Suite RRFS_v1alpha is one of the supported suites for use in the UFS Short-Range Weather Application +(UFS SRW App). This suite is most applicable for runs at 3-km resolution since it does not parameterize +deep convection. + +The RRFS_v1alpha physics suite uses the parameterizations in the following order: + - \ref SGSCLOUD_page + - \ref GFS_RRTMG + - \ref GFS_SFCLYR + - \ref GFS_NSST + - \ref NoahMP + - \ref MYNNEDMF + - \ref GFS_UGWP_v0 + - \ref GFS_RAYLEIGH + - \ref GFS_OZPHYS + - \ref GFS_H2OPHYS + - \ref THOMPSON + +\section sdf_rrfssuite Suite Definition File +\code + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + +\encode + +\section rrfs_nml_option Namelist +\code +&gfs_physics_nml + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect = .true. + cal_pre = .false. + cdmbgwd = 3.5,0.25 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .false. + do_mynnedmf = .true. + do_mynnsfclay = .false. + do_sfcperts = .false. + do_shum = .false. + do_skeb = .false. + do_sppt = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.0 + fhlwr = 1200.0 + fhswr = 1200.0 + fhzero = 1.0 + h2o_phys = .true. + hybedmf = .false. + iaer = 111 + ialb = 1 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + icloud_bl = 1 + ico2 = 2 + iems = 1 + imfdeepcnv = -1 + imfshalcnv = -1 + imp_physics = 8 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 2 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + ncld = 5 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name = 2,1,0,0,0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. + +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1,25,25,25 + launch_level = 25 + +/ +\endcode + + +*/ diff --git a/physics/docs/pdftxt/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt new file mode 100644 index 000000000..bf45ff4b3 --- /dev/null +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -0,0 +1,100 @@ +/** +\page RUCLSM RUC Land Surface Model +\section ruclsm_descrip Description + +The land surface model (LSM) was originally developed as part of the NOAA Rapid Update Cycle (RUC) model development effort; with ongoing modifications, it is now used as an option for the WRF community model. The RUC model and its WRF-based NOAA successor, the Rapid Refresh (RAP) and High-Resolution Rapid Refresh (HRRR), are hourly updated and have an emphasis on short-range, near-surface forecasts including aviation-impact variables and pre-convective environment. Therefore, coupling to this LSM (hereafter the RUC LSM) has been critical to provide more accurate lower boundary conditions. + +The RUC LSM became operational at the NOAA/National Centers for Environmental Prediction (NCEP) first, as part of the RUC from 1998–2012, and then +as part of the RAP from 2012 through the present and as part of HRRR from 2014 through the present. The simple treatments of basic land surface +processes in the RUC LSM (Smirnova et al. 2016 \cite Smirnova_2016 ) have proven to be physically robust and capable of realistically representing +the evolution of soil moisture, soil temperature, and snow in cycled models. Extension of the RAP domain to encompass all of North America and +adjacent high-latitude ocean areas necessitated further development of the RUC LSM for application in the tundra permafrost regions and over Arctic +sea ice (Smirnova et al. 2000 \cite Smirnova_2000). Other modifications include refinements in the snow model and a more accurate specification of +albedo, roughness length, and other surface properties. These recent modifications in the RUC LSM are described and evaluated in +Smirnova et al. 2016 \cite Smirnova_2016 . + +The parameterizations in the RUC LSM describe complicated atmosphere–land surface interactions in an intentionally simplified fashion to avoid +excessive sensitivity to multiple uncertain surface parameters. Nevertheless, the RUC LSM, when coupled with the hourly-assimilating atmospheric model, +demonstrated over years of ongoing cycling (Benjamin et al. 2004a,b \cite Benjamin_2004a \cite Benjamin_2004b ; Berbery et al. 1999 \cite Berbery_1999) +that it can produce a realistic evolution of hydrologic and time-varying soil fields (i.e., soil moisture and temperature) that cannot be directly +observed over large areas, as well as the evolution of snow cover on the ground surface. This result is possible only if the soil–vegetation–snow +component of the coupled model, constrained only by atmospheric boundary conditions and the specification of surface characteristics, has sufficient +skill to avoid long-term drift. + +International projects for intercomparison of land surface and snow parameterization schemes were essential in providing the testing environment and +afforded an excellent opportunity to evaluate the RUC LSM with different land use and soil types and within a variety of climates. The RUC LSM was +included in phase 2(d) of the Project for the Intercomparison of Land Surface Prediction Schemes [PILPS-2(d)], in which tested models performed +18-yr simulations of the land surface state for the Valdai site in Russia (Schlosser et al. 1997 \cite Schlosser_1997 ; Slater et al. 2001 \cite Slater_2001 ;  +Luo et al. 2003 \cite Luo_2003 ). The RUC LSM was also tested during the Snow Models Intercomparison Project (SnowMIP, SnowMIP2, ESM-SnowMIP), +with emphasis on snow parameterizations for both grassland and forest locations in different parts of the world +(Etchevers et al. 2002, 2004 \cite Etchevers_2002 \cite Etchevers_2004; Essery et al. 2009 \cite Essery_2009 ; Rutter et al. 2009 \cite Rutter_2009 , +Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it on the 5th place +among the 26 participating models. + +In global application, RUC LSM is implemented in the Global Systems Division (GSD) physics suite for testing in the NOAA Next-Generation Global +Prediction System (NGGPS)- FV3-GSD suite. To specify surface characteristics, RUC LSM uses the Land Data Sets provided by NCEP for Global +Modeling Systems (see Figure 2 in \ref GFS_NOAH ) + +## RUC LSM characteristics that differ from NOAH LSM: +\image html ruc_lsm_veg_soil.png "Figure 1. RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=10cm +- \b Implicit \b solution of energy and moisture budgets in the layer spanning the ground surface +- \b 9 \b soil \b levels with high vertical resolution near surface +RUC LSM has more levels in oil than \ref GFS_NOAH model with higher resolution near the interface with the atmosphere +- \b Prognostic \b soil moisture variable (\f$\theta-\theta_r\f$) +The prognostic variables for soil moisture is volumetric soil moisture content minus residual value of soil moisture which is tied +to soil particles and does not participate in moisture transport. +- \b Frozen \b soil \b physics algorithm +RUC LSM has a different approach to take into account freezing and thawing processes in soil. +- Treatment of \b mixed \b phase \b precipitation +It accounts for mixed phase precipitation provided by \ref THOMPSON used in RAP and HRRR. +- Simple treatment of \b sea \c ice which solves heat diffusion in sea ice and allows evolving snow cover on top of sea ice +- sub-grid-scale \b heterogeneity of surface parameters in RUC LSM +With the certain level of confidence in the skill of the model, the next requirement is to provide land static fields and surface +parameters with the best possible accuracy. RAP and HRRR use the same datasets as \ref GFS_NOAH. But instead of specifying surface +parameters for the dominant soil and land-use category in the grid box, RUC LSM takes into account the sub-grid scale heterogeneity +in the computation of such parameters as roughness length, emissivity, soil porosity, soil heat capacity and others. The difference in +roughness between the mosaic and dominant category presented on figure 2 is positive from contribution of the forests, which helped to +reduce high biases of surface wind speeds in these regions. Roughness lenghth has also seasonal variability in the cropland regions, +which again helped to improve the wind forecasts during the warm season. +\image html ruc_lsm_heterogeneity.png "Figure 2: sub-grid scale heterogeneity of surface parameters in RUC LSM (Courtesy of T.G. Smirnova)" width=10cm + +- New: simple irrigation in the cropland area +- New: water/snow intercepted by canopy as function of vegetation fraction and leaf area index (LAI) + +## RUC snow model characteristics: +Snow forms additional two layers on top of soil in RUC LSM +- \b 2-layer \b snow model: when SWE < 1.6 cm - snow layer is combined with top soil layer +- Fractional snow cover (SWE < 3 cm): +- weighted average of snow-covered and snow-free areas to compute snow paramters (roughness, albedo) +- New: "mosaic" approach for patchy snow + - Seperate treatment of energy and moisture budgets for snow-covered and snow-free portions of the grid cell + - Aggregate solutions at the end of time step + - Reduced cold bias for areas with thin snow +\image html ruc_lsm_mosaic.png "Figure 3: recent development: mosaic approach for patchy snow (Courtesy of T.G. Smirnova) " width=10cm +- Iterative snow melting algorithm +- Density of snow on the ground - a function of compaction parameter and snow depth and temperature +- Snow albedo - a function of temperature and snow fraction +- Snow interception by canopy - a function of vegetation fraction and LAI +- Density of falling snow/graupel/ice precipitation + - The density of falling snow/graupel/ice is computed inside RUC LSM using empirical temperature-dependent equations; + - Averaged density of frozen precipitation is defined from weighted contribution of each hydrometeor species: +\f[ + \rho_{fr}=\rho_{sn}*\alpha_{sn}+\rho_{gr}*\alpha_{gr}+\rho_{ice}*\alpha_{ice} +\f] +- The depth of new snow is defined from its liquid equivalent and \f$\rho_{fr}\f$ +\image html ruc_lsm_frozen_precip.png "Figure 4: HRRR 23-h forecasts of snow accumulation, valid 08 UTC, 29 Dec 2015 (Courtesy of T.G. Smirnova)" width=10cm + +snow accumulation with variable density is provided as an additional product in the model guidance. Figure 4 shows one example of this product +from the 23-h HRRR forecast for snowstorm on 29 Dec 2015. This product is in the middle panel. The panel on the left uses traditional 10:1 ratio, +and the right panel is oberved snow accumulation. We can see that the new product in the middle here has a better, further north location of maximum +snow accumulation, and high ammounts of snow in the product with 10:1 ratio are trimmed in central and southern Iowa where both observed and model +precipitation had a high content of sleet. There is even larger improvement in the Chicago area, where observed and model precipitation were almost +totally sleet. + +\section intra_ruclsm Intraphysics Communication +\ref arg_table_lsm_ruc_run + +\section gen_ruclsm General Algorithm +\ref gen_lsmruc + +*/ diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt new file mode 100644 index 000000000..8f16ce55b --- /dev/null +++ b/physics/docs/pdftxt/THOMPSON.txt @@ -0,0 +1,85 @@ +/** +\page THOMPSON Thompson Aerosol-Aware Microphysics Scheme +\section thompson_descrp Description + + +The RAP/HRRR microphysics implementation represents the most aggressive attempt to include explicit prediction of +cloud and precipitation microphysical processes in the NCEP operational forecast model suite. The RAP and HRRR are +important guidance to NWS aviation forecasts, and any microphysics improvements are aimed at least in part, to improve +that guidance. The scheme is particularly beneficial for aircraft icing forecasts. + +The scheme computes sources, sinks, and conversions for the mixing ratios of cloud water, rainwater, cloud ice, snow, +and graupel. Number concentration for cloud ice (particles per cubic meter) is also forecast, based on statistical relationships +of number concentration, density, and ice mass from recent observational studies. Since April 2014 (WRFv3.6), this is also the "aerosol-aware" scheme as described in +Thompson and Eidhammer (2014) \cite Thompson_2014 . + +The microphysical processes accounted for are shown in the graphic below: +\image html gsd_thompson.png "Figure 1: Complex Microphysics Model in the RAP" width=10cm + +Descriptions of these preocesses follow: +- \b Deposition: Diffusional growth of ice particles under conditions of vapor supersaturation with respect to ice. +Growth is "aerosol-aware", meaning the number of ice-friendly nulei and ice crystals is estimated by the microphysics scheme. +Deposition of ice is estimated using the properties of these ice-friendly aerosols. Latent heat associated with the phase +change from vapor to ice is released to the atmosphere. + +- \b Sublimation: Diffusional shrinkage of ice particles under conditions of vapor subsaturation with respect to ice. +The effect of aerosols on the sublimation process is estimated. Latent heat associated with the phase change from ice +to vapor is removed from the atmosphere. + +- \b Riming: Rapid freezing of supercooled cloud-size drops as a result of collisions with frozen precipitation particles, +or foreign objects with sub \f$0^{o}C\f$ surface temperatures, such as airplane wings. Latent heat of freezing is released +to the atmosphere during the process. + +- \b Evaporation: Process by which liquid is transformed into the gaseous state. The evaporation process is "aerosol-aware" +through estimation of aerosol impacts. Latent heat is removed from the atmosphere and stored in water vapor during this process. + +- \b Condensation: Process by which vapor is transformed into a liquid state. The impact of aerosols on condensation is estimated. +latent heat is released into the atmosphere during this process. + +- \b Ice \b multiplication: Formation of small ice particles as a result of freezing of supercooled cloud or raindrops. Ice multiplication occurs only under very restrictive conditions, but can be a large source of ice particles when these conditions are met. + +- \b Aggregation/autoconversion \b of \b snow: Process through which frozen precipitation particles grow by collision and the assimilation of cloud particles or other precipitation particles. The autoconversion rate increases as ambient temperatures rise toward freezing. + +- \b Accretion/autoconversion \b of \b cloud \b liquid: Process through which some cloud drops grow to become raindrops by collision and the assimilation of cloud drops. + +- \b Supercooled \b water \b formation: Liquid cloud particles that remain in their liquid state despite being cooled below the freezing point of water. + +The scheme also assumes precipitation particle-size distributions for the three predicted precipitation types: rain, snow, and graupel. +These size distributions are requied to emulate growth of precipitation by accretion of cloud-size particles, coalescence with other +precipitation particles, and fall speeds of precipitation hydrometeors. The rainwater fall speed depends on the rainwater mixing ratio, +with small values associated with fall speeds (and allowing the model to parameterize the behavior) of drizzle. The forecast precipitation +type is based on what prognostic precipitation type actually reaches the surface (Benjamin et al.(2016) \cite Benjamin_2016b ) + +# Advantages of the Thompson Scheme and Updating Cloud Fields +Some of the more general advantages of the upgraded MP scheme implementation in the RAP on the model's cloud and precipitation +forecasts are listed below. + +- Includes five hydrometeor types and their interactions, plus a sixth forecast variable for cloud ice number concentration. Drizzle +is parameterized through using low fall velocities when there are low rain mixing ratios. + +- Includes impact of types of aerosol on condensation of water/deposition of ice + +- Accounts for horizontal and vertical advection of hydrometeors + +- Allows for more accurate prediction of precipitation in the form of snow, because slow fall velocities give time for snow to +advect between grid columns + +- Includes cloud ice sedimentation, which positively influences RH and cloud forecasts + +- Because the scheme is a relatively complete mixed-phase scheme, it can account for the formation of supercooled water, a prerequisite +for the model to provide useful guidance for aircraft icing forecasts + +- Can account for cloud phase changes and provides a sound physical basis for diagnosing precipitation type reaching the ground + + + +\section intra_thompson Intraphysics Communication +\ref arg_table_mp_thompson_run + +\section g_thompson General Algorithm +- \ref gen_thompson_init +- \ref gen_thompson_hrrr +- \ref gen_mpgtdriver +- \ref gen_mp_thompson + +*/ diff --git a/physics/docs/pdftxt/all_shemes_list.txt b/physics/docs/pdftxt/all_shemes_list.txt index 4d7d08e90..03b2ccd9b 100644 --- a/physics/docs/pdftxt/all_shemes_list.txt +++ b/physics/docs/pdftxt/all_shemes_list.txt @@ -3,111 +3,124 @@ \section allscheme_overview Physical Parameterizations -In the CCPP, each parameterization is in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for the SCM, most users will assemble the -parameterizations in suites. - -- \b Radiation - - \subpage GFS_RRTMG - -- \b PBL \b and \b Turbulence - - \subpage GFS_HEDMF - - \subpage GFS_SATMEDMF - - \subpage GFS_SATMEDMFVDIFQ - - \subpage GSD_MYNNEDMF - -- \b Land \b Surface \b Model - - \subpage GFS_NOAH - - \subpage GSD_RUCLSM - - \subpage NoahMP - -- \b Cumulus \b Parameterizations - - \subpage GFS_SAMF - - \subpage GFS_SAMFdeep - - \subpage GFS_SAMFshal - - \subpage CSAW_scheme - - \subpage GSD_CU_GF - - \ref cu_gf_deep_group - - \ref cu_gf_sh_group - -- \b Microphysics - - \subpage GFDL_cloud - - \subpage CPT_MG3 - - \subpage GSD_THOMPSON - -- \b Ozone \b Photochemical \b Production \b and \b Loss - - \subpage GFS_OZPHYS - -- \b Water \b Vapor \b Photochemical \b Production \b and \b Loss - - \subpage GFS_H2OPHYS - -- \b Gravity \b Wave \b Drag - - \subpage GFS_UGWP_v0 - - \subpage GFS_GWDPS - -- \b Surface \b Layer \b and \b Simplified \b Ocean \b and \b Sea \b Ice \b Representation - - \subpage GFS_SFCLYR - - \subpage GFS_NSST - - \subpage GFS_OCEAN - - \subpage GFS_SFCSICE - -- \b Others - - \subpage GFS_RAYLEIGH - - \subpage GFS_CALPRECIPTYPE - -In addition to the physical schemes themselves, this scientific documentation also covers four modules that define physics/radiation functions, parameters and constants: - - \ref func_phys - - \ref phy_sparam - - \ref physcons - - \ref radcons - -The input information for the physics include the values of the gridbox mean prognostic variables (wind components, temperature, +In the CCPP, each parameterization is in its own modern Fortran module (i.e., CCPP-compliant; see rules for scheme to considered CCPP-compliant at + CCPP-Compliant Physics Parameterizations ), +which facilitates model development and code maintenance. Additionally, we are listing any pre- and post- interstitials that must accompany the scheme. While some individual parameterization can be invoked for the SCM, most host models will assemble the parameterizations in suites. + + +\b Radiation + - \subpage GFS_RRTMG + + CCPP-compliant modules: rrtmg_sw_pre / rrtmg_sw / rrtmg_sw_post / rrtmg_lw_pre / rrtmg_lw / rrtmg_lw_post / dcyc2t3 + - \subpage SGSCLOUD_page + + CCPP-compliant module: sgscloud_radpre + +\b PBL \b and \b Turbulence + - \subpage GFS_HEDMF + + CCPP-compliant module: \ref hedmf + - \subpage GFS_SATMEDMFVDIFQ + + CCPP-compliant module: \ref satmedmfvdifq + - \subpage MYNNEDMF + + CCPP-compliant module: mynnedmf_wrapper + +\b Land \b Surface \b Model + - \subpage GFS_NOAH + + CCPP-compliant module: lsm_noah + - \subpage RUCLSM + + CCPP-compliant module: lsm_ruc + - \subpage NoahMP + + CCPP-compliant module: \ref noahmpdrv + +\b Cumulus \b Parameterizations + - \subpage GFS_SAMFdeep + + CCPP-compliant module: \ref samfdeepcnv + - \subpage GFS_SAMFshal + + CCPP-compliant module: \ref samfshalcnv + - \subpage CSAW_scheme + + CCPP-compliant modules: cs_conv_pre / cs_conv / cs_conv_post / cs_conv_aw_adj + - \subpage CU_GF + + CCPP-compliant modules: \ref cu_gf_driver_pre / cu_gf_driver + +\b Microphysics + - \subpage GFDL_cloud + + CCPP-compliant modules: fv_sat_adj / gfdl_cloud_microphys + - \subpage CPT_MG3 + + CCPP-compliant modules: \ref m_micro_pre / m_micro / \ref m_micro_post + - \subpage THOMPSON + + CCPP-compliant modules: mp_thompson_pre / mp_thompson / mp_thompson_post + +\b Ozone \b Photochemical \b Production \b and \b Loss + - \subpage GFS_OZPHYS + + CCPP-compliant module: ozphys_2015 + +\b Water \b Vapor \b Photochemical \b Production \b and \b Loss + - \subpage GFS_H2OPHYS + + CCPP-compliant module: h2ophys + +\b Gravity \b Wave \b Drag + - \subpage GFS_UGWP_v0 + + CCPP-compliant modules: cires_ugwp / cires_ugwp_post + +\b Surface \b Layer + - \subpage GFS_SFCLYR + + CCPP-compliant module: sfc_diff + +\b Simplified \b Ocean \b and \b Sea \b Ice \b Representation + - \subpage GFS_NSST + + CCPP-compliant modules: sfc_nst_pre / sfc_nst / sfc_nst_post + - \subpage GFS_OCEAN + + CCPP-compliant module: sfc_ocean + - \subpage GFS_SFCSICE + + CCPP-compliant module: sfc_sice + +\b Others + - \subpage GFS_RAYLEIGH + + CCPP-compliant module: rayleigh_damp + +The input information for the parameterizations includes the values of the gridbox mean prognostic variables (wind components, temperature, specific humidity, cloud fraction, water contents for cloud liquid, cloud ice, rain, snow, graupel, and ozone concentration), the provisional dynamical tendencies for the same variables and various surface fields, both fixed and variable. The time integration of the physics suites is based on the following: -- The tendencies from the different physical processes are computed by the parameterizations or derived in separate interstitial routines +- The tendencies from the different physical processes are computed by the parameterizations or derived in separate interstitial routines. - The first part of the suite, comprised of the parameterizations for radiation, surface layer, surface (land, ocean, and sea ice), boundary layer, -orographic gravity wave drag, and Rayleigh damping, is computed using a hybrid of parallel and sequential splitting described in Donahue and Caldwell(2018) +and Rayleigh damping, is computed using a hybrid of parallel and sequential splitting described in Donahue and Caldwell (2018) \cite donahue_and_caldwell_2018, a method in which the various parameterizations use the same model state as input but are impacted by the preceding parameterizations. The tendencies from the various parameterizations are then added together and used to update the model state. -- The surface parameterizations (land, ocean and sea ice) are invoked twice in a loop, with the first time to create a guess, and the second time to +- The surface parameterizations (land, ocean and sea ice) are invoked twice in a subcycling loop, with the first time to create a guess, and the second time to produce the tendencies. -- The second part of the physics suite, comprised of the parameterizations of ozone, stratospheric water vapor, deep convection, convective gravity wave drag, -shallow convection, and microphysics, is computed using sequential splitting in the order listed above, in which the model state is updated between calls +- The second part of the physics suite, comprised of the parameterizations of gravity wave physics, ozone, stratospheric water vapor, deep and shallow convection (if using), + and microphysics, is computed using sequential splitting in the order listed above, in which the model state is updated between calls to the parameterization. - If the in-core saturation adjustment is used (\p do_sat_adj=.true.), it is invoked at shorter timesteps along with the dynamical solver. \section allsuite_overview Physics Suites -The CCPP includes the suite GFS_v15p2, which has the same parameterizations used in the GFS v15 implemented operationally in June 2019, and suite -GFS_v16beta, i.e., the beta version of the suite planned for GFS v16 to be implemented operationally in 2021. Suite GFS_v16beta is identical to -Suite GFS_v15p2 except for an update in the PBL parameterization (Han et al. 2019 \cite Han_2019 ). Additionally, CCPP v4 includes two -developmental suites which are undergoing testing to inform future implementations of the UFS. Suite csawmg differs from GFS_v15p2 as it -contains different convection and microphysics schemes made available through a NOAA Climate Process Team (CPT) with components developed -at multiple research centers and universities, including Colorado State, Utah, NASA, NCAR, and EMC. Suite GSD_v1 differs from GFS_v15p2 as it -uses the convection, microphysics, and boundary layer schemes employed in the Rapid Refresh (RAP) and High-Resolution Rapid Refresh (HRRR \cite Benjamin_2016 ) -operational models and was assembled by NOAA/GSD. An assessment of an earlier version of these suites can be found in - the UFS portal -and in the DTC website . Two variant suites labelled as \a no_nsst are simplification of GFS_v15p2 and GFS_v16beta. -This simplification is needed when the UFS is initialized with files in GRIdded Binary Edition 2 (GRIB2) format instead of files in NOAA Environmental Modeling -System (NEMS) Input/Output (NEMSIO) format because the fields necesary to predict (SST) are not available in the GRIB2 files. +There are two publicly supported host models that use CCPP v5: the UFS Weather Model used in the Short Range Weather Application (SRW App) and the +CCPP Single Column Model (SCM). The SRW App supports the use of suites GFS_v15p2 and RRFS_v1alpha, while the SCM supports the use of suites +GFS_v15p2, GFS_v16beta, RRFS_v1alpha, csawmg and GSD_v1. Suite GFS_v15p2 is an operational suite that invokes the parameterizations used in the GFS v15 +implemented operationally in June 2019. Other suites are experimental, and targeted for future UFS operational implementations. It should be noted +that suite RRFS_v1alpha does not include a convective parameterization scheme and is targeted for convective-allowing resolutions of 3-km grid +spacing. The other suites are primarily targeted for medium-range weather and subseasonal-to-seasonal scales of grid spacing 13-km and coarser. +The forcing datasets included in the CCPP SCM v5.0 public release were created by averaging observations and large-eddy simulations over seas that are +too coarse to resolve convection. Therefore, best results will be obtained with be obtained with the CCPP SCM v5.0 when using suites that include parameterized +convection. Table 1. Physics suite options included in this documentation. \tableofcontents -| Physics suites | GFS_v15p2 | GFS_v16beta | csawmg | GSD_v1 | GFS_v15p2_no_nsst | GFS_v16beta_no_nsst | -|------------------|----------------------|--------------------------|---------------------|---------------------------------------------|-------------------------|---------------------------| -| Deep Cu | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | \ref CSAW_scheme | \ref GSD_CU_GF | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | -| Shallow Cu | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GSD_MYNNEDMF and \ref cu_gf_sh_group | \ref GFS_SAMFshal | \ref GFS_SAMFshal | -| Microphysics | \ref GFDL_cloud | \ref GFDL_cloud | \ref CPT_MG3 | \ref GSD_THOMPSON | \ref GFDL_cloud | \ref GFDL_cloud | -| PBL/TURB | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | \ref GFS_HEDMF | \ref GSD_MYNNEDMF | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | -| Radiation | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | -| Surface Layer | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | -| Land | \ref GFS_NOAH | \ref GFS_NOAH | \ref GFS_NOAH | \ref GSD_RUCLSM | \ref GFS_NOAH | \ref GFS_NOAH | -| Gravity Wave Drag| \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | -| Ocean | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_OCEAN | \ref GFS_OCEAN | -| Ozone | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | -| Water Vapor | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | +| Physics suites | GFS_v15p2 | GFS_v16beta | csawmg | GSD_v1 | RRFS_v1alpha | +|------------------|----------------------|--------------------------|---------------------|---------------------------------------------|--------------------| +| HOST Model | SCM, SRW | SCM | SCM | SCM | SCM, SRW | +| Deep Cu | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | \ref CSAW_scheme | \ref CU_GF | \a off | +| Shallow Cu | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref MYNNEDMF and \ref cu_gf_sh_group | \ref MYNNEDMF | +| Microphysics | \ref GFDL_cloud | \ref GFDL_cloud | \ref CPT_MG3 | \ref THOMPSON | \ref THOMPSON | +| PBL/TURB | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | \ref GFS_HEDMF | \ref MYNNEDMF | \ref MYNNEDMF | +| Radiation | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG and \ref SGSCLOUD_page | +| Surface Layer | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | +| Land | \ref GFS_NOAH | \ref GFS_NOAH | \ref GFS_NOAH | \ref RUCLSM | \ref NoahMP | +| Gravity Wave Drag| \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | +| Ocean | \ref GFS_NSST or \ref GFS_OCEAN | \ref GFS_NSST or \ref GFS_OCEAN | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | +| Ozone | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | +| Water Vapor | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \tableofcontents diff --git a/physics/docs/pdftxt/all_shemes_list.txt.FV3 b/physics/docs/pdftxt/all_shemes_list.txt.FV3 index 9294027dd..4ddef249b 100644 --- a/physics/docs/pdftxt/all_shemes_list.txt.FV3 +++ b/physics/docs/pdftxt/all_shemes_list.txt.FV3 @@ -5,7 +5,7 @@ In the CCPP-Physics v3.0 release, each parameterization is in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for the GMTB SCM, most users will assemble the +code maintenance. While some individual parameterization can be invoked for the CCPP SCM, most users will assemble the parameterizations in suites. - Radiation @@ -32,11 +32,11 @@ parameterizations in suites. - Microphysics - \subpage GFDL_cloud - - \subpage fast_sat_adj (not available for the GMTB SCM) + - \subpage fast_sat_adj (not available for the CCPP SCM) - \subpage CPT_MG3 - \subpage GSD_THOMPSON -- Stochastic (not available for the GMTB SCM) +- Stochastic (not available for the CCPP SCM) - \subpage STOCHY_PHYS - \subpage surf_pert (only applicable to \ref GFS_NOAH ) diff --git a/physics/docs/pdftxt/code_overview.txt b/physics/docs/pdftxt/code_overview.txt index 8c13db7a9..9399fa263 100644 --- a/physics/docs/pdftxt/code_overview.txt +++ b/physics/docs/pdftxt/code_overview.txt @@ -2,7 +2,7 @@ \page subpage_overview Overview of the Code In the CCPP-Physics v2 code, each parameterization is placed in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for GMTB SCM, most users will assemble the +code maintenance. While some individual parameterization can be invoked for CCPP SCM, most users will assemble the parameterizations in suites. The parameterizations contained in CCPP-Physics v2 can be used to run two suites: FV3GFS default (with GFDL cloud microphysics) and GFS with Zhao-Carr microphysics. diff --git a/physics/docs/pdftxt/code_overview.txt.Aug17 b/physics/docs/pdftxt/code_overview.txt.Aug17 index 3ca89fcdb..ebe1f6c2b 100644 --- a/physics/docs/pdftxt/code_overview.txt.Aug17 +++ b/physics/docs/pdftxt/code_overview.txt.Aug17 @@ -1,7 +1,7 @@ /** \page subpage_overview Overview of the Code -The GFS physics parameterization suite is called by GMTB-SCM or FV3 after the explicit dynamical computations. The +The GFS physics parameterization suite is called by CCPP-SCM or FV3 after the explicit dynamical computations. The physics computations are performed only in the vertical. The input information for the physics consists of the values of the gridbox mean prognostic variables (wind components \f$u/v\f$, temperature \f$T\f$, specific humidity \f$q\f$, cloud fraction \f$q_a\f$, water contents for cloud liquid \f$q_l\f$, cloud ice \f$q_i\f$, rain \f$q_r\f$, snow \f$q_s\f$, graupel diff --git a/physics/docs/pdftxt/mainpage.txt b/physics/docs/pdftxt/mainpage.txt index fdf7d1294..315d907f9 100644 --- a/physics/docs/pdftxt/mainpage.txt +++ b/physics/docs/pdftxt/mainpage.txt @@ -1,25 +1,32 @@ /** \mainpage Introduction -Welcome to the scientific documentation for the parameterizations and suites available in the Common -Community Physics Package (CCPP) v4. +Welcome to the scientific documentation for the parameterizations available in the Common +Community Physics Package (CCPP) v5.0.0 and the suites that can be configured using them. + +\image html mesocam.png " " width=10cm The CCPP-Physics is envisioned to contain parameterizations used in NOAA's Unified Forecast System (UFS) -applications for weather through seasonal prediction timescales, encompassing operational schemes as well as -developmental schemes under consideration for upcoming -operational implementations. This version contains all parameterizations of the current operational GFS, -plus additional developmental schemes. There are four suites supported for use with the Single Column Model (SCM) -developed by the Development Testbed Center (GFS_v15p2, GFS_v16beta, GSD_v1, and csawmg), and four suites -supported for use with the atmospheric component of the UFS (i.e., GFS_v15p2, GFS_v15p2_no_nsst, GFS_v16beta and -GFS_v16beta_no_nsst). The variants labelled as \a no_nsst are a simplification of GFS_v15p2 and GFS_v16beta suites -. This simplification is needed when the UFS is initialized with files in GRIdded Binary Edition 2 (GRIB2) -format instead of files in NOAA Environmental Modeling System (NEMS) Input/Output (NEMSIO) format because the -fields necessary to predict (SST) are not available in the GRIB2 files. +applications for weather through seasonal prediction timescales, encompassing the current operational GFS schemes as well as +developmental schemes under consideration for upcoming operational implementations. New in this release is +suite RRFS_v1alpha, which is being tested in the UFS Short-Range Weather Application for future use +in the convective-allowing Rapid Refresh Forecast System (RRFS), slated for operational implementation +in 2023. Convection-allowing models allow us to begin to resolve the fine details within storm systems that are +necessary for the accurate predition of high-impact events such as tornadoes, flash floods, and winter weather. +Experience gained from the development of earlier operational and experimental convective-allowing models (CAMs), +such as the High Resolution Rapid Refresh (HRRR) and HRRR Ensemble (HRRRE), the North American Mesoscale Forecast +System (NAM) nests, the NSSL Experimental Warn-on-Forecast System for ensembles (NEWS-e), the NCAR experimental +CAM ensemble, and GFDL's FV3-based CAM efforts, guide this process. + +The CCPP parameterizations are aggregated in suites by the host models. The CCPP Single Column Model (SCM), developed +by the Development Testbed Center, supports suites GFS_v15p2, GFS_v16beta, GSD_v1, csawmg, and RRFS_v1alpha, while the +UFS Short-Range Weather Application supports suites GFS_v15p2 and RRFS_v1alpha. The UFS Medium-Range Weather Application +is not intended for use with CCPP v5.0.0. In this website you will find documentation on various aspects of each parameterization, including a high-level overview of its function, the input/output argument list, and a description of the algorithm. -The latest CCPP public release is Version 4.0 (March 2020), and more details on it may be found on the +More details about this and other CCPP releases may be found on the CCPP website hosted by the Developmental Testbed Center (DTC). diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt index 4074ddfc7..2ec63092e 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt @@ -1,10 +1,10 @@ /** -\page suite_FV3_GFS_v15p2_xml suite_FV3_GFS_v15p2.xml +\page FV3_GFS_v15p2_sdf GFS_v15p2 Suite Definition File \code - + @@ -72,9 +72,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre @@ -91,10 +91,12 @@ GFS_stochastics + phys_tend + \endcode */ diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt index 7a60f5e1c..44f8e8296 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt index 4abafe01a..fb14b32b5 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt index e783be1f9..0cc7a08da 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt b/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt new file mode 100644 index 000000000..681e9d21c --- /dev/null +++ b/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt @@ -0,0 +1,91 @@ +/** +\page FV3_RRFS_v1beta_sdf RRFS_v1beta Suite Definition File + +\code + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + + +\endcode + +*/ diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 2565c58eb..4cc5f7b15 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -3,82 +3,98 @@ The SCM and the UFS Atmosphere access runtime configurations from file \c input.nml. This file contains various namelists records that control aspects of the I/O, dynamics, physics etc. Most physics-related options are in -reords \b &gfs_physics_nml and \b &cires_ugwp_nml. When using the GFDL microphysics scheme, variables in namelist -\b &gfdl_cloud_microphysics_nml are also used. Additional specifications for stochastic physics are in -namelists \b &stochy_nam and \b &nam_sfcperts. +records \b &gfs_physics_nml. Some schemes have their own namelist records as described below. + +- Namelist \b &gfs_physics_nml pertains to all of the suites used, but some of the variables are only relevant for specific +parameterizations. Its variables are defined in file GFS_typedefs.F90 in the host model. - Namelist \b &gfdl_cloud_microphysics_nml is only relevant when the GFDL microphysics is used, and its variables are defined in module_gfdl_cloud_microphys.F90. - Namelist \b &cires_ugwp_nml specifies options for the use of CIRES Unified Gravity Wave Physics Version 0. -- Namelist \b &gfs_physics_nml pertains to all of the suites used, but some of the variables are only relevant for specific -parameterizations. Its variables are defined in file GFS_typedefs.F90 in the host model. +- Namelist \b &nam_sfcperts specifies whether and how stochastic perturbations are used in the Noah Land Surface Model. -- Namelist \b &stochy_nam specifies options for the use of SPPT, SKEB and SHUM, while namelist \b &nam_sfcperts specifies whether -and how stochastic perturbations are used in the Noah Land Surface Model. +Both the SDF and the input.nml contain information about how to specify the physics suite. Some +of this information is redundant, and the user must make sure they are compatible.The safest +practice is to use the SDF and namelist provided for each suite, since those are supported +configurations. Changes to the SDF must be accompanied by corresponding changes to the namelist. +While there is not a one-to-one correspondence between the namelist and the SDF, the tables below +show some variables in the namelist that must match the SDF. -
NML Description
option DDT in Host Model Description Default Value -
\b &gfs_physics_nml -
fhzero gfs_control_type hour between clearing of diagnostic buckets 0.0 -
h2o_phys gfs_control_type flag for stratosphere h2o scheme .false. -
ldiag3d gfs_control_type flag for 3D diagnostic fields .false. -
lssav gfs_control_type logical flag for storing diagnostics .false. -
cplflx gfs_control_type logical flag for cplflx collection .false. -
cplwav gfs_control_type logical flag for cplwav collection .false. -
cplchm gfs_control_type logical flag for chemistry collection .false. -
lsidea gfs_control_type logical flag for idealized physics .false. -
oz_phys gfs_control_type flag for old (2006) ozone physics .true. -
oz_phys_2015 gfs_control_type flag for new (2015) ozone physics .false. -
fhcyc gfs_control_type frequency for surface data cycling in hours 0.0 -
use_ufo gfs_control_type flag for using unfiltered orography surface option .false. -
pre_rad gfs_control_type flag for testing purpose .false. -
ncld gfs_control_type number of hydrometeors 1 -
imp_physics gfs_control_type choice of microphysics scheme: \n +
Option CCPP scheme or interstitial Description Default Value +
\b General \b options +
fhzero GFS_phys_time_vary hour between clearing of diagnostic buckets 0.0 +
h2o_phys h2ophys flag for stratosphere h2o scheme .false. +
ldiag3d see \a GFS_typedefs.F90 flag for 3D diagnostic fields .false. +
qdiag3d see \a GFS_typedefs.F90 flag for 3D tracer diagnostic fields .false. +
lssav see \a GFS_typedefs.F90 flag for storing diagnostics .false. +
cplflx see \a GFS_typedefs.F90 flag for using fluxes provided by an external model .false. +
cplwav see \a GFS_typedefs.F90 flag for using information produced by an external ocean wave model .false. +
cplchm see \a GFS_typedefs.F90 flag for coupled chemistry diagnostics .false. +
cplwav2atm see \a GFS_typedefs.F90 flag for wave to atm coupling .false. +
lsidea rayleigh_damp flag for idealized physics .false. +
oz_phys_2015 ozphys_2015 flag for new (2015) ozone physics .false. +
fhcyc GFS_phys_time_vary frequency for surface data cycling in hours 0.0 +
use_ufo GFS_phys_time_vary flag for using unfiltered orography surface option .false. +
ncld see \a GFS_typedefs.F90 number of hydrometeors 1 +
do_mynnsfclay see \a GFS_typedefs.F90 flag to activate MYNN-SFCLAY scheme .false. +
prslrd0 rayleigh_damp pressure level above which to apply Rayleigh damping 0.0d0 +
ral_ts rayleigh_damp time scale for Rayleigh damping in days 0.0d0 +
do_sppt GFS_stochastics flag for stochastic SPPT option .false. +
do_shum GFS_stochastics flag for stochastic SHUM option .false. +
do_skeb GFS_stochastics flag for stochastic SKEB option .false. +
do_sfcperts GFS_rrtmg_pre flag for stochastic surface perturbations option .false. +
imp_physics choice of microphysics scheme choice of microphysics scheme: \n
  • 11: GFDL microphysics scheme
  • 8: Thompson microphysics scheme
  • 10: Morrison-Gettelman microphysics scheme
99 -
pdfcld gfs_control_type flag for PDF clouds .false. -
fhswr gfs_control_type frequency for shortwave radiation (secs) 3600. -
fhlwr gfs_control_type frequency for longwave radiation (secs) 3600. -
levr gfs_control_type number of vertical levels for radiation calculations -99 -
nfxr gfs_control_type second dimension of radiation input/output array fluxr 39+6 -
iflip gfs_control_type control flag for vertical index direction \n +
\b Parameters \b related \b to \b radiation \b scheme \b options +
pdfcld GFS_rrtmg_pre flag for PDF clouds .false. +
fhswr rrtmg_sw frequency for shortwave radiation (secs) 3600. +
fhlwr rrtmg_lw frequency for longwave radiation (secs) 3600. +
levr GFS_rrtmg_setup number of vertical levels for radiation calculations -99 +
nfxr GFS_rrtmg_pre second dimension of radiation input/output array fluxr 39+6 +
iflip GFS_rrtmg_setup control flag for vertical index direction \n
  • 0: index from TOA to surface
  • 1: index from surface to TOA
1 -
icliq_sw gfs_control_type sw optical property for liquid clouds \n +
icliq_sw rrtmg_sw sw optical property for liquid clouds \n
  • 0: input cloud optical depth, ignoring iswcice setting
  • 1: cloud optical property scheme based on Hu and Stamnes (1993) \cite hu_and_stamnes_1993 method
  • 2: cloud optical property scheme based on Hu and Stamnes (1993) \cite hu_and_stamnes_1993 - updated
1 -
iovr_sw gfs_control_type control flag for cloud overlap in SW radiation \n +
iovr_sw rrtmg_sw control flag for cloud overlap in SW radiation \n
  • 0: random overlapping clouds
  • 1: max/ran overlapping clouds
  • 2: maximum overlap clouds (mcica only)
  • 3: decorrelation-length overlap (mcica only) +
  • 4: exponential overlapping method +
  • 5: exponential-random overlapping method
1 -
iovr_lw gfs_control_type control flag for cloud overlap in LW radiation \n +
iovr_lw rrtmg_lw control flag for cloud overlap in LW radiation \n
  • 0: random overlapping clouds
  • 1: max/ran overlapping clouds
  • 2: maximum overlap clouds (mcica only)
  • 3: decorrelation-length overlap (mcica only) +
  • 4: exponential overlapping method +
  • 5: exponential-random overlapping method
1 -
ictm gfs_control_type external data time/date control flag \n +
ictm GFS_rrtmg_setup external data time/date control flag \n
  • -2: same as 0, but superimpose seasonal cycle from climatology data set
  • -1: use user provided external data for the forecast time, no extrapolation @@ -88,31 +104,31 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • yyyy1: use yyyy data for the forecast. if needed, do extrapolation to match the fcst time
1 -
crick_proof gfs_control_type control flag for eliminating CRICK \n +
crick_proof GFS_rrtmg_setup control flag for eliminating CRICK \n
  • .true.: apply layer smoothing to eliminate CRICK
  • .false.: do not apply layer smoothing
.false. -
ccnorm gfs_control_type control flag for in-cloud condensate mixing ratio \n +
ccnorm GFS_rrtmg_setup control flag for in-cloud condensate mixing ratio \n
  • .true.: normalize cloud condensate
  • .false.: not normalize cloud condensate
.false. -
norad_precip gfs_control_type control flag for not using precip in radiation (Ferrier scheme) \n +
norad_precip GFS_rrtmg_setup control flag for not using precip in radiation (Ferrier scheme) \n
  • .true.: snow/rain has no impact on radiation
  • .false.: snow/rain has impact on radiation
.false. -
ialb gfs_control_type SW surface albedo control flag: \n +
ialb GFS_rrtmg_setup SW surface albedo control flag: \n
  • 0: using climatology surface albedo scheme for SW
  • 1: using MODIS based land surface albedo for SW
0 -
iems gfs_control_type LW surface emissivity control flag (ab 2-digit integer) : \n +
iems GFS_rrtmg_setup LW surface emissivity control flag (ab 2-digit integer) : \n
  • a: =0 set surface air/ground t same for LW radiation
  • =1 set surface air/ground t diff for LW radiation @@ -121,7 +137,7 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • =2 future development (not yet)
0 -
iaer gfs_control_type 4-digit aerosol flag (dabc for aermdl, volcanic, LW, SW): \n +
iaer GFS_rrtmg_setup 4-digit aerosol flag (dabc for aermdl, volcanic, LW, SW): \n
  • d:tropospheric aerosol model scheme flag \n =0 or none, opac-climatology aerosol scheme \n @@ -136,28 +152,28 @@ and how stochastic perturbations are used in the Noah Land Surface Model. =1 include tropospheric aerosol in SW
1 -
ico2 gfs_control_type \f$CO_2\f$ data source control flag:\n +
ico2 GFS_rrtmg_setup \f$CO_2\f$ data source control flag:\n
  • 0: prescribed value (380 ppmv)
  • 1: yearly global averaged annual mean from observations
  • 2: monthly 15 degree horizontal resolution from observations
0 -
isubc_sw gfs_control_type subgrid cloud approximation control flag in SW radiation: \n +
isubc_sw rrtmg_sw subgrid cloud approximation control flag in SW radiation: \n
  • 0: no McICA approximation in SW radiation
  • 1: use McICA with prescribed permutation seeds (test mode)
  • 2: use McICA with randomly generated permutation seeds
0 -
isubc_lw gfs_control_type subgrid cloud approximation control flag in LW radiation: \n +
isubc_lw rrtmg_lw subgrid cloud approximation control flag in LW radiation: \n
  • 0: no McICA approximation in LW radiation
  • 1: use McICA with prescribed permutatition seeds (test mode)
  • 2: use McICA with randomly generated permutation seeds
0 -
isol gfs_control_type solar constant scheme control flag: \n +
isol GFS_rrtmg_setup solar constant scheme control flag: \n
  • 0: fixed value = 1366.0 \f$W m^{-2}\f$ (old standard)
  • 10: fixed value = 1360.8 \f$W m^{-2}\f$ (new standard) @@ -167,31 +183,11 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: CMIP5 TIM-scale TSI table (monthly) with 11-yr cycle approximation
0 -
lwhtr gfs_control_type logical flag for output of longwave heating rate .true. -
swhtr gfs_control_type logical flag for output of shortwave heating rate .true. -
cnvgwd gfs_control_type logical flag for convective gravity wave drag scheme dependent on maxval(cdmbgwd(3:4) == 0.0) .false. -
shal_cnv gfs_control_type logical flag for calling shallow convection .false. -
lmfshal gfs_control_type flag for mass-flux shallow convection scheme in the cloud fraction calculation shal_cnv .and. (imfshalcnv > 0) -
lmfdeep2 gfs_control_type flag for mass-flux deep convection scheme in the cloud fraction calculation imfdeepcnv == 2 .or. 3 .or.4 -
cal_pre gfs_control_type logical flag for calling precipitation type algorithm .false. -
redrag gfs_control_type logical flag for applying reduced drag coefficient for high wind over sea in GFS surface layer scheme .false. -
dspheat gfs_control_type logical flag for using TKE dissipative heating to temperature tendency in hybrid EDMF and TKE-EDMF schemes .false. -
hybedmf gfs_control_type logical flag for calling hybrid EDMF PBL scheme .false. -
satmedmf gfs_control_type logical flag for calling TKE EDMF PBL scheme .false. -
isatmedmf gfs_control_type flag for scale-aware TKE-based moist EDMF scheme \n -
    -
  • 0: initial version of satmedmf (Nov.2018) -
  • 1: updated version of satmedmf (as of May 2019) -
-
0 -
do_mynnedmf gfs_control_type flag to activate MYNN-EDMF scheme .false. -
random_clds gfs_control_type logical flag for whether clouds are random .false. -
trans_trac gfs_control_type logical flag for convective transport of tracers .false. -
lheatstrg gfs_control_type logical flag for canopy heat storage parameterization .false. -
shinhong gfs_control_type flag for scale-aware Shinhong PBL scheme .false. -
do_ysu gfs_control_type flag for YSU PBL scheme .false. -
cnvcld gfs_control_type logical flag for convective cloud .false. -
imfshalcnv gfs_control_type flag for mass flux shallow convective scheme:\n +
lwhtr rrtmg_lw flag for output of longwave heating rate .true. +
swhtr rrtmg_sw flag for output of shortwave heating rate .true. +
nhfrad GFS_time_vary_pre number of timesteps for which to call radiation on physics timestep (coldstarts) 0 +
\b Parameters \b related \b to \b cumulus \b schemes +
imfshalcnv choice of shallow convective scheme flag for mass flux shallow convective scheme:\n
  • 1:July 2010 version of mass-flux shallow convective scheme (operational as of 2016)
  • 2: scale- & aerosol-aware mass-flux shallow convective scheme (2017) @@ -201,7 +197,7 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • -1: no shallow convection used
1 -
imfdeepcnv gfs_control_type flag for mass-flux deep convective scheme:\n +
imfdeepcnv choice of deep convective scheme flag for mass-flux deep convective scheme:\n
  • -1: Chikira-Sugiyama deep convection (with \b cscnv = .T.)
  • 1: July 2010 version of SAS convective scheme (operational version as of 2016) @@ -210,311 +206,246 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: new Tiedtke scheme (CAPS)
1 -
lgfdlmprad gfs_control_type flag for GFDL mp scheme and radiation consistency .false. -
cdmbgwd(4) gfs_control_type multiplication factors for mountain blocking(1), orographic gravity wave drag(2) -
    -
  • [1]: GWDPS mountain blocking -
  • [2]: GWDPS orographic gravity wave drag -
  • [3]: the modulation total momentum flux of NGWs by intensities of the total precipitation -
  • [4]: TKE for future tests and applications -
-
2.0,0.25,1.0,1.0 -
prslrd0 gfs_control_type pressure level above which to apply Rayleigh damping 0.0d0 -
lsm gfs_control_type flag for land surface model to use \n -
    -
  • 1: Noah LSM -
  • 2: RUC LSM -
-
1 -
lsoil gfs_control_type number of soil layers 4 -
ivegsrc gfs_control_type flag for vegetation type dataset choice: \n +
do_deep see \a GFS_typedefs.F90 consistency check for deep convection .true. +
shal_cnv GFS_suite_interstitial flag for calling shallow convection .false. +
lmfshal GFS_rrtmg_pre flag for mass-flux shallow convection scheme in the cloud fraction calculation shal_cnv .and. (imfshalcnv > 0) +
lmfdeep2 GFS_rrtmg_pre flag for mass-flux deep convection scheme in the cloud fraction calculation imfdeepcnv == 2 .or. 3 .or.4 +
random_clds GFS_phys_time_vary flag for whether clouds are random .false. +
trans_trac GFS_suite_interstitial flag for convective transport of tracers .false. +
cal_pre GFS_phys_time_vary or GFS_MP_generic flag for calling precipitation type algorithm .false. +
shcnvcw \ref samfshalcnv flag for shallow convective cloud .false. +
cscnv cs_conv flag for Chikira-Sugiyama deep convection .false. +
do_aw cs_conv flag for Arakawa-Wu scale-awere adjustment .false. +
do_shoc cs_conv flag for Simplified Hihger-order Closure (SHOC) .false. +
do_awdd cs_conv flag to enable treating convective tendencies following Arakwaw-Wu for downdrafts (2013) .false. +
cs_parm(10) cs_conv tunable parameters for Chikira-Sugiyama convection 8.0,4.0,1.0e3,3.5e3,20.0,1.0,-999.,1.,0.6,0. +
\b Parameters \b related \b to \b PBL \b scheme \b options +
do_mynnedmf mynnedmf_wrapper* flag to activate MYNN-EDMF scheme .false. +
do_myjsfc myjpbl_wrapper flag for MYJ surface layer scheme .false +
dspheat \ref satmedmfvdifq, \ref hedmf flag for using TKE dissipative heating to temperature tendency in hybrid EDMF and TKE-EDMF schemes .false. +
satmedmf \ref satmedmfvdifq flag for calling scale-ware TKE-based EDMF PBL scheme .false. +
isatmedmf \ref satmedmfvdifq flag for scale-aware TKE-based moist EDMF scheme \n
    -
  • 0: USGS -
  • 1: IGBP(20 category) -
  • 2: UMD (13 category) -
-
2 -
isot gfs_control_type flag for soil type dataset choice:\n -
    -
  • 0: Zobler soil type (9 category) -
  • 1: STATSGO soil type (19 category) -
-
0 -
mom4ice gfs_control_type flag controls mom4 sea ice .false. -
debug gfs_control_type flag for debug printout .false. -
nstf_name(5) gfs_control_type NSST related paramters:\n -
    -
  • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled -
  • nstf_name(2): 1=NSST spin up on, 0=NSST spin up off -
  • nstf_name(3): 1=NSST analysis on, 0=NSST analysis off -
  • nstf_name(4): zsea1 in mm -
  • nstf_name(5): zesa2 in mm -
-
/0,0,1,0,5/ -
nst_anl gfs_control_type flag for NSST analysis in gcycle/sfcsub .false. -
effr_in gfs_control_type logical flag for using input cloud effective radii calculation .false. -
aero_in gfs_control_type logical flag for using aerosols in Morrison-Gettelman microphysics .false. -
iau_delthrs gfs_control_type incremental analysis update (IAU) time interval in hours 6 -
iaufhrs gfs_control_type forecast hours associated with increment files -1 -
\b Parameters \b Specific \b to \b csawmg \b Suite -
crtrh(3) gfs_control_type critical relative humidity at the surface, PBL top and at the top of the atmosphere 0.90,0.90,0.90 -
cscnv gfs_control_type logical flag for Chikira-Sugiyama deep convection .false. -
do_aw gfs_control_type flag for Arakawa-Wu scale-awere adjustment .false. -
do_awdd gfs_control_type flag to enable treating convective tendencies following Arakwaw-Wu for downdrafts (2013) .false. -
do_sb_physics gfs_control_type logical flag for SB2001 autoconversion or accretion .true. -
do_cldice gfs_control_type flag for cloud ice processes for MG microphysics .true. -
hetfrz_classnuc gfs_control_type flag for heterogeneous freezing for MG microphysics .false. -
mg_nccons gfs_control_type flag for constant droplet concentration for MG microphysics .false. -
mg_nicons gfs_control_type flag for constant ice concentration for MG microphysics .false. -
mg_ngcons gfs_control_type flag for constant graupel concentration for MG microphysics .false. -
sed_supersat gfs_control_type flag for allowing supersaturation after sedimentation for MG microphysics .true. -
mg_do_graupel gfs_control_type flag for turning on prognostic graupel (with fprcp=2) .true. -
mg_do_hail gfs_control_type flag for turning on prognostic hail (with fprcp=2) .false. -
shcnvcw gfs_control_type logical flag for shallow convective cloud .false. -
xkzm_h gfs_control_type background vertical diffusion for heat and q 1.0d0 -
xkzm_m gfs_control_type background vertical diffusion for momentum 1.0d0 -
xkzm_s gfs_control_type sigma threshold for background mom. diffusion 1.0d0 -
xkzminv gfs_control_type maximum background value of heat diffusivity in the inversion layer 0.3 -
microp_uniform gfs_control_type logical flag for uniform subcolumns for MG microphysics .true. -
mg_do_ice_gmao gfs_control_type logical flag for turning on gmao ice autoconversion in MG microphysics .false. -
mg_do_liq_liu gfs_control_type logical flag for turning on Liu liquid treatment in MG microphysics .true. -
mg_dcs gfs_control_type autoconversion size threshold for cloud ice to snow in MG microphysics 200.0 -
mg_alf gfs_control_type tuning factor for alphas (alpha = 1 - critical relative humidity) 1.0 -
mg_ts_auto_ice(2) gfs_control_type autoconversion time scale for ice in MG microphysics 180.0,180.0 -
mg_qcvar gfs_control_type cloud water relative variance in MG microphysics 1.0 -
mg_rhmini gfs_control_type relative humidity threshold parameter for nucleating ice 1.01 -
mg_ncnst gfs_control_type constant droplet num concentration \f$m^{-3}\f$ 100.e6 -
mg_ninst gfs_control_type constant ice num concentration \f$m^{-3}\f$ 0.15e6 -
mg_ngnst gfs_control_type constant graupel/hail num concertration \f$m^{-3}\f$ 0.10e6 -
mg_berg_eff_factor gfs_control_type berg efficiency factor 2.0 -
mg_qcmin(2) gfs_control_type min liquid and ice mixing ratio in MG macro clouds 1.0d-9, 1.0d-9 -
mg_precip_frac_method gfs_control_type type of precipitation fraction method 'max_overlap' -
fprcp gfs_control_type number of frozen precipitation species in MG microphysics \n -
    -
  • 0: no prognostic rain and snow -
  • 1: MG2 -
  • 2: MG3 +
  • 0: initial version of satmedmf (Nov.2018) +
  • 1: updated version of satmedmf (as of May 2019)
-
0 -
pdfflag gfs_control_type pdf flag for MG macro physics 4 -
cs_parm(10) gfs_control_type tunable parameters for Chikira-Sugiyama convection 8.0,4.0,1.0e3,3.5e3,20.0,1.0,-999.,1.,0.6,0. -
iccn gfs_control_type flag for using IN and CCN forcing in MG2/3 microphysics .false. -
rhcmax gfs_control_type maximum critical relative humidity 0.9999999 -
\b Parameters \b Specific \b to \b GSD_v0 \b Suite -
ltaerosol gfs_control_type logical flag for using aerosol climotology in Thompson MP scheme .false. -
lradar gfs_control_type logical flag for computing radar reflectivity in Thompson MP scheme .false. -
ttendlim gfs_control_type temperature tendency limiter per time step in K/s, set to < 0 to deactivate -999.0 -
do_mynnsfclay gfs_control_type flag to activate MYNN-SFCLAY scheme .false. -
grav_settling gfs_control_type flag to activate gravitational settling of cloud droplets as described in Nakanishi (2000) \cite nakanishi_2000 0 -
bl_mynn_mixlength gfs_control_type flag for different version of mixing length formulation \n + 0 +
hybedmf \ref hedmf flag for calling hybrid EDMF PBL scheme .false. +
shinhong shinhongvdif flag for scale-aware Shinhong PBL scheme .false. +
do_ysu see \a GFS_typedefs.F90 flag for YSU PBL scheme .false. +
debug see \a GFS_typedefs.F90 flag for debug printout .false. +
xkzm_h \ref satmedmfvdifq, \ref hedmf background vertical diffusion for heat and q 1.0d0 +
xkzm_m \ref satmedmfvdifq, \ref hedmf background vertical diffusion for momentum 1.0d0 +
xkzm_s \ref satmedmfvdifq, \ref hedmf sigma threshold for background mom. diffusion 1.0d0 +
xkzminv \ref hedmf maximum background value of heat diffusivity in the inversion layer 0.3 +
moninq_fac \ref hedmf atmosphere diffusivity coefficient factor 1.0 +
dspfac \ref satmedmfvdifq TKE dissipative heating factor 1.0 +
bl_upfr \ref satmedmfvdifq updraft fraction in boundary layer mass flux scheme 0.13 +
bl_dnfr \ref satmedmfvdifq downdraft fraction in boundary layer mass flux scheme 0.1 +
grav_settling mynnedmf_wrapper flag to activate gravitational settling of cloud droplets as described in Nakanishi (2000) \cite nakanishi_2000 0 +
bl_mynn_mixlength mynnedmf_wrapper flag for different version of mixing length formulation \n
  • 0: Original form from Nakanishi and Niino (2009) \cite NAKANISHI_2009 . NO scale-awareness is applied to the master mixing length, regardless of "scaleware" setting
  • 1: HRRR operational form 201609-201807. Designed to work without the mass-flux scheme. Uses BouLac mixing length in free atmosphere.
  • 2: HRRR operational form 201807-present. Designed to be compatible with mass-flux scheme activated (default)
2 -
bl_mynn_edmf gfs_control_type flag to activate the mass-flux scheme \n +
bl_mynn_edmf mynnedmf_wrapper flag to activate the mass-flux scheme \n
  • 0: deactivate mass-flux scheme
  • 1: activate dynamic multiplume mass-flux scheme
0 -
bl_mynn_edmf_mom gfs_control_type flag to activate the transport of momentum \n +
bl_mynn_edmf_mom mynnedmf_wrapper flag to activate the transport of momentum \n
  • 0: deactivate momentum transport in mass-flux scheme
  • 1: activate momentum transport in dynamic multiplume mass-flux scheme. \p bl_mynn_edmf must be set to 1
1 -
bl_mynn_edmf_tke gfs_control_type flag to activate the transport of TKE \n +
bl_mynn_edmf_tke mynnedmf_wrapper flag to activate the transport of TKE \n
  • 0: deactivate TKE transport in mass-flux scheme
  • 1: activate TKE transport in dynamic multiplume mass-flux scheme. \p bl_mynn_edmf must be set to 1
0 -
bl_mynn_edmf_part gfs_control_type flag to partitioning the MF and ED areas 0 -
bl_mynn_edmf_tkeadvect gfs_control_type activate computation of TKE advection (not yet in use for FV3) \n +
bl_mynn_edmf_part mynnedmf_wrapper flag to partitioning the MF and ED areas 0 +
bl_mynn_edmf_tkeadvect mynnedmf_wrapper activate computation of TKE advection (not yet in use for FV3) \n
  • false: deactivate TKE advection
  • true: activate TKE advection
.false. -
bl_mynn_edmf_tkebudget gfs_control_type flag to activate TKE budget 0 -
bl_mynn_edmf_cloudpdf gfs_control_type flag to determine which cloud PDF to use \n +
bl_mynn_edmf_tkebudget mynnedmf_wrapper flag to activate TKE budget 0 +
bl_mynn_edmf_cloudpdf mynnedmf_wrapper flag to determine which cloud PDF to use \n
  • 0: use Sommeria-Deardorff subgrid cloud PDF
  • 1: use Kuwano-Yoshida subgrid cloud PDF
  • 2: use modified Chaboureau-Bechtold subgrid cloud PDF
2 -
bl_mynn_edmf_cloudmix gfs_control_type flag to activate mixing of cloud species \n +
bl_mynn_edmf_cloudmix mynnedmf_wrapper flag to activate mixing of cloud species \n
  • 0: deactivate the mixing of any water species mixing ratios
  • 1: activate the mixing of all water species mixing ratios
1 -
bl_mynn_mixqt gfs_control_type flag to mix total water or individual species \n +
bl_mynn_mixqt mynnedmf_wrapper flag to mix total water or individual species \n
  • 0: mix individual water species separately
  • 1: DO NOT USE
0 -
icloud_bl gfs_control_type flag to coupling SGS clouds to radiation \n +
icloud_bl mynnedmf_wrapper flag to coupling SGS clouds to radiation \n
  • 0: deactivate coupling subgrid clouds to radiation
  • 1: activate subgrid cloud coupling to radiation (highly suggested)
1 -
lsoil_lsm gfs_control_type number of soil layers internal to land surface model -1 -
ldiag_ugwp GFS_control_type flag for CIRES UGWP diagnostics .false. -
do_ugwp GFS_control_type flag for CIRES UGWP revised OGW -
    -
  • .T.: revised gwdps_v0 -
  • .F.: GFS operational orographic gwdps -
-
.false. -
do_tofd GFS_control_type flag for turbulent orographic form drag .false. -
do_sppt gfs_control_type flag for stochastic SPPT option .false. -
do_shum gfs_control_type flag for stochastic SHUM option .false. -
do_skeb gfs_control_type flag for stochastic SKEB option .false. -
do_sfcperts gfs_control_type flag for stochastic surface perturbations option .false. -
\b &nam_sfcperts -
nsfcpert gfs_control_type number of weights for stochastic surface perturbation 0 -
pertz0 gfs_control_type magnitude of perturbation of momentum roughness length -999. -
pertzt gfs_control_type magnitude of perturbation of heat to momentum roughness length ratio -999. -
pertshc gfs_control_type magnitude of perturbation of soil hydraulic conductivity -999. -
pertlai gfs_control_type magnitude of perturbation of leaf area index -999. -
pertalb gfs_control_type magnitude of surface albedo perturbation -999. -
pertvegf gfs_control_type magnitude of perturbation of vegetation fraction -999. -
iseed_sfc compns_stochy_mod random seeds (if 0 use system clock) 0 -
sfc_tau compns_stochy_mod time scales -999. -
sfc_lscale compns_stochy_mod length scales -999. -
sppt_land compns_stochy_mod .false. -
\b &stochy_nam -
use_zmtnblck compns_stochy_mod flag for mountain blocking. .T. = do not apply perturbations below the dividing streamline that is diagnosed by the gravity wave drag, mountain blocking scheme .false. -
ntrunc compns_stochy_mod spectral resolution (e.g. T126) of random patterns -999 -
lon_s, lat_s compns_stochy_mod number of longitude and latitude point for the Gaussian grid -999 -
fhstoch compns_stochy_mod forecast hour to write out random pattern in order to restart the pattern for a different forecast (used in DA), file is stoch_out.F -999.0 -
stochini compns_stochy_mod set to true if wanting to read in a previous random pattern (input file need to be named \c stoch_ini) .false. -
sppt compns_stochy_mod amplitude of random patterns -999. -
sppt_tau compns_stochy_mod decorrelation timescales in seconds -999. -
sppt_lscale compns_stochy_mod decorrelation spatial scales in meters -999. -
sppt_logit compns_stochy_mod logit transform for SPPT to bounded interval [-1,+1] .false. -
iseed_sppt compns_stochy_mod seeds for setting the random number sequence (ignored if \c stochini is true) 0 -
sppt_sigtop1, sppt_sigtop2 compns_stochy_mod sigma levels to taper perturbations to zeros 0.1, 0.025 -
sppt_sfclimit compns_stochy_mod reduce amplitude of SPPT near surface (lowest 2 levels) .false. -
shum compns_stochy_mod amplitude of stochastic boundary layer specific humidity perturbations -999. -
shum_tau compns_stochy_mod decorrelation time scales in seconds -999. -
shum_lscale compns_stochy_mod decorrelation spatial scales in meters -999. -
shum_sigefold compns_stochy_mod e-folding lengthscale (in units of sigma) of specific humidity perturbations 0.2 -
skeb compns_stochy_mod stochastic KE backscatter amplitude -999. -
skeb_tau compns_stochy_mod decorrelation timescales in seconds -999. -
skeb_lscale compns_stochy_mod decorrelation spatial scales in meter -999. -
iseed_skeb compns_stochy_mod seeds for setting the random number sequnce (ignored if \c stochini is true) 0 -
skeb_vfilt compns_stochy_mod 0 -
skebnorm compns_stochy_mod 0: random pattern is stream function,1: pattern is kenorm, 2: pattern is vorticity 0 -
skeb_varspect_opt compns_stochy_mod Gaussian or power law variance spectrum for SKEB (0: Gaussian, 1: power law) 0 -
skeb_npass compns_stochy_mod number of passes of smoother for dissipation estimate 11 -
skeb_vdof compns_stochy_mod the number of degrees of freedom in the vertical for the SKEB random pattern 5 -
skeb_sigtop1, skeb_sigtop2 compns_stochy_mod sigma levels to taper perturbations to zeros 0.1, 0.025 -
skebint compns_stochy_mod 0 -
\b &gfdl_cloud_microphysics_nml -
sedi_transport gfdl_cloud_microphys_mod logical flag for turning on horizontal momentum transport during sedimentation .true. -
do_sedi_w gfdl_cloud_microphys_mod \a .true. to turn on vertical motion transport during sedimentation. (not supported in GFS physics) .false. -
do_sedi_heat gfdl_cloud_microphys_mod logical flag for turning on horizontal heat transport during sedimentation .true. -
rad_snow gfdl_cloud_microphys_mod logical flag for considering snow in cloud fraction calculation .true. -
rad_graupel gfdl_cloud_microphys_mod logical flag for considering graupel in cloud fraction calculation .true. -
rad_rain gfdl_cloud_microphys_mod logical flag for considering rain in cloud fraction calculation .true. -
cld_min gfdl_cloud_microphys_mod minimum cloud fraction. If total cloud condensate exceeds 1.0e-6 kg/kg, cloud fraction cannot be less than \p cld_min 0.05 -
const_vi gfdl_cloud_microphys_mod logical flag for using constant cloud ice fall speed .false. -
const_vs gfdl_cloud_microphys_mod logical flag for using constant snow fall speed .false. -
const_vg gfdl_cloud_microphys_mod logical flag for using constant graupel fall speed .false. -
const_vr gfdl_cloud_microphys_mod logical flag for using constant rain fall speed .false. -
vi_fac gfdl_cloud_microphys_mod tunable factor for cloud ice fall or the constant cloud ice fall speed when \p const_vi is .true. 1. -
vr_fac gfdl_cloud_microphys_mod tunable factor for rain fall or the constant rain fall speed when \p const_vr is .true. 1. -
vs_fac gfdl_cloud_microphys_mod tunable factor for snow fall or the constant snow fall speed when \p const_vs is .true. 1. -
vg_fac gfdl_cloud_microphys_mod tunable factor for graupel fall or the constant graupel fall speed when \p const_vg is .true. 1. -
vi_max gfdl_cloud_microphys_mod maximum fall speed for cloud ice 0.5 -
vs_max gfdl_cloud_microphys_mod maximum fall speed for snow 5.0 -
vg_max gfdl_cloud_microphys_mod maximum fall speed for graupel 8.0 -
vr_max gfdl_cloud_microphys_mod maximum fall speed for rain 12.0 -
qi_lim gfdl_cloud_microphys_mod cloud ice limiter to prevent large ice built up in cloud ice freezing and deposition 1. -
prog_ccn gfdl_cloud_microphys_mod logical flag for activating prognostic CCN (not supported in GFS Physics) .false. -
do_qa gfdl_cloud_microphys_mod \a .true. to activate inline cloud fraction diagnosis in fast saturation adjustment. \a .false. to activate inline cloud fraction diagnosis in major cloud microphysics .true. -
fast_sat_adj gfdl_cloud_microphys_mod logical flag for adjusting cloud water evaporation (cloud water -> water vapor), cloud water freezing (cloud water -> cloud ice), cloud ice deposition (water vapor -> cloud ice) when fast saturation adjustment is activated (\b do_sat_adj = .true. in \b fv_core_nml block) .true. -
tau_l2v gfdl_cloud_microphys_mod time scale for evaporation of cloud water to water vapor. Increasing(decreasing) \p tau_l2v can decrease(boost) deposition of cloud water to water vapor 300. -
tau_v2l gfdl_cloud_microphys_mod time scale for condensation of water vapor to cloud water. Increasing(decreasing) \p tau_v2l can decrease(boost) condensation of water vapor to cloud water 150. -
tau_g2v gfdl_cloud_microphys_mod time scale for sublimation of graupel to water vapor. Increasing(decreasing) \p tau_g2v can decrease(boost) sublimation of graupel to water vapor 900. -
tau_g2r gfdl_cloud_microphys_mod time scale for graupel melting. Increasing(decreasing) \p tau_g2r can decrease(boost) melting of graupel to rain (graupel-> rain) 600. -
tau_v2g gfdl_cloud_microphys_mod time scale for deposition of water vapor to graupel. Increasing(decreasing) \p tau_v2g can decrease(boost) deposition of water vapor to graupel (water vapor -> graupel) 21600. -
tau_l2r gfdl_cloud_microphys_mod time scale for autoconversion of cloud water to rain. Increasing(decreasing) \p tau_l2r can decrese(boost) autoconversion of cloud water to rain (cloud water -> rain) 900. -
tau_r2g gfdl_cloud_microphys_mod time scale for freezing of rain to graupel. Increasing(decreasing) \p tau_r2g can decrease(boost) freezing of rain to graupel (rain->graupel) 900. -
tau_i2s gfdl_cloud_microphys_mod time scale for autoconversion of cloud ice to snow. Increasing(decreasing) \p tau_i2s can decrease(boost) autoconversion of cloud ice to snow (cloud ice -> snow) 1000. -
tau_imlt gfdl_cloud_microphys_mod time scale for cloud ice melting. Increasing(decreasing) \p tau_imlt can decrease(boost) melting of cloud ice to cloud water or rain (cloud ice -> cloud water or rain) 600. -
tau_smlt gfdl_cloud_microphys_mod time scale for snow melting. Increasing(decreasing) \p tau_smlt can decrease(boost) melting of snow to cloud water or rain (snow-> cloud water or rain) 900. -
rthresh gfdl_cloud_microphys_mod critical cloud water radius for autoconversion (cloud water -> rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 10.0e-6 -
dw_land gfdl_cloud_microphys_mod base value for subgrid deviation/variability over land 0.20 -
dw_ocean gfdl_cloud_microphys_mod base value for subgrid deviation/variability over ocean 0.10 -
ql_gen gfdl_cloud_microphys_mod maximum value for cloud water generated from condensation of water vapor (water vapor-> cloud water) 1.0e-3 -
qi_gen gfdl_cloud_microphys_mod maximum value of cloud ice generated from deposition of water vapor (water vapor->cloud ice) or freezing(cloud water -> cloud ice). Increasing(decreasing) \p qi_gen can increas(decrease) cloud ice 1.82e-6 -
ql_mlt gfdl_cloud_microphys_mod maximum value of cloud water allowed from melted cloud ice (cloud ice -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p ql_mlt can increase(decrease) cloud water and decrease(increase) rain 2.0e-3 -
qs_mlt gfdl_cloud_microphys_mod maximum value of cloud water allowed from melted snow (snow -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p qs_mlt can increas(decrease) cloud water and decrease (increase) rain 1.0e-6 -
ql0_max gfdl_cloud_microphys_mod threshold of cloud water to rain autoconversion (cloud water -> rain). Increasing(decreasing) \p ql0_max can increase(decrease) rain and decrease(increase) cloud water 2.0e-3 -
qi0_max gfdl_cloud_microphys_mod maximum value of cloud ice generated from other sources like convection. Exceedance of which will become snow. Increasing(decreasing) \p qi0_max can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 -
qi0_crt gfdl_cloud_microphys_mod threshold of cloud ice to snow autoconversion (cloud ice -> snow). Increasing(decreasing) \p qi0_crt can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 -
qs0_crt gfdl_cloud_microphys_mod threshold of snow to graupel autoconversion (snow -> graupel). Increasing(decreasing) \p qs0_crt can increase(decrease) snow and decrease(increase) graupel 1.0e-3 -
qc_crt gfdl_cloud_microphys_mod minimum value of cloud condensate to allow partial cloudiness. Partial cloud can only exist when total cloud condensate exceeds \p qc_crt 5.0e-8 -
c_psaci gfdl_cloud_microphys_mod accretion efficiency of cloud ice to snow (cloud ice -> snow). Increasing(decreasing) of \p c_psaci can boost(decrease) the accretion of cloud ice to snow 0.02 -
c_pgacs gfdl_cloud_microphys_mod accretion efficiency of snow to graupel (snow -> graupel). Increasing(decreasing) of \p c_pgacs can boost(decrease) the accretion of snow to graupel 2.0e-3 -
rh_inc gfdl_cloud_microphys_mod relative humidity increment for complete evaporation of cloud water and cloud ice 0.25 -
rh_inr gfdl_cloud_microphys_mod relative humidity increment for sublimation of snow 0.25 -
rh_ins gfdl_cloud_microphys_mod relative humidity increment for minimum evaporation of rain 0.25 -
rthresh gfdl_cloud_microphys_mod critical cloud water radius for autoconversion(cloud water->rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 1.0e-5 -
ccn_l gfdl_cloud_microphys_mod base CCN over land. Increasing(decreasing) \p ccn_l can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 270. -
ccn_o gfdl_cloud_microphys_mod base CCN over ocean. Increasing(decreasing) \p ccn_o can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 90. -
c_paut gfdl_cloud_microphys_mod autoconversion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_paut can boost(decrease) the autoconversion of cloud water to rain 0.55 -
c_cracw gfdl_cloud_microphys_mod accretion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_cracw can boost(decrease) the accretion of cloud water to rain 0.9 -
sat_adj0 gfdl_cloud_microphys_mod adjust factor for condensation of water vapor to cloud water (water vapor->cloud water) and deposition of water vapor to cloud ice 0.9 -
use_ppm gfdl_cloud_microphys_mod \e true to use PPM fall scheme; \e false to use time-implicit monotonic fall scheme .false. -
use_ccn gfdl_cloud_microphys_mod \e true to compute prescribed CCN. It should be .true. when \p prog_ccn = .false. .false. -
mono_prof gfdl_cloud_microphys_mod \e true to turn on terminal fall with monotonic PPM scheme. This is used together with \p use_ppm=.true. .true. -
z_slope_liq gfdl_cloud_microphys_mod \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud water to rain .true. -
z_slope_ice gfdl_cloud_microphys_mod \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud ice to snow .false. -
de_ice gfdl_cloud_microphys_mod \e true to convert excessive cloud ice to snow to prevent ice over-built from other sources like convection scheme (not supported in GFS physics) .false. -
fix_negative gfdl_cloud_microphys_mod \e true to fix negative water species using nearby points .false. -
icloud_f gfdl_cloud_microphys_mod flag (0,1,or 2) for cloud fraction diagnostic scheme 0 -
irain_f gfdl_cloud_microphys_mod flag (0 or 1) for cloud water autoconversion to rain scheme. 0: with subgrid variability; 1: no subgrid variability 0 -
mp_time gfdl_cloud_microphys_mod time step of GFDL cloud microphysics (MP). If \p mp_time isn't divisible by physics time step or is larger than physics time step, the actual MP time step becomes \p dt/NINT[dt/MIN(dt,mp_time)] 150. -
alin gfdl_cloud_microphys_mod parameter \a a in Lin et al.(1983). Constant in empirical formula for \f$U_R\f$. Increasing(decreasing) \p alin can boost(decrease) accretion of cloud water by rain and rain evaporation 842. -
clin gfdl_cloud_microphys_mod parameter \a c in Lin et al.(1983). Constant in empirical formula for \f$U_S\f$. Increasing(decreasing) \p clin can boost(decrease) accretion of cloud water by snow, accretion of cloud ice by snow, snow sublimation and deposition, and snow melting 4.8 -
t_min gfdl_cloud_microphys_mod temperature threshold for instant deposition. Deposit all water vapor to cloud ice when temperature is lower than \p t_min 178. -
t_sub gfdl_cloud_microphys_mod temperature threshold for sublimation. Cloud ice, snow or graupel stops(starts) sublimation when temperature is lower(higher) then \p t_sub 184. -
mp_print gfdl_cloud_microphys_mod \a .true. to turn on GFDL cloud microphysics debugging print out. (not supported in GFS physics) .false. -
\b &cires_ugwp_nml -
knob_ugwp_version cires_ugwp_module parameter selects a version of the UGWP implementation in FV3GFS-127L \n +
\b Parameters \b related \b to \b surface \b perturbation \b options +
nsfcpert GFS_surface_generic_pre number of weights for stochastic surface perturbation 0 +
pertz0 GFS_surface_generic_pre magnitude of perturbation of momentum roughness length -999. +
pertzt GFS_surface_generic_pre magnitude of perturbation of heat to momentum roughness length ratio -999. +
pertshc GFS_surface_generic_pre magnitude of perturbation of soil hydraulic conductivity -999. +
pertlai GFS_surface_generic_pre magnitude of perturbation of leaf area index -999. +
pertalb GFS_surface_generic_pre magnitude of surface albedo perturbation -999. +
pertvegf GFS_surface_generic_pre magnitude of perturbation of vegetation fraction -999. +
\b Parameters \b related \b to \b microphysics \b scheme \b options +
lradar gfdl_cloud_microphys flag for computing radar reflectivity in Thompson MP scheme .false. +
sedi_transport gfdl_cloud_microphys flag for turning on horizontal momentum transport during sedimentation .true. +
do_sedi_w gfdl_cloud_microphys \a .true. to turn on vertical motion transport during sedimentation. (not supported in GFS physics) .false. +
do_sedi_heat gfdl_cloud_microphys flag for turning on horizontal heat transport during sedimentation .true. +
rad_snow gfdl_cloud_microphys flag for considering snow in cloud fraction calculation .true. +
rad_graupel gfdl_cloud_microphys flag for considering graupel in cloud fraction calculation .true. +
rad_rain gfdl_cloud_microphys flag for considering rain in cloud fraction calculation .true. +
cld_min gfdl_cloud_microphys minimum cloud fraction. If total cloud condensate exceeds 1.0e-6 kg/kg, cloud fraction cannot be less than \p cld_min 0.05 +
const_vi gfdl_cloud_microphys flag for using constant cloud ice fall speed .false. +
const_vs gfdl_cloud_microphys flag for using constant snow fall speed .false. +
const_vg gfdl_cloud_microphys flag for using constant graupel fall speed .false. +
const_vr gfdl_cloud_microphys flag for using constant rain fall speed .false. +
vi_fac gfdl_cloud_microphys tunable factor for cloud ice fall or the constant cloud ice fall speed when \p const_vi is .true. 1. +
vr_fac gfdl_cloud_microphys tunable factor for rain fall or the constant rain fall speed when \p const_vr is .true. 1. +
vs_fac gfdl_cloud_microphys tunable factor for snow fall or the constant snow fall speed when \p const_vs is .true. 1. +
vg_fac gfdl_cloud_microphys tunable factor for graupel fall or the constant graupel fall speed when \p const_vg is .true. 1. +
vi_max gfdl_cloud_microphys maximum fall speed for cloud ice 0.5 +
vs_max gfdl_cloud_microphys maximum fall speed for snow 5.0 +
vg_max gfdl_cloud_microphys maximum fall speed for graupel 8.0 +
vr_max gfdl_cloud_microphys maximum fall speed for rain 12.0 +
qi_lim gfdl_cloud_microphys cloud ice limiter to prevent large ice built up in cloud ice freezing and deposition 1. +
prog_ccn gfdl_cloud_microphys flag for activating prognostic CCN (not supported in GFS Physics) .false. +
do_qa gfdl_cloud_microphys \a .true. to activate inline cloud fraction diagnosis in fast saturation adjustment. \a .false. to activate inline cloud fraction diagnosis in major cloud microphysics .true. +
fast_sat_adj gfdl_cloud_microphys flag for adjusting cloud water evaporation (cloud water -> water vapor), cloud water freezing (cloud water -> cloud ice), cloud ice deposition (water vapor -> cloud ice) when fast saturation adjustment is activated (\b do_sat_adj = .true. in \b fv_core_nml block) .true. +
tau_l2v gfdl_cloud_microphys time scale for evaporation of cloud water to water vapor. Increasing(decreasing) \p tau_l2v can decrease(boost) deposition of cloud water to water vapor 300. +
tau_v2l gfdl_cloud_microphys time scale for condensation of water vapor to cloud water. Increasing(decreasing) \p tau_v2l can decrease(boost) condensation of water vapor to cloud water 150. +
tau_g2v gfdl_cloud_microphys time scale for sublimation of graupel to water vapor. Increasing(decreasing) \p tau_g2v can decrease(boost) sublimation of graupel to water vapor 900. +
tau_g2r gfdl_cloud_microphys time scale for graupel melting. Increasing(decreasing) \p tau_g2r can decrease(boost) melting of graupel to rain (graupel-> rain) 600. +
tau_v2g gfdl_cloud_microphys time scale for deposition of water vapor to graupel. Increasing(decreasing) \p tau_v2g can decrease(boost) deposition of water vapor to graupel (water vapor -> graupel) 21600. +
tau_l2r gfdl_cloud_microphys time scale for autoconversion of cloud water to rain. Increasing(decreasing) \p tau_l2r can decrese(boost) autoconversion of cloud water to rain (cloud water -> rain) 900. +
tau_r2g gfdl_cloud_microphys time scale for freezing of rain to graupel. Increasing(decreasing) \p tau_r2g can decrease(boost) freezing of rain to graupel (rain->graupel) 900. +
tau_i2s gfdl_cloud_microphys time scale for autoconversion of cloud ice to snow. Increasing(decreasing) \p tau_i2s can decrease(boost) autoconversion of cloud ice to snow (cloud ice -> snow) 1000. +
tau_imlt gfdl_cloud_microphys time scale for cloud ice melting. Increasing(decreasing) \p tau_imlt can decrease(boost) melting of cloud ice to cloud water or rain (cloud ice -> cloud water or rain) 600. +
tau_smlt gfdl_cloud_microphys time scale for snow melting. Increasing(decreasing) \p tau_smlt can decrease(boost) melting of snow to cloud water or rain (snow-> cloud water or rain) 900. +
rthresh gfdl_cloud_microphys critical cloud water radius for autoconversion (cloud water -> rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 10.0e-6 +
dw_land gfdl_cloud_microphys base value for subgrid deviation/variability over land 0.20 +
dw_ocean gfdl_cloud_microphys base value for subgrid deviation/variability over ocean 0.10 +
ql_gen gfdl_cloud_microphys maximum value for cloud water generated from condensation of water vapor (water vapor-> cloud water) 1.0e-3 +
qi_gen gfdl_cloud_microphys maximum value of cloud ice generated from deposition of water vapor (water vapor->cloud ice) or freezing(cloud water -> cloud ice). Increasing(decreasing) \p qi_gen can increas(decrease) cloud ice 1.82e-6 +
ql_mlt gfdl_cloud_microphys maximum value of cloud water allowed from melted cloud ice (cloud ice -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p ql_mlt can increase(decrease) cloud water and decrease(increase) rain 2.0e-3 +
qs_mlt gfdl_cloud_microphys maximum value of cloud water allowed from melted snow (snow -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p qs_mlt can increas(decrease) cloud water and decrease (increase) rain 1.0e-6 +
ql0_max gfdl_cloud_microphys threshold of cloud water to rain autoconversion (cloud water -> rain). Increasing(decreasing) \p ql0_max can increase(decrease) rain and decrease(increase) cloud water 2.0e-3 +
qi0_max gfdl_cloud_microphys maximum value of cloud ice generated from other sources like convection. Exceedance of which will become snow. Increasing(decreasing) \p qi0_max can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 +
qi0_crt gfdl_cloud_microphys threshold of cloud ice to snow autoconversion (cloud ice -> snow). Increasing(decreasing) \p qi0_crt can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 +
qs0_crt gfdl_cloud_microphys threshold of snow to graupel autoconversion (snow -> graupel). Increasing(decreasing) \p qs0_crt can increase(decrease) snow and decrease(increase) graupel 1.0e-3 +
qc_crt gfdl_cloud_microphys minimum value of cloud condensate to allow partial cloudiness. Partial cloud can only exist when total cloud condensate exceeds \p qc_crt 5.0e-8 +
c_psaci gfdl_cloud_microphys accretion efficiency of cloud ice to snow (cloud ice -> snow). Increasing(decreasing) of \p c_psaci can boost(decrease) the accretion of cloud ice to snow 0.02 +
c_pgacs gfdl_cloud_microphys accretion efficiency of snow to graupel (snow -> graupel). Increasing(decreasing) of \p c_pgacs can boost(decrease) the accretion of snow to graupel 2.0e-3 +
rh_inc gfdl_cloud_microphys relative humidity increment for complete evaporation of cloud water and cloud ice 0.25 +
rh_inr gfdl_cloud_microphys relative humidity increment for sublimation of snow 0.25 +
rh_ins gfdl_cloud_microphys relative humidity increment for minimum evaporation of rain 0.25 +
rthresh gfdl_cloud_microphys critical cloud water radius for autoconversion(cloud water->rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 1.0e-5 +
ccn_l gfdl_cloud_microphys base CCN over land. Increasing(decreasing) \p ccn_l can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 270. +
ccn_o gfdl_cloud_microphys base CCN over ocean. Increasing(decreasing) \p ccn_o can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 90. +
c_paut gfdl_cloud_microphys autoconversion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_paut can boost(decrease) the autoconversion of cloud water to rain 0.55 +
c_cracw gfdl_cloud_microphys accretion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_cracw can boost(decrease) the accretion of cloud water to rain 0.9 +
sat_adj0 gfdl_cloud_microphys adjust factor for condensation of water vapor to cloud water (water vapor->cloud water) and deposition of water vapor to cloud ice 0.9 +
use_ppm gfdl_cloud_microphys \e true to use PPM fall scheme; \e false to use time-implicit monotonic fall scheme .false. +
use_ccn gfdl_cloud_microphys \e true to compute prescribed CCN. It should be .true. when \p prog_ccn = .false. .false. +
mono_prof gfdl_cloud_microphys \e true to turn on terminal fall with monotonic PPM scheme. This is used together with \p use_ppm=.true. .true. +
z_slope_liq gfdl_cloud_microphys \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud water to rain .true. +
z_slope_ice gfdl_cloud_microphys \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud ice to snow .false. +
de_ice gfdl_cloud_microphys \e true to convert excessive cloud ice to snow to prevent ice over-built from other sources like convection scheme (not supported in GFS physics) .false. +
fix_negative gfdl_cloud_microphys \e true to fix negative water species using nearby points .false. +
icloud_f gfdl_cloud_microphys flag (0,1,or 2) for cloud fraction diagnostic scheme 0 +
irain_f gfdl_cloud_microphys flag (0 or 1) for cloud water autoconversion to rain scheme. 0: with subgrid variability; 1: no subgrid variability 0 +
mp_time gfdl_cloud_microphys time step of GFDL cloud microphysics (MP). If \p mp_time isn't divisible by physics time step or is larger than physics time step, the actual MP time step becomes \p dt/NINT[dt/MIN(dt,mp_time)] 150. +
alin gfdl_cloud_microphys parameter \a a in Lin et al.(1983). Constant in empirical formula for \f$U_R\f$. Increasing(decreasing) \p alin can boost(decrease) accretion of cloud water by rain and rain evaporation 842. +
clin gfdl_cloud_microphys parameter \a c in Lin et al.(1983). Constant in empirical formula for \f$U_S\f$. Increasing(decreasing) \p clin can boost(decrease) accretion of cloud water by snow, accretion of cloud ice by snow, snow sublimation and deposition, and snow melting 4.8 +
t_min gfdl_cloud_microphys temperature threshold for instant deposition. Deposit all water vapor to cloud ice when temperature is lower than \p t_min 178. +
t_sub gfdl_cloud_microphys temperature threshold for sublimation. Cloud ice, snow or graupel stops(starts) sublimation when temperature is lower(higher) then \p t_sub 184. +
mp_print gfdl_cloud_microphys \a .true. to turn on GFDL cloud microphysics debugging print out. (not supported in GFS physics) .false. +
ltaerosol mp_thompson flag for using aerosol climotology in Thompson MP scheme .false. +
ttendlim mp_thompson temperature tendency limiter per time step in K/s, set to < 0 to deactivate -999.0 +
effr_in gfdl_cloud_microphys, mp_thompson, m_micro flag for using input cloud effective radii calculation .false. +
cnvcld see \a GFS_typedefs.F90 flag for convective cloud .false. +
lgfdlmprad GFS_rrtmg_pre flag for GFDL mp scheme and radiation consistency .false. +
do_sb_physics m_micro flag for SB2001 autoconversion or accretion .true. +
do_cldice m_micro flag for cloud ice processes for MG microphysics .true. +
hetfrz_classnuc m_micro flag for heterogeneous freezing for MG microphysics .false. +
mg_nccons m_micro flag for constant droplet concentration for MG microphysics .false. +
mg_nicons m_micro flag for constant ice concentration for MG microphysics .false. +
mg_ngcons m_micro flag for constant graupel concentration for MG microphysics .false. +
sed_supersat m_micro flag for allowing supersaturation after sedimentation for MG microphysics .true. +
mg_do_graupel m_micro flag for turning on prognostic graupel (with fprcp=2) .true. +
mg_do_hail m_micro flag for turning on prognostic hail (with fprcp=2) .false. +
microp_uniform m_micro flag for uniform subcolumns for MG microphysics .true. +
mg_do_ice_gmao m_micro flag for turning on gmao ice autoconversion in MG microphysics .false. +
mg_do_liq_liu m_micro flag for turning on Liu liquid treatment in MG microphysics .true. +
mg_dcs m_micro autoconversion size threshold for cloud ice to snow in MG microphysics 200.0 +
mg_ts_auto_ice(2) m_micro autoconversion time scale for ice in MG microphysics 180.0,180.0 +
mg_qcvar m_micro cloud water relative variance in MG microphysics 1.0 +
mg_rhmini m_micro relative humidity threshold parameter for nucleating ice 1.01 +
mg_ncnst m_micro constant droplet num concentration \f$m^{-3}\f$ 100.e6 +
mg_ninst m_micro constant ice num concentration \f$m^{-3}\f$ 0.15e6 +
mg_ngnst m_micro constant graupel/hail num concertration \f$m^{-3}\f$ 0.10e6 +
mg_berg_eff_factor m_micro berg efficiency factor 2.0 +
mg_precip_frac_method m_micro type of precipitation fraction method 'max_overlap' +
fprcp m_micro number of frozen precipitation species in MG microphysics \n +
    +
  • 0: no prognostic rain and snow +
  • 1: MG2 +
  • 2: MG3 +
+
0 +
pdfflag m_micro pdf flag for MG macro physics 4 +
iccn m_micro flag for using IN and CCN forcing in MG2/3 microphysics .false. +
iaerclm m_micro flag for initializing aerosol data .false. +
rhcmax m_micro maximum critical relative humidity 0.9999999 +
aero_in m_micro flag for using aerosols in Morrison-Gettelman microphysics .false. +
\b Parameters \b related \b to \b gravity \b drag \b scheme \b options +
knob_ugwp_version cires_ugwp parameter selects a version of the UGWP implementation in FV3GFS-127L \n
  • 0: default version delivered to EMC in Jan 2019 for implementation
  • 1: version of UGWP under development that plans to consider the physics-based sources of NGWs (\b knob_ugwp_wvspec [2:4]), options for stochastic and deterministic excitation of waves (\b knob_ugwp_stoch), and switches between different UGWP schemes (\b knob_ugwp_solver)
0 -
knob_ugwp_doaxyz cires_ugwp_module parameter controls application of the momentum deposition for NGW-schemes \n +
knob_ugwp_doaxyz cires_ugwp parameter controls application of the momentum deposition for NGW-schemes \n
  • 0: the momentum tendencies due to NGWs are calculated, but tendencies do not change the horizontal winds
  • 1: default value; it changes the horizontal momentum tendencies and horizontal winds
1 -
knob_ugwp_doheat cires_ugwp_module parameter controls application of the heat deposition for NGW-schemes \n +
knob_ugwp_doheat cires_ugwp parameter controls application of the heat deposition for NGW-schemes \n
  • 0: the temperature tendencies due to NGWs are calculated but tendencies do not change the temperature state
  • 1: default value; it changes the temperature tendencies and kinetic temperature
1 -
knob_ugwp_dokdis cires_ugwp_module parameter controls application of the eddy diffusion due to instability of NGWs \n +
knob_ugwp_dokdis cires_ugwp parameter controls application of the eddy diffusion due to instability of NGWs \n
  • 0: the eddy diffusion tendencies due to NGWs are calculated but tendencies do not change the model state vector
  • 1: it computes eddy diffusion coefficient due to instability of NGWs; in UGWP v0, eddy viscosity, heat conductivity and tracer diffusion are not activated
0 -
knob_ugwp_solver cires_ugwp_module parameter controls the selection of UGWP-solvers(wave propagation, dissipation and wave breaking) for NGWs \n +
knob_ugwp_solver cires_ugwp parameter controls the selection of UGWP-solvers(wave propagation, dissipation and wave breaking) for NGWs \n
  • 1: represents the discrete multi-wave solver with background dissipation and linear wave saturation
  • 2: represents the spectral deterministic solver with background dissipation and spectral saturation @@ -522,28 +453,196 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: represents the spectral solver with background dissipation, extension of Doppler Spread Theory of Hines (1997)
1 -
knob_ugwp_ndx4lh cires_ugwp_module parameter controls the selection of the horizontal wavenumber(wavelength) for NGW schemes \n +
knob_ugwp_ndx4lh cires_ugwp parameter controls the selection of the horizontal wavenumber(wavelength) for NGW schemes \n
  • 1: selects the \f$4xdx\f$ sub-grid wavelength, where dx is the horizontal resolution of the model configuration (C96-400km; C768-52km)
2 -
knob_ugwp_wvspec cires_ugwp_module four-dimensional array defines number of waves in each arimuthal propagation (as defined by knob_ugwp_azdir) for GWs excited due to the following four sources: \n +
knob_ugwp_wvspec cires_ugwp four-dimensional array defines number of waves in each arimuthal propagation (as defined by knob_ugwp_azdir) for GWs excited due to the following four sources: \n (1) sub-grid orography (\b knob_ugwp_wvspec[1]=1), \n (2) convective (\b knob_ugwp_wvspec[2]=25), \n (3) frontal (\b knob_ugwp_wvspec[3]=25) activity, \n (4) \b knob_ugwp_wvspec[4] represents number of wave excited by dynamical imbalances that may mimic both convective and front-jet mechanisms of GW triggering. \n In UGWP v0, first two elements of the array, \b knob_ugwp_wvspec(1:2), control number of waves for stationary (OGW) and nonstationary waves (NGWs). 1,32,32,32 -
knob_ugwp_azdir cires_ugwp_module four-dimensional array that defines number of azimuths for propagation of GWs triggered by four types of physics-based sources (orography, convection, front-jets, and dynamical imbalance). In UGWP v0, first two elements of the array, \b knob_ugwp_azdir(1:2), control number of azimuths for OGW and NGWs respectively. +
knob_ugwp_azdir cires_ugwp four-dimensional array that defines number of azimuths for propagation of GWs triggered by four types of physics-based sources (orography, convection, front-jets, and dynamical imbalance). In UGWP v0, first two elements of the array, \b knob_ugwp_azdir(1:2), control number of azimuths for OGW and NGWs respectively. 2,4,4,4 -
knob_ugwp_stoch cires_ugwp_module four-dimensional array that control stochastic selection of GWs triggered by four types of physics-based sources. \n +
knob_ugwp_stoch cires_ugwp four-dimensional array that control stochastic selection of GWs triggered by four types of physics-based sources. \n Default values:0,0,0,0 - reflect determinstic selection of GW parameters without stochastic selection 0,0,0,0 -
knob_ugwp_effac cires_ugwp_module four-dimensional array that control efficiency of GWs triggerd by four types of physics-based sources. \n +
knob_ugwp_effac cires_ugwp four-dimensional array that control efficiency of GWs triggerd by four types of physics-based sources. \n Default values: 1.,1.,1.,1. - reflect that calculated GW-tendencies will be applied for the model state. 1.,1.,1.,1. -
launch_level cires_ugwp_module parameter has been introduced by EMC during implementation. It defines the interface model level from the surface at which NGWs are launched. \n +
launch_level cires_ugwp parameter has been introduced by EMC during implementation. It defines the interface model level from the surface at which NGWs are launched. \n Default value for FV3GFS-64L, launch_level=25 and for FV3GFS-128L, launch_level=52. 55 +
ldiag_ugwp cires_ugwp flag for CIRES UGWP diagnostics .false. +
do_ugwp cires_ugwp flag for CIRES UGWP revised OGW \n +
    +
  • .T.: revised gwdps_v0 +
  • .F.: GFS operational orographic gwdps +
+
.false.; The CIRES Unified Gravity Wave Physics (cires_ugwp) scheme is used in GFSv15p2 and GFSv16beta SDFs with do_ugwp=F in the namelist. In this setting, the cires_ugwp calls the operational GFS v15.2 orographic gravity wave drag (gwdps) scheme. When do_ugwp=.T., the cires_ugwp scheme calls an experimental orographic gravity wave (gwdps_v0) +
do_tofd cires_ugwp flag for turbulent orographic form drag .false. +
cnvgwd cires_ugwp flag for convective gravity wave drag scheme dependent on maxval(cdmbgwd(3:4) == 0.0) .false. +
cdmbgwd(4) cires_ugwp multiplication factors for mountain blocking(1), orographic gravity wave drag(2) +
    +
  • [1]: GWDPS mountain blocking +
  • [2]: GWDPS orographic gravity wave drag +
  • [3]: the modulation total momentum flux of NGWs by intensities of the total precipitation +
  • [4]: TKE for future tests and applications +
+
2.0,0.25,1.0,1.0 +
do_cnvgwd gwdc flag for convective GWD cnvgwd .and. maxval(cdmbgwd(3:4)) == 0.0 +
nmtvr cires_ugwp number of topographic variables such as variance etc used in the GWD parameterization-10 more added if GSL orographic drag scheme is used 14 +
cgwf cires_ugwp ,gwdc multiplication factor for convective GWD 0.5d0,0.05d0 +
do_gwd see \a GFS_typedefs.F90 flag for gravity wave drag maxval(cdmbgwd) > 0.0 +
gwd_opt drag_suite flag for GWD scheme \n +
    +
  • 1: original GFS GWD +
  • 3: GSL drag suite +
  • 33: GSL drag suite with extra output +
  • +
+
1 +
\b Parameters \b related \b to \b LSM \b options +
lsm see \a GFS_typedefs.F90 flag for land surface model to use \n +
    +
  • 1: Noah LSM +
  • 2: NoahMP LSM +
  • 3: RUC LSM +
+
1 +
lsoil lsm_noah number of soil layers 4 +
rdlai lsm_ruc flag to read leaf area index from input files .false. +
ivegsrc lsm_noah, lsm_ruc, \ref noahmpdrv, sfc_diff flag for vegetation type dataset choice: \n +
    +
  • 0: USGS +
  • 1: IGBP(20 category): IGBP must be selected if NoahMP is used +
  • 2: UMD (13 category) +
+
2 +
isot lsm_noah, lsm_ruc, \ref noahmpdrv flag for soil type dataset choice:\n +
    +
  • 0: Zobler soil type (9 category) +
  • 1: STATSGO soil type (19 category): STATSGO must be selected if NoahMP is used +
+
0 + +
iopt_dveg \ref noahmpdrv options for dynamic vegetation \n +
    +
  • 1: off (use table LAI; use FVEG = SHDFAC from input) +
  • 2: on (together with \a iopt_crs = 1) +
  • 3: off (use table LAI; calculate FVEG) +
  • 4: off (use table LAI; use maximum vegetation fraction) +
  • 5: on (use maximum vegetation fraction) +
  • 6: on (use FVEG = SHDFAC from input) +
  • 7: off (use input LAI; use FVEG = SHDFAC from input) +
  • 8: off (use input LAI; calculate FVEG) +
  • 9: off (use input LAI; use maximum vegetation fraction) +
+
4 +
iopt_crs \ref noahmpdrv options for canopy stomatal resistance \n +
    +
  • 1: Ball-Berry +
  • 2: Jarvis +
+
1 +
iopt_btr \ref noahmpdrv options for soil moisture factor for stomatal resistance \n +
    +
  • 1: Noah (soil moisture) +
  • 2: CLM (matric potential) +
  • 3: SSIB (matric potential) +
+
1 +
iopt_run \ref noahmpdrv options for runoff and groundwater \n +
    +
  • 1: TOPMODEL with groundwater (Niu et al. 2007 \cite niu_et_al_2007) +
  • 2: TOPMODEL with an equilibrium water table (Niu et al. 2005 \cite niu_et_al_2005) +
  • 3: original surface and subsurface runoff (free drainage) +
  • 4: bats surface and subsurface runoff (free drainage) +
  • 5: Miguez-macho&Fan groundwater scheme (Miguez-Macho et al. 2007 \cite miguez_et_al_2007; Fan et al. 2007 \cite fan_et_al_2007; needs further testing for public use) +
+
3 +
iopt_sfc \ref noahmpdrv options for surface layer drag coeff (CH&CM) \n +
    +
  • 1: m-o +
  • 2: original Noah (Chen et al. 1997 \cite chen_et_al_1997) +
+
1 +
iopt_frz \ref noahmpdrv options for supercooled liquid water (or ice fraction) \n +
    +
  • 1: no interation (Niu and Yang (2006) \cite niu_and_yang_2006 ) +
  • 2: Koren's iteration +
+
1 +
iopt_inf \ref noahmpdrv options for frozen soil permeability \n +
    +
  • 1: linear effects, more permeable (Niu and Yang (2006) \cite niu_and_yang_2006) +
  • 2: nonlinear effects, less permeable (old) +
+
1 +
iopt_rad \ref noahmpdrv options for radiation transfer \n +
    +
  • 1: modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg) +
  • 2: two-stream applied to grid-cell (gap = 0) +
  • 3: two-stream applied to vegetated fraction (gap=1-FVEG) +
+
3 +
iopt_alb \ref noahmpdrv options for ground snow surface albedo \n +
    +
  • 1: BATS +
  • 2: CLASS +
+
2 +
iopt_snf \ref noahmpdrv options for partitioning precipitation into rainfall and snowfall \n +
    +
  • 1: Jordan (1991) +
  • 2: BATS: when sfctmp < tfrz+2.2 +
  • 3: sfctmp < tfrz +
  • 4: use WRF microphysics output +
+
1 +
iopt_tbot \ref noahmpdrv options for lower boundary condition of soil temperature \n +
    +
  • 1: zero heat flux from bottom (zbot and tbot not used) +
  • 2: tbot at zbot (8m) read from a file (original Noah) +
+
2 +
iopt_stc \ref noahmpdrv options for snow/soil temperature time scheme (only layer 1) \n +
    +
  • 1: semi-implicit; flux top boundary condition +
  • 2: full implicit (original Noah); temperature top boundary condition +
  • 3: same as 1, but fsno for ts calculation (generally improve snow; v3.7) +
+
1 + +
nstf_name(5) sfc_nst NSST related paramters:\n +
    +
  • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled +
  • nstf_name(2): 1=NSST spin up on, 0=NSST spin up off +
  • nstf_name(3): 1=NSST analysis on, 0=NSST analysis off +
  • nstf_name(4): zsea1 in mm +
  • nstf_name(5): zesa2 in mm +
+
/0,0,1,0,5/ +
\b Parameters \b related \b to \b other \b surface \b scheme \b options +
nst_anl GFS_phys_time_vary flag for NSST analysis in gcycle/sfcsub .false. +
frac_grid fractional grid flag for fractional grid .false. +
min_lakeice fractional grid minimum lake ice value 0.15d0 +
min_seaice fractional grid minimum sea ice value 1.0d-11 +
min_lake_height fractional grid minimum lake height value 250.0 +
sfc_z0_type sfc_diff surface roughness options over ocean \n +
    +
  • 0: no change +
  • 6: areodynamical roughness over water with input 10-m wind +
  • 7: slightly decrease Cd for higher wind speed compared to 6 +
  • negative when cplwav2atm=.true. - i.e. two way wave coupling +
+
0 +
redrag sfc_diff flag for applying reduced drag coefficient for high wind over sea in GFS surface layer scheme .false. +
lheatstrg GFS_surface_generic_post flag for canopy heat storage parameterization .false. +
z0fac GFS_surface_generic_post surface roughness fraction factor 0.3 +
e0fac GFS_surface_generic_post latent heat flux fraction factor relative to sensible heat flux,e.g., e0fac=0.5 indicates that canopy heat storage for latent heat flux is 50% of that for sensible heat flux 0.5
*/ From 0f50802dfef78abc003ba9a46f978102e6014e74 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 5 Jan 2021 09:45:28 -0700 Subject: [PATCH 037/119] Merge pull request #540 from climbfuji/release_public_v2_gnu10_crashes release/public-v5: bugfixes for GNU 10 crashes --- physics/GFS_MP_generic.F90 | 31 ++++++++++++++++++------------ physics/GFS_stochastics.F90 | 2 +- physics/GFS_suite_interstitial.F90 | 3 ++- physics/GFS_surface_generic.F90 | 22 +++++++++++---------- physics/module_MYNNPBL_wrapper.F90 | 6 ++++-- physics/samfdeepcnv.f | 4 ++-- 6 files changed, 40 insertions(+), 28 deletions(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 672be5ba6..7239e0909 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -112,28 +112,35 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), dimension(im), intent(in ) :: sr real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & - totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & - snow_cpl, pwat + totprcpb, toticeb, totsnwb, totgrpb, pwat + real(kind=kind_phys), dimension(:), intent(inout) :: rain_cpl, rainc_cpl, snow_cpl real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt ! only if ldiag3d real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d ! Stochastic physics / surface perturbations +<<<<<<< HEAD real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl +======= + logical, intent(in) :: do_sppt, ca_global + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr + real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc + real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl, dsnow_cpl +>>>>>>> 3f240db... Merge pull request #540 from climbfuji/release_public_v2_gnu10_crashes ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp - real(kind=kind_phys), dimension(im), intent(inout) :: raincprv - real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: iceprv - real(kind=kind_phys), dimension(im), intent(inout) :: snowprv - real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv - real(kind=kind_phys), dimension(im), intent(inout) :: draincprv - real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: diceprv - real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv - real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: raincprv + real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: iceprv + real(kind=kind_phys), dimension(:), intent(inout) :: snowprv + real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: draincprv + real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: diceprv + real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv + real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv real(kind=kind_phys), intent(in) :: dtp diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index b3dda08da..10081e2af 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -109,7 +109,7 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc real(kind_phys), dimension(:), intent(in) :: dsnow_cpl real(kind_phys), dimension(1:km), intent(in) :: si real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca - real(kind_phys), dimension(1:im), intent(in) :: ca1 + real(kind_phys), dimension(:), intent(in) :: ca1 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index 62a808b76..4155b1abb 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -176,7 +176,8 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl logical, intent(in ), dimension(im) :: flag_cice real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm - real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 + real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, work1, work2 + real(kind=kind_phys), intent(in ), dimension(:) :: ulwsfc_cice real(kind=kind_phys), intent(in ), dimension(im) :: cice real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index 483eccdf8..aaabde80a 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -51,15 +51,15 @@ subroutine GFS_surface_generic_pre_run (im, levs, vfrac, islmsk, isot, ivegsrc, real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl - real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl - real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl + real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl + real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl integer, intent(in) :: lndp_type integer, intent(in) :: n_var_lndp character(len=3), dimension(n_var_lndp), intent(in) :: lndp_var_list real(kind=kind_phys), dimension(n_var_lndp), intent(in) :: lndp_prt_list - real(kind=kind_phys), dimension(im,n_var_lndp), intent(in) :: sfc_wts + real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts real(kind=kind_phys), dimension(im), intent(out) :: z01d real(kind=kind_phys), dimension(im), intent(out) :: zt1d real(kind=kind_phys), dimension(im), intent(out) :: bexp1d @@ -69,7 +69,7 @@ subroutine GFS_surface_generic_pre_run (im, levs, vfrac, islmsk, isot, ivegsrc, real(kind=kind_phys), dimension(im,n_var_lndp), intent(inout) :: sfc_wts_inv logical, intent(in) :: cplflx - real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl + real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl logical, dimension(im), intent(inout) :: flag_cice integer, dimension(im), intent(out) :: islmsk_cice real(kind=kind_phys), dimension(im), intent(in) :: & @@ -229,12 +229,14 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplwav, lssav, icy, wet, dt adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & - dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & - nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & - nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & + real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, gflux, evbsa, & evcwa, transa, sbsnoa, snowca, snohfa, ep + real(kind=kind_phys), dimension(:), intent(inout) :: dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & + dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & + nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & + nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl + real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff real(kind=kind_phys), dimension(im), intent(in) :: drain, runof diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 6011c203e..7a0102d7d 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -288,10 +288,12 @@ SUBROUTINE mynnedmf_wrapper_run( & !MYNN-2D real(kind=kind_phys), dimension(im), intent(in) :: & & dx,zorl,slmsk,tsurf,qsfc,ps, & - & hflx,qflx,ust,wspd,rb,recmol + & hflx,qflx,ust,wspd,rb + + real(kind=kind_phys), dimension(:), intent(in) :: & + & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice,recmol real(kind=kind_phys), dimension(im), intent(in) :: & - & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & & stress_ocn,hflx_ocn,qflx_ocn, & & oceanfrac,fice diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index 1b71e011e..b898db414 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -87,8 +87,8 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & real(kind=kind_phys), dimension(:), intent(in) :: fscav logical, intent(in) :: hwrf_samfdeep real(kind=kind_phys), intent(in) :: nthresh - real(kind=kind_phys), intent(in) :: ca_deep(im) - real(kind=kind_phys), intent(out) :: rainevap(im) + real(kind=kind_phys), dimension(:), intent(in) :: ca_deep + real(kind=kind_phys), dimension(:), intent(out) :: rainevap logical, intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger integer, intent(inout) :: kcnv(im) From cfa8bf95d83f82e25a1a695145a48ea00e7757cd Mon Sep 17 00:00:00 2001 From: grantfirl Date: Mon, 22 Feb 2021 13:38:45 -0700 Subject: [PATCH 038/119] Merge pull request #576 from grantfirl/remove_gmtb Remove references to GMTB in SCM-related files --- physics/GFS_time_vary_pre.scm.F90 | 2 +- ...fc_flux_spec.F90 => scm_sfc_flux_spec.F90} | 24 +++++++++---------- ..._flux_spec.meta => scm_sfc_flux_spec.meta} | 6 ++--- 3 files changed, 16 insertions(+), 16 deletions(-) rename physics/{gmtb_scm_sfc_flux_spec.F90 => scm_sfc_flux_spec.F90} (88%) rename physics/{gmtb_scm_sfc_flux_spec.meta => scm_sfc_flux_spec.meta} (98%) diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 index c4c235f61..73117f3d1 100644 --- a/physics/GFS_time_vary_pre.scm.F90 +++ b/physics/GFS_time_vary_pre.scm.F90 @@ -111,7 +111,7 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lsm, lsm_noahmp, ns end if !--- jdat is being updated directly inside of the time integration - !--- loop of gmtb_scm.F90 + !--- loop of scm.F90 !--- update calendars and triggers rinc(1:5) = 0 call w3difdat(jdat,idat,4,rinc) diff --git a/physics/gmtb_scm_sfc_flux_spec.F90 b/physics/scm_sfc_flux_spec.F90 similarity index 88% rename from physics/gmtb_scm_sfc_flux_spec.F90 rename to physics/scm_sfc_flux_spec.F90 index 22730f9f2..a40ac99c0 100644 --- a/physics/gmtb_scm_sfc_flux_spec.F90 +++ b/physics/scm_sfc_flux_spec.F90 @@ -1,7 +1,7 @@ -!> \file gmtb_scm_sfc_flux_spec.F90 +!> \file scm_sfc_flux_spec.F90 !! Contains code to calculate parameters needed by the rest of the GFS physics suite given specified surface fluxes. -module gmtb_scm_sfc_flux_spec +module scm_sfc_flux_spec implicit none @@ -10,12 +10,12 @@ module gmtb_scm_sfc_flux_spec !---------------- ! Public entities !---------------- - public gmtb_scm_sfc_flux_spec_init, gmtb_scm_sfc_flux_spec_run, gmtb_scm_sfc_flux_spec_finalize + public scm_sfc_flux_spec_init, scm_sfc_flux_spec_run, scm_sfc_flux_spec_finalize CONTAINS !******************************************************************************************* - subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) + subroutine scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) logical, intent(in) :: lheatstrg @@ -27,16 +27,16 @@ subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) errflg = 1 return end if - end subroutine gmtb_scm_sfc_flux_spec_init + end subroutine scm_sfc_flux_spec_init - subroutine gmtb_scm_sfc_flux_spec_finalize() - end subroutine gmtb_scm_sfc_flux_spec_finalize + subroutine scm_sfc_flux_spec_finalize() + end subroutine scm_sfc_flux_spec_finalize !> \brief This routine calculates surface-related parameters given specified sensible and latent heat fluxes and a roughness length. Most of the calculation !! is "backing out" parameters that are calculated in sfc_dff.f from the known surface heat fluxes and roughness length. !! -!! \section arg_table_gmtb_scm_sfc_flux_spec_run Argument Table -!! \htmlinclude gmtb_scm_sfc_flux_spec_run.html +!! \section arg_table_scm_sfc_flux_spec_run Argument Table +!! \htmlinclude scm_sfc_flux_spec_run.html !! !! \section general_sfc_flux_spec General Algorithm !! -# Compute friction velocity from the wind speed at the lowest model layer, the height about the ground, and the roughness length. @@ -48,7 +48,7 @@ end subroutine gmtb_scm_sfc_flux_spec_finalize !! -# Calculate the Monin-Obukhov similarity function for heat and moisture from the bulk Richardson number and diagnosed similarity function for momentum. !! -# Calculate the surface drag coefficient for heat and moisture. !! -# Calculate the u and v wind at 10m. - subroutine gmtb_scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, spec_sh_flux, spec_lh_flux, & + subroutine scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, spec_sh_flux, spec_lh_flux, & exner_inverse, T_surf, cp, grav, hvap, rd, fvirt, vonKarman, sh_flux, lh_flux, sh_flux_chs, lh_flux_chs, u_star, sfc_stress, cm, ch, & fm, fh, rb, u10m, v10m, wind1, qss, t2m, q2m, errmsg, errflg) @@ -133,6 +133,6 @@ subroutine gmtb_scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, q2m(i) = 0.0 end do - end subroutine gmtb_scm_sfc_flux_spec_run + end subroutine scm_sfc_flux_spec_run -end module gmtb_scm_sfc_flux_spec +end module scm_sfc_flux_spec diff --git a/physics/gmtb_scm_sfc_flux_spec.meta b/physics/scm_sfc_flux_spec.meta similarity index 98% rename from physics/gmtb_scm_sfc_flux_spec.meta rename to physics/scm_sfc_flux_spec.meta index 1e004b7f9..7edc8c9e5 100644 --- a/physics/gmtb_scm_sfc_flux_spec.meta +++ b/physics/scm_sfc_flux_spec.meta @@ -1,11 +1,11 @@ [ccpp-table-properties] - name = gmtb_scm_sfc_flux_spec + name = scm_sfc_flux_spec type = scheme dependencies = machine.F ######################################################################## [ccpp-arg-table] - name = gmtb_scm_sfc_flux_spec_init + name = scm_sfc_flux_spec_init type = scheme [lheatstrg] standard_name = flag_for_canopy_heat_storage @@ -35,7 +35,7 @@ ################################# [ccpp-arg-table] - name = gmtb_scm_sfc_flux_spec_run + name = scm_sfc_flux_spec_run type = scheme [u1] standard_name = x_wind_at_lowest_model_layer From ccdffcff5eab9699056ecdac3975a7c916e94154 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 22 Feb 2021 19:52:33 -0700 Subject: [PATCH 039/119] Merge pull request #577 from grantfirl/csawmg_related_GFS_MP_generic_post_bugfix GFS_MP_generic.F90 conditional allocation bugfix --- physics/GFS_MP_generic.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 7239e0909..ecfd876d0 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -103,7 +103,7 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), intent(in) :: dtf, frain, con_g real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc - real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 + real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 ! conditionally allocated in GFS_typedefs (imp_physics == GFDL or Thompson) real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, save_qv, del real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii From 54705a0365f9ccd68829b20747930bd76157fd76 Mon Sep 17 00:00:00 2001 From: "xu.li" Date: Thu, 25 Mar 2021 14:30:52 -0400 Subject: [PATCH 040/119] Change inout to be in for 6 variables (xt,xz ...) in post run --- physics/sfc_nst.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index f9c0cdfc7..c9048f20d 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -793,7 +793,7 @@ subroutine sfc_nst_post_run & real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 - real (kind=kind_phys), dimension(im), intent(inout) :: xt, xz, & + real (kind=kind_phys), dimension(im), intent(in) :: xt, xz, & & dt_cool, z_c, tref, xlon ! --- input/outputs: From ad4515a48961a8cdaa9042c6a3c852312a153867 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 26 Mar 2021 16:42:29 +0000 Subject: [PATCH 041/119] Moved assignment of spectral information from _init()'s to _run() for RRTMGP. --- physics/dcyc2.f | 6 ----- physics/dcyc2.meta | 2 +- physics/rrtmgp_lw_aerosol_optics.F90 | 27 ++++++--------------- physics/rrtmgp_lw_aerosol_optics.meta | 30 ----------------------- physics/rrtmgp_lw_cloud_optics.F90 | 35 ++++++++------------------- physics/rrtmgp_lw_cloud_optics.meta | 32 ------------------------ physics/rrtmgp_lw_cloud_sampling.F90 | 14 +++++++++-- physics/rrtmgp_lw_gas_optics.F90 | 35 ++++++++++++++++----------- physics/rrtmgp_lw_gas_optics.meta | 19 +-------------- physics/rrtmgp_sw_gas_optics.F90 | 2 -- physics/rrtmgp_sw_gas_optics.meta | 3 +-- 11 files changed, 54 insertions(+), 151 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 851c70026..4e39112f0 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -407,12 +407,6 @@ subroutine dcyc2t3_run & enddo endif - ! Add clear-sky radiative heating rates to clear-sky physics heating rate - do k = 1, levs - do i = 1, im - dtdtc(i,k) = dtdtc(i,k) + swhc(i,k)*xmu(i) + hlwc(i,k) - enddo - enddo if (do_sppt .or. ca_global) then if (pert_radtend) then ! clear sky diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index ed963fae8..e483c1cb7 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = dcyc2t3 type = scheme - dependencies = machine.F,physcons.F90 + dependencies = machine.F,physcons.F90,rrtmgp_aux.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index e36572384..a3f453556 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -21,25 +21,7 @@ module rrtmgp_lw_aerosol_optics ! ######################################################################################### ! SUBROUTINE rrtmgp_lw_aerosol_optics_init() ! ######################################################################################### -!! \section arg_table_rrtmgp_lw_aerosol_optics_init -!! \htmlinclude rrtmgp_lw_aerosol_optics.html -!! - subroutine rrtmgp_lw_aerosol_optics_init(lw_optical_props_aerosol, errmsg, errflg) - ! Inputs - type(ty_optical_props_1scl),intent(inout) :: & - lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) - ! Outputs - integer, intent(out) :: & - errflg ! CCPP error flag - character(len=*), intent(out) :: & - errmsg ! CCPP error message - - ! Initialize CCPP error handling variables - errmsg = '' - errflg = 0 - - errmsg = lw_optical_props_aerosol%init(lw_gas_props%get_band_lims_wavenumber()) - + subroutine rrtmgp_lw_aerosol_optics_init() end subroutine rrtmgp_lw_aerosol_optics_init ! ######################################################################################### @@ -91,6 +73,7 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer aerosolslw ! real(kind_phys), dimension(nCol, nLev, sw_gas_props%get_nband(), NF_AESW) :: & aerosolssw + integer :: iBand ! Initialize CCPP error handling variables errmsg = '' @@ -105,6 +88,12 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer ! Copy aerosol optical information to RRTMGP DDT lw_optical_props_aerosol%tau = aerosolslw(:,:,:,1) * (1. - aerosolslw(:,:,:,2)) + lw_optical_props_aerosol%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_aerosol%band2gpt(1:2,iBand) = iBand + lw_optical_props_aerosol%gpt2band(iBand) = iBand + end do + end subroutine rrtmgp_lw_aerosol_optics_run ! ######################################################################################### diff --git a/physics/rrtmgp_lw_aerosol_optics.meta b/physics/rrtmgp_lw_aerosol_optics.meta index 728031e8a..ff535b4da 100644 --- a/physics/rrtmgp_lw_aerosol_optics.meta +++ b/physics/rrtmgp_lw_aerosol_optics.meta @@ -3,36 +3,6 @@ type = scheme dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 -######################################################################## -[ccpp-arg-table] - name = rrtmgp_lw_aerosol_optics_init - type = scheme -[lw_optical_props_aerosol] - standard_name = longwave_optical_properties_for_aerosols - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_1scl - intent = inout - optional = F -[errmsg] - standard_name = ccpp_error_message - long_name = error message for error handling in CCPP - units = none - dimensions = () - type = character - kind = len=* - intent = out - optional = F -[errflg] - standard_name = ccpp_error_flag - long_name = error flag for error handling in CCPP - units = flag - dimensions = () - type = integer - intent = out - optional = F - ######################################################################## [ccpp-arg-table] name = rrtmgp_lw_aerosol_optics_run diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index 33d69053b..77aff0ecf 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -72,15 +72,9 @@ module rrtmgp_lw_cloud_optics !! subroutine rrtmgp_lw_cloud_optics_init(nrghice, mpicomm, mpirank, mpiroot, & doG_cldoptics, doGP_cldoptics_PADE, doGP_cldoptics_LUT, rrtmgp_root_dir, & - rrtmgp_lw_file_clouds, lw_optical_props_clouds, lw_optical_props_precip, & - lw_optical_props_cloudsByBand, lw_optical_props_precipByBand, errmsg, errflg) + rrtmgp_lw_file_clouds, errmsg, errflg) ! Inputs - type(ty_optical_props_2str),intent(inout) :: & - lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) - lw_optical_props_precipByBand, & ! RRTMGP DDT: Longwave optical properties in each band (precipitation) - lw_optical_props_clouds, & ! RRTMGP DDT: Shortwave optical properties by spectral point (clouds) - lw_optical_props_precip ! RRTMGP DDT: Shortwave optical properties by spectral point (precipitation) logical, intent(in) :: & doG_cldoptics, & ! Use legacy RRTMG cloud-optics? doGP_cldoptics_PADE, & ! Use RRTMGP cloud-optics: PADE approximation? @@ -110,24 +104,6 @@ subroutine rrtmgp_lw_cloud_optics_init(nrghice, mpicomm, mpirank, mpiroot, errmsg = '' errflg = 0 - ! - ! Initialize GP DDTs (use same spectral configuration as gas-optics) - ! - ! Cloud optics - ! - call check_error_msg('lw_cloud_optics_init', lw_optical_props_cloudsByBand%init(& - lw_gas_props%get_band_lims_wavenumber())) - call check_error_msg('lw_cloud_optics_init', lw_optical_props_clouds%init(& - lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) - ! - ! Precipitation optics - ! - call check_error_msg('lw_precip_optics_init', lw_optical_props_precipByBand%init(& - lw_gas_props%get_band_lims_wavenumber())) - call check_error_msg('lw_precip_optics_init', lw_optical_props_precip%init(& - lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) - - ! If not using RRTMGP cloud optics, return. if (doG_cldoptics) return @@ -468,6 +444,15 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw if (.not. doLWrad) return + lw_optical_props_cloudsByBand%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + lw_optical_props_precipByBand%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_cloudsByBand%band2gpt(1:2,iBand) = iBand + lw_optical_props_cloudsByBand%band2gpt(1:2,iBand) = iBand + lw_optical_props_precipByBand%gpt2band(iBand) = iBand + lw_optical_props_precipByBand%gpt2band(iBand) = iBand + end do + ! Compute cloud-optics for RTE. if (doGP_cldoptics_PADE .or. doGP_cldoptics_LUT) then diff --git a/physics/rrtmgp_lw_cloud_optics.meta b/physics/rrtmgp_lw_cloud_optics.meta index 7c8c56c6d..cb33f83ef 100644 --- a/physics/rrtmgp_lw_cloud_optics.meta +++ b/physics/rrtmgp_lw_cloud_optics.meta @@ -39,38 +39,6 @@ type = integer intent = inout optional = F -[lw_optical_props_clouds] - standard_name = longwave_optical_properties_for_cloudy_atmosphere - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_2str - intent = inout - optional = F -[lw_optical_props_precip] - standard_name = longwave_optical_properties_for_precipitation - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_2str - intent = inout - optional = F -[lw_optical_props_cloudsByBand] - standard_name = longwave_optical_properties_for_cloudy_atmosphere_by_band - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_2str - intent = inout - optional = F -[lw_optical_props_precipByBand] - standard_name = longwave_optical_properties_for_precipitation_by_band - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_2str - intent = inout - optional = F [rrtmgp_root_dir] standard_name = directory_for_rte_rrtmgp_source_code long_name = directory for rte+rrtmgp source code diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 index 3ec96c90c..11263243e 100644 --- a/physics/rrtmgp_lw_cloud_sampling.F90 +++ b/physics/rrtmgp_lw_cloud_sampling.F90 @@ -89,7 +89,7 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, lw_optical_props_precip ! RRTMGP DDT: Shortwave optical properties by spectral point (precipitation) ! Local variables - integer :: iCol, iLay + integer :: iCol, iLay, iBand integer,dimension(ncol) :: ipseed_lw type(random_stat) :: rng_stat real(kind_phys), dimension(lw_gas_props%get_ngpt(),nLev,ncol) :: rng3D,rng3D2 @@ -106,6 +106,11 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! #################################################################################### ! First sample the clouds... ! #################################################################################### + lw_optical_props_clouds%band2gpt = lw_gas_props%get_band_lims_gpoint() + lw_optical_props_clouds%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_clouds%gpt2band(lw_optical_props_clouds%band2gpt(1,iBand):lw_optical_props_clouds%band2gpt(2,iBand)) = iBand + end do ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed @@ -170,7 +175,12 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! #################################################################################### ! Next sample the precipitation... ! #################################################################################### - + lw_optical_props_precip%band2gpt = lw_gas_props%get_band_lims_gpoint() + lw_optical_props_precip%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_precip%gpt2band(lw_optical_props_precip%band2gpt(1,iBand):lw_optical_props_precip%band2gpt(2,iBand)) = iBand + end do + ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed do iCol = 1, ncol diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index 4928b2d9f..7c455bee8 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -5,7 +5,6 @@ module rrtmgp_lw_gas_optics use mo_gas_concentrations, only: ty_gas_concs use mo_source_functions, only: ty_source_func_lw use mo_optical_props, only: ty_optical_props_1scl - use mo_compute_bc, only: compute_bc use rrtmgp_aux, only: check_error_msg use GFS_rrtmgp_pre, only: active_gases_array use netcdf @@ -77,14 +76,9 @@ module rrtmgp_lw_gas_optics !! \htmlinclude rrtmgp_lw_gas_optics_init.html !! subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm, & - mpirank, mpiroot, gas_concentrations, lw_optical_props_clrsky, sources, minGPpres, & - minGPtemp, errmsg, errflg) + mpirank, mpiroot, gas_concentrations, minGPpres, minGPtemp, errmsg, errflg) ! Inputs - type(ty_optical_props_1scl), intent(inout) :: & - lw_optical_props_clrsky - type(ty_source_func_lw),intent(inout) :: & - sources ! RRTMGP DDT: longwave source functions type(ty_gas_concs), intent(inout) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) character(len=128),intent(in) :: & @@ -451,13 +445,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicom scaling_gas_lowerLW, scaling_gas_upperLW, scale_by_complement_lowerLW, & scale_by_complement_upperLW, kminor_start_lowerLW, kminor_start_upperLW, totplnkLW,& planck_fracLW, rayl_lowerLW, rayl_upperLW, optimal_angle_fitLW)) - - call check_error_msg('rrtmgp_lw_gas_optical_props_init', lw_optical_props_clrsky%init( & - lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) - - call check_error_msg('rrtmgp_lw_gas_optics_sources_init', sources%init( & - lw_gas_props%get_band_lims_wavenumber(), lw_gas_props%get_band_lims_gpoint())) - + ! The minimum pressure allowed in GP RTE calculations. Used to bound uppermost layer ! temperature (GFS_rrtmgp_pre.F90) minGPpres = lw_gas_props%get_press_min() @@ -500,12 +488,31 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ lw_optical_props_clrsky ! RRTMGP DDT: longwave clear-sky radiative properties type(ty_source_func_lw),intent(inout) :: & sources ! RRTMGP DDT: longwave source functions + + ! Local + integer :: ii ! Initialize CCPP error handling variables errmsg = '' errflg = 0 if (.not. doLWrad) return + !print*,'lw_optical_props_clrsky%gpt2band: ',lw_optical_props_clrsky%gpt2band + !print*,'lw_optical_props_clrsky%band_lims_wvn: ',lw_optical_props_clrsky%band_lims_wvn + !print*,'lw_optical_props_clrsky%gpt2band: ',lw_optical_props_clrsky%gpt2band + !print*,'sources%gpt2band: ',sources%gpt2band + !print*,'sources%band_lims_wvn: ',sources%band_lims_wvn + !print*,'sources%gpt2band: ',sources%gpt2band + + ! Copy spectral information into GP DDTs. + lw_optical_props_clrsky%band2gpt = lw_gas_props%get_band_lims_gpoint() + sources%band2gpt = lw_gas_props%get_band_lims_gpoint() + sources%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + lw_optical_props_clrsky%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do ii=1,nbndsLW + lw_optical_props_clrsky%gpt2band(band2gptLW(1,ii):band2gptLW(2,ii)) = ii + sources%gpt2band(band2gptLW(1,ii):band2gptLW(2,ii)) = ii + end do ! Gas-optics call check_error_msg('rrtmgp_lw_gas_optics_run',lw_gas_props%gas_optics(& diff --git a/physics/rrtmgp_lw_gas_optics.meta b/physics/rrtmgp_lw_gas_optics.meta index 48b97bde6..41ef28469 100644 --- a/physics/rrtmgp_lw_gas_optics.meta +++ b/physics/rrtmgp_lw_gas_optics.meta @@ -1,8 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_gas_optics type = scheme - dependencies = machine.F,rte-rrtmgp/extensions/mo_compute_bc.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,rrtmgp_aux.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90,rte-rrtmgp/rte/mo_source_functions.F90 ######################################################################## [ccpp-arg-table] @@ -34,22 +33,6 @@ type = ty_gas_concs intent = inout optional = F -[lw_optical_props_clrsky] - standard_name = longwave_optical_properties_for_clear_sky - long_name = Fortran DDT containing RRTMGP optical properties - units = DDT - dimensions = () - type = ty_optical_props_1scl - intent = inout - optional = F -[sources] - standard_name = longwave_source_function - long_name = Fortran DDT containing RRTMGP source functions - units = DDT - dimensions = () - type = ty_source_func_lw - intent = inout - optional = F [mpirank] standard_name = mpi_rank long_name = current MPI rank diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index 30452869d..a315e12ae 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -1,12 +1,10 @@ module rrtmgp_sw_gas_optics use machine, only: kind_phys - use module_radiation_gases, only: NF_VGAS use mo_rte_kind, only: wl use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_gas_concentrations, only: ty_gas_concs use rrtmgp_aux, only: check_error_msg use mo_optical_props, only: ty_optical_props_2str - use mo_compute_bc, only: compute_bc use GFS_rrtmgp_pre, only: active_gases_array use netcdf #ifdef MPI diff --git a/physics/rrtmgp_sw_gas_optics.meta b/physics/rrtmgp_sw_gas_optics.meta index 17d0b046b..9c50cd781 100644 --- a/physics/rrtmgp_sw_gas_optics.meta +++ b/physics/rrtmgp_sw_gas_optics.meta @@ -1,8 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_gas_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_gases.f,rrtmgp_aux.F90,rte-rrtmgp/extensions/mo_compute_bc.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,rrtmgp_aux.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90 ######################################################################## [ccpp-arg-table] From 465167f65bf2330a62af64950edce19b3b542e66 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 1 Apr 2021 15:58:39 +0000 Subject: [PATCH 042/119] Removed a line not needed --- physics/sfc_nst.f | 4 ---- 1 file changed, 4 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 38a910169..d9727e4ff 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -757,15 +757,11 @@ module sfc_nst_post ! \defgroup GFS_NSST_POST GFS Near-Surface Sea Temperature Post !! \brief Brief description of the parameterization -!! -!! \section arg_table_sfc_nst_post_init Argument Table !! subroutine sfc_nst_post_init end subroutine sfc_nst_post_init ! \brief Brief description of the subroutine -!! -!! \section arg_table_sfc_nst_post_finalize Argument Table !! subroutine sfc_nst_post_finalize end subroutine sfc_nst_post_finalize From 8f78249209e6ef321a58764292e4087c5f9a5b23 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 1 Apr 2021 16:15:14 +0000 Subject: [PATCH 043/119] Added comments to briefily describe some temporary variables in the code --- physics/flake_driver.F90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index 474aea24d..ea47e4ce0 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -188,7 +188,8 @@ SUBROUTINE flake_driver_run ( & lake_depth_max, T_bot_2_in, T_bot_2_out, dxlat,tb,tr,tt,temp,Kbar, DelK -REAL (KIND = kind_phys) :: x, y +REAL (KIND = kind_phys) :: x, y !temperarory variables used for Tbot and Tsfc + !initilizations INTEGER :: i,ipr,iter @@ -242,6 +243,10 @@ SUBROUTINE flake_driver_run ( & ! endif T_sfc(i) = 0.1*tt + 0.9* tsurf(i) endif +! +! Add empirical climatology of lake Tsfc and Tbot to the current Tsfc and Tbot +! to make sure Tsfc and Tbot are warmer than Tair in Winter or colder than Tair +! in Summer x = 0.03279*julian if(xlat(i) .ge. 0.0) then From 68bf5804282230900020bd6085d64cc9fc0939cb Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 1 Apr 2021 20:08:15 -0600 Subject: [PATCH 044/119] Speed up aeerosol interpolation and Noah MP initialization using OpenMP --- physics/GFS_phys_time_vary.fv3.F90 | 87 ++++++++++++++++++++++-------- physics/aerclm_def.F | 2 +- physics/aerinterp.F90 | 56 +++++++++++-------- 3 files changed, 100 insertions(+), 45 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 57d253083..ba784a016 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -305,8 +305,8 @@ subroutine GFS_phys_time_vary_init ( call setindxh2o (im, xlat_d, jindx1_h, jindx2_h, ddy_h) endif -!> - Call setindxaer() to initialize aerosols data !$OMP section +!> - Call setindxaer() to initialize aerosols data if (iaerclm) then call setindxaer (im, xlat_d, jindx1_aer, & jindx2_aer, ddy_aer, xlon_d, & @@ -317,8 +317,8 @@ subroutine GFS_phys_time_vary_init ( jamin=min(minval(jindx1_aer), jamin) jamax=max(maxval(jindx2_aer), jamax) endif -!$OMP section +!$OMP section !> - Call setindxci() to initialize IN and CCN data if (iccn == 1) then call setindxci (im, xlat_d, jindx1_ci, & @@ -376,10 +376,11 @@ subroutine GFS_phys_time_vary_init ( !$OMP end sections !$OMP end parallel - if (iaerclm) then - call read_aerdataf (iamin, iamax, jamin, jamax, me,master,iflip, & - idate,errmsg,errflg) - endif + + if (errflg/=0) return + + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) if (lsm == lsm_noahmp) then if (all(tvxy < zero)) then @@ -431,15 +432,34 @@ subroutine GFS_phys_time_vary_init ( smoiseq(:,:) = missing_value zsnsoxy(:,:) = missing_value + imn = idate(2) + +!$OMP parallel do num_threads(nthrds) default(none) & +!$OMP shared(im,lsoil,con_t0c,landfrac,tsfcl,tvxy,tgxy,tahxy) & +!$OMP shared(snowd,canicexy,canliqxy,canopy,eahxy,cmxy,chxy) & +!$OMP shared(fwetxy,sneqvoxy,weasd,alboldxy,qsnowxy,wslakexy) & +!$OMP shared(taussxy,albdvis,albdnir,albivis,albinir,emiss) & +!$OMP shared(waxy,wtxy,zwtxy,imn,vtype,xlaixy,xsaixy,lfmassxy) & +!$OMP shared(stmassxy,rtmassxy,woodxy,stblcpxy,fastcpxy) & +!$OMP shared(isbarren_table,isice_table,isurban_table) & +!$omp shared(iswater_table,laim_table,sla_table,bexp_table) & +!$omp shared(stc,smc,slc,tg3,snowxy,tsnoxy,snicexy,snliqxy) & +!$omp shared(zsnsoxy,STYPE,SMCMAX_TABLE,SMCWLT_TABLE,zs,dzs) & +!$omp shared(DWSAT_TABLE,DKSAT_TABLE,PSISAT_TABLE,smoiseq) & +!$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) & +!$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) & +!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz) do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) tgxy(ix) = tsfcl(ix) tahxy(ix) = tsfcl(ix) - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tvxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tgxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tahxy(ix) = con_t0c + if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then + tvxy(ix) = con_t0c + tgxy(ix) = con_t0c + tahxy(ix) = con_t0c + end if canicexy(ix) = 0.0_kind_phys canliqxy(ix) = canopy(ix) @@ -466,14 +486,12 @@ subroutine GFS_phys_time_vary_init ( albinir(ix) = 0.2_kind_phys emiss(ix) = 0.95_kind_phys - waxy(ix) = 4900.0_kind_phys wtxy(ix) = waxy(ix) zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys vegtyp = vtype(ix) if (vegtyp == 0) vegtyp = 7 - imn = idate(2) if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then @@ -555,7 +573,6 @@ subroutine GFS_phys_time_vary_init ( else errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' errflg = 1 - return endif ! Now we have the snowxy field @@ -631,6 +648,9 @@ subroutine GFS_phys_time_vary_init ( endif enddo ! ix +!$OMP end parallel do + + if (errflg/=0) return deallocate(dzsno) deallocate(dzsnso) @@ -751,6 +771,20 @@ subroutine GFS_phys_time_vary_timestep_init ( return end if +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(kdt,nsswr,lsswr,clstp,imfdeepcnv,cal_pre,random_clds) & +!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval) & +!$OMP shared(rann,im,isc,jsc,imap,jmap,ntoz,me,idate,jindx1_o3,jindx2_o3) & +!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) & +!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) & +!$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) & +!$OMP shared(ddy_j2tau,tau_amf) & +!$OMP private(iseed,iskip,i,j,k,stime2,etime2) + +!$OMP sections + +!$OMP section + !--- switch for saving convective clouds - cnvc90.f !--- aka Ken Campana/Yu-Tai Hou legacy if ((mod(kdt,nsswr) == 0) .and. (lsswr)) then @@ -767,6 +801,8 @@ subroutine GFS_phys_time_vary_timestep_init ( clstp = 0100 endif +!$OMP section + !--- random number needed for RAS and old SAS and when cal_pre=.true. ! imfdeepcnv < 0 when ras = .true. if ( (imfdeepcnv <= 0 .or. cal_pre) .and. random_clds ) then @@ -792,6 +828,7 @@ subroutine GFS_phys_time_vary_timestep_init ( endif ! imfdeepcnv, cal_re, random_clds +!$OMP section !> - Call ozinterpol() to make ozone interpolation if (ntoz > 0) then call ozinterpol (me, im, idate, fhour, & @@ -799,6 +836,7 @@ subroutine GFS_phys_time_vary_timestep_init ( ozpl, ddy_o3) endif +!$OMP section !> - Call h2ointerpol() to make stratospheric water vapor data interpolation if (h2o_phys) then call h2ointerpol (me, im, idate, fhour, & @@ -806,15 +844,7 @@ subroutine GFS_phys_time_vary_timestep_init ( h2opl, ddy_h) endif -!> - Call aerinterpol() to make aerosol interpolation - if (iaerclm) then - call aerinterpol (me, master, im, idate, fhour, & - jindx1_aer, jindx2_aer, & - ddy_aer, iindx1_aer, & - iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) - endif - +!$OMP section !> - Call ciinterpol() to make IN and CCN data interpolation if (iccn == 1) then call ciinterpol (me, im, idate, fhour, & @@ -824,6 +854,7 @@ subroutine GFS_phys_time_vary_timestep_init ( levs, prsl, in_nm, ccn_nm) endif +!$OMP section !> - Call cires_indx_ugwp to read monthly-mean GW-tau diagnosed from FV3GFS-runs that resolve GW-activ if (do_ugwp_v1) then call tau_amf_interp(me, master, im, idate, fhour, & @@ -831,6 +862,20 @@ subroutine GFS_phys_time_vary_timestep_init ( ddy_j1tau, ddy_j2tau, tau_amf) endif +!$OMP end sections +!$OMP end parallel + +!> - Call aerinterpol() to make aerosol interpolation + if (iaerclm) then + ! aerinterpol is using threading inside, don't + ! move into OpenMP parallel section above + call aerinterpol (me, master, nthrds, im, idate, & + fhour, jindx1_aer, jindx2_aer,& + ddy_aer, iindx1_aer, & + iindx2_aer, ddx_aer, & + levs, prsl, aer_nm) + endif + !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN diff --git a/physics/aerclm_def.F b/physics/aerclm_def.F index 426881fe4..3862aa1b1 100644 --- a/physics/aerclm_def.F +++ b/physics/aerclm_def.F @@ -13,7 +13,7 @@ module aerclm_def real (kind=kind_phys), allocatable, dimension(:,:,:,:) :: aer_pres real (kind=kind_phys), allocatable, dimension(:,:,:,:,:) :: aerin - data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, + data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, & 227.5, 258., 288.5, 319., 349.5, 380.5/ data specname /'DU001','DU002','DU003','DU004','DU005', diff --git a/physics/aerinterp.F90 b/physics/aerinterp.F90 index bed73c5be..6ea8af7f4 100644 --- a/physics/aerinterp.F90 +++ b/physics/aerinterp.F90 @@ -43,15 +43,23 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) endif ! !! =================================================================== +!! check if all necessary files exist +!! =================================================================== + do imon = 1, timeaer + write(mn,'(i2.2)') imon + fname=trim("aeroclim.m"//mn//".nc") + inquire (file = fname, exist = file_exist) + if (.not. file_exist) then + errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' + errflg = 1 + return + endif + enddo +! +!! =================================================================== !! fetch dim spec and lat/lon from m01 data set !! =================================================================== fname=trim("aeroclim.m"//'01'//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif call nf_open(fname , nf90_NOWRITE, ncid) vname = trim(specname(1)) @@ -117,13 +125,9 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & endif ! allocate local working arrays - if (.not. allocated(buff)) then - allocate (buff(lonsaer, latsaer, levsw)) - allocate (pres_tmp(lonsaer,levsw)) - endif - if (.not. allocated(buffx)) then - allocate (buffx(lonsaer, latsaer, levsw,1)) - endif + allocate (buff(lonsaer, latsaer, levsw)) + allocate (pres_tmp(lonsaer, levsw)) + allocate (buffx(lonsaer, latsaer, levsw, 1)) !! =================================================================== !! loop thru m01 - m12 for aer/pres array @@ -131,13 +135,6 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & do imon = 1, timeaer write(mn,'(i2.2)') imon fname=trim("aeroclim.m"//mn//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif - call nf_open(fname , nf90_NOWRITE, ncid) ! ====> construct 3-d pressure array (Pa) @@ -259,7 +256,7 @@ END SUBROUTINE setindxaer !********************************************************************** !********************************************************************** ! - SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & + SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & ddy,iindx1,iindx2,ddx,lev,prsl,aerout) ! USE MACHINE, ONLY : kind_phys @@ -270,7 +267,7 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & ! integer JINDX1(npts), JINDX2(npts),iINDX1(npts),iINDX2(npts) - integer me,idate(4), master + integer me,idate(4), master, nthrds integer IDAT(8),JDAT(8) ! real(kind=kind_phys) DDY(npts), ddx(npts),ttt @@ -318,6 +315,14 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & if (n2 > 12) n2 = n2 -12 ! +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(npts,ntrcaer,aerin,aer_pres,prsl) & +!$OMP shared(ddx,ddy,jindx1,jindx2,iindx1,iindx2) & +!$OMP shared(aerpm,aerpres,aerout,n1,n2,lev,nthrds) & +!$OMP private(l,j,k,ii,i1,i2,j1,j2,temj,temi) & +!$OMP copyin(tx1,tx2) firstprivate(tx1,tx2) + +!$OMP do DO L=1,levsaer DO J=1,npts J1 = JINDX1(J) @@ -341,8 +346,10 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & +TEMI*DDY(j)*aer_pres(I1,J2,L,n2)+DDX(j)*TEMJ*aer_pres(I2,J1,L,n2)) ENDDO ENDDO +!$OMP end do ! don't flip, input is the same direction as GFS (bottom-up) +!$OMP do DO J=1,npts DO L=1,lev if(prsl(j,L).ge.aerpres(j,1)) then @@ -371,7 +378,10 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & endif ENDDO !L-loop ENDDO !J-loop -! +!$OMP end do + +!$OMP end parallel + RETURN END SUBROUTINE aerinterpol From c8b70e9f3d1550df60a4b1af7abc626709d4f130 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:07:13 -0600 Subject: [PATCH 045/119] physics/GFS_debug.*: add roughness length variables to GFS_checkland --- physics/GFS_debug.F90 | 14 ++++++++++++- physics/GFS_debug.meta | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 2a8318f46..905e8977a 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -1450,7 +1450,8 @@ end subroutine GFS_checkland_finalize subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_guess, & flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & soiltyp, vegtype, slopetyp, dry, icy, wet, lake, ocean, & - oceanfrac, landfrac, lakefrac, slmsk, islmsk, errmsg, errflg ) + oceanfrac, landfrac, lakefrac, slmsk, islmsk, & + zorl, zorlo, zorll, zorli, fice, errmsg, errflg ) use machine, only: kind_phys @@ -1486,6 +1487,11 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ real(kind_phys), intent(in ) :: lakefrac(im) real(kind_phys), intent(in ) :: slmsk(im) integer, intent(in ) :: islmsk(im) + real(kind_phys), intent(in ) :: zorl(im) + real(kind_phys), intent(in ) :: zorlo(im) + real(kind_phys), intent(in ) :: zorll(im) + real(kind_phys), intent(in ) :: zorli(im) + real(kind_phys), intent(in ) :: fice(im) character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg @@ -1508,6 +1514,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,i5)') 'YYY: ivegsrc :', ivegsrc do i=1,im + !if (fice(i)>0.999) then !if (vegtype(i)==15) then write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_iter(i) :', i, blkno, flag_iter(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_guess(i) :', i, blkno, flag_guess(i) @@ -1525,8 +1532,13 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, oceanfrac(i) :', i, blkno, oceanfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, landfrac(i) :', i, blkno, landfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, lakefrac(i) :', i, blkno, lakefrac(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, fice(i) :', i, blkno, fice(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slmsk(i) :', i, blkno, slmsk(i) write(0,'(a,2i5,1x,i5)') 'YYY: i, blk, islmsk(i) :', i, blkno, islmsk(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorl(i) :', i, blkno, zorl(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlo(i) :', i, blkno, zorlo(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorli(i) :', i, blkno, zorli(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorll(i) :', i, blkno, zorll(i) !end if end do diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index 3b044904b..a931c7cac 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -646,6 +646,51 @@ type = integer intent = in optional = F +[zorl] + standard_name = surface_roughness_length + long_name = surface roughness length + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorlo] + standard_name = surface_roughness_length_over_ocean + long_name = surface roughness length over ocean + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[fice] + standard_name = sea_ice_concentration + long_name = ice fraction over open water + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From f4cf86264ee65f2ee599664d324b7419d2f99471 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:08:14 -0600 Subject: [PATCH 046/119] Cleanup formatting and unused variables in physics/GFS_suite_interstitial.* --- physics/GFS_suite_interstitial.F90 | 11 ++++------- physics/GFS_suite_interstitial.meta | 8 -------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index c465f74e7..4d2cf5552 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -156,12 +156,11 @@ end subroutine GFS_suite_interstitial_2_init subroutine GFS_suite_interstitial_2_finalize() end subroutine GFS_suite_interstitial_2_finalize -#if 0 + !> \section arg_table_GFS_suite_interstitial_2_run Argument Table !! \htmlinclude GFS_suite_interstitial_2_run.html !! -#endif - subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplflx, flag_cice, shal_cnv, old_monin, mstrat, & + subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_cice, shal_cnv, old_monin, mstrat, & do_shoc, frac_grid, imfshalcnv, dtf, xcosz, adjsfcdsw, adjsfcdlw, cice, pgr, ulwsfc_cice, lwhd, htrsw, htrlw, xmu, ctei_rm, & work1, work2, prsi, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, cp, hvap, prslk, suntim, adjsfculw, adjsfculw_lnd, & adjsfculw_ice, adjsfculw_wat, dlwsfc, ulwsfc, psmean, dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp, & @@ -171,7 +170,7 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl ! interface variables integer, intent(in ) :: im, levs, imfshalcnv - logical, intent(in ) :: lssav, ldiag3d, lsidea, cplflx, shal_cnv + logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian real(kind=kind_phys), intent(in ) :: dtf, cp, hvap @@ -476,11 +475,9 @@ end subroutine GFS_suite_interstitial_3_init subroutine GFS_suite_interstitial_3_finalize() end subroutine GFS_suite_interstitial_3_finalize -#if 0 !> \section arg_table_GFS_suite_interstitial_3_run Argument Table !! \htmlinclude GFS_suite_interstitial_3_run.html !! -#endif subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & satmedmf, trans_trac, do_shoc, ltaerosol, ntrac, ntcw, & ntiw, ntclamt, ntrw, ntsw, ntrnc, ntsnc, ntgl, ntgnc, & @@ -514,7 +511,7 @@ subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc ! save_qi is not allocated for Zhao-Carr MP real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp ! ONLY ALLOCATE FOR THOMPSON! TODO + real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index fdf1716f1..c5f71c7bf 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -330,14 +330,6 @@ type = logical intent = in optional = F -[cplflx] - standard_name = flag_for_flux_coupling - long_name = flag controlling cplflx collection (default off) - units = flag - dimensions = () - type = logical - intent = in - optional = F [flag_cice] standard_name = flag_for_cice long_name = flag for cice From 9143484c3168e3d126a17974f825072d3ac4dfcc Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Fri, 2 Apr 2021 15:04:03 +0000 Subject: [PATCH 047/119] Add dkudiagnostic in moninedmf from Andy Hazelton. --- physics/moninedmf.f | 11 +++++++++-- physics/moninedmf.meta | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/physics/moninedmf.f b/physics/moninedmf.f index d5cb2ded3..8b3b01e31 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -64,7 +64,7 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & prsi,del,prsl,prslk,phii,phil,delt,dspheat, & & dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt, & & kinver,xkzm_m,xkzm_h,xkzm_s,lprnt,ipr, & - & xkzminv,moninq_fac,hurr_pbl,islimsk,var_ric, & + & xkzminv,moninq_fac,hurr_pbl,islimsk,dkudiagnostic,var_ric, & & coef_ric_l,coef_ric_s,lssav,ldiag3d,qdiag3d,ntoz, & & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL, & & flag_for_pbl_generic_tend,errmsg,errflg) @@ -154,7 +154,7 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & ti(im,km-1), shr2(im,km-1), & & al(im,km-1), ad(im,km), & & au(im,km-1), a1(im,km), & - & a2(im,km*ntrac) + & a2(im,km*ntrac), dkudiagnostic(im,km-1) ! real(kind=kind_phys) tcko(im,km), qcko(im,km,ntrac), & & ucko(im,km), vcko(im,km), xmf(im,km) @@ -1402,6 +1402,13 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & ! enddo enddo + + do k = 1,km1 + do i=1,im + dkudiagnostic(i,k) = dku(i,k) + enddo + enddo + ! ! solve tridiagonal problem for momentum ! diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index 9d365e141..ef49389f4 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -513,6 +513,15 @@ type = integer intent = in optional = F +[dkudiagnostic] + standard_name = atmosphere_momentum_diffusivity + long_name = diffusivity for momentum + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + type = real + kind = kind_phys + intent = out + optional = F [var_ric] standard_name = flag_variable_bulk_richardson_number long_name = flag for calculating variable bulk richardson number for hurricane PBL From 347104a52e127afd014965e54d28e052d3c9ac30 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:57:03 -0600 Subject: [PATCH 048/119] physics/GFS_phys_time_vary.fv3.F90: remove variable that was used for debugging only --- physics/GFS_phys_time_vary.fv3.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index ed7fd99d0..cf489c571 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -776,7 +776,7 @@ subroutine GFS_phys_time_vary_timestep_init ( !$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) & !$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) & !$OMP shared(ddy_j2tau,tau_amf) & -!$OMP private(iseed,iskip,i,j,k,stime2,etime2) +!$OMP private(iseed,iskip,i,j,k) !$OMP sections From edc9194156b7aa3aff101e70d9194a1313095d99 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:09:37 -0600 Subject: [PATCH 049/119] Temporary commit: conditionally set zorlx variables to huge in GFS_surface_composites_pre_run --- physics/GFS_surface_composites.F90 | 24 +++++++++++++++++++++--- physics/GFS_surface_composites.meta | 27 +++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index fe0fc4097..75c25cccb 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -13,6 +13,8 @@ module GFS_surface_composites_pre real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys, epsln = 1.0e-10_kind_phys + real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue + contains subroutine GFS_surface_composites_pre_init () @@ -32,7 +34,9 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & gflx_ice, tgice, islmsk, islmsk_cice, slmsk, semis_rad, semis_wat, semis_lnd, semis_ice, & qss, qss_wat, qss_lnd, qss_ice, hflx, hflx_wat, hflx_lnd, hflx_ice, & - min_lakeice, min_seaice, errmsg, errflg) + min_lakeice, min_seaice, & + zorlo, zorll, zorli, & + errmsg, errflg) implicit none @@ -57,7 +61,9 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice - + ! + real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli + ! real(kind=kind_phys), parameter :: timin = 173.0_kind_phys ! minimum temperature allowed for snow/ice ! CCPP error handling @@ -183,6 +189,10 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_wat(i) = 0.984_kind_phys qss_wat(i) = qss(i) hflx_wat(i) = hflx(i) + ! DH* + else + zorlo(i) = huge + ! *DH endif if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) @@ -193,6 +203,10 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_lnd(i) = semis_rad(i) qss_lnd(i) = qss(i) hflx_lnd(i) = hflx(i) + ! DH* + else + zorll(i) = huge + ! *DH end if if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) @@ -205,7 +219,11 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_ice(i) = 0.95_kind_phys qss_ice(i) = qss(i) hflx_ice(i) = hflx(i) - endif + ! DH* + else + zorli(i) = huge + ! *DH + end if if (nint(slmsk(i)) /= 1) slmsk(i) = islmsk(i) enddo diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 192056047..04e2e23d0 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -588,6 +588,33 @@ kind = kind_phys intent = in optional = F +[zorlo] + standard_name = surface_roughness_length_over_ocean + long_name = surface roughness length over ocean + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 267748a9717c8dc2e9ef60af9fac39c45c030b5f Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 5 Apr 2021 08:04:24 -0600 Subject: [PATCH 050/119] Rename Fortran variables and CCPP standard names / long names of surface composites from ocean to water --- physics/GFS_PBL_generic.meta | 12 +- physics/GFS_debug.meta | 4 +- physics/GFS_phys_time_vary.fv3.meta | 4 +- physics/GFS_suite_interstitial.meta | 4 +- physics/GFS_surface_composites.meta | 136 +++---- physics/GFS_surface_generic.meta | 8 +- physics/dcyc2.meta | 12 +- physics/flake_driver.meta | 52 +-- physics/gfdl_sfc_layer.F90 | 104 ++--- physics/gfdl_sfc_layer.meta | 86 ++--- physics/module_MYJSFC_wrapper.meta | 40 +- physics/module_MYNNPBL_wrapper.F90 | 12 +- physics/module_MYNNPBL_wrapper.meta | 18 +- physics/module_MYNNSFC_wrapper.F90 | 140 +++---- physics/module_MYNNSFC_wrapper.meta | 100 ++--- physics/module_sf_mynn.F90 | 564 ++++++++++++++-------------- physics/moninedmf.meta | 4 +- physics/samfdeepcnv.meta | 4 +- physics/sascnvn.meta | 4 +- physics/sfc_diff.meta | 56 +-- physics/sfc_drv_ruc.meta | 8 +- physics/sfc_nst.meta | 72 ++-- physics/sfc_ocean.meta | 40 +- 23 files changed, 742 insertions(+), 742 deletions(-) diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index 87b3f33b8..8f4bc90fc 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -1272,8 +1272,8 @@ intent = in optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1281,8 +1281,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1290,8 +1290,8 @@ intent = in optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index a931c7cac..a8f823090 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -656,8 +656,8 @@ intent = in optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 06192eb6a..373e36846 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1793,8 +1793,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_dimension) type = real diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index 6a9290ac7..be72b671b 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -620,8 +620,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 04e2e23d0..ff07c1de2 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -168,8 +168,8 @@ intent = in optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -204,8 +204,8 @@ intent = in optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -240,8 +240,8 @@ intent = in optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -276,8 +276,8 @@ intent = in optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -339,8 +339,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -393,8 +393,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -472,8 +472,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -508,8 +508,8 @@ intent = in optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -544,8 +544,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -589,8 +589,8 @@ intent = in optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_loop_extent) type = real @@ -676,8 +676,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -730,8 +730,8 @@ intent = inout optional = F [gabsbdlw_wat] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -918,8 +918,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_loop_extent) type = real @@ -954,8 +954,8 @@ intent = inout optional = F [cd_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -990,8 +990,8 @@ intent = inout optional = F [cdq_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1026,8 +1026,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1062,8 +1062,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1098,8 +1098,8 @@ intent = inout optional = F [ffmm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1134,8 +1134,8 @@ intent = inout optional = F [ffhh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1170,8 +1170,8 @@ intent = inout optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1206,8 +1206,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1242,8 +1242,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1278,8 +1278,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -1314,8 +1314,8 @@ intent = inout optional = F [cmm_wat] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1350,8 +1350,8 @@ intent = inout optional = F [chh_wat] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -1386,8 +1386,8 @@ intent = inout optional = F [gflx_wat] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1422,8 +1422,8 @@ intent = inout optional = F [ep1d_wat] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1458,8 +1458,8 @@ intent = inout optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1494,8 +1494,8 @@ intent = inout optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1530,8 +1530,8 @@ intent = inout optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -1566,8 +1566,8 @@ intent = inout optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1602,8 +1602,8 @@ intent = inout optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1638,8 +1638,8 @@ intent = inout optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -1692,8 +1692,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_generic.meta b/physics/GFS_surface_generic.meta index d4c8b1bca..47b685f72 100644 --- a/physics/GFS_surface_generic.meta +++ b/physics/GFS_surface_generic.meta @@ -656,8 +656,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -746,8 +746,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e4a22477d..c11ab47d1 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -89,8 +89,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -143,8 +143,8 @@ intent = in optional = F [sfcemis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -441,8 +441,8 @@ intent = out optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index 2b857e509..0dd90b4c7 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -96,8 +96,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -114,8 +114,8 @@ intent = in optional = F [weasd] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -217,8 +217,8 @@ intent = in optional = F [snwdph] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -235,8 +235,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -253,8 +253,8 @@ intent = inout optional = F [t_sfc] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -262,8 +262,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -271,8 +271,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -280,8 +280,8 @@ intent = inout optional = F [ustar] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -289,8 +289,8 @@ intent = inout optional = F [qsfc] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -298,8 +298,8 @@ intent = inout optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -307,8 +307,8 @@ intent = inout optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -316,8 +316,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -325,8 +325,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 008e716e2..73c172546 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -103,12 +103,12 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & lsm_noah, lsm_noahmp, lsm_ruc, lsm_noah_wrfv4, icoef_sf, cplwav, & cplwav2atm, lcurr_sf, pert_Cd, ntsflg, sfenth, z1, shdmax, ivegsrc, & vegtype, sigmaf, dt, wet, dry, icy, isltyp, rd, grav, ep1, ep2, smois, & - psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_ocn, & - tsurf_lnd, tsurf_ice, tskin_ocn, tskin_lnd, tskin_ice, ustar_ocn, & - ustar_lnd, ustar_ice, znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, & - cdm_ice, stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, qss_ocn, & + psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_wat, & + tsurf_lnd, tsurf_ice, tskin_wat, tskin_lnd, tskin_ice, ustar_wat, & + ustar_lnd, ustar_ice, znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, & + cdm_ice, stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, qss_wat, & qss_lnd, qss_ice, errmsg, errflg) use funcphys, only: fpvs @@ -137,15 +137,15 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smois real(kind=kind_phys), dimension(im), intent(in) :: psfc, prsl1, & q1, t1, u1, v1, wspd, u10, v10, gsw, glw, z1, shdmax, sigmaf, xlat, & - xlon, tsurf_ocn, tsurf_lnd, tsurf_ice + xlon, tsurf_wat, tsurf_lnd, tsurf_ice - real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & - tskin_lnd, tskin_ice, ustar_ocn, ustar_lnd, ustar_ice, & - znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & - stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, & - qss_ocn, qss_lnd, qss_ice + real(kind=kind_phys), intent(inout), dimension(im) :: tskin_wat, & + tskin_lnd, tskin_ice, ustar_wat, ustar_lnd, ustar_ice, & + znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, cdm_ice, & + stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, & + qss_wat, qss_lnd, qss_ice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -613,24 +613,24 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & wetc(i) = 1.0 !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: - tstrc(i) = 0.5*(tskin_ocn(i) + tsurf_ocn(i)) !averaging tskin_ocn and tsurf_ocn as in GFS surface layer breaks ntsflg functionality + tstrc(i) = 0.5*(tskin_wat(i) + tsurf_wat(i)) !averaging tskin_wat and tsurf_wat as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: - !tstrc(i) = tskin_ocn(i) + !tstrc(i) = tskin_wat(i) ! DH* 20201009: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then - wind10(i)=wspd(i)*alog(10.0/(0.01*znt_ocn(i)))/alog(z1(i)/(0.01*znt_ocn(i))) + wind10(i)=wspd(i)*alog(10.0/(0.01*znt_wat(i)))/alog(z1(i)/(0.01*znt_wat(i))) end if wind10(i)=wind10(i)*100.0 !! m/s to cm/s !GJF: mflux2 expects negative roughness length for ocean points - znt_ocn(i) = -znt_ocn(i) + znt_wat(i) = -znt_wat(i) - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i), rib_ocn(i), & - xxfh(i), znt_ocn(i), mznt(i), tstrc(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_wat(i), rib_wat(i), & + xxfh(i), znt_wat(i), mznt(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & @@ -639,14 +639,14 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_ocn(i) = tstrc(i) ! gopal's doing + tskin_wat(i) = tstrc(i) ! gopal's doing end if - znt_ocn(i)= abs(znt_ocn(i)) + znt_wat(i)= abs(znt_wat(i)) mznt(i)= abs(mznt(i)) !GJF: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) if (diag_wind10m) then u10_ocn(i) = u1(i)*(0.01*wind10(i)/wspd(i)) @@ -654,67 +654,67 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & end if !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy - !gz1oz0(i) = alog(zkmax(i)/znt_ocn(i)) + !gz1oz0(i) = alog(zkmax(i)/znt_wat(i)) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - cdm_ocn(i) = max(cdm_ocn(i), cd_low_limit) - cdm_ocn(i) = min(cdm_ocn(i), cd_high_limit) - fm_ocn(i) = karman/sqrt(cdm_ocn(i)) + cdm_wat(i) = max(cdm_wat(i), cd_low_limit) + cdm_wat(i) = min(cdm_wat(i), cd_high_limit) + fm_wat(i) = karman/sqrt(cdm_wat(i)) - !1) try fh_ocn from MFLUX2 - fh_ocn(i) = karman*xxfh(i) + !1) try fh_wat from MFLUX2 + fh_wat(i) = karman*xxfh(i) - !2) calc ch_ocn from fm_ocn and fh_ocn - ch_ocn(i) = karman*karman/(fm_ocn(i) * fh_ocn(i)) + !2) calc ch_wat from fm_wat and fh_wat + ch_wat(i) = karman*karman/(fm_wat(i) * fh_wat(i)) !3) check if ch_lnd is out of bounds (if so, recalculate fh_lnd from bounded value) ch_bound_excursion = .false. - if (ch_ocn(i) < ch_low_limit) then + if (ch_wat(i) < ch_low_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_low_limit - else if (ch_ocn(i) > ch_high_limit) then + ch_wat(i) = ch_low_limit + else if (ch_wat(i) > ch_high_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_high_limit + ch_wat(i) = ch_high_limit end if - fh2_ocn(i) = karman*xxfh2(i) + fh2_wat(i) = karman*xxfh2(i) if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) - fh_ocn(i) = karman*karman/(fm_ocn(i)*ch_ocn(i)) - fh2_ocn(i) = fh2_fh_ratio*fh_ocn(i) + fh_wat(i) = karman*karman/(fm_wat(i)*ch_wat(i)) + fh2_wat(i) = fh2_fh_ratio*fh_wat(i) end if !Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih - !psim_ocn(i)=gz1oz0(i)-fm_ocn(i) - !psih_ocn(i)=gz1oz0(i)-fh_ocn(i) + !psim_ocn(i)=gz1oz0(i)-fm_wat(i) + !psih_ocn(i)=gz1oz0(i)-fh_wat(i) - ustar_ocn(i) = 0.01*sqrt(cdm_ocn(i)* & + ustar_wat(i) = 0.01*sqrt(cdm_wat(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) - ustar_ocn(i) = amax1(ustar_ocn(i),0.001) + ustar_wat(i) = amax1(ustar_wat(i),0.001) - stress_ocn(i) = cdm_ocn(i)*wspd(i)*wspd(i) + stress_wat(i) = cdm_wat(i)*wspd(i)*wspd(i) !GJF: from WRF's module_sf_gfdl.F !!! convert cd, ch to values at 10m, for output - cd10 = cdm_ocn(i) + cd10 = cdm_wat(i) if ( wind10(i) .ge. 0.1 ) then - cd10=cdm_ocn(i)* (wspd(i)/(0.01*wind10(i)) )**2 + cd10=cdm_wat(i)* (wspd(i)/(0.01*wind10(i)) )**2 !tmp9=0.01*abs(tzot(i)) - !ch_out(i)=ch_ocn(i)*(wspd(i)/(0.01*wind10(i)) ) * & + !ch_out(i)=ch_wat(i)*(wspd(i)/(0.01*wind10(i)) ) * & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if - fm10_ocn(i) = karman/sqrt(cd10) + fm10_wat(i) = karman/sqrt(cd10) !GJF: conductances aren't used in other CCPP schemes - !chs_ocn(i)=ch_ocn(i)*wspd (i) !conductance - !chs2_ocn(i)=ustar_ocn(i)*karman/fh2_ocn(i) !2m conductance + !chs_ocn(i)=ch_wat(i)*wspd (i) !conductance + !chs2_ocn(i)=ustar_wat(i)*karman/fh2_wat(i) !2m conductance if (diag_qss) then - esat = fpvs(tskin_ocn(i)) - qss_ocn(i) = ep2*esat/(psfc(i)-esat) + esat = fpvs(tskin_wat(i)) + qss_wat(i) = ep2*esat/(psfc(i)-esat) end if end if !wet diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index 3009317f1..c8cbaf294 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -8,8 +8,8 @@ name = gfdl_sfc_layer_init type = scheme [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -168,8 +168,8 @@ intent = in optional = F [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -452,9 +452,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -479,9 +479,9 @@ kind = kind_phys intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -506,9 +506,9 @@ kind = kind_phys intent = inout optional = F -[ustar_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ustar_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -533,9 +533,9 @@ kind = kind_phys intent = inout optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -560,9 +560,9 @@ kind = kind_phys intent = inout optional = F -[cdm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cdm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -587,9 +587,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -614,9 +614,9 @@ kind = kind_phys intent = inout optional = F -[rib_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rib_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -641,9 +641,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -668,9 +668,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -695,9 +695,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -722,9 +722,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -749,9 +749,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -776,9 +776,9 @@ kind = kind_phys intent = inout optional = F -[qss_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qss_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index d9d6fb8a0..f048683a3 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -472,8 +472,8 @@ intent = inout optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean (interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -499,8 +499,8 @@ intent = inout optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -526,8 +526,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -553,8 +553,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -580,8 +580,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -607,8 +607,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -634,8 +634,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity funct for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity funct for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -661,8 +661,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -688,8 +688,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -715,8 +715,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 6011c203e..4ea29b1f5 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -62,7 +62,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & dtsfc_diag,dqsfc_diag, & & dusfc_cice,dvsfc_cice, & & dtsfc_cice,dqsfc_cice, & - & hflx_ocn,qflx_ocn,stress_ocn, & + & hflx_wat,qflx_wat,stress_wat, & & oceanfrac,fice,wet,icy,dry, & & dusfci_cpl,dvsfci_cpl, & & dtsfci_cpl,dqsfci_cpl, & @@ -292,7 +292,7 @@ SUBROUTINE mynnedmf_wrapper_run( & real(kind=kind_phys), dimension(im), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & - & stress_ocn,hflx_ocn,qflx_ocn, & + & stress_wat,hflx_wat,qflx_wat, & & oceanfrac,fice logical, dimension(im), intent(in) :: & @@ -560,14 +560,14 @@ SUBROUTINE mynnedmf_wrapper_run( & dqsfci_cpl(i) = dqsfc_cice(i) elseif (icy(i) .or. dry(i)) then ! use stress_ocean for opw component at mixed point if (wspd(i) > zero) then - dusfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*u(i,1)/wspd(i) ! U-momentum flux - dvsfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*v(i,1)/wspd(i) ! V-momentum flux + dusfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*u(i,1)/wspd(i) ! U-momentum flux + dvsfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*v(i,1)/wspd(i) ! V-momentum flux else dusfci_cpl(i) = zero dvsfci_cpl(i) = zero endif - dtsfci_cpl(i) = cp*rho(i,1)*hflx_ocn(i) ! sensible heat flux over open ocean - dqsfci_cpl(i) = XLV*rho(i,1)*qflx_ocn(i) ! latent heat flux over open ocean + dtsfci_cpl(i) = cp*rho(i,1)*hflx_wat(i) ! sensible heat flux over open ocean + dqsfci_cpl(i) = XLV*rho(i,1)*qflx_wat(i) ! latent heat flux over open ocean else ! use results from this scheme for 100% open ocean dusfci_cpl(i) = dusfci_diag(i) dvsfci_cpl(i) = dvsfci_diag(i) diff --git a/physics/module_MYNNPBL_wrapper.meta b/physics/module_MYNNPBL_wrapper.meta index 9b9d4cb52..36ff3b067 100644 --- a/physics/module_MYNNPBL_wrapper.meta +++ b/physics/module_MYNNPBL_wrapper.meta @@ -514,27 +514,27 @@ kind = kind_phys intent = in optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..f42aaedb7 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -57,22 +57,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & u, v, t3d, qvsh, qc, prsl, phii, & & exner, ps, PBLH, slmsk, & & wet, dry, icy, & !intent(in) - & tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - & tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - & qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - & snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - & znt_ocn, znt_lnd, znt_ice, & !intent(inout) - & ust_ocn, ust_lnd, ust_ice, & !intent(inout) - & cm_ocn, cm_lnd, cm_ice, & !intent(inout) - & ch_ocn, ch_lnd, ch_ice, & !intent(inout) - & rb_ocn, rb_lnd, rb_ice, & !intent(inout) - & stress_ocn,stress_lnd,stress_ice, & !intent(inout) - & fm_ocn, fm_lnd, fm_ice, & !intent(inout) - & fh_ocn, fh_lnd, fh_ice, & !intent(inout) - & fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - & fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + & tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + & qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + & snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + & znt_wat, znt_lnd, znt_ice, & !intent(inout) + & ust_wat, ust_lnd, ust_ice, & !intent(inout) + & cm_wat, cm_lnd, cm_ice, & !intent(inout) + & ch_wat, ch_lnd, ch_ice, & !intent(inout) + & rb_wat, rb_lnd, rb_ice, & !intent(inout) + & stress_wat,stress_lnd,stress_ice, & !intent(inout) + & fm_wat, fm_lnd, fm_ice, & !intent(inout) + & fh_wat, fh_lnd, fh_ice, & !intent(inout) + & fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + & fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & & QSFC, qsfc_lnd_ruc, qsfc_ice_ruc, & & USTM, ZOL, MOL, & & RMOL, WSPD, ch, HFLX, QFLX, LH, & @@ -160,24 +160,24 @@ SUBROUTINE mynnsfc_wrapper_run( & logical, dimension(im), intent(in) :: wet, dry, icy real(kind=kind_phys), dimension(im), intent(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice real(kind=kind_phys), dimension(im), intent(inout) :: & - & znt_ocn, znt_lnd, znt_ice, & - & ust_ocn, ust_lnd, ust_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & znt_wat, znt_lnd, znt_ice, & + & ust_wat, ust_lnd, ust_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !MYNN-2D real(kind=kind_phys), dimension(:), intent(in) :: & @@ -227,14 +227,14 @@ SUBROUTINE mynnsfc_wrapper_run( & mavail(i)=1.0 !snowh(i)=snowd(i)*800. !mm -> m !znt_lnd(i)=znt_lnd(i)*0.01 !cm -> m - !znt_ocn(i)=znt_ocn(i)*0.01 !cm -> m + !znt_wat(i)=znt_wat(i)*0.01 !cm -> m !znt_ice(i)=znt_ice(i)*0.01 !cm -> m cpm(i)=cp enddo ! cm -> m where (dry) znt_lnd=znt_lnd*0.01 - where (wet) znt_ocn=znt_ocn*0.01 + where (wet) znt_wat=znt_wat*0.01 where (icy) znt_ice=znt_ice*0.01 ! qsfc ruc @@ -255,15 +255,15 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"dz:",dz(1,1)," qsfc=",qsfc(1)," rmol:",rmol(1) ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt:",znt_lnd(1),znt_ocn(1),znt_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt:",znt_lnd(1),znt_wat(1),znt_ice(1) ! !write(0,*)"HFX:",hfx(1)," qfx",qfx(1) ! write(0,*)"qsfc:",qsfc(1)," ps:",ps(1) -! write(0,*)"wspd:",wspd(1),"rb=",rb_ocn(1) +! write(0,*)"wspd:",wspd(1),"rb=",rb_wat(1) ! write(0,*)"delt=",delt," im=",im," levs=",levs ! write(0,*)"flag_init=",flag_init ! write(0,*)"flag_restart=",flag_restart @@ -287,22 +287,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & redrag=redrag,sfc_z0_type=sfc_z0_type, & !intent(in) itimestep=itimestep,iter=iter, & wet=wet, dry=dry, icy=icy, & !intent(in) - tskin_ocn=tskin_ocn, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) - tsurf_ocn=tsurf_ocn, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) - qsfc_ocn=qsfc_ocn, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) - snowh_ocn=snowh_ocn, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) - znt_ocn=znt_ocn, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) - ust_ocn=ust_ocn, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) - cm_ocn=cm_ocn, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) - ch_ocn=ch_ocn, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) - rb_ocn=rb_ocn, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) - stress_ocn=stress_ocn,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) - fm_ocn=fm_ocn, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) - fh_ocn=fh_ocn, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) - fm10_ocn=fm10_ocn, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) - fh2_ocn=fh2_ocn, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) - hflx_ocn=hflx_ocn, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & - qflx_ocn=qflx_ocn, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & + tskin_wat=tskin_wat, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) + tsurf_wat=tsurf_wat, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) + qsfc_wat=qsfc_wat, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) + snowh_wat=snowh_wat, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) + znt_wat=znt_wat, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) + ust_wat=ust_wat, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) + cm_wat=cm_wat, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) + ch_wat=ch_wat, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) + rb_wat=rb_wat, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) + stress_wat=stress_wat,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) + fm_wat=fm_wat, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) + fh_wat=fh_wat, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) + fm10_wat=fm10_wat, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) + fh2_wat=fh2_wat, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) + hflx_wat=hflx_wat, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & + qflx_wat=qflx_wat, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & ch=ch,CHS=chs,CHS2=chs2,CQS2=cqs2,CPM=cpm, & ZNT=znt,USTM=ustm,ZOL=zol,MOL=mol,RMOL=rmol, & psim=psim,psih=psih, & @@ -330,13 +330,13 @@ SUBROUTINE mynnsfc_wrapper_run( & ! !evap(i)=QFX(i) !or /rho ?? ! ! DH* note - this could be automated (CCPP knows how to convert m to cm) ! znt_lnd(i)=znt_lnd(i)*100. !m -> cm - ! znt_ocn(i)=znt_ocn(i)*100. + ! znt_wat(i)=znt_wat(i)*100. ! znt_ice(i)=znt_ice(i)*100. !enddo ! m -> cm where (dry) znt_lnd=znt_lnd*100. - where (wet) znt_ocn=znt_ocn*100. + where (wet) znt_wat=znt_wat*100. where (icy) znt_ice=znt_ice*100. ! if (lprnt) then @@ -344,17 +344,17 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"finished with mynn_surface layer; output:" ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt (cm):",znt_lnd(1),znt_ocn(1),znt_ice(1) -! write(0,*)"cm:",cm_lnd(1),cm_ocn(1),cm_ice(1) -! write(0,*)"ch:",ch_lnd(1),ch_ocn(1),ch_ice(1) -! write(0,*)"fm:",fm_lnd(1),fm_ocn(1),fm_ice(1) -! write(0,*)"fh:",fh_lnd(1),fh_ocn(1),fh_ice(1) -! write(0,*)"rb:",rb_lnd(1),rb_ocn(1),rb_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt (cm):",znt_lnd(1),znt_wat(1),znt_ice(1) +! write(0,*)"cm:",cm_lnd(1),cm_wat(1),cm_ice(1) +! write(0,*)"ch:",ch_lnd(1),ch_wat(1),ch_ice(1) +! write(0,*)"fm:",fm_lnd(1),fm_wat(1),fm_ice(1) +! write(0,*)"fh:",fh_lnd(1),fh_wat(1),fh_ice(1) +! write(0,*)"rb:",rb_lnd(1),rb_wat(1),rb_ice(1) ! write(0,*)"xland=",xland(1)," wstar:",wstar(1) ! write(0,*)"HFX:",hfx(1)," qfx:",qfx(1) ! write(0,*)"HFLX:",hflx(1)," evap:",evap(1) diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta index 5ffbb8db1..1f16ff161 100644 --- a/physics/module_MYNNSFC_wrapper.meta +++ b/physics/module_MYNNSFC_wrapper.meta @@ -154,8 +154,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -302,9 +302,9 @@ type = logical intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -329,9 +329,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -356,9 +356,9 @@ kind = kind_phys intent = in optional = F -[qsfc_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qsfc_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -383,9 +383,9 @@ kind = kind_phys intent = inout optional = F -[snowh_ocn] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean +[snowh_wat] + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -410,9 +410,9 @@ kind = kind_phys intent = in optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -437,9 +437,9 @@ kind = kind_phys intent = inout optional = F -[ust_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ust_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -464,9 +464,9 @@ kind = kind_phys intent = inout optional = F -[cm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -491,9 +491,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -518,9 +518,9 @@ kind = kind_phys intent = inout optional = F -[rb_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rb_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -545,9 +545,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -572,9 +572,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -599,9 +599,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -626,9 +626,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -653,9 +653,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -680,9 +680,9 @@ kind = kind_phys intent = inout optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -707,9 +707,9 @@ kind = kind_phys intent = inout optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 340fb703a..21ef4e1da 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -137,22 +137,22 @@ SUBROUTINE SFCLAY_mynn( & & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & !in wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn,stress_lnd,stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat,stress_lnd,stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & CH,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -332,25 +332,25 @@ SUBROUTINE SFCLAY_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(IN) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice, & & qsfc_ruc REAL, DIMENSION( ims:ime), INTENT(INOUT) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !ADDITIONAL OUTPUT !JOE-begin @@ -406,12 +406,12 @@ SUBROUTINE SFCLAY_mynn( & IF (itimestep==1 .AND. iter==1) THEN DO i=its,ite !Everything here is used before calculated - UST_OCN(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) + UST_WAT(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_LND(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_ICE(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) MOL(i)=0.0 QSFC(i)=QV3D(i,kts)/(1.+QV3D(i,kts)) - QSFC_OCN(i)=QSFC(i) + QSFC_WAT(i)=QSFC(i) QSFC_LND(i)=QSFC(i) QSFC_ICE(i)=QSFC(i) qstar(i)=0.0 @@ -440,22 +440,22 @@ SUBROUTINE SFCLAY_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -487,22 +487,22 @@ SUBROUTINE SFCLAY1D_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - psix_ocn, psix_lnd, psix_ice, & !=fm, intent(inout) - psit_ocn, psit_lnd, psit_ice, & !=fh, intent(inout) - psix10_ocn, psix10_lnd, psix10_ice, & !=fm10, intent(inout) - psit2_ocn, psit2_lnd, psit2_ice, & !=fh2, intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + psix_wat, psix_lnd, psix_ice, & !=fm, intent(inout) + psit_wat, psit_lnd, psit_ice, & !=fh, intent(inout) + psix10_wat, psix10_lnd, psix10_ice, & !=fm10, intent(inout) + psit2_wat, psit2_lnd, psit2_ice, & !=fh2, intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -583,24 +583,24 @@ SUBROUTINE SFCLAY1D_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice REAL, DIMENSION( ims:ime ), INTENT(inout) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & psix_ocn, psix_lnd, psix_ice, & - & psit_ocn, psit_lnd, psit_ice, & - & psix10_ocn,psix10_lnd,psix10_ice, & - & psit2_ocn, psit2_lnd, psit2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & psix_wat, psix_lnd, psix_ice, & + & psit_wat, psit_lnd, psit_ice, & + & psix10_wat,psix10_lnd,psix10_ice, & + & psit2_wat, psit2_lnd, psit2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice REAL, DIMENSION( its:ite ), INTENT(IN) :: rstoch1D @@ -632,27 +632,27 @@ SUBROUTINE SFCLAY1D_mynn( & PSFC, & !press at surface (Pa/1000) QSFCMR, & !qv at surface (mixing ratio, kg/kg) THCON, & !conversion from temp to theta - zratio_lnd, zratio_ice, zratio_ocn, & !z0/zt - TSK_lnd, TSK_ice, TSK_ocn, & !absolute temperature - THSK_lnd, THSK_ice, THSK_ocn, & !theta - THVSK_lnd, THVSK_ice, THVSK_ocn, & !theta-v - GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_ocn, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) - GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_ocn, & !LOG((ZA(I)+ZT(i))/ZT(i)) - GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_ocn, & !LOG((2.0+ZNT(I))/ZNT(I)) - GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_ocn, & !LOG((2.0+ZT(I))/ZT(I)) - GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_ocn, & !LOG((10.+ZNT(I))/ZNT(I)) - GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_ocn, & !LOG((10.+ZT(I))/ZT(I)) - ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_ocn, & - ZT_lnd, ZT_ice, ZT_ocn, & - ZQ_lnd, ZQ_ice, ZQ_ocn, & - PSIQ_lnd, PSIQ_ice, PSIQ_ocn, & - PSIQ2_lnd, PSIQ2_ice, PSIQ2_ocn, & - QSFCMR_lnd, QSFCMR_ice, QSFCMR_ocn + zratio_lnd, zratio_ice, zratio_wat, & !z0/zt + TSK_lnd, TSK_ice, TSK_wat, & !absolute temperature + THSK_lnd, THSK_ice, THSK_wat, & !theta + THVSK_lnd, THVSK_ice, THVSK_wat, & !theta-v + GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_wat, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) + GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_wat, & !LOG((ZA(I)+ZT(i))/ZT(i)) + GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_wat, & !LOG((2.0+ZNT(I))/ZNT(I)) + GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_wat, & !LOG((2.0+ZT(I))/ZT(I)) + GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_wat, & !LOG((10.+ZNT(I))/ZNT(I)) + GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_wat, & !LOG((10.+ZT(I))/ZT(I)) + ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_wat, & + ZT_lnd, ZT_ice, ZT_wat, & + ZQ_lnd, ZQ_ice, ZQ_wat, & + PSIQ_lnd, PSIQ_ice, PSIQ_wat, & + PSIQ2_lnd, PSIQ2_ice, PSIQ2_wat, & + QSFCMR_lnd, QSFCMR_ice, QSFCMR_wat INTEGER :: N,I,K,L,yesno REAL :: PL,E1,TABS - REAL :: WSPD_lnd, WSPD_ice, WSPD_ocn + REAL :: WSPD_lnd, WSPD_ice, WSPD_wat REAL :: DTHVDZ,DTHVM,VCONV,ZOL2,ZOL10,ZOLZA,ZOLZ0,ZOLZT REAL :: DTG,DTTHX,PSIQ,PSIQ2,PSIQ10,PSIT10 REAL :: FLUXC,VSGD @@ -676,9 +676,9 @@ SUBROUTINE SFCLAY1D_mynn( & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF IF (wet(i)) THEN - write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_ocn(i),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_wat(i),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDDO @@ -690,7 +690,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! DEFINE SKIN TEMPERATURES FOR LAND/WATER/ICE TSK_lnd(I) = 0.5 * (tsurf_lnd(i)+tskin_lnd(i)) TSK_ice(I) = 0.5 * (tsurf_ice(i)+tskin_ice(i)) - TSK_ocn(I) = 0.5 * (tsurf_ocn(i)+tskin_ocn(i)) + TSK_wat(I) = 0.5 * (tsurf_wat(i)+tskin_wat(i)) QVSH(I)=QV1D(I)/(1.+QV1D(I)) !CONVERT TO SPEC HUM (kg/kg) THCON(I)=(100000./PSFCPA(I))**ROVCP ENDDO @@ -699,14 +699,14 @@ SUBROUTINE SFCLAY1D_mynn( & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_lnd(I) = TSK_lnd(I)*THCON(I) !(K) THSK_ice(I) = TSK_ice(I)*THCON(I) !(K) - THSK_ocn(I) = TSK_ocn(I)*THCON(I) !(K) + THSK_wat(I) = TSK_wat(I)*THCON(I) !(K) ENDDO DO I=its,ite ! CONVERT SKIN POTENTIAL TEMPERATURES TO VIRTUAL POTENTIAL TEMPERATURE: THVSK_lnd(I) = THSK_lnd(I)*(1.+EP1*QVSH(I)) !(K) THVSK_ice(I) = THSK_ice(I)*(1.+EP1*QVSH(I)) !(K) - THVSK_ocn(I) = THSK_ocn(I)*(1.+EP1*QVSH(I)) !(K) + THVSK_wat(I) = THSK_wat(I)*(1.+EP1*QVSH(I)) !(K) ENDDO DO I=its,ite @@ -739,8 +739,8 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"=== derived quantities in mynn sfc layer, i:", i write(*,*)" land, ice, water" write(*,*)"dry=",dry(i)," icy=",icy(i)," wet=",wet(i) - write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_ocn(i) - write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_ocn(i) + write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_wat(i) + write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_wat(i) write(*,*)"THV1D=", THV1D(i)," TV1D=",TV1D(i) write(*,*)"RHO1D=", RHO1D(i)," GOVRTH=",GOVRTH(i) ENDDO @@ -750,16 +750,16 @@ SUBROUTINE SFCLAY1D_mynn( & IF (ITIMESTEP == 1) THEN IF (wet(i)) THEN - IF (TSK_ocn(I) .LT. 273.15) THEN + IF (TSK_wat(I) .LT. 273.15) THEN !SATURATION VAPOR PRESSURE WRT ICE (SVP1=.6112; 10*mb) - E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_ocn(I)) - & - & 11.64*LOG(273.15/TSK_ocn(I)) + 0.02265*(273.15 - TSK_ocn(I))) + E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_wat(I)) - & + & 11.64*LOG(273.15/TSK_wat(I)) + 0.02265*(273.15 - TSK_wat(I))) ELSE !SATURATION VAPOR PRESSURE WRT WATER (Bolton 1980) - E1=SVP1*EXP(SVP2*(TSK_ocn(I)-SVPT0)/(TSK_ocn(i)-SVP3)) + E1=SVP1*EXP(SVP2*(TSK_wat(I)-SVPT0)/(TSK_wat(i)-SVP3)) ENDIF - QSFC_ocn(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity - QSFCMR_ocn(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio + QSFC_wat(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity + QSFCMR_wat(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio ENDIF IF (dry(i)) THEN TABS = 0.5*(TSK_lnd(I) + T1D(I)) @@ -791,7 +791,7 @@ SUBROUTINE SFCLAY1D_mynn( & ELSE ! Use what comes out of the LSM, NST, and CICE - IF (wet(i)) QSFCMR_ocn(I)=QSFC_ocn(I)/(1.-QSFC_ocn(I)) + IF (wet(i)) QSFCMR_wat(I)=QSFC_wat(I)/(1.-QSFC_wat(I)) IF (dry(i)) QSFCMR_lnd(I)=QSFC_lnd(I)/(1.-QSFC_lnd(I)) IF (icy(i)) QSFCMR_ice(I)=QSFC_ice(I)/(1.-QSFC_ice(I)) @@ -818,7 +818,7 @@ SUBROUTINE SFCLAY1D_mynn( & DO I=its,ite if (wet(i)) then write(*,*)"==== q-bombs, i:",i," wet" - write(*,*)"QSFC_ocn=", QSFC_ocn(I)," QSFCMR_ocn=", QSFCMR_ocn(I)," QGH=",QGH(I) + write(*,*)"QSFC_wat=", QSFC_wat(I)," QSFCMR_wat=", QSFCMR_wat(I)," QGH=",QGH(I) endif if(dry(i)) then write(*,*)"==== q-bombs, i:",i," dry" @@ -837,39 +837,39 @@ SUBROUTINE SFCLAY1D_mynn( & ! by every user, the bug manifests itself in the resulting wind speed WSPD(I) ! being -99.0 despite the assignments in lines 932 and 933. *DH WSPD(I)=SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)) - WSPD_ocn = -99. + WSPD_wat = -99. WSPD_ice = -99. WSPD_lnd = -99. IF (wet(i)) THEN - DTHVDZ=(THV1D(I)-THVSK_ocn(I)) + DTHVDZ=(THV1D(I)-THVSK_wat(I)) !-------------------------------------------------------- ! Calculate the convective velocity scale (WSTAR) and ! subgrid-scale velocity (VSGD) following Beljaars (1995, QJRMS) ! and Mahrt and Sun (1995, MWR), respectively !------------------------------------------------------- fluxc = max(hfx(i)/RHO1D(i)/cp & - & + ep1*THVSK_ocn(I)*qfx(i)/RHO1D(i),0.) + & + ep1*THVSK_wat(I)*qfx(i)/RHO1D(i),0.) !WSTAR(I) = vconvc*(g/TSK(i)*pblh(i)*fluxc)**onethird - WSTAR(I) = vconvc*(g/TSK_ocn(i)*pblh(i)*fluxc)**onethird + WSTAR(I) = vconvc*(g/TSK_wat(i)*pblh(i)*fluxc)**onethird !-------------------------------------------------------- ! Mahrt and Sun low-res correction - modified for water points (halved) ! (for 13 km ~ 0.18 m/s; for 3 km == 0 m/s) !-------------------------------------------------------- VSGD = MIN( 0.25 * (max(dx(i)/5000.-1.,0.))**onethird , 0.5) - WSPD_ocn=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) - WSPD_ocn=MAX(WSPD_ocn,wmin) + WSPD_wat=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) + WSPD_wat=MAX(WSPD_wat,wmin) !-------------------------------------------------------- ! CALCULATE THE BULK RICHARDSON NUMBER OF SURFACE LAYER, ! ACCORDING TO AKB(1976), EQ(12). !-------------------------------------------------------- - rb_ocn(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_ocn*WSPD_ocn) + rb_wat(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_wat*WSPD_wat) IF (ITIMESTEP == 1) THEN - rb_ocn(I)=MAX(rb_ocn(I),-2.0) - rb_ocn(I)=MIN(rb_ocn(I), 2.0) + rb_wat(I)=MAX(rb_wat(I),-2.0) + rb_wat(I)=MIN(rb_wat(I), 2.0) ELSE - rb_ocn(I)=MAX(rb_ocn(I),-4.0) - rb_ocn(I)=MIN(rb_ocn(I), 4.0) + rb_wat(I)=MAX(rb_wat(I),-4.0) + rb_wat(I)=MIN(rb_wat(I), 4.0) ENDIF ENDIF ! end water point @@ -948,7 +948,7 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ! end ice point !NOW CONDENSE THE POSSIBLE WSPD VALUES BY TAKING THE MAXIMUM - WSPD(I) = MAX(WSPD_ice,WSPD_ocn) + WSPD(I) = MAX(WSPD_ice,WSPD_wat) WSPD(I) = MAX(WSPD_lnd,WSPD(I)) IF (debug_code == 2) THEN @@ -956,7 +956,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"ITIMESTEP=",ITIMESTEP write(*,*)"WSPD=", WSPD(I)," WSTAR=", WSTAR(I)," vsgd=",vsgd IF (icy(i))write(*,*)"rb_ice=", rb_ice(I)," DTHVDZ=",DTHVDZ - IF (wet(i))write(*,*)"rb_ocn=", rb_ocn(I)," DTHVDZ=",DTHVDZ + IF (wet(i))write(*,*)"rb_wat=", rb_wat(I)," DTHVDZ=",DTHVDZ IF (dry(i))write(*,*)"rb_lnd=", rb_lnd(I)," DTHVDZ=",DTHVDZ ENDIF @@ -992,118 +992,118 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------- IF (debug_code == 2) THEN write(*,*)"=============Input to ZNT over water:" - write(*,*)"u*:",UST_ocn(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) + write(*,*)"u*:",UST_wat(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 (MISLEADING SUBROUTINE NAME) - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 .OR. ISFTCFLX .EQ. 2 ) THEN - CALL davis_etal_2008(ZNT_ocn(i),UST_ocn(i)) + CALL davis_etal_2008(ZNT_wat(i),UST_wat(i)) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN - CALL Taylor_Yelland_2001(ZNT_ocn(i),UST_ocn(i),WSPD(i)) + CALL Taylor_Yelland_2001(ZNT_wat(i),UST_wat(i),WSPD(i)) ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS surface layer scheme - CALL GFS_z0_ocn(ZNT_ocn(i),UST_ocn(i),WSPD(i),ZA(I),sfc_z0_type,redrag) + CALL GFS_z0_wat(ZNT_wat(i),UST_wat(i),WSPD(i),ZA(I),sfc_z0_type,redrag) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ENDIF endif !-end wave model check ! add stochastic perturbation of ZNT if (spp_pbl==1) then - ZNTstoch_ocn(I) = MAX(ZNT_ocn(I) + ZNT_ocn(I)*1.0*rstoch1D(i), 1e-6) + ZNTstoch_wat(I) = MAX(ZNT_wat(I) + ZNT_wat(I)*1.0*rstoch1D(i), 1e-6) else - ZNTstoch_ocn(I) = ZNT_ocn(I) + ZNTstoch_wat(I) = ZNT_wat(I) endif IF (debug_code > 1) THEN write(*,*)"==========Output ZNT over water:" - write(*,*)"ZNT:",ZNTstoch_ocn(i) + write(*,*)"ZNT:",ZNTstoch_wat(i) ENDIF !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT ! AHW: Garrattt formula: Calculate roughness Reynolds number ! Kinematic viscosity of air (linear approx to ! temp dependence at sea level) - restar=MAX(ust_ocn(i)*ZNTstoch_ocn(i)/visc, 0.1) + restar=MAX(ust_wat(i)*ZNTstoch_wat(i)/visc, 0.1) !-------------------------------------- !CALCULATE z_t and z_q !-------------------------------------- IF (debug_code > 1) THEN write(*,*)"=============Input to ZT over water:" - write(*,*)"u*:",UST_ocn(i)," restar=",restar," visc=",visc + write(*,*)"u*:",UST_wat(i)," restar=",restar," visc=",visc ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE !presumably, this will be published soon, but hasn't yet - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 2 ) THEN - CALL garratt_1992(ZT_ocn(i),ZQ_ocn(i),ZNTstoch_ocn(i),restar,2.0) + CALL garratt_1992(ZT_wat(i),ZQ_wat(i),ZNTstoch_wat(i),restar,2.0) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS zt formulation - CALL GFS_zt_ocn(ZT_ocn(i),ZNTstoch_ocn(i),restar,WSPD(i),ZA(i),sfc_z0_type) - ZQ_ocn(i)=ZT_ocn(i) + CALL GFS_zt_wat(ZT_wat(i),ZNTstoch_wat(i),restar,WSPD(i),ZA(i),sfc_z0_type) + ZQ_wat(i)=ZT_wat(i) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ENDIF IF (debug_code > 1) THEN write(*,*)"=============Output ZT & ZQ over water:" - write(*,*)"ZT:",ZT_ocn(i)," ZQ:",ZQ_ocn(i) + write(*,*)"ZT:",ZT_wat(i)," ZQ:",ZQ_wat(i) ENDIF - GZ1OZ0_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ1OZt_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ2OZ0_ocn(I)= LOG((2.0+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ2OZt_ocn(I)= LOG((2.0+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ10OZ0_ocn(I)=LOG((10.+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ10OZt_ocn(I)=LOG((10.+ZNTstoch_ocn(i))/ZT_ocn(i)) - zratio_ocn(i)=ZNTstoch_ocn(I)/ZT_ocn(I) !need estimate for Li et al. + GZ1OZ0_wat(I)= LOG((ZA(I)+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ1OZt_wat(I)= LOG((ZA(I)+ZNTstoch_wat(i))/ZT_wat(i)) + GZ2OZ0_wat(I)= LOG((2.0+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ2OZt_wat(I)= LOG((2.0+ZNTstoch_wat(i))/ZT_wat(i)) + GZ10OZ0_wat(I)=LOG((10.+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ10OZt_wat(I)=LOG((10.+ZNTstoch_wat(i))/ZT_wat(i)) + zratio_wat(i)=ZNTstoch_wat(I)/ZT_wat(I) !need estimate for Li et al. ENDIF !end water point @@ -1197,7 +1197,7 @@ SUBROUTINE SFCLAY1D_mynn( & IF (dry(i)) THEN ZNT(i)=ZNTstoch_lnd(I) ELSEIF (wet(i)) THEN - ZNT(i)=ZNTstoch_ocn(I) + ZNT(i)=ZNTstoch_wat(I) ELSEIF (icy(i)) THEN ZNT(i)=ZNTstoch_ice(I) ENDIF @@ -1208,43 +1208,43 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------------------------------------- IF (wet(i)) THEN - IF (rb_ocn(I) .GT. 0.0) THEN + IF (rb_wat(I) .GT. 0.0) THEN !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.0001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.0001)) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) !CALL PSI_CB2005(PSIM(I),PSIH(I),zolza,zolz0) ! or use tables psim(I)=psim_stable(zolza,psi_opt)-psim_stable(zolz0,psi_opt) @@ -1256,7 +1256,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! 1.0 over Monin-Obukhov length RMOL(I)= ZOL(I)/ZA(I) - ELSEIF(rb_ocn(I) .EQ. 0.) THEN + ELSEIF(rb_wat(I) .EQ. 0.) THEN !========================================================= !-----CLASS 3; FORCED CONVECTION/NEUTRAL: !========================================================= @@ -1270,46 +1270,46 @@ SUBROUTINE SFCLAY1D_mynn( & ZOL(I) =0. RMOL(I) =0. - ELSEIF(rb_ocn(I) .LT. 0.)THEN + ELSEIF(rb_wat(I) .LT. 0.)THEN !========================================================== !-----CLASS 4; FREE CONVECTION: !========================================================== !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.001)) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_ocn(I), ZNTstoch_ocn(I), ZA(I)) + !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_wat(I), ZNTstoch_wat(I), ZA(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) ! use tables psim(I)=psim_unstable(zolza,psi_opt)-psim_unstable(zolz0,psi_opt) psih(I)=psih_unstable(zolza,psi_opt)-psih_unstable(zolzt,psi_opt) @@ -1320,23 +1320,23 @@ SUBROUTINE SFCLAY1D_mynn( & !---LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND !---HIGH ROUGHNESS. THIS PREVENTS DENOMINATOR IN FLUXES !---FROM GETTING TOO SMALL - PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_ocn(I)) - PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_ocn(I)) - PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_ocn(I)) - PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_ocn(I)) - PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_ocn(I)) + PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_wat(I)) + PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_wat(I)) + PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_wat(I)) + PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_wat(I)) + PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_wat(I)) RMOL(I) = ZOL(I)/ZA(I) ENDIF ! CALCULATE THE RESISTANCE: - PSIX_ocn(I) =MAX(GZ1OZ0_ocn(I)-PSIM(I) , 1.0) ! = fm - PSIX10_ocn(I)=MAX(GZ10OZ0_ocn(I)-PSIM10(I), 1.0) ! = fm10 - PSIT_ocn(I) =MAX(GZ1OZt_ocn(I)-PSIH(I) , 1.0) ! = fh - PSIT2_ocn(I) =MAX(GZ2OZt_ocn(I)-PSIH2(I) , 1.0) ! = fh2 - PSIQ_ocn(I) =MAX(LOG((ZA(I)+ZQ_ocn(i))/ZQ_ocn(I))-PSIH(I) ,1.0) - PSIQ2_ocn(I) =MAX(LOG((2.0+ZQ_ocn(i))/ZQ_ocn(I))-PSIH2(I) ,1.0) + PSIX_wat(I) =MAX(GZ1OZ0_wat(I)-PSIM(I) , 1.0) ! = fm + PSIX10_wat(I)=MAX(GZ10OZ0_wat(I)-PSIM10(I), 1.0) ! = fm10 + PSIT_wat(I) =MAX(GZ1OZt_wat(I)-PSIH(I) , 1.0) ! = fh + PSIT2_wat(I) =MAX(GZ2OZt_wat(I)-PSIH2(I) , 1.0) ! = fh2 + PSIQ_wat(I) =MAX(LOG((ZA(I)+ZQ_wat(i))/ZQ_wat(I))-PSIH(I) ,1.0) + PSIQ2_wat(I) =MAX(LOG((2.0+ZQ_wat(i))/ZQ_wat(I))-PSIH2(I) ,1.0) ENDIF ! end water points @@ -1608,18 +1608,18 @@ SUBROUTINE SFCLAY1D_mynn( & IF (wet(I)) THEN ! TO PREVENT OSCILLATIONS AVERAGE WITH OLD VALUE - OLDUST = UST_ocn(I) - UST_ocn(I)=0.5*UST_ocn(I)+0.5*KARMAN*WSPD(I)/PSIX_ocn(I) + OLDUST = UST_wat(I) + UST_wat(I)=0.5*UST_wat(I)+0.5*KARMAN*WSPD(I)/PSIX_wat(I) !NON-AVERAGED: - !UST_ocn(I)=KARMAN*WSPD(I)/PSIX_ocn(I) - stress_ocn(i)=ust_ocn(i)**2 + !UST_wat(I)=KARMAN*WSPD(I)/PSIX_wat(I) + stress_wat(i)=ust_wat(i)**2 ! Compute u* without vconv for use in HFX calc when isftcflx > 0 WSPDI(I)=MAX(SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)), wmin) - USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_ocn(I) + USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_wat(I) ! for possible future changes in sea-ice fraction from 0 to >0: - if (.not. icy(i)) ust_ice(i)=ust_ocn(i) + if (.not. icy(i)) ust_ice(i)=ust_wat(i) ENDIF ! end water points IF (dry(I)) THEN @@ -1654,7 +1654,7 @@ SUBROUTINE SFCLAY1D_mynn( & USTM(I)=UST_ice(I) ! for possible future changes in sea-ice fraction from 1 to <1: - if (.not. wet(i)) ust_ocn(i)=ust_ice(i) + if (.not. wet(i)) ust_wat(i)=ust_ice(i) ENDIF ! end ice points !---------------------------------------------------- @@ -1663,14 +1663,14 @@ SUBROUTINE SFCLAY1D_mynn( & !---------------------------------------------------- IF (wet(I)) THEN - DTG=THV1D(I)-THVSK_ocn(I) + DTG=THV1D(I)-THVSK_wat(I) OLDTST=MOL(I) - MOL(I)=KARMAN*DTG/PSIT_ocn(I)/PRT + MOL(I)=KARMAN*DTG/PSIT_wat(I)/PRT !t_star(I) = -HFX(I)/(UST(I)*CPM(I)*RHO1D(I)) !t_star(I) = MOL(I) !---------------------------------------------------- - DQG=(QVSH(i)-qsfc_ocn(i))*1000. !(kg/kg -> g/kg) - qstar(I)=KARMAN*DQG/PSIQ_ocn(I)/PRT + DQG=(QVSH(i)-qsfc_wat(i))*1000. !(kg/kg -> g/kg) + qstar(I)=KARMAN*DQG/PSIQ_wat(I)/PRT ENDIF IF (dry(I)) THEN @@ -1704,13 +1704,13 @@ SUBROUTINE SFCLAY1D_mynn( & IF(icy(i))write(*,*)"==== AT END OF MAIN LOOP, i=",i, "(ice)" write(*,*)"z/L:",ZOL(I)," wspd:",wspd(I)," Tstar:",MOL(I) IF(wet(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) IF(dry(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_lnd(I) IF(icy(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_ice(i) write(*,*)"CPM:",CPM(I)," RHO1D:",RHO1D(I)," q*:",qstar(I)," T*:",MOL(I) - IF(wet(i))write(*,*)"U*:",UST_ocn(I)," Z0:",ZNTstoch_ocn(I)," Zt:",zt_ocn(I) + IF(wet(i))write(*,*)"U*:",UST_wat(I)," Z0:",ZNTstoch_wat(I)," Zt:",zt_wat(I) IF(dry(i))write(*,*)"U*:",UST_lnd(I)," Z0:",ZNTstoch_lnd(I)," Zt:",zt_lnd(I) IF(icy(i))write(*,*)"U*:",UST_ice(I)," Z0:",ZNTstoch_ice(I)," Zt:",zt_ice(I) write(*,*)"hfx:",HFX(I)," MAVAIL:",MAVAIL(I)," QVSH(I):",QVSH(I) @@ -1735,8 +1735,8 @@ SUBROUTINE SFCLAY1D_mynn( & CH(I) = 0. CHS2(i) = 0. CQS2(i) = 0. - ch_ocn(I)= 0. - cm_ocn(I)= 0. + ch_wat(I)= 0. + cm_wat(I)= 0. ch_lnd(I)= 0. cm_lnd(I)= 0. ch_ice(I)= 0. @@ -1792,25 +1792,25 @@ SUBROUTINE SFCLAY1D_mynn( & ! CALCULATE THE EXCHANGE COEFFICIENTS FOR HEAT (FLHC) ! AND MOISTURE (FLQC) !------------------------------------------ - FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_ocn(I)*KARMAN/PSIQ_ocn(i) - FLHC(I)=RHO1D(I)*CPM(I)*UST_ocn(I)*KARMAN/PSIT_ocn(I) + FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_wat(I)*KARMAN/PSIQ_wat(i) + FLHC(I)=RHO1D(I)*CPM(I)*UST_wat(I)*KARMAN/PSIT_wat(I) IF (compute_flux) THEN !---------------------------------- ! COMPUTE SURFACE MOISTURE FLUX: !---------------------------------- - !QFX(I)=FLQC(I)*(QSFCMR_ocn(I)-QV1D(I)) - QFX(I)=FLQC(I)*(QSFC_ocn(I)-QV1D(I)) + !QFX(I)=FLQC(I)*(QSFCMR_wat(I)-QV1D(I)) + QFX(I)=FLQC(I)*(QSFC_wat(I)-QV1D(I)) QFX(I)=MAX(QFX(I),-0.02) !allows small neg QFX LH(I)=XLV*QFX(I) ! BWG, 2020-06-17: Mod next 2 lines for fractional - QFLX_ocn(i)=QFX(i)/RHO1D(i) - QFLX(i)=QFLX_ocn(i) + QFLX_wat(i)=QFX(i)/RHO1D(i) + QFLX(i)=QFLX_wat(i) !---------------------------------- ! COMPUTE SURFACE HEAT FLUX: !---------------------------------- - HFX(I)=FLHC(I)*(THSK_ocn(I)-TH1D(I)) + HFX(I)=FLHC(I)*(THSK_wat(I)-TH1D(I)) IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX.NE.0 ) THEN ! AHW: add dissipative heating term @@ -1818,20 +1818,20 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ENDIF ! BWG, 2020-06-17: Mod next 2 lines for fractional - HFLX_ocn(I)=HFX(I)/(RHO1D(I)*cpm(I)) - HFLX(I)=HFLX_ocn(I) + HFLX_wat(I)=HFX(I)/(RHO1D(I)*cpm(I)) + HFLX(I)=HFLX_wat(I) ENDIF !TRANSFER COEFF FOR SOME LSMs: !CHS(I)=UST(I)*KARMAN/(ALOG(KARMAN*UST(I)*ZA(I) & ! /XKA+ZA(I)/ZL)-PSIH(I)) - CHS(I)=UST_ocn(I)*KARMAN/PSIT_ocn(I) + CHS(I)=UST_wat(I)*KARMAN/PSIT_wat(I) !THESE ARE USED FOR 2-M DIAGNOSTICS ONLY - CQS2(I)=UST_ocn(I)*KARMAN/PSIQ2_ocn(i) - CHS2(I)=UST_ocn(I)*KARMAN/PSIT2_ocn(I) + CQS2(I)=UST_wat(I)*KARMAN/PSIQ2_wat(i) + CHS2(I)=UST_wat(I)*KARMAN/PSIT2_wat(I) - QSFC(I)=QSFC_ocn(I) + QSFC(I)=QSFC_wat(I) ELSEIF (icy(i)) THEN @@ -1881,7 +1881,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"QFX=",QFX(I),"FLQC=",FLQC(I) if(icy(i))write(*,*)"ice, MAVAIL:",MAVAIL(I)," u*=",UST_ice(I)," psiq=",PSIQ_ice(i) if(dry(i))write(*,*)"lnd, MAVAIL:",MAVAIL(I)," u*=",UST_lnd(I)," psiq=",PSIQ_lnd(i) - if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_ocn(I)," psiq=",PSIQ_ocn(i) + if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_wat(I)," psiq=",PSIQ_wat(i) ENDIF ! The exchange coefficient for cloud water is assumed to be the @@ -1892,8 +1892,8 @@ SUBROUTINE SFCLAY1D_mynn( & !--- COMPUTE EXCHANGE COEFFICIENTS FOR FV3 !----------------------------------------- IF (wet(i)) THEN - ch_ocn(I)=(karman/psix_ocn(I))*(karman/psit_ocn(i)) - cm_ocn(I)=(karman/psix_ocn(I))*(karman/psix_ocn(I)) + ch_wat(I)=(karman/psix_wat(I))*(karman/psit_wat(i)) + cm_wat(I)=(karman/psix_wat(I))*(karman/psix_wat(I)) ENDIF IF (dry(i)) THEN ch_lnd(I)=(karman/psix_lnd(I))*(karman/psit_lnd(i)) @@ -1930,8 +1930,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1946,8 +1946,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1958,8 +1958,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) V10(I)=V1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) - V10(I)=V1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) + U10(I)=U1D(I)*PSIX10_wat(I)/PSIX_wat(I) + V10(I)=V1D(I)*PSIX10_wat(I)/PSIX_wat(I) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*PSIX10_ice(I)/PSIX_ice(I) V10(I)=V1D(I)*PSIX10_ice(I)/PSIX_ice(I) @@ -1985,18 +1985,18 @@ SUBROUTINE SFCLAY1D_mynn( & Q2(I)= MAX(Q2(I), MIN(QSFC_lnd(I), QV1D(I))) Q2(I)= MIN(Q2(I), 1.05*QV1D(I)) ELSEIF (wet(i)) THEN - DTG=TH1D(I)-THSK_ocn(I) - TH2(I)=THSK_ocn(I)+DTG*PSIT2_ocn(I)/PSIT_ocn(I) + DTG=TH1D(I)-THSK_wat(I) + TH2(I)=THSK_wat(I)+DTG*PSIT2_wat(I)/PSIT_wat(I) !*** BE CERTAIN THAT THE 2-M THETA IS BRACKETED BY !*** THE VALUES AT THE SURFACE AND LOWEST MODEL LEVEL. - IF ((TH1D(I)>THSK_ocn(I) .AND. (TH2(I)TH1D(I))) .OR. & - (TH1D(I)THSK_ocn(I) .OR. TH2(I)THSK_wat(I) .AND. (TH2(I)TH1D(I))) .OR. & + (TH1D(I)THSK_wat(I) .OR. TH2(I) 4.0 )THEN + IF (UST_wat(I) < 0.0 .OR. UST_wat(I) > 4.0 )THEN print*,"SUSPICIOUS VALUES IN MYNN SFCLAYER",& - I,J, "UST_ocn: ",UST_ocn(I) + I,J, "UST_wat: ",UST_wat(I) yesno = 1 ENDIF ENDIF @@ -2081,15 +2081,15 @@ SUBROUTINE SFCLAY1D_mynn( & IF (yesno == 1) THEN IF (wet(i)) THEN print*," OTHER INFO over water:" - print*,"z/L:",ZOL(I)," U*:",UST_ocn(I)," Tstar:",MOL(I) + print*,"z/L:",ZOL(I)," U*:",UST_wat(I)," Tstar:",MOL(I) print*,"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) print*,"CPM:",CPM(I)," RHO1D:",RHO1D(I)," L:",& - ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_ocn(I) - print*," Z0:",ZNTstoch_ocn(I)," Zt:",ZT_ocn(I)," za:",za(I) - print*,"MAVAIL:",MAVAIL(I)," QSFC_ocn(I):",& - QSFC_ocn(I)," QVSH(I):",QVSH(I) - print*,"PSIX=",PSIX_ocn(I)," T1D(i):",T1D(i) + ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_wat(I) + print*," Z0:",ZNTstoch_wat(I)," Zt:",ZT_wat(I)," za:",za(I) + print*,"MAVAIL:",MAVAIL(I)," QSFC_wat(I):",& + QSFC_wat(I)," QVSH(I):",QVSH(I) + print*,"PSIX=",PSIX_wat(I)," T1D(i):",T1D(i) write(*,*)"=============================================" ENDIF IF (dry(i)) THEN @@ -2565,27 +2565,27 @@ SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) END SUBROUTINE GFS_zt_lnd !-------------------------------------------------------------------- - SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) + SUBROUTINE GFS_z0_wat(z0rl_wat,ustar_wat,WSPD,z1,sfc_z0_type,redrag) - REAL, INTENT(OUT) :: z0rl_ocn - REAL, INTENT(INOUT):: ustar_ocn + REAL, INTENT(OUT) :: z0rl_wat + REAL, INTENT(INOUT):: ustar_wat REAL, INTENT(IN) :: wspd,z1 LOGICAL, INTENT(IN):: redrag INTEGER, INTENT(IN):: sfc_z0_type REAL :: z0,z0max,wind10m REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !wind10m = sqrt(u10m(i)*u10m(i)+v10m(i)*v10m(i)) ! if (sfc_z0_type >= 0) then if (sfc_z0_type == 0) then - z0 = (charnock / g) * ustar_ocn * ustar_ocn + z0 = (charnock / g) * ustar_wat * ustar_wat ! mbek -- toga-coare flux algorithm ! z0 = (charnock / g) * ustar(i)*ustar(i) + arnu/ustar(i) @@ -2596,47 +2596,47 @@ SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) ! z0 = arnu / (ustar(i) * ff ** pp) if (redrag) then - !z0rl_ocn = 100.0 * max(min(z0, z0s_max), 1.e-7) - z0rl_ocn = max(min(z0, z0s_max), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0, z0s_max), 1.e-7) + z0rl_wat = max(min(z0, z0s_max), 1.e-7) else - !z0rl_ocn = 100.0 * max(min(z0,.1), 1.e-7) - z0rl_ocn = max(min(z0,.1), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0,.1), 1.e-7) + z0rl_wat = max(min(z0,.1), 1.e-7) endif elseif (sfc_z0_type == 6) then ! wang call znot_m_v6(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm elseif (sfc_z0_type == 7) then ! wang call znot_m_v7(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm else - z0rl_ocn = 1.0e-6 + z0rl_wat = 1.0e-6 endif endif - END SUBROUTINE GFS_z0_ocn + END SUBROUTINE GFS_z0_wat !-------------------------------------------------------------------- - SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) + SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type) REAL, INTENT(OUT) :: ztmax - REAL, INTENT(IN) :: wspd,z1,z0rl_ocn,restar + REAL, INTENT(IN) :: wspd,z1,z0rl_wat,restar INTEGER, INTENT(IN):: sfc_z0_type - REAL :: z0,z0max,wind10m,rat,ustar_ocn + REAL :: z0,z0max,wind10m,rat,ustar_wat REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !** test xubin's new z0 ! ztmax = z0max -!input restar = max(ustar_ocn(i)*z0max*visi, 0.000001) +!input restar = max(ustar_wat(i)*z0max*visi, 0.000001) ! restar = log(restar) ! restar = min(restar,5.) @@ -2657,7 +2657,7 @@ SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) stop endif - END SUBROUTINE GFS_zt_ocn + END SUBROUTINE GFS_zt_wat !-------------------------------------------------------------------- !! add fitted z0,zt curves for hurricane application (used in HWRF/HMON) !! Weiguo Wang, 2019-0425 diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b14dbd2fc..9320f38f2 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -532,8 +532,8 @@ intent = in optional = F [coef_ric_s] - standard_name = coefficient_for_variable_bulk_richardson_number_over_ocean - long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over ocean + standard_name = coefficient_for_variable_bulk_richardson_number_over_water + long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over water units = none dimensions = () type = real diff --git a/physics/samfdeepcnv.meta b/physics/samfdeepcnv.meta index 8000fb90c..802aeb50a 100644 --- a/physics/samfdeepcnv.meta +++ b/physics/samfdeepcnv.meta @@ -525,8 +525,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep conv. + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep conv. units = frac dimensions = () type = real diff --git a/physics/sascnvn.meta b/physics/sascnvn.meta index d49d287e1..af25b8477 100644 --- a/physics/sascnvn.meta +++ b/physics/sascnvn.meta @@ -522,8 +522,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep convection + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep convection units = frac dimensions = () type = real diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 23b47d414..342eaeea5 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -219,8 +219,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -251,8 +251,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -278,8 +278,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -305,8 +305,8 @@ intent = in optional = F [snwdph_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -332,8 +332,8 @@ intent = in optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean (temporary use as interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -368,8 +368,8 @@ intent = in optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -395,8 +395,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -422,8 +422,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -449,8 +449,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -476,8 +476,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -503,8 +503,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -530,8 +530,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -557,8 +557,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -584,8 +584,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index d66d8849e..b77a96713 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -815,8 +815,8 @@ intent = in optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -824,8 +824,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 2c32ca106..bd8dae4fc 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -169,8 +169,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -178,8 +178,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -249,8 +249,8 @@ intent = in optional = F [stress] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -258,8 +258,8 @@ intent = in optional = F [sfcemis] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -267,8 +267,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -285,8 +285,8 @@ intent = in optional = F [rain] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -403,8 +403,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -565,8 +565,8 @@ intent = inout optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -574,8 +574,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -583,8 +583,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -592,8 +592,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -601,8 +601,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -610,8 +610,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -619,8 +619,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -672,8 +672,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -681,8 +681,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -935,8 +935,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -944,8 +944,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index afdea6c3f..6fdfa0555 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -79,8 +79,8 @@ intent = in optional = F [tskin] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -88,8 +88,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -97,8 +97,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -157,8 +157,8 @@ intent = in optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -166,8 +166,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -175,8 +175,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -184,8 +184,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -193,8 +193,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -202,8 +202,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -211,8 +211,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real From 3f953f570255c216d3e713c7003a5df26492ed6a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 5 Apr 2021 15:04:03 -0600 Subject: [PATCH 051/119] physics/GFS_debug.F90: rename Sfcprop%zorlw to Sfcprop%zorlwav, remove no longer existant Interstitial%dtdtc --- physics/GFS_debug.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 3a6825213..7570f62b6 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -437,7 +437,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlwav' , Sfcprop%zorlwav) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -1074,7 +1074,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqsfc1 ', Interstitial%dqsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%drain ', Interstitial%drain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdt ', Interstitial%dtdt ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdtc ', Interstitial%dtdtc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtsfc1 ', Interstitial%dtsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtzm ', Interstitial%dtzm ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dt_mf ', Interstitial%dt_mf ) From 7f70536b15ecace42087078bcfa229a5d36a8e95 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 5 Apr 2021 15:52:39 -0600 Subject: [PATCH 052/119] physics/GFS_debug.*: rename land surface composite DDT members from _ocean to _water, rename Sfcprop%zorlo to Sfcprop%zorlw --- physics/GFS_debug.F90 | 56 +++++++++++++++++++++--------------------- physics/GFS_debug.meta | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 7570f62b6..d46dc6752 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -434,7 +434,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tisfc' , Sfcprop%tisfc) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowd' , Sfcprop%snowd) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorl' , Sfcprop%zorl) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlwav' , Sfcprop%zorlwav) @@ -1024,7 +1024,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup ! Print all other variables call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_land ', Interstitial%adjsfculw_land ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ice ', Interstitial%adjsfculw_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ocean ', Interstitial%adjsfculw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_water ', Interstitial%adjsfculw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmd ', Interstitial%adjnirbmd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmu ', Interstitial%adjnirbmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirdfd ', Interstitial%adjnirdfd ) @@ -1039,14 +1039,14 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd ', Interstitial%cd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ice ', Interstitial%cd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_land ', Interstitial%cd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ocean ', Interstitial%cd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_water ', Interstitial%cd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq ', Interstitial%cdq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ice ', Interstitial%cdq_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_land ', Interstitial%cdq_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ocean ', Interstitial%cdq_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_water ', Interstitial%cdq_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ice ', Interstitial%chh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_land ', Interstitial%chh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ocean ', Interstitial%chh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_water ', Interstitial%chh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldf ', Interstitial%cldf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldsa ', Interstitial%cldsa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldtaulw ', Interstitial%cldtaulw ) @@ -1057,7 +1057,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%clouds ', Interstitial%clouds ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ice ', Interstitial%cmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_land ', Interstitial%cmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ocean ', Interstitial%cmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_water ', Interstitial%cmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvc ', Interstitial%cnvc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvw ', Interstitial%cnvw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ctei_r ', Interstitial%ctei_r ) @@ -1089,32 +1089,32 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d ', Interstitial%ep1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ice ', Interstitial%ep1d_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_land ', Interstitial%ep1d_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ocean ', Interstitial%ep1d_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_water ', Interstitial%ep1d_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evapq ', Interstitial%evapq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ice ', Interstitial%evap_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_land ', Interstitial%evap_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ocean ', Interstitial%evap_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_water ', Interstitial%evap_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evbs ', Interstitial%evbs ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evcw ', Interstitial%evcw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faerlw ', Interstitial%faerlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faersw ', Interstitial%faersw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ice ', Interstitial%ffhh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_land ', Interstitial%ffhh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ocean ', Interstitial%ffhh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_water ', Interstitial%ffhh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2 ', Interstitial%fh2 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ice ', Interstitial%fh2_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_land ', Interstitial%fh2_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ocean ', Interstitial%fh2_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_water ', Interstitial%fh2_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_cice ', Interstitial%flag_cice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_guess ', Interstitial%flag_guess ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_iter ', Interstitial%flag_iter ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ice ', Interstitial%ffmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_land ', Interstitial%ffmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ocean ', Interstitial%ffmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_water ', Interstitial%ffmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10 ', Interstitial%fm10 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ice ', Interstitial%fm10_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_land ', Interstitial%fm10_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ocean ', Interstitial%fm10_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_water ', Interstitial%fm10_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frain ', Interstitial%frain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frland ', Interstitial%frland ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fscav ', Interstitial%fscav ) @@ -1122,7 +1122,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw ', Interstitial%gabsbdlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ice ', Interstitial%gabsbdlw_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_land ', Interstitial%gabsbdlw_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ocean ', Interstitial%gabsbdlw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_water ', Interstitial%gabsbdlw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamma ', Interstitial%gamma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamq ', Interstitial%gamq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamt ', Interstitial%gamt ) @@ -1130,7 +1130,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx ', Interstitial%gflx ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ice ', Interstitial%gflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_land ', Interstitial%gflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ocean ', Interstitial%gflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_water ', Interstitial%gflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcu ', Interstitial%gwdcu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcv ', Interstitial%gwdcv ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hefac ', Interstitial%hefac ) @@ -1138,7 +1138,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflxq ', Interstitial%hflxq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ice ', Interstitial%hflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_land ', Interstitial%hflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ocean ', Interstitial%hflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_water ', Interstitial%hflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlwc ', Interstitial%htlwc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlw0 ', Interstitial%htlw0 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htswc ', Interstitial%htswc ) @@ -1172,7 +1172,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qlyr ', Interstitial%qlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ice ', Interstitial%qss_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_land ', Interstitial%qss_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ocean ', Interstitial%qss_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_water ', Interstitial%qss_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%radar_reset ', Interstitial%radar_reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raddt ', Interstitial%raddt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raincd ', Interstitial%raincd ) @@ -1182,7 +1182,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb ', Interstitial%rb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ice ', Interstitial%rb_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_land ', Interstitial%rb_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ocean ', Interstitial%rb_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_water ', Interstitial%rb_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%reset ', Interstitial%reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rhc ', Interstitial%rhc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%runoff ', Interstitial%runoff ) @@ -1200,7 +1200,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%scmpsw%visdf ', Interstitial%scmpsw%visdf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ice ', Interstitial%semis_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_land ', Interstitial%semis_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ocean ', Interstitial%semis_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_water ', Interstitial%semis_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sfcalb ', Interstitial%sfcalb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigma ', Interstitial%sigma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigmaf ', Interstitial%sigmaf ) @@ -1210,43 +1210,43 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowc ', Interstitial%snowc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ice ', Interstitial%snowd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_land ', Interstitial%snowd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ocean ', Interstitial%snowd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_water ', Interstitial%snowd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snohf ', Interstitial%snohf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowmt ', Interstitial%snowmt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%soiltype ', Interstitial%soiltype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress ', Interstitial%stress ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ice ', Interstitial%stress_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_land ', Interstitial%stress_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ocean ', Interstitial%stress_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_water ', Interstitial%stress_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%theta ', Interstitial%theta ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tice ', Interstitial%tice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlvl ', Interstitial%tlvl ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlyr ', Interstitial%tlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ice ', Interstitial%tprcp_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_land ', Interstitial%tprcp_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ocean ', Interstitial%tprcp_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_water ', Interstitial%tprcp_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%trans ', Interstitial%trans ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tseal ', Interstitial%tseal ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfa ', Interstitial%tsfa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ice ', Interstitial%tsfc_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_land ', Interstitial%tsfc_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ocean ', Interstitial%tsfc_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_water ', Interstitial%tsfc_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfg ', Interstitial%tsfg ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf ', Interstitial%tsurf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ice ', Interstitial%tsurf_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_land ', Interstitial%tsurf_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ocean ', Interstitial%tsurf_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_water ', Interstitial%tsurf_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ud_mf ', Interstitial%ud_mf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ice ', Interstitial%uustar_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_land ', Interstitial%uustar_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ocean ', Interstitial%uustar_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_water ', Interstitial%uustar_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vdftra ', Interstitial%vdftra ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegf1d ', Interstitial%vegf1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegtype ', Interstitial%vegtype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wcbmax ', Interstitial%wcbmax ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ice ', Interstitial%weasd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_land ', Interstitial%weasd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ocean ', Interstitial%weasd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_water ', Interstitial%weasd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wind ', Interstitial%wind ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work1 ', Interstitial%work1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work2 ', Interstitial%work2 ) @@ -1450,7 +1450,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & soiltyp, vegtype, slopetyp, dry, icy, wet, lake, ocean, & oceanfrac, landfrac, lakefrac, slmsk, islmsk, & - zorl, zorlo, zorll, zorli, fice, errmsg, errflg ) + zorl, zorlw, zorll, zorli, fice, errmsg, errflg ) use machine, only: kind_phys @@ -1487,7 +1487,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ real(kind_phys), intent(in ) :: slmsk(im) integer, intent(in ) :: islmsk(im) real(kind_phys), intent(in ) :: zorl(im) - real(kind_phys), intent(in ) :: zorlo(im) + real(kind_phys), intent(in ) :: zorlw(im) real(kind_phys), intent(in ) :: zorll(im) real(kind_phys), intent(in ) :: zorli(im) real(kind_phys), intent(in ) :: fice(im) @@ -1535,7 +1535,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slmsk(i) :', i, blkno, slmsk(i) write(0,'(a,2i5,1x,i5)') 'YYY: i, blk, islmsk(i) :', i, blkno, islmsk(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorl(i) :', i, blkno, zorl(i) - write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlo(i) :', i, blkno, zorlo(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlw(i) :', i, blkno, zorlw(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorli(i) :', i, blkno, zorli(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorll(i) :', i, blkno, zorll(i) !end if diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index a8f823090..f2a991426 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -655,7 +655,7 @@ kind = kind_phys intent = in optional = F -[zorlo] +[zorlw] standard_name = surface_roughness_length_over_water long_name = surface roughness length over water units = cm From bfa9a65a5e6b7430c40a7d1dc84a3efe57da140f Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Tue, 6 Apr 2021 11:37:40 -0600 Subject: [PATCH 053/119] Fix more out of order variables and mismatched intents. --- physics/GFS_stochastics.meta | 122 +++++++++++++++++------------------ physics/dcyc2.meta | 18 +++--- physics/rrtmgp_lw_pre.meta | 18 +++--- physics/sfc_noahmp_drv.meta | 2 +- 4 files changed, 80 insertions(+), 80 deletions(-) diff --git a/physics/GFS_stochastics.meta b/physics/GFS_stochastics.meta index 26dcfd47e..9ca532e72 100644 --- a/physics/GFS_stochastics.meta +++ b/physics/GFS_stochastics.meta @@ -40,46 +40,6 @@ kind = kind_phys intent = in optional = F -[ntcw] - standard_name = index_for_liquid_cloud_condensate - long_name = tracer index for cloud condensate (or liquid water) - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntiw] - standard_name = index_for_ice_cloud_condensate - long_name = tracer index for ice water - units = index - dimensions = () - intent = in - optional = F - type = integer -[ntrw] - standard_name = index_for_rain_water - long_name = tracer index for rain water - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntsw] - standard_name = index_for_snow_water - long_name = tracer index for snow water - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntgl] - standard_name = index_for_graupel - long_name = tracer index for graupel - units = index - dimensions = () - type = integer - intent = in - optional = F [do_sppt] standard_name = flag_for_stochastic_physics_perturbations long_name = flag for stochastic physics perturbations @@ -307,18 +267,18 @@ kind = kind_phys intent = in optional = F -[qgrs_iw] - standard_name = ice_water_mixing_ratio - long_name = moist mixing ratio of cloud ice +[qgrs_sw] + standard_name = snow_water_mixing_ratio + long_name = moist mixing ratio of snow units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in optional = F -[qgrs_sw] - standard_name = snow_water_mixing_ratio - long_name = moist mixing ratio of snow +[qgrs_iw] + standard_name = ice_water_mixing_ratio + long_name = moist mixing ratio of cloud ice units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real @@ -370,6 +330,15 @@ kind = kind_phys intent = inout optional = F +[dtdtnp] + standard_name = tendency_of_air_temperature_to_withold_from_sppt + long_name = temp. change from physics that should not be perturbed by sppt + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [gq0_cw] standard_name = cloud_condensed_water_mixing_ratio_updated_by_physics long_name = cloud condensed water mixing ratio updated by physics @@ -388,18 +357,18 @@ kind = kind_phys intent = inout optional = F -[gq0_iw] - standard_name = ice_water_mixing_ratio_updated_by_physics - long_name = moist mixing ratio of cloud ice updated by physics +[gq0_sw] + standard_name = snow_water_mixing_ratio_updated_by_physics + long_name = moist mixing ratio of snow updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[gq0_sw] - standard_name = snow_water_mixing_ratio_updated_by_physics - long_name = moist mixing ratio of snow updated by physics +[gq0_iw] + standard_name = ice_water_mixing_ratio_updated_by_physics + long_name = moist mixing ratio of cloud ice updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real @@ -415,15 +384,6 @@ kind = kind_phys intent = inout optional = F -[dtdtnp] - standard_name = tendency_of_air_temperature_to_withold_from_sppt - long_name = temp. change from physics that should not be perturbed by sppt - units = K s-1 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [rain] standard_name = lwe_thickness_of_precipitation_amount_on_dynamics_timestep long_name = total rain at this time step @@ -531,6 +491,46 @@ kind = kind_phys intent = in optional = F +[ntcw] + standard_name = index_for_liquid_cloud_condensate + long_name = tracer index for cloud condensate (or liquid water) + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntrw] + standard_name = index_for_rain_water + long_name = tracer index for rain water + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntsw] + standard_name = index_for_snow_water + long_name = tracer index for snow water + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntiw] + standard_name = index_for_ice_cloud_condensate + long_name = tracer index for ice water + units = index + dimensions = () + intent = in + optional = F + type = integer +[ntgl] + standard_name = index_for_graupel + long_name = tracer index for graupel + units = index + dimensions = () + type = integer + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index d291da91d..656183d94 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -370,15 +370,6 @@ kind = kind_phys intent = in optional = F -[dtdt] - standard_name = tendency_of_air_temperature_due_to_model_physics - long_name = total radiative heating rate at current time - units = K s-1 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F [pert_radtend] standard_name = flag_for_stochastic_radiative_heating_perturbations long_name = flag for stochastic radiative heating perturbations @@ -403,6 +394,15 @@ type = logical intent = in optional = F +[dtdt] + standard_name = tendency_of_air_temperature_due_to_model_physics + long_name = total radiative heating rate at current time + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [dtdtnp] standard_name = tendency_of_air_temperature_to_withold_from_sppt long_name = temp. change from physics that should not be perturbed by sppt diff --git a/physics/rrtmgp_lw_pre.meta b/physics/rrtmgp_lw_pre.meta index 5446580df..f2773fdda 100644 --- a/physics/rrtmgp_lw_pre.meta +++ b/physics/rrtmgp_lw_pre.meta @@ -104,6 +104,15 @@ kind = kind_phys intent = in optional = F +[sfc_emiss_byband] + standard_name = surface_emissivity_in_each_RRTMGP_LW_band + long_name = surface emissivity in each RRTMGP LW band + units = none + dimensions = (number_of_lw_bands_rrtmgp,horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = F [emiss] standard_name = surface_emissivity_lsm long_name = surface emissivity from lsm @@ -122,15 +131,6 @@ kind = kind_phys intent = out optional = F -[sfc_emiss_byband] - standard_name = surface_emissivity_in_each_RRTMGP_LW_band - long_name = surface emissivity in each RRTMGP LW band - units = none - dimensions = (number_of_lw_bands_rrtmgp,horizontal_loop_extent) - type = real - kind = kind_phys - intent = out - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index c0a6393fa..f1dbbf1ad 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -320,7 +320,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [flag_iter] standard_name = flag_for_iteration From a8e6ec947220fccfc3b86072405f58b73194774d Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 7 Apr 2021 08:55:29 -0600 Subject: [PATCH 054/119] Convert explicit dimensions of intent(in) variables to assumed-size dimensions --- physics/GFS_GWD_generic.F90 | 4 +- physics/GFS_MP_generic.F90 | 69 +++--- physics/GFS_cloud_diagnostics.F90 | 8 +- physics/GFS_phys_time_vary.fv3.meta | 1 - physics/GFS_rrtmg_pre.F90 | 70 +++--- physics/GFS_rrtmg_setup.F90 | 2 +- physics/GFS_rrtmgp_cloud_overlap_pre.F90 | 14 +- physics/GFS_rrtmgp_setup.F90 | 4 +- physics/GFS_rrtmgp_sw_pre.F90 | 18 +- physics/GFS_stochastics.F90 | 48 ++-- physics/GFS_surface_composites.F90 | 62 ++--- physics/GFS_surface_generic.F90 | 80 +++---- physics/GFS_surface_loop_control.F90 | 20 +- physics/GFS_time_vary_pre.fv3.F90 | 2 +- physics/GFS_time_vary_pre.scm.F90 | 2 +- physics/cs_conv.F90 | 58 ++--- physics/cu_gf_driver.F90 | 54 ++--- physics/dcyc2.f | 20 +- physics/gfdl_cloud_microphys.F90 | 28 +-- physics/gfdl_fv_sat_adj.F90 | 44 ++-- physics/gfdl_sfc_layer.F90 | 16 +- physics/gwdc.f | 13 +- physics/gwdps.f | 22 +- physics/m_micro.F90 | 15 +- physics/m_micro_interstitial.F90 | 32 +-- physics/module_MYJPBL_wrapper.F90 | 36 +-- physics/module_MYJSFC_wrapper.F90 | 20 +- physics/module_MYNNPBL_wrapper.F90 | 20 +- physics/mp_fer_hires.F90 | 44 ++-- physics/mp_thompson.F90 | 44 ++-- physics/ozphys.f | 2 +- physics/rrtmg_lw_pre.F90 | 4 +- physics/rrtmg_sw_post.F90 | 14 +- physics/rrtmg_sw_pre.F90 | 14 +- physics/sfc_cice.f | 8 +- physics/sfc_drv_ruc.F90 | 48 ++-- physics/sfc_noah_wrfv4.F90 | 17 +- physics/sfc_noah_wrfv4_interstitial.F90 | 44 ++-- physics/sfc_noahmp_drv.F90 | 279 ++++++++++++----------- physics/sfc_noahmp_drv.meta | 8 + physics/sfc_nst.f | 11 +- physics/shinhongvdif.F90 | 20 +- physics/ugwpv1_gsldrag.F90 | 65 +++--- physics/unified_ugwp.F90 | 48 ++-- 44 files changed, 729 insertions(+), 723 deletions(-) diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index 65b207311..7f1cf6303 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -30,10 +30,10 @@ subroutine GFS_GWD_generic_pre_run( & implicit none integer, intent(in) :: im, levs, nmtvr - real(kind=kind_phys), intent(in) :: mntvar(im,nmtvr) + real(kind=kind_phys), intent(in) :: mntvar(:,:) real(kind=kind_phys), intent(out) :: & - & oc(:), oa4(:,:), clx(:,:), & + & oc(:), oa4(:,:), clx(:,:), & & varss(:), ocss(:), oa4ss(:,:), clxss(:,:), & & theta(:), sigma(:), gamma(:), elvmax(:) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 672be5ba6..776d6b286 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -12,18 +12,19 @@ end subroutine GFS_MP_generic_pre_init !> \section arg_table_GFS_MP_generic_pre_run Argument Table !! \htmlinclude GFS_MP_generic_pre_run.html !! - subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, ntrac, gt0, gq0, save_t, save_qv, save_q, errmsg, errflg) + subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, & + ntrac, gt0, gq0, save_t, save_qv, save_q, errmsg, errflg) ! use machine, only: kind_phys implicit none - integer, intent(in) :: im, levs, ntcw, nncl, ntrac - logical, intent(in) :: ldiag3d, qdiag3d, do_aw - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + integer, intent(in) :: im, levs, ntcw, nncl, ntrac + logical, intent(in) :: ldiag3d, qdiag3d, do_aw + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t, save_qv - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t, save_qv + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -100,42 +101,42 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_mg, imp_physics_fer_hires logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm - real(kind=kind_phys), intent(in) :: dtf, frain, con_g - real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc - real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc - real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 - real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann - real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, save_qv, del - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: gq0 - - real(kind=kind_phys), dimension(im), intent(in ) :: sr - real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & + real(kind=kind_phys), intent(in) :: dtf, frain, con_g + real(kind=kind_phys), dimension(:), intent(in) :: rain1, xlat, xlon, tsfc + real(kind=kind_phys), dimension(:), intent(inout) :: ice, snow, graupel, rainc + real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 + real(kind=kind_phys), dimension(:,:), intent(in) :: rann + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0, prsl, save_t, save_qv, del + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 + + real(kind=kind_phys), dimension(:), intent(in ) :: sr + real(kind=kind_phys), dimension(:), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & snow_cpl, pwat - real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt ! only if ldiag3d - real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d + real(kind=kind_phys), dimension(:,:), intent(inout) :: dt3dt ! only if ldiag3d + real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(inout) :: dsnow_cpl ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp - real(kind=kind_phys), dimension(im), intent(inout) :: raincprv - real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: iceprv - real(kind=kind_phys), dimension(im), intent(inout) :: snowprv - real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv - real(kind=kind_phys), dimension(im), intent(inout) :: draincprv - real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: diceprv - real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv - real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv - - real(kind=kind_phys), intent(in) :: dtp + real(kind=kind_phys), dimension(:), intent(inout) :: raincprv + real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: iceprv + real(kind=kind_phys), dimension(:), intent(inout) :: snowprv + real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: draincprv + real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: diceprv + real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv + real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv + + real(kind=kind_phys), intent(in) :: dtp ! CCPP error handling character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 index c7b92c4ba..5aa5dbfa6 100644 --- a/physics/GFS_cloud_diagnostics.F90 +++ b/physics/GFS_cloud_diagnostics.F90 @@ -41,7 +41,7 @@ end subroutine GFS_cloud_diagnostics_init !! subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_lay, & cld_frac, p_lev, deltaZ, cloud_overlap_param, precip_overlap_param, con_pi, & - mbota, mtopa, cldsa, errmsg, errflg) + mtopa, mbota, cldsa, errmsg, errflg) implicit none ! Inputs @@ -59,7 +59,7 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure at model-layer cld_frac ! Total cloud fraction - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model interfaces real(kind_phys), dimension(:,:), intent(in) :: & deltaZ, & ! Layer thickness (km) @@ -80,7 +80,7 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l ! Local variables integer i,id,iCol,iLay,icld real(kind_phys) :: tem1 - real(kind_phys),dimension(nCol,NK_CLDS+1) :: ptop1 + real(kind_phys),dimension(:,:) :: ptop1 real(kind_phys),dimension(:) :: rlat real(kind_phys),dimension(:,:) :: cldcnv @@ -136,7 +136,7 @@ subroutine hml_cloud_diagnostics_initialize(imp_physics, imp_physics_fer_hires, integer, intent(in) :: & nLev, & ! Number of vertical-layers mpi_rank - real(kind_phys), dimension(nLev+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & sigmainit ! Outputs integer, intent(out) :: & diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 06192eb6a..1f9bf08ed 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1672,7 +1672,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - active = (flag_for_nsstm_run > 0) intent = inout optional = F [tsfc] diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 0c9eaf3f0..6ec6497a8 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -122,54 +122,54 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & real(kind=kind_phys), dimension(:,:), intent(inout) :: effrl_inout, & effri_inout, & effrs_inout - real(kind=kind_phys), dimension(im,lm+LTP), intent(inout) :: clouds1, & + real(kind=kind_phys), dimension(:,:), intent(inout) :: clouds1, & clouds2, clouds3, & clouds4, clouds5 - integer, intent(out) :: kd, kt, kb + integer, intent(out) :: kd, kt, kb - integer, dimension(im,3), intent(out) :: mbota, mtopa + integer, dimension(im,3), intent(out) :: mbota, mtopa - real(kind=kind_phys), intent(out) :: raddt + real(kind=kind_phys), intent(out) :: raddt - real(kind=kind_phys), dimension(im), intent(out) :: tsfg, tsfa - real(kind=kind_phys), dimension(im), intent(out) :: de_lgth, & - alb1d + real(kind=kind_phys), dimension(:), intent(out) :: tsfg, tsfa + real(kind=kind_phys), dimension(:), intent(out) :: de_lgth, & + alb1d - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: delp, dz, & - plyr, tlyr, & - qlyr, olyr + real(kind=kind_phys), dimension(:,:), intent(out) :: delp, dz, & + plyr, tlyr, & + qlyr, olyr - real(kind=kind_phys), dimension(im,lm+1+LTP), intent(out) :: plvl, tlvl + real(kind=kind_phys), dimension(:,;), intent(out) :: plvl, tlvl - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: gasvmr_co2, & - gasvmr_n2o, & - gasvmr_ch4, & - gasvmr_o2, & - gasvmr_co, & - gasvmr_cfc11,& - gasvmr_cfc12,& - gasvmr_cfc22,& - gasvmr_ccl4,& - gasvmr_cfc113 - real(kind=kind_phys), dimension(im,NSPC1), intent(out) :: aerodp - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: clouds6, & - clouds7, & - clouds8, & - clouds9, & - cldfra - real(kind=kind_phys), dimension(im,5), intent(out) :: cldsa + real(kind=kind_phys), dimension(:,:), intent(out) :: gasvmr_co2, & + gasvmr_n2o, & + gasvmr_ch4, & + gasvmr_o2, & + gasvmr_co, & + gasvmr_cfc11,& + gasvmr_cfc12,& + gasvmr_cfc22,& + gasvmr_ccl4,& + gasvmr_cfc113 + real(kind=kind_phys), dimension(:,:), intent(out) :: aerodp + real(kind=kind_phys), dimension(:,:), intent(out) :: clouds6, & + clouds7, & + clouds8, & + clouds9, & + cldfra + real(kind=kind_phys), dimension(:,:), intent(out) :: cldsa - real(kind=kind_phys), dimension(im,lm+LTP,NBDSW), intent(out) :: faersw1,& - faersw2,& - faersw3 + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faersw1,& + faersw2,& + faersw3 - real(kind=kind_phys), dimension(im,lm+LTP,NBDLW), intent(out) :: faerlw1,& - faerlw2,& - faerlw3 - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: alpha + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faerlw1,& + faerlw2,& + faerlw3 + real(kind=kind_phys), dimension(:,:), intent(out) :: alpha character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 85ffe7d67..368a5ed4d 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -165,7 +165,7 @@ subroutine GFS_rrtmg_setup_init ( & implicit none ! interface variables - real (kind=kind_phys), intent(in) :: si(levr+1) + real (kind=kind_phys), intent(in) :: si(:) integer, intent(in) :: levr integer, intent(in) :: ictm integer, intent(in) :: isol diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 index 05b8ee79e..a2a575ac6 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 @@ -27,7 +27,7 @@ subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWra implicit none ! Inputs - integer, intent(in) :: & + integer, intent(in) :: & nCol, & ! Number of horizontal grid points nLev, & ! Number of vertical layers yearlen, & ! Length of current year (365/366) WTF? @@ -39,7 +39,7 @@ subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWra idcor_con, & ! Flag for decorrelation-length. Use constant value idcor_hogan, & ! Flag for decorrelation-length. (https://rmets.onlinelibrary.wiley.com/doi/full/10.1002/qj.647) idcor_oreopoulos ! Flag for decorrelation-length. (10.5194/acp-12-9097-2012) - logical, intent(in) :: & + logical, intent(in) :: & doSWrad, & ! Call SW radiation? doLWrad ! Call LW radiation real(kind_phys), intent(in) :: & @@ -49,19 +49,19 @@ subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWra con_rd, & ! Physical constant: gas-constant for dry air con_epsq, & ! Physical constant: Minimum value for specific humidity dcorr_con ! Decorrelation-length (used if idcor = idcor_con) - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lat ! Latitude - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) cld_frac ! Total cloud fraction - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) ! Outputs - real(kind_phys), dimension(nCol),intent(out) :: & + real(kind_phys), dimension(:),intent(out) :: & de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev),intent(out) :: & + real(kind_phys), dimension(:,:),intent(out) :: & cloud_overlap_param, & ! Cloud-overlap parameter precip_overlap_param, & ! Precipitation overlap parameter deltaZc ! Layer thickness (from layer-centers)(km) diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 index 308456e06..a55c84ae7 100644 --- a/physics/GFS_rrtmgp_setup.F90 +++ b/physics/GFS_rrtmgp_setup.F90 @@ -56,14 +56,14 @@ subroutine GFS_rrtmgp_setup_init(imp_physics, imp_physics_fer_hires, imp_physics imp_physics_zhao_carr, & ! Flag for zhao-carr scheme imp_physics_zhao_carr_pdf, & ! Flag for zhao-carr+PDF scheme imp_physics_mg ! Flag for MG scheme - real(kind_phys), dimension(levr+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & si integer, intent(in) :: levr, ictm, isol, ico2, iaer, ialb, iems, & ntcw, num_p3d, ntoz, iovr, isubc_sw, isubc_lw, & icliq_sw, iflip, me logical, intent(in) :: & crick_proof, ccnorm, norad_precip - integer, intent(in), dimension(4) :: & + integer, intent(in), dimension(:) :: & idate ! Outputs diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 index 457080536..7a4e08d55 100644 --- a/physics/GFS_rrtmgp_sw_pre.F90 +++ b/physics/GFS_rrtmgp_sw_pre.F90 @@ -41,15 +41,15 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_ nLev, & ! Number of vertical layers n_var_lndp, & ! Number of surface variables perturbed lndp_type ! Type of land perturbations scheme used - character(len=3), dimension(n_var_lndp), intent(in) :: & + character(len=3), dimension(:), intent(in) :: & lndp_var_list - real(kind_phys), dimension(n_var_lndp), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lndp_prt_list logical,intent(in) :: & doSWrad ! Call RRTMGP SW radiation? real(kind_phys), intent(in) :: & solhr ! Time in hours after 00z at the current timestep - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lsmask, & ! Landmask: sea/land/ice=0/1/2 lon, & ! Longitude coslat, & ! Cosine(latitude) @@ -75,25 +75,25 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_ albivis, & ! surface albedo from lsm (diffuse,vis) (frac) albinir ! surface albedo from lsm (diffuse,nir) (frac) - real(kind_phys), dimension(nCol,n_var_lndp), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & sfc_wts ! Weights for stochastic surface physics perturbation () - real(kind_phys), dimension(nCol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Layer pressure tv_lay, & ! Layer virtual-temperature relhum ! Layer relative-humidity - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer interfaces (Pa) ! Outputs integer, intent(out) :: & nday ! Number of daylit points - integer, dimension(ncol), intent(out) :: & + integer, dimension(:), intent(out) :: & idxday ! Indices for daylit points - real(kind_phys), dimension(ncol), intent(inout) :: & + real(kind_phys), dimension(:), intent(inout) :: & coszen, & ! Cosine of SZA coszdg, & ! Cosine of SZA, daytime sfc_alb_dif ! Mean surface diffused (nIR+uvvis) sw albedo - real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & sfc_alb_nir_dir, & ! Surface albedo (direct) sfc_alb_nir_dif, & ! Surface albedo (diffuse) sfc_alb_uvvis_dir, & ! Surface albedo (direct) diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index b3dda08da..671d33271 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -55,7 +55,7 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc logical, intent(in) :: use_zmtnblck logical, intent(in) :: do_shum logical, intent(in) :: do_skeb - real(kind_phys), dimension(1:im), intent(in) :: zmtnblck + real(kind_phys), dimension(:), intent(in) :: zmtnblck ! sppt_wts only allocated if do_sppt == .true. real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts ! skebu_wts, skebv_wts only allocated if do_skeb == .true. @@ -64,24 +64,24 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc ! shum_wts only allocated if do_shum == .true. real(kind_phys), dimension(:,:), intent(in) :: shum_wts ! inverse/flipped weights are always allocated - real(kind_phys), dimension(1:im,1:km), intent(inout) :: sppt_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebu_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebv_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: shum_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(in) :: diss_est - real(kind_phys), dimension(1:im,1:km), intent(in) :: ugrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: vgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: tgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: qgrs_wv + real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebu_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebv_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: shum_wts_inv + real(kind_phys), dimension(:,:), intent(in) :: diss_est + real(kind_phys), dimension(:,:), intent(in) :: ugrs + real(kind_phys), dimension(:,:), intent(in) :: vgrs + real(kind_phys), dimension(:,:), intent(in) :: tgrs + real(kind_phys), dimension(:,:), intent(in) :: qgrs_wv real(kind_phys), dimension(:,:), intent(in) :: qgrs_cw real(kind_phys), dimension(:,:), intent(in) :: qgrs_rw real(kind_phys), dimension(:,:), intent(in) :: qgrs_sw real(kind_phys), dimension(:,:), intent(in) :: qgrs_iw real(kind_phys), dimension(:,:), intent(in) :: qgrs_gl - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gu0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gv0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gt0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gq0_wv + real(kind_phys), dimension(:,:), intent(inout) :: gu0 + real(kind_phys), dimension(:,:), intent(inout) :: gv0 + real(kind_phys), dimension(:,:), intent(inout) :: gt0 + real(kind_phys), dimension(:,:), intent(inout) :: gq0_wv real(kind_phys), dimension(:,:), intent(inout) :: gq0_cw real(kind_phys), dimension(:,:), intent(inout) :: gq0_rw real(kind_phys), dimension(:,:), intent(inout) :: gq0_sw @@ -93,13 +93,13 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc integer, intent(in) :: ntiw integer, intent(in) :: ntgl real(kind_phys), dimension(:,:), intent(inout) :: dtdtnp - real(kind_phys), dimension(1:im), intent(in) :: rain - real(kind_phys), dimension(1:im), intent(in) :: rainc - real(kind_phys), dimension(1:im), intent(inout) :: tprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcp - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcpb - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcpb + real(kind_phys), dimension(:), intent(in) :: rain + real(kind_phys), dimension(:), intent(in) :: rainc + real(kind_phys), dimension(:), intent(inout) :: tprcp + real(kind_phys), dimension(:), intent(inout) :: totprcp + real(kind_phys), dimension(:), intent(inout) :: cnvprcp + real(kind_phys), dimension(:), intent(inout) :: totprcpb + real(kind_phys), dimension(:), intent(inout) :: cnvprcpb logical, intent(in) :: cplflx ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(inout) :: rain_cpl @@ -107,9 +107,9 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(in) :: drain_cpl real(kind_phys), dimension(:), intent(in) :: dsnow_cpl - real(kind_phys), dimension(1:km), intent(in) :: si - real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca - real(kind_phys), dimension(1:im), intent(in) :: ca1 + real(kind_phys), dimension(:), intent(in) :: si + real(kind_phys), dimension(:), intent(inout) :: vfact_ca + real(kind_phys), dimension(:), intent(in) :: ca1 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..ac9bdfe5f 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -38,26 +38,26 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx implicit none ! Interface variables - integer, intent(in ) :: im, lkm - logical, intent(in ) :: frac_grid, cplflx, cplwav2atm - logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet - real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac - real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice - real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx - - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf - real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & + integer, intent(in ) :: im, lkm + logical, intent(in ) :: frac_grid, cplflx, cplwav2atm + logical, dimension(:), intent(inout) :: flag_cice + logical, dimension(:), intent(inout) :: dry, icy, lake, ocean, wet + real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac + real(kind=kind_phys), dimension(:), intent(inout) :: cice, hice + real(kind=kind_phys), dimension(:), intent( out) :: frland + real(kind=kind_phys), dimension(:), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + + real(kind=kind_phys), dimension(:), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(:), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice - real(kind=kind_phys), dimension(im), intent( out) :: tice - real(kind=kind_phys), intent(in ) :: tgice - integer, dimension(im), intent(inout) :: islmsk, islmsk_cice - real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad - real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk - real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice + real(kind=kind_phys), dimension(:), intent( out) :: tice + real(kind=kind_phys), intent(in ) :: tgice + integer, dimension(:), intent(inout) :: islmsk, islmsk_cice + real(kind=kind_phys), dimension(:), intent(in ) :: semis_rad + real(kind=kind_phys), dimension(:), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk + real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice real(kind=kind_phys), parameter :: timin = 173.0_kind_phys ! minimum temperature allowed for snow/ice @@ -277,12 +277,12 @@ subroutine GFS_surface_composites_inter_run (im, dry, icy, wet, semis_wat, semis implicit none ! Interface variables - integer, intent(in ) :: im - logical, dimension(im), intent(in ) :: dry, icy, wet - real(kind=kind_phys), dimension(im), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & - adjsfcdsw, adjsfcnsw - real(kind=kind_phys), dimension(im), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat - real(kind=kind_phys), dimension(im), intent(out) :: adjsfcusw + integer, intent(in ) :: im + logical, dimension(:), intent(in ) :: dry, icy, wet + real(kind=kind_phys), dimension(:), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & + adjsfcdsw, adjsfcnsw + real(kind=kind_phys), dimension(:), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat + real(kind=kind_phys), dimension(:), intent(out) :: adjsfcusw ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -365,9 +365,9 @@ subroutine GFS_surface_composites_post_run ( integer, intent(in) :: im, kice, km logical, intent(in) :: cplflx, frac_grid, cplwav2atm - logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy - integer, dimension(im), intent(in) :: islmsk - real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & + logical, dimension(:), intent(in) :: flag_cice, dry, wet, icy + integer, dimension(:), intent(in) :: islmsk + real(kind=kind_phys), dimension(:), intent(in) :: landfrac, lakefrac, oceanfrac, & zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & @@ -375,15 +375,15 @@ subroutine GFS_surface_composites_post_run ( snowd_wat, snowd_lnd, snowd_ice,tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, tsfc_lnd, tsfc_ice - real(kind=kind_phys), dimension(im), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & + real(kind=kind_phys), dimension(:), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & fh2, tsurf, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc - real(kind=kind_phys), dimension(im), intent(in ) :: tice ! interstitial sea ice temperature - real(kind=kind_phys), dimension(im), intent(inout) :: hice, cice + real(kind=kind_phys), dimension(:), intent(in ) :: tice ! interstitial sea ice temperature + real(kind=kind_phys), dimension(:), intent(inout) :: hice, cice real(kind=kind_phys), intent(in ) :: min_seaice - real(kind=kind_phys), dimension(im, kice), intent(in ) :: tiice - real(kind=kind_phys), dimension(im, km), intent(inout) :: stc + real(kind=kind_phys), dimension(:,:), intent(in ) :: tiice + real(kind=kind_phys), dimension(:,:), intent(inout) :: stc character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index 483eccdf8..5896b83e2 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -39,48 +39,48 @@ subroutine GFS_surface_generic_pre_run (im, levs, vfrac, islmsk, isot, ivegsrc, ! Interface variables integer, intent(in) :: im, levs, isot, ivegsrc - integer, dimension(im), intent(in) :: islmsk - integer, dimension(im), intent(inout) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: islmsk + integer, dimension(:), intent(inout) :: soiltyp, vegtype, slopetyp real(kind=kind_phys), intent(in) :: con_g - real(kind=kind_phys), dimension(im), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 + real(kind=kind_phys), dimension(:), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 - real(kind=kind_phys), dimension(im), intent(inout) :: tsfc - real(kind=kind_phys), dimension(im,levs), intent(in) :: phil + real(kind=kind_phys), dimension(:), intent(inout) :: tsfc + real(kind=kind_phys), dimension(:,:), intent(in) :: phil - real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl + real(kind=kind_phys), dimension(:), intent(inout) :: sigmaf, work3, tsurf, zlvl ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl - real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl - real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl + real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl + real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl integer, intent(in) :: lndp_type integer, intent(in) :: n_var_lndp - character(len=3), dimension(n_var_lndp), intent(in) :: lndp_var_list - real(kind=kind_phys), dimension(n_var_lndp), intent(in) :: lndp_prt_list - real(kind=kind_phys), dimension(im,n_var_lndp), intent(in) :: sfc_wts - real(kind=kind_phys), dimension(im), intent(out) :: z01d - real(kind=kind_phys), dimension(im), intent(out) :: zt1d - real(kind=kind_phys), dimension(im), intent(out) :: bexp1d - real(kind=kind_phys), dimension(im), intent(out) :: xlai1d - real(kind=kind_phys), dimension(im), intent(out) :: vegf1d - real(kind=kind_phys), intent(out) :: lndp_vgf - real(kind=kind_phys), dimension(im,n_var_lndp), intent(inout) :: sfc_wts_inv + character(len=3), dimension(:), intent(in) :: lndp_var_list + real(kind=kind_phys), dimension(:), intent(in) :: lndp_prt_list + real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts + real(kind=kind_phys), dimension(:), intent(out) :: z01d + real(kind=kind_phys), dimension(:), intent(out) :: zt1d + real(kind=kind_phys), dimension(:), intent(out) :: bexp1d + real(kind=kind_phys), dimension(:), intent(out) :: xlai1d + real(kind=kind_phys), dimension(:), intent(out) :: vegf1d + real(kind=kind_phys), intent(out) :: lndp_vgf + real(kind=kind_phys), dimension(:,:), intent(inout) :: sfc_wts_inv logical, intent(in) :: cplflx - real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl - logical, dimension(im), intent(inout) :: flag_cice - integer, dimension(im), intent(out) :: islmsk_cice - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl + logical, dimension(:), intent(inout) :: flag_cice + integer, dimension(:), intent(out) :: islmsk_cice + real(kind=kind_phys), dimension(:), intent(in) :: & tisfc, tsfco, fice, hice - real(kind=kind_phys), dimension(im), intent(out) :: wind - real(kind=kind_phys), dimension(im), intent(in ) :: u1, v1 + real(kind=kind_phys), dimension(:), intent(out) :: wind + real(kind=kind_phys), dimension(:), intent(in ) :: u1, v1 ! surface wind enhancement due to convection - real(kind=kind_phys), dimension(im), intent(inout ) :: cnvwind + real(kind=kind_phys), dimension(:), intent(inout ) :: cnvwind ! - real(kind=kind_phys), dimension(im), intent(out) :: smcwlt2, smcref2 + real(kind=kind_phys), dimension(:), intent(out) :: smcwlt2, smcref2 ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -222,29 +222,29 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplwav, lssav, icy, wet, dt integer, intent(in) :: im logical, intent(in) :: cplflx, cplwav, lssav - logical, dimension(im), intent(in) :: icy, wet + logical, dimension(:), intent(in) :: icy, wet real(kind=kind_phys), intent(in) :: dtf - real(kind=kind_phys), dimension(im), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & + real(kind=kind_phys), dimension(:), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & - dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & - nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & - nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & + real(kind=kind_phys), dimension(:), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & + dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & + nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & + nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & evcwa, transa, sbsnoa, snowca, snohfa, ep - real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff - real(kind=kind_phys), dimension(im), intent(in) :: drain, runof + real(kind=kind_phys), dimension(:), intent(inout) :: runoff, srunoff + real(kind=kind_phys), dimension(:), intent(in) :: drain, runof ! For canopy heat storage logical, intent(in) :: lheatstrg real(kind=kind_phys), intent(in) :: z0fac, e0fac - real(kind=kind_phys), dimension(im), intent(in) :: zorl - real(kind=kind_phys), dimension(im), intent(in) :: hflx, evap - real(kind=kind_phys), dimension(im), intent(out) :: hflxq, evapq - real(kind=kind_phys), dimension(im), intent(out) :: hffac, hefac + real(kind=kind_phys), dimension(:), intent(in) :: zorl + real(kind=kind_phys), dimension(:), intent(in) :: hflx, evap + real(kind=kind_phys), dimension(:), intent(out) :: hflxq, evapq + real(kind=kind_phys), dimension(:), intent(out) :: hffac, hefac ! CCPP error handling variables character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_surface_loop_control.F90 b/physics/GFS_surface_loop_control.F90 index afa34130d..82c55c4ad 100644 --- a/physics/GFS_surface_loop_control.F90 +++ b/physics/GFS_surface_loop_control.F90 @@ -15,11 +15,9 @@ end subroutine GFS_surface_loop_control_part1_finalize !> \brief Brief description of the subroutine !! -#if 0 !! \section arg_table_GFS_surface_loop_control_part1_run Arguments !! \htmlinclude GFS_surface_loop_control_part1_run.html !! -#endif !! \section general General Algorithm !! \section detailed Detailed Algorithm !! @{ @@ -31,10 +29,10 @@ subroutine GFS_surface_loop_control_part1_run (im, iter, wind, flag_guess, errms implicit none ! Interface variables - integer, intent(in) :: im - integer, intent(in) :: iter - real(kind=kind_phys), dimension(im), intent(in) :: wind - logical, dimension(im), intent(inout) :: flag_guess + integer, intent(in) :: im + integer, intent(in) :: iter + real(kind=kind_phys), dimension(:), intent(in) :: wind + logical, dimension(:), intent(inout) :: flag_guess character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -80,7 +78,7 @@ end subroutine GFS_surface_loop_control_part2_finalize !! \section detailed Detailed Algorithm !! @{ - subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & + subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & flag_guess, flag_iter, dry, wet, icy, nstf_name1, errmsg, errflg) use machine, only: kind_phys @@ -90,10 +88,10 @@ subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & ! Interface variables integer, intent(in) :: im integer, intent(in) :: iter - real(kind=kind_phys), dimension(:), intent(in) :: wind - logical, dimension(:), intent(inout) :: flag_guess - logical, dimension(:), intent(inout) :: flag_iter - logical, dimension(:), intent(in) :: dry, wet, icy + real(kind=kind_phys), dimension(:), intent(in) :: wind + logical, dimension(:), intent(inout) :: flag_guess + logical, dimension(:), intent(inout) :: flag_iter + logical, dimension(:), intent(in) :: dry, wet, icy integer, intent(in) :: nstf_name1 character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 index 4d6617e36..8702c174f 100644 --- a/physics/GFS_time_vary_pre.fv3.F90 +++ b/physics/GFS_time_vary_pre.fv3.F90 @@ -73,7 +73,7 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lkm, lsm, lsm_noahm implicit none - integer, intent(in) :: idate(4) + integer, intent(in) :: idate(:) integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lkm, lsm, lsm_noahmp, & nsswr, nslwr, me, & diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 index 87b5f4bf6..fd1317dbc 100644 --- a/physics/GFS_time_vary_pre.scm.F90 +++ b/physics/GFS_time_vary_pre.scm.F90 @@ -73,7 +73,7 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lsm, lsm_noahmp, ns implicit none - integer, intent(in) :: idate(4) + integer, intent(in) :: idate(:) integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lsm, lsm_noahmp, & nsswr, nslwr, me, & diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index 36e9c454c..ff0770ad9 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -25,15 +25,15 @@ subroutine cs_conv_pre_run(im, levs, ntrac, ncld, q, clw1, clw2, & ! --- inputs integer, intent(in) :: im, levs, ntrac, ncld - real(r8), dimension(im,levs), intent(in) :: q - real(r8), dimension(im,levs), intent(in) :: clw1,clw2 - real(r8), dimension(im), intent(in) :: work1, work2 + real(r8), dimension(:,:), intent(in) :: q + real(r8), dimension(:,:), intent(in) :: clw1,clw2 + real(r8), dimension(:), intent(in) :: work1, work2 real(r8), intent(in) :: cs_parm1, cs_parm2 ! --- input/output - real(r8), dimension(ntrac-ncld+2), intent(out) :: fswtr, fscav - real(r8), dimension(im), intent(out) :: wcbmax - real(r8), dimension(im,levs), intent(out) :: save_q1,save_q2 + real(r8), dimension(:), intent(out) :: fswtr, fscav + real(r8), dimension(:), intent(out) :: wcbmax + real(r8), dimension(:,:), intent(out) :: save_q1,save_q2 ! save_q3 is not allocated for Zhao-Carr MP real(r8), dimension(:,:), intent(out) :: save_q3 @@ -91,10 +91,10 @@ subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg ! --- inputs integer, intent(in) :: im, kmax logical, intent(in) :: do_aw - real(r8), dimension(im,kmax), intent(in) :: sigmatot + real(r8), dimension(:,:), intent(in) :: sigmatot ! --- input/output - real(r8), dimension(im,kmax), intent(out) :: sigmafrac + real(r8), dimension(:,:), intent(out) :: sigmafrac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -295,44 +295,44 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & ! input arguments ! INTEGER, INTENT(IN) :: IJSDIM, KMAX, ntracp1, nn, NTR, mype, nctp, mp_phys, kdt, lat !! DD, for GFS, pass in - logical, intent(in) :: otspt(1:ntracp1,1:2)! otspt(:,1) - on/off switch for tracer transport by updraft and + logical, intent(in) :: otspt(:,:) ! otspt(:,1) - on/off switch for tracer transport by updraft and ! downdraft. should not include subgrid PDF and turbulence ! otspt(:,2) - on/off switch for tracer transport by subsidence ! should include subgrid PDF and turbulence - real(r8), intent(inout) :: t(IJSDIM,KMAX) ! temperature at mid-layer (K) - real(r8), intent(inout) :: q(IJSDIM,KMAX) ! water vapor array including moisture (kg/kg) - real(r8), intent(inout) :: clw(IJSDIM,KMAX,nn) ! tracer array including cloud condensate (kg/kg) - real(r8), intent(in) :: pap(IJSDIM,KMAX) ! pressure at mid-layer (Pa) - real(r8), intent(in) :: paph(IJSDIM,KMAX+1) ! pressure at boundaries (Pa) - real(r8), intent(in) :: zm(IJSDIM,KMAX) ! geopotential at mid-layer (m) - real(r8), intent(in) :: zi(IJSDIM,KMAX+1) ! geopotential at boundaries (m) - real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) + real(r8), intent(inout) :: t(:,:) ! temperature at mid-layer (K) + real(r8), intent(inout) :: q(:,:) ! water vapor array including moisture (kg/kg) + real(r8), intent(inout) :: clw(:,:,:) ! tracer array including cloud condensate (kg/kg) + real(r8), intent(in) :: pap(:,:) ! pressure at mid-layer (Pa) + real(r8), intent(in) :: paph(:,:) ! pressure at boundaries (Pa) + real(r8), intent(in) :: zm(:,:) ! geopotential at mid-layer (m) + real(r8), intent(in) :: zi(:,;) ! geopotential at boundaries (m) + real(r8), intent(in) :: fscav(:), fswtr(;), wcbmaxm(:) real(r8), intent(in) :: precz0in, preczhin, clmdin ! added for cs_convr - real(r8), intent(inout) :: u(IJSDIM,KMAX) ! zonal wind at mid-layer (m/s) - real(r8), intent(inout) :: v(IJSDIM,KMAX) ! meridional wind at mid-layer (m/s) + real(r8), intent(inout) :: u(:,:) ! zonal wind at mid-layer (m/s) + real(r8), intent(inout) :: v(:,:) ! meridional wind at mid-layer (m/s) - real(r8), intent(in) :: DELTA ! physics time step - real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) + real(r8), intent(in) :: DELTA ! physics time step + real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) logical, intent(in) :: do_aw, do_awdd, flx_form ! ! modified arguments ! - real(r8), intent(inout) :: CBMFX(IJSDIM,nctp) ! cloud base mass flux (kg/m2/s) + real(r8), intent(inout) :: CBMFX(:,:) ! cloud base mass flux (kg/m2/s) ! ! output arguments ! ! updraft, downdraft, and detrainment mass flux (kg/m2/s) - real(r8), intent(inout), dimension(IJSDIM,KMAX) :: ud_mf, dd_mf, dt_mf + real(r8), intent(inout), dimension(:,:) :: ud_mf, dd_mf, dt_mf - real(r8), intent(out) :: rain1(IJSDIM) ! lwe thickness of deep convective precipitation amount (m) + real(r8), intent(out) :: rain1(:) ! lwe thickness of deep convective precipitation amount (m) ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared ! using assumed shape. - real(r8), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & - cnv_dqldt, clcn, cnv_fice, & - cnv_ndrop, cnv_nice, cf_upi + real(r8), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & + cnv_dqldt, clcn, cnv_fice, & + cnv_ndrop, cnv_nice, cf_upi ! *GJF integer, intent(in) :: lprnt, ipr integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise @@ -341,8 +341,8 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & !DDsigma - output added for AW sigma diagnostics ! interface sigma and vertical velocity by cloud type (1=sfc) -! real(r8), intent(out), dimension(IJSDIM,KMAX,nctp) :: sigmai, vverti - real(r8), intent(out), dimension(IJSDIM,KMAX) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) +! real(r8), intent(out), dimension(:,:,:) :: sigmai, vverti + real(r8), intent(out), dimension(:,:) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) ! sigma terms in eq 91 and 92 ! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm !DDsigma diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 444541912..48b40dfd8 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -96,45 +96,47 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & logical, intent(in ) :: flag_for_scnv_generic_tend,flag_for_dcnv_generic_tend logical, intent(in ) :: ldiag3d,qdiag3d - real(kind=kind_phys), dimension( im , km ), intent(in ) :: forcet,forceqv_spechum,w,phil - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: t,us,vs - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: qci_conv - real(kind=kind_phys), dimension( im ) :: rand_mom,rand_vmas - real(kind=kind_phys), dimension( im,4 ) :: rand_clos - real(kind=kind_phys), dimension( im , km, 11 ) :: gdc,gdc2 - real(kind=kind_phys), dimension( im , km ), intent(out ) :: cnvw_moist,cnvc - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: cliw, clcw - - real(kind=kind_phys), dimension( : , : ), intent(inout ) :: & + real(kind=kind_phys), dimension( : , : ), intent(in ) :: forcet,forceqv_spechum,w,phil + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: t,us,vs + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: qci_conv + real(kind=kind_phys), dimension( : , : ), intent(out ) :: cnvw_moist,cnvc + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: cliw, clcw + + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: & du3dt_SCNV,dv3dt_SCNV,dt3dt_SCNV,dq3dt_SCNV, & du3dt_DCNV,dv3dt_DCNV,dt3dt_DCNV,dq3dt_DCNV - integer, dimension (im), intent(out) :: hbot,htop,kcnv - integer, dimension (im), intent(in) :: xland - real(kind=kind_phys), dimension (im), intent(in) :: pbl - integer, dimension (im) :: tropics + integer, dimension (:), intent(out) :: hbot,htop,kcnv + integer, dimension (:), intent(in) :: xland + real(kind=kind_phys), dimension (:), intent(in) :: pbl + integer, dimension (:) :: tropics ! ruc variable - real(kind=kind_phys), dimension (im), intent(in) :: hfx2,qfx2,psuri - real(kind=kind_phys), dimension (im,km), intent(out) :: ud_mf,dd_mf,dt_mf - real(kind=kind_phys), dimension (im), intent(out) :: raincv,cld1d - real(kind=kind_phys), dimension (im,km), intent(in) :: t2di,p2di + real(kind=kind_phys), dimension (:), intent(in) :: hfx2,qfx2,psuri + real(kind=kind_phys), dimension (:,:), intent(out) :: ud_mf,dd_mf,dt_mf + real(kind=kind_phys), dimension (:), intent(out) :: raincv,cld1d + real(kind=kind_phys), dimension (:,:), intent(in) :: t2di,p2di ! Specific humidity from FV3 - real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum - real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum + real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum + real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum ! Local water vapor mixing ratios and cloud water mixing ratios - real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw + real(kind=kind_phys), dimension (:,:) :: qv2di, qv, forceqv, cnvw ! - real(kind=kind_phys), dimension( im ),intent(in) :: garea + real(kind=kind_phys), dimension(:),intent(in) :: garea real(kind=kind_phys), intent(in ) :: dt integer, intent(in ) :: imfshalcnv + integer, dimension(:), intent(inout) :: cactiv + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg -! define locally for now. - integer, dimension(im),intent(inout) :: cactiv + +! local variables integer, dimension(im) :: k22_shallow,kbcon_shallow,ktop_shallow - real(kind=kind_phys), dimension(im) :: ht - real(kind=kind_phys), dimension(im) :: dx + real(kind=kind_phys), dimension (im) :: rand_mom,rand_vmas + real(kind=kind_phys), dimension (im,4) :: rand_clos + real(kind=kind_phys), dimension (im,km,11) :: gdc,gdc2 + real(kind=kind_phys), dimension (im) :: ht + real(kind=kind_phys), dimension (im) :: dx real(kind=kind_phys), dimension (im,km) :: outt,outq,outqc,phh,subm,cupclw,cupclws real(kind=kind_phys), dimension (im,km) :: dhdt,zu,zus,zd,phf,zum,zdm,outum,outvm real(kind=kind_phys), dimension (im,km) :: outts,outqs,outqcs,outu,outv,outus,outvs diff --git a/physics/dcyc2.f b/physics/dcyc2.f index f29d593a3..c8c8071af 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -211,38 +211,38 @@ subroutine dcyc2t3_run & ! integer, intent(in) :: ipr ! logical lprnt - logical, dimension(im), intent(in) :: dry, icy, wet + logical, dimension(:), intent(in) :: dry, icy, wet logical, intent(in) :: use_LW_jacobian, pert_radtend logical, intent(in) :: do_sppt,ca_global real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & & deltim, fhswr - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & & sfcdsw, sfcnsw, sfculw, sfculw_jac - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tsfc_lnd, tsfc_ice, tsfc_wat, & & sfcemis_lnd, sfcemis_ice, sfcemis_wat - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sfcnirbmu, sfcnirdfu, sfcvisbmu, sfcvisdfu, & & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd - real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & - &, swhc, hlwc + real(kind=kind_phys), dimension(:,:), intent(in) :: swh, hlw & + &, swhc, hlwc ! --- input/output: - real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt - real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtnp + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdt + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtnp ! --- outputs: - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfcdsw, adjsfcnsw, adjsfcdlw, adjsfculw, xmu, xcosz, & & adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat character(len=*), intent(out) :: errmsg diff --git a/physics/gfdl_cloud_microphys.F90 b/physics/gfdl_cloud_microphys.F90 index c41323ad5..9574fe59e 100644 --- a/physics/gfdl_cloud_microphys.F90 +++ b/physics/gfdl_cloud_microphys.F90 @@ -135,29 +135,29 @@ subroutine gfdl_cloud_microphys_run( & ! interface variables integer, intent(in ) :: levs, im real(kind=kind_phys), intent(in ) :: con_g, con_fvirt, con_rd, con_eps - real(kind=kind_phys), intent(in ), dimension(1:im) :: frland, garea - integer, intent(in ), dimension(1:im) :: islmsk - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & + real(kind=kind_phys), intent(in ), dimension(:) :: frland, garea + integer, intent(in ), dimension(:) :: islmsk + real(kind=kind_phys), intent(inout), dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & gq0_ntsw, gq0_ntgl, gq0_ntclamt - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gt0, gu0, gv0 - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs) :: vvl, prsl, del - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs+1) :: phii + real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(in ), dimension(:,:) :: vvl, prsl, del + real(kind=kind_phys), intent(in ), dimension(:,:) :: phii ! rain/snow/ice/graupel/precip amounts, fraction of frozen precip - real(kind_phys), intent(out ), dimension(1:im) :: rain0 - real(kind_phys), intent(out ), dimension(1:im) :: snow0 - real(kind_phys), intent(out ), dimension(1:im) :: ice0 - real(kind_phys), intent(out ), dimension(1:im) :: graupel0 - real(kind_phys), intent(out ), dimension(1:im) :: prcp0 - real(kind_phys), intent(out ), dimension(1:im) :: sr + real(kind_phys), intent(out ), dimension(:) :: rain0 + real(kind_phys), intent(out ), dimension(:) :: snow0 + real(kind_phys), intent(out ), dimension(:) :: ice0 + real(kind_phys), intent(out ), dimension(:) :: graupel0 + real(kind_phys), intent(out ), dimension(:) :: prcp0 + real(kind_phys), intent(out ), dimension(:) :: sr real(kind_phys), intent(in) :: dtp ! physics time step logical, intent (in) :: hydrostatic, phys_hydrostatic logical, intent (in) :: lradar - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: refl_10cm + real(kind=kind_phys), intent(inout), dimension(:,:) :: refl_10cm logical, intent (in) :: reset, effr_in - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: rew, rei, rer, res, reg + real(kind=kind_phys), intent(inout), dimension(:,:) :: rew, rei, rer, res, reg character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 index 5cc3c9136..d10e9fe0f 100644 --- a/physics/gfdl_fv_sat_adj.F90 +++ b/physics/gfdl_fv_sat_adj.F90 @@ -255,46 +255,46 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, integer, intent(in) :: ng logical, intent(in) :: hydrostatic logical, intent(in) :: fast_mp_consv - real(kind=kind_dyn), intent(inout) :: te0_2d(is:ie, js:je) - real(kind=kind_dyn), intent( out) :: te0(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: te0_2d(:,:) + real(kind=kind_dyn), intent( out) :: te0(:,:,;) ! If multi-gases physics are not used, ngas is one and qvi identical to qv integer, intent(in) :: ngas - real(kind=kind_dyn), intent(inout) :: qvi(isd:ied, jsd:jed, 1:km, 1:ngas) - real(kind=kind_dyn), intent(inout) :: qv(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: ql(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qi(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qr(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qs(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: qg(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(in) :: hs(isd:ied, jsd:jed) - real(kind=kind_dyn), intent(in) :: peln(is:ie, 1:km+1, js:je) + real(kind=kind_dyn), intent(inout) :: qvi(:,:,:,:) + real(kind=kind_dyn), intent(inout) :: qv(:,:,:) + real(kind=kind_dyn), intent(inout) :: ql(:,:,:) + real(kind=kind_dyn), intent(inout) :: qi(:,:,:) + real(kind=kind_dyn), intent(inout) :: qr(:,:,:) + real(kind=kind_dyn), intent(inout) :: qs(:,:,:) + real(kind=kind_dyn), intent(inout) :: qg(:,:,:) + real(kind=kind_dyn), intent(in) :: hs(:,:) + real(kind=kind_dyn), intent(in) :: peln(:,:,:) ! For hydrostatic build, kmdelz=1, otherwise kmdelz=km (see fv_arrays.F90) - real(kind=kind_dyn), intent(in) :: delz(is:ie, js:je, 1:kmdelz) - real(kind=kind_dyn), intent(in) :: delp(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: pt(isd:ied, jsd:jed, 1:km) - real(kind=kind_dyn), intent(inout) :: pkz(is:ie, js:je, 1:km) + real(kind=kind_dyn), intent(in) :: delz(:,:) + real(kind=kind_dyn), intent(in) :: delp(:,:,:) + real(kind=kind_dyn), intent(inout) :: pt(:,:,:) + real(kind=kind_dyn), intent(inout) :: pkz(:,:,:) #ifdef USE_COND - real(kind=kind_dyn), intent(inout) :: q_con(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) #else - real(kind=kind_dyn), intent(inout) :: q_con(isd:isd, jsd:jsd, 1) + real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) #endif real(kind=kind_dyn), intent(in) :: akap #ifdef MOIST_CAPPA - real(kind=kind_dyn), intent(inout) :: cappa(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) #else - real(kind=kind_dyn), intent(inout) :: cappa(isd:ied, jsd:jed, 1) + real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) #endif ! DH* WARNING, allocation in fv_arrays.F90 is area(isd_2d:ied_2d, jsd_2d:jed_2d), ! where normally isd_2d = isd etc, but for memory optimization, these can be set ! to isd_2d=0, ied_2d=-1 etc. I don't believe this optimization is actually used, ! as it would break a whole lot of code (including the one below)! ! Assume thus that isd_2d = isd etc. - real(kind_grid), intent(in) :: area(isd:ied, jsd:jed) - real(kind=kind_dyn), intent(inout) :: dtdt(is:ie, js:je, 1:km) + real(kind_grid), intent(in) :: area(:,:) + real(kind=kind_dyn), intent(inout) :: dtdt(:,:,:) logical, intent(in) :: out_dt logical, intent(in) :: last_step logical, intent(in) :: do_qa - real(kind=kind_dyn), intent( out) :: qa(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent( out) :: qa(:,:,:) integer, intent(in) :: nthreads character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 2604e7def..341f84fb3 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -130,23 +130,23 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & logical, intent(in) :: cplwav, cplwav2atm !GJF: this scheme has not been tested with these on logical, intent(in) :: lcurr_sf !GJF: this scheme has not been tested with this option turned on; the variables scurx and scury need to be input in order to use this logical, intent(in) :: pert_Cd !GJF: this scheme has not been tested with this option turned on; the variables ens_random_seed and ens_Cdamp need to be input in order to use this - logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy - integer, dimension(im), intent(in) :: isltyp, vegtype - real(kind=kind_phys), intent(in) :: dt, sfenth - real(kind=kind_phys), intent(in) :: rd,grav,ep1,ep2 - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smois - real(kind=kind_phys), dimension(im), intent(in) :: psfc, prsl1, & + logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy + integer, dimension(:), intent(in) :: isltyp, vegtype + real(kind=kind_phys), intent(in) :: dt, sfenth + real(kind=kind_phys), intent(in) :: rd,grav,ep1,ep2 + real(kind=kind_phys), dimension(:,:), intent(in) :: smois + real(kind=kind_phys), dimension(:), intent(in) :: psfc, prsl1, & q1, t1, u1, v1, wspd, u10, v10, gsw, glw, z1, shdmax, sigmaf, xlat, & xlon, tsurf_ocn, tsurf_lnd, tsurf_ice - real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & + real(kind=kind_phys), intent(inout), dimension(:) :: tskin_ocn, & tskin_lnd, tskin_ice, ustar_ocn, ustar_lnd, ustar_ice, & znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice - real(kind=kind_phys), intent(out), dimension(im) :: qss_ocn, qss_lnd, qss_ice + real(kind=kind_phys), intent(out), dimension(:) :: qss_ocn, qss_lnd, qss_ice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gwdc.f b/physics/gwdc.f index dd0220420..acb43b519 100644 --- a/physics/gwdc.f +++ b/physics/gwdc.f @@ -26,7 +26,7 @@ subroutine gwdc_pre_run ( & integer, intent(in) :: im, levs integer, intent(in) :: kbot(:), ktop(:) real(kind=kind_phys), intent(in) :: dtp - real(kind=kind_phys), intent(in) :: cgwf(2) + real(kind=kind_phys), intent(in) :: cgwf(:) real(kind=kind_phys), intent(in) :: dx(:), work1(:), work2(:) real(kind=kind_phys), intent(in) :: & & gt0(:,:), gt0_init(:,:), del(:,:) @@ -163,7 +163,6 @@ subroutine gwdc_run (im,km,lat,u1,v1,t1,q1,deltim, & USE MACHINE , ONLY : kind_phys implicit none -! DH* TODO - add intent information for all variables !---------------------------- Arguments -------------------------------- ! ! Input variables @@ -190,13 +189,13 @@ subroutine gwdc_run (im,km,lat,u1,v1,t1,q1,deltim, & integer, intent(in) :: im, km, lat, ipr integer, intent(in) :: ktop(:),kbot(:),kcnv(:) real(kind=kind_phys), intent(in) :: grav,cp,rd,fv,fhour,deltim,pi - real(kind=kind_phys), dimension(:), intent(in) :: qmax - real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty - real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength - real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & + real(kind=kind_phys), dimension(:), intent(in) :: qmax + real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty + real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength + real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & & q1,pmid1,dpmid1 real(kind=kind_phys), dimension(:,:), intent(out) :: utgwc,vtgwc - real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 + real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 ! logical, intent(in) :: lprnt ! diff --git a/physics/gwdps.f b/physics/gwdps.f index 4b527ef00..66cff45e7 100644 --- a/physics/gwdps.f +++ b/physics/gwdps.f @@ -296,23 +296,23 @@ subroutine gwdps_run( & ! ! Interface variables integer, intent(in) :: im, km, imx, kdt, ipr, me - integer, intent(in) :: KPBL(IM) ! Index for the PBL top layer! + integer, intent(in) :: KPBL(:) ! Index for the PBL top layer! real(kind=kind_phys), intent(in) :: & & deltim, G, CP, RD, RV, cdmbgwd(4) real(kind=kind_phys), intent(inout) :: & - & A(IM,KM), B(IM,KM), C(IM,KM) + & A(:,:), B(:,:), C(:,:) real(kind=kind_phys), intent(in) :: & - & U1(IM,KM), V1(IM,KM), T1(IM,KM), & - & Q1(IM,KM), PRSI(IM,KM+1), DEL(IM,KM), & - & PRSL(IM,KM), PRSLK(IM,KM), PHIL(IM,KM), & - & PHII(IM,KM+1) + & U1(:,:), V1(:,:), T1(:,:), & + & Q1(:,:), PRSI(:,:), DEL(:,:), & + & PRSL(:,:), PRSLK(:,:), PHIL(:,:), & + & PHII(:,:) real(kind=kind_phys), intent(in) :: & - & OC(IM), OA4(IM,4), CLX4(IM,4), HPRIME(IM) - real(kind=kind_phys), intent(inout) :: ELVMAX(IM) + & OC(:), OA4(:,:), CLX4(:,;), HPRIME(:) + real(kind=kind_phys), intent(inout) :: ELVMAX(:) real(kind=kind_phys), intent(in) :: & - & THETA(IM), SIGMA(IM), GAMMA(IM) - real(kind=kind_phys), intent(out) :: DUSFC(IM), DVSFC(IM), & - & RDXZB(IM) + & THETA(:), SIGMA(:), GAMMA(:) + real(kind=kind_phys), intent(out) :: DUSFC(:), DVSFC(:), & + & RDXZB(:) integer, intent(in) :: nmtvr logical, intent(in) :: lprnt character(len=*), intent(out) :: errmsg diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 index a2c4e7dde..4a6baf287 100644 --- a/physics/m_micro.F90 +++ b/physics/m_micro.F90 @@ -38,7 +38,7 @@ subroutine m_micro_init(imp_physics, imp_physics_mg, fprcp, gravit, rair, rh2o, mg_do_graupel, mg_nccons, mg_nicons, mg_ngcons, & mg_do_ice_gmao, mg_do_liq_liu real(kind=kind_phys), intent(in) :: gravit, rair, rh2o, cpair, eps, tmelt, latvap, latice - real(kind=kind_phys), intent(in) :: mg_dcs, mg_qcvar, mg_ts_auto_ice(2), mg_rhmini, & + real(kind=kind_phys), intent(in) :: mg_dcs, mg_qcvar, mg_ts_auto_ice(:), mg_rhmini, & mg_berg_eff_factor, mg_ncnst, mg_ninst, mg_ngnst character(len=16), intent(in) :: mg_precip_frac_method character(len=*), intent(out) :: errmsg @@ -175,13 +175,12 @@ subroutine m_micro_run( im, lm, flipv, dt_i & integer, parameter :: ncolmicro = 1 integer,intent(in) :: im, lm, kdt, fprcp, pdfflag, iccn logical,intent(in) :: flipv, skip_macro - real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(2) + real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(:) - real (kind=kind_phys), dimension(:,:),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & prsl_i,u_i,v_i,phil, omega_i, QLLS_i,QILS_i, & & lwheat_i,swheat_i - real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, & - & phii + real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, phii ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared ! using assumed shape. @@ -190,11 +189,11 @@ subroutine m_micro_run( im, lm, flipv, dt_i & & CNV_MFD_i, cf_upi, CNV_FICE_i, CNV_NDROP_i, & & CNV_NICE_i, w_upi ! *GJF - real (kind=kind_phys), dimension(:,:),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & rhc_i, naai_i, npccn_i - real (kind=kind_phys), dimension(:,:,:),intent(in) :: & + real (kind=kind_phys), dimension(:,:,:),intent(in) :: & & aerfld_i - real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & + real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & & TAUGWY, TAUOROX, TAUOROY, FRLAND,ZPBL,xlat,xlon ! & TAUGWY, TAUX, TAUY, TAUOROX, TAUOROY,ps_i,FRLAND,ZPBL ! & CNVPRCP diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 index 9cfb6f56e..8d0132cf1 100644 --- a/physics/m_micro_interstitial.F90 +++ b/physics/m_micro_interstitial.F90 @@ -169,22 +169,22 @@ subroutine m_micro_post_run( & integer, intent(in) :: im, levs, fprcp logical, intent(in) :: mg3_as_mg2 - real(kind=kind_phys), intent(in ) :: ncpr(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncps(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: gq0_ice(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_rain(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_snow(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_graupel(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_rain_nc(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_snow_nc(1:im,1:levs) - real(kind=kind_phys), intent(out ) :: gq0_graupel_nc(1:im,1:levs) - real(kind=kind_phys), intent( out) :: ice(1:im) - real(kind=kind_phys), intent( out) :: snow(1:im) - real(kind=kind_phys), intent( out) :: graupel(1:im) + real(kind=kind_phys), intent(in ) :: ncpr(:,:) + real(kind=kind_phys), intent(in ) :: ncps(:,:) + real(kind=kind_phys), intent(in ) :: ncgl(:,:) + real(kind=kind_phys), intent(inout) :: qrn(:,:) + real(kind=kind_phys), intent(inout) :: qsnw(:,:) + real(kind=kind_phys), intent(inout) :: qgl(:,:) + real(kind=kind_phys), intent(in ) :: gq0_ice(:,:) + real(kind=kind_phys), intent(out ) :: gq0_rain(:,:) + real(kind=kind_phys), intent(out ) :: gq0_snow(:,:) + real(kind=kind_phys), intent(out ) :: gq0_graupel(:,:) + real(kind=kind_phys), intent(out ) :: gq0_rain_nc(:,:) + real(kind=kind_phys), intent(out ) :: gq0_snow_nc(:,:) + real(kind=kind_phys), intent(out ) :: gq0_graupel_nc(:,:) + real(kind=kind_phys), intent( out) :: ice(:) + real(kind=kind_phys), intent( out) :: snow(:) + real(kind=kind_phys), intent( out) :: graupel(:) real(kind=kind_phys), intent(in ) :: dtp character(len=*), intent(out) :: errmsg diff --git a/physics/module_MYJPBL_wrapper.F90 b/physics/module_MYJPBL_wrapper.F90 index 5924de96f..9179c3068 100644 --- a/physics/module_MYJPBL_wrapper.F90 +++ b/physics/module_MYJPBL_wrapper.F90 @@ -86,38 +86,38 @@ SUBROUTINE myjpbl_wrapper_run( & real(kind=kind_phys),intent(in) :: dt_phs, xkzm_m, xkzm_h, xkzm_s !MYJ-2D - real(kind=kind_phys),dimension(im),intent(in) :: & - & prsik_1, prslk_1, prslki, slmsk, garea, & + real(kind=kind_phys),dimension(:),intent(in) :: & + & prsik_1, prslk_1, prslki, slmsk, garea, & snowd, evap, hflx, cm, ch, wind, hprime1 - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & pblh, zorl, ustar, tsfc, qsfc - real(kind=kind_phys),dimension(im),intent(inout) :: & - & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & - & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & - & phy_myj_akhs, phy_myj_akms, & - & phy_myj_chkqlm, phy_myj_elflx, & + real(kind=kind_phys),dimension(:),intent(inout) :: & + & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & + & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & + & phy_myj_akhs, phy_myj_akms, & + & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q - real(kind=kind_phys),dimension(im),intent(out) :: & + real(kind=kind_phys),dimension(:),intent(out) :: & & dusfc,dvsfc,dtsfc,dqsfc,gamt,gamq - integer,dimension(im),intent(out) :: kpbl - integer,dimension(im),intent(in) :: kinver + integer,dimension(:),intent(out) :: kpbl + integer,dimension(:),intent(in) :: kinver !MYJ-3D - real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & phii, prsi - real(kind=kind_phys),dimension(im,levs),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl -! real(kind=kind_phys),dimension(im,levs),intent(inout) :: & +! real(kind=kind_phys),dimension(:,:),intent(inout) :: & ! dudt, dvdt, dtdt, dkt - real(kind=kind_phys),dimension(im,levs),intent(inout) :: & + real(kind=kind_phys),dimension(:,:),intent(inout) :: & dudt, dvdt, dtdt - real(kind=kind_phys),dimension(im,levs-1),intent(out) :: & + real(kind=kind_phys),dimension(:,:),intent(out) :: & dkt - real(kind=kind_phys),dimension(:,:),intent(inout) :: & + real(kind=kind_phys),dimension(:,:),intent(inout) :: & du3dt_PBL, dv3dt_PBL, dt3dt_PBL, dq3dt_PBL !MYJ-4D - real(kind=kind_phys),dimension(im,levs,ntrac),intent(inout) :: & + real(kind=kind_phys),dimension(:,:,:),intent(inout) :: & & qgrs,dqdt !LOCAL diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 index f46291a46..ee683b97c 100644 --- a/physics/module_MYJSFC_wrapper.F90 +++ b/physics/module_MYJSFC_wrapper.F90 @@ -91,22 +91,22 @@ SUBROUTINE myjsfc_wrapper_run( & real(kind=kind_phys),intent(in) :: con_cp, con_g, con_rd !MYJ-2D - logical,dimension(im),intent(in) :: flag_iter - real(kind=kind_phys),dimension(im),intent(in) :: & + logical,dimension(:),intent(in) :: flag_iter + real(kind=kind_phys),dimension(:),intent(in) :: & & prsik_1, prslk_1, tsfc, qsfc, slmsk - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & & phy_myj_akhs, phy_myj_akms, & & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & pblh, zorl, ustar, rib - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & cm, ch, stress, ffm, ffh, fm10, fh2 - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & landfrac, lakefrac, oceanfrac, fice - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & z0rl_wat, z0rl_lnd, z0rl_ice, & & ustar_wat, ustar_lnd, ustar_ice, & & cm_wat, cm_lnd, cm_ice, & @@ -121,12 +121,12 @@ SUBROUTINE myjsfc_wrapper_run( & !MYJ-3D - real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & + real(kind=kind_phys),dimension(::),intent(in) :: & phii, prsi - real(kind=kind_phys),dimension(im,levs),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl !MYJ-4D - real(kind=kind_phys),dimension(im,levs,ntrac),intent(in) :: & + real(kind=kind_phys),dimension(:,:,:),intent(in) :: & & qgrs !LOCAL diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index c95c70ace..778e6993e 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -289,38 +289,38 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys), DIMENSION( ndvel ) :: vd1 !MYNN-2D - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dx,zorl,slmsk,tsurf,qsfc,ps, & & hflx,qflx,ust,wspd,rb,recmol - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & & stress_ocn,hflx_ocn,qflx_ocn, & & oceanfrac,fice - logical, dimension(im), intent(in) :: & + logical, dimension(:), intent(in) :: & & wet, dry, icy - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & pblh,dusfc_diag,dvsfc_diag,dtsfc_diag,dqsfc_diag - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & & dtsfci_diag,dqsfci_diag,dusfci_diag,dvsfci_diag, & & maxMF - integer, dimension(im), intent(inout) :: & + integer, dimension(:), intent(inout) :: & & kpbl,nupdraft,ktop_plume - real(kind=kind_phys), dimension(:), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & dusfc_cpl,dvsfc_cpl,dtsfc_cpl,dqsfc_cpl - real(kind=kind_phys), dimension(:), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & dusfci_cpl,dvsfci_cpl,dtsfci_cpl,dqsfci_cpl !LOCAL - real, dimension(im) :: & + real, dimension(:) :: & & WSTAR,DELTA,qcg,hfx,qfx,rmol,xland, & & uoce,voce,vdfg,znt,ts - real, dimension(im) :: dusfci1,dvsfci1,dtsfci1,dqsfci1 + real, dimension(:) :: dusfci1,dvsfci1,dtsfci1,dqsfci1 ! Initialize CCPP error handling variables errmsg = '' diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 index fd6f76a4d..9bbda5ad0 100644 --- a/physics/mp_fer_hires.F90 +++ b/physics/mp_fer_hires.F90 @@ -54,9 +54,9 @@ subroutine mp_fer_hires_init(ncol, nlev, dtp, imp_physics, & logical, intent(in) :: restart character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - real(kind_phys), intent(out) :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(out) :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(out) :: f_rimef(1:ncol,1:nlev) + real(kind_phys), intent(out) :: f_ice(:,:) + real(kind_phys), intent(out) :: f_rain(:,:) + real(kind_phys), intent(out) :: f_rimef(:,:) ! Local variables @@ -152,27 +152,27 @@ SUBROUTINE mp_fer_hires_run(NCOL, NLEV, DT ,SPEC_ADV & logical, intent(in ) :: spec_adv integer, intent(in ) :: mpirank integer, intent(in ) :: mpiroot - real(kind_phys), intent(in ) :: slmsk(1:ncol) - real(kind_phys), intent(in ) :: prsi(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: p_phy(1:ncol,1:nlev) + real(kind_phys), intent(in ) :: slmsk(:) + real(kind_phys), intent(in ) :: prsi(:,:) + real(kind_phys), intent(in ) :: p_phy(:,:) real(kind_phys), intent(in ) :: epsq,r_d,p608,cp,g - real(kind_phys), intent(inout) :: t(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: q(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) - real(kind_phys), intent(out ) :: sr(1:ncol) - real(kind_phys), intent(out ) :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(out ) :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(out ) :: f_rimef(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) ! QRIMEF - - real(kind_phys), intent(inout) :: prec(1:ncol) - real(kind_phys), intent(inout) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: t(:,:) + real(kind_phys), intent(inout) :: q(:,:) + real(kind_phys), intent(inout) :: cwm(:,:) + real(kind_phys), intent(inout) :: train(:,:) + real(kind_phys), intent(out ) :: sr(:) + real(kind_phys), intent(out ) :: f_ice(:,:) + real(kind_phys), intent(out ) :: f_rain(:,:) + real(kind_phys), intent(out ) :: f_rimef(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qg(:,:) ! QRIMEF + + real(kind_phys), intent(inout) :: prec(:) + real(kind_phys), intent(inout) :: refl_10cm(:,:) real(kind_phys), intent(in ) :: rhgrd - real(kind_phys), intent(in ) :: dx(1:ncol) + real(kind_phys), intent(in ) :: dx(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index 6031af94a..cb4fbfffd 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -347,14 +347,14 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(in ) :: con_eps ! Hydrometeors logical, intent(in ) :: convert_dry_rho - real(kind_phys), intent(inout) :: spechum(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qs(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: ni(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: nr(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: spechum(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qs(:,:) + real(kind_phys), intent(inout) :: qg(:,:) + real(kind_phys), intent(inout) :: ni(:,:) + real(kind_phys), intent(inout) :: nr(:,:) ! Aerosols logical, intent(in) :: is_aerosol_aware, reset ! The following arrays are not allocated if is_aerosol_aware is false @@ -364,25 +364,25 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), optional, intent(in ) :: nwfa2d(:) real(kind_phys), optional, intent(in ) :: nifa2d(:) ! State variables and timestep information - real(kind_phys), intent(inout) :: tgrs(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: prsl(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: phii(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: omega(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: tgrs(:,:) + real(kind_phys), intent(in ) :: prsl(:,:) + real(kind_phys), intent(in ) :: phii(:,:) + real(kind_phys), intent(in ) :: omega(:,:) real(kind_phys), intent(in ) :: dtp ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip - real(kind_phys), intent( out) :: prcp(1:ncol) - real(kind_phys), intent( out) :: rain(1:ncol) - real(kind_phys), intent( out) :: graupel(1:ncol) - real(kind_phys), intent( out) :: ice(1:ncol) - real(kind_phys), intent( out) :: snow(1:ncol) - real(kind_phys), intent( out) :: sr(1:ncol) + real(kind_phys), intent( out) :: prcp(:) + real(kind_phys), intent( out) :: rain(:) + real(kind_phys), intent( out) :: graupel(:) + real(kind_phys), intent( out) :: ice(:) + real(kind_phys), intent( out) :: snow(:) + real(kind_phys), intent( out) :: sr(:) ! Radar reflectivity - real(kind_phys), intent( out) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent( out) :: refl_10cm(:,:) logical, optional, intent(in ) :: do_radar_ref ! Cloud effective radii - real(kind_phys), optional, intent( out) :: re_cloud(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_ice(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_snow(1:ncol,1:nlev) + real(kind_phys), optional, intent( out) :: re_cloud(:,:) + real(kind_phys), optional, intent( out) :: re_ice(:,:) + real(kind_phys), optional, intent( out) :: re_snow(:,:) ! MPI information integer, intent(in) :: mpicomm integer, intent(in) :: mpirank diff --git a/physics/ozphys.f b/physics/ozphys.f index e71d3de86..c1f464cb4 100644 --- a/physics/ozphys.f +++ b/physics/ozphys.f @@ -58,7 +58,7 @@ subroutine ozphys_run ( & ! Interface variables integer, intent(in) :: im, levs, ko3, oz_coeff, me real(kind=kind_phys), intent(inout) :: & - & oz(im,levs) + & oz(:,:) ! These arrays may not be allocated and need assumed array sizes real(kind=kind_phys), intent(inout) :: & & ozp1(:,:), ozp2(:,:), ozp3(:,:), ozp4(:,:) diff --git a/physics/rrtmg_lw_pre.F90 b/physics/rrtmg_lw_pre.F90 index 276a0a5bd..0494e283f 100644 --- a/physics/rrtmg_lw_pre.F90 +++ b/physics/rrtmg_lw_pre.F90 @@ -22,10 +22,10 @@ subroutine rrtmg_lw_pre_run (im, lslwr, xlat, xlon, slmsk, snowd, sncovr,& integer, intent(in) :: im logical, intent(in) :: lslwr - real(kind=kind_phys), dimension(im), intent(in) :: xlat, xlon, slmsk, & + real(kind=kind_phys), dimension(:), intent(in) :: xlat, xlon, slmsk, & snowd, sncovr, zorl, hprime, tsfg, tsfa real(kind=kind_phys), dimension(:), intent(in) :: emiss - real(kind=kind_phys), dimension(im), intent(out) :: semis + real(kind=kind_phys), dimension(:), intent(out) :: semis character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 index d9946f695..0c716077a 100644 --- a/physics/rrtmg_sw_post.F90 +++ b/physics/rrtmg_sw_post.F90 @@ -26,20 +26,20 @@ subroutine rrtmg_sw_post_run (im, levr, levs, ltp, nday, lm, kd, lsswr, & integer, intent(in) :: im, levr, levs, & ltp, nday, lm, kd logical, intent(in) :: lsswr, swhtr - real(kind=kind_phys), dimension(im), intent(in) :: sfcalb1, sfcalb2, & + real(kind=kind_phys), dimension(:), intent(in) :: sfcalb1, sfcalb2, & sfcalb3, sfcalb4 - real(kind=kind_phys), dimension(im, levr+LTP), intent(in) :: htswc, htsw0 + real(kind=kind_phys), dimension(:,:), intent(in) :: htswc, htsw0 - real(kind=kind_phys), dimension(im), intent(inout) :: nirbmdi, nirdfdi, & + real(kind=kind_phys), dimension(:), intent(inout) :: nirbmdi, nirdfdi, & visbmdi, visdfdi, & nirbmui, nirdfui, & visbmui, visdfui, & sfcdsw, sfcnsw - real(kind=kind_phys), dimension(im,levs), intent(inout) :: htrsw, swhc + real(kind=kind_phys), dimension(:,:), intent(inout) :: htrsw, swhc - type(cmpfsw_type), dimension(im), intent(inout) :: scmpsw - type(sfcfsw_type), dimension(im), intent(inout) :: sfcfsw - type(topfsw_type), dimension(im), intent(inout) :: topfsw + type(cmpfsw_type), dimension(:), intent(inout) :: scmpsw + type(sfcfsw_type), dimension(:), intent(inout) :: sfcfsw + type(topfsw_type), dimension(:), intent(inout) :: topfsw character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 index b281d42a7..bb49a9884 100644 --- a/physics/rrtmg_sw_pre.F90 +++ b/physics/rrtmg_sw_pre.F90 @@ -27,9 +27,9 @@ subroutine rrtmg_sw_pre_run (im, lndp_type, n_var_lndp, lsswr, lndp_var_list, ln character(len=3) , dimension(:), intent(in) :: lndp_var_list logical, intent(in) :: lsswr real(kind=kind_phys), dimension(:), intent(in) :: lndp_prt_list - real(kind=kind_phys), dimension(im), intent(in) :: tsfg, tsfa, coszen - real(kind=kind_phys), dimension(im), intent(in) :: alb1d - real(kind=kind_phys), dimension(im), intent(in) :: slmsk, snowd, & + real(kind=kind_phys), dimension(:), intent(in) :: tsfg, tsfa, coszen + real(kind=kind_phys), dimension(:), intent(in) :: alb1d + real(kind=kind_phys), dimension(:), intent(in) :: slmsk, snowd, & sncovr, snoalb, & zorl, hprime, & alvsf, alnsf, & @@ -38,16 +38,16 @@ subroutine rrtmg_sw_pre_run (im, lndp_type, n_var_lndp, lsswr, lndp_var_list, ln fice, tisfc real(kind=kind_phys), dimension(:), intent(in) :: albdvis, albdnir, & albivis, albinir - real(kind=kind_phys), dimension(im), intent(inout) :: sfalb + real(kind=kind_phys), dimension(:), intent(inout) :: sfalb integer, intent(out) :: nday - integer, dimension(im), intent(out) :: idxday - real(kind=kind_phys), dimension(im), intent(out) :: sfcalb1, sfcalb2, & + integer, dimension(:), intent(out) :: idxday + real(kind=kind_phys), dimension(:), intent(out) :: sfcalb1, sfcalb2, & sfcalb3, sfcalb4 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables integer :: i - real(kind=kind_phys), dimension(im,NF_ALBD) :: sfcalb + real(kind=kind_phys), dimension(:,:) :: sfcalb real(kind=kind_phys) :: lndp_alb diff --git a/physics/sfc_cice.f b/physics/sfc_cice.f index 44b3ee2e8..a07759f71 100644 --- a/physics/sfc_cice.f +++ b/physics/sfc_cice.f @@ -98,9 +98,9 @@ subroutine sfc_cice_run & use machine , only : kind_phys implicit none - real(kind=kind_phys), parameter :: one = 1.0_kind_phys - real(kind=kind_phys), parameter :: dsi = one/0.33_kind_phys - real (kind=kind_phys), intent(in) :: hvap, cp, rvrdm1, rd + real(kind=kind_phys), parameter :: one = 1.0_kind_phys + real(kind=kind_phys), parameter :: dsi = one/0.33_kind_phys + real(kind=kind_phys), intent(in) :: hvap, cp, rvrdm1, rd ! --- inputs: integer, intent(in) :: im @@ -111,7 +111,7 @@ subroutine sfc_cice_run & & t1, q1, cm, ch, prsl1, wind, dqsfc, dtsfc, dusfc, dvsfc &, snowd - logical, intent(in) :: flag_cice(im), flag_iter(im) + logical, dimension(:), intent(in) :: flag_cice, flag_iter ! --- outputs: real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 index 606019b61..916144cf5 100644 --- a/physics/sfc_drv_ruc.F90 +++ b/physics/sfc_drv_ruc.F90 @@ -47,25 +47,25 @@ subroutine lsm_ruc_init (me, master, isot, ivegsrc, nlunit, & integer, intent(in) :: lsm_ruc, lsm - real (kind=kind_phys), dimension(im), intent(in) :: slmsk - real (kind=kind_phys), dimension(im), intent(in) :: stype - real (kind=kind_phys), dimension(im), intent(in) :: vtype - real (kind=kind_phys), dimension(im), intent(in) :: tsfc_lnd - real (kind=kind_phys), dimension(im), intent(in) :: tsfc_wat - real (kind=kind_phys), dimension(im), intent(in) :: tg3 + real (kind=kind_phys), dimension(:), intent(in) :: slmsk + real (kind=kind_phys), dimension(:), intent(in) :: stype + real (kind=kind_phys), dimension(:), intent(in) :: vtype + real (kind=kind_phys), dimension(:), intent(in) :: tsfc_lnd + real (kind=kind_phys), dimension(:), intent(in) :: tsfc_wat + real (kind=kind_phys), dimension(:), intent(in) :: tg3 - real (kind=kind_phys), dimension(im,lsoil), intent(in) :: smc,slc,stc + real (kind=kind_phys), dimension(:,:), intent(in) :: smc,slc,stc ! --- in/out: - real (kind=kind_phys), dimension(im), intent(inout) :: wetness + real (kind=kind_phys), dimension(:), intent(inout) :: wetness ! --- out - real (kind=kind_phys), dimension(:), intent(out) :: zs - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: sh2o, smfrkeep - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb, smois - real (kind=kind_phys), dimension(im,kice), intent(out) :: tsice + real (kind=kind_phys), dimension(:), intent(out) :: zs + real (kind=kind_phys), dimension(:,:), intent(inout) :: sh2o, smfrkeep + real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb, smois + real (kind=kind_phys), dimension(:,:), intent(out) :: tsice - real (kind=kind_phys), dimension(:), intent(out) :: pores, resid + real (kind=kind_phys), dimension(:), intent(out) :: pores, resid character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -317,7 +317,7 @@ subroutine lsm_ruc_run & ! inputs integer, intent(in) :: lsm_ruc, lsm integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & t1, sigmaf, laixy, dlwflx, dswsfc, snet, tg3, & & prsl1, wind, shdmin, shdmax, & & snoalb, alvwf, alnwf, zf, qc, q1, & @@ -333,19 +333,19 @@ subroutine lsm_ruc_run & ! inputs con_pi, con_rd, & con_hvap, con_fvirt - logical, dimension(im), intent(in) :: flag_iter, flag_guess - logical, dimension(im), intent(in) :: land, icy, lake - logical, dimension(im), intent(in) :: flag_cice + logical, dimension(:), intent(in) :: flag_iter, flag_guess + logical, dimension(:), intent(in) :: land, icy, lake + logical, dimension(:), intent(in) :: flag_cice logical, intent(in) :: frac_grid logical, intent(in) :: do_mynnsfclay logical, intent(in) :: rdlai ! --- in/out: - integer, dimension(im), intent(inout) :: soiltyp, vegtype - real (kind=kind_phys), dimension(lsoil_ruc), intent(in) :: zs - real (kind=kind_phys), dimension(im), intent(in) :: srflag - real (kind=kind_phys), dimension(im), intent(inout) :: & + integer, dimension(:), intent(inout) :: soiltyp, vegtype + real (kind=kind_phys), dimension(:), intent(in) :: zs + real (kind=kind_phys), dimension(:), intent(in) :: srflag + real (kind=kind_phys), dimension(:), intent(inout) :: & & canopy, trans, smcwlt2, smcref2, & ! for land & weasd_lnd, snwdph_lnd, tskin_lnd, & @@ -357,15 +357,15 @@ subroutine lsm_ruc_run & ! inputs & sfcqc_ice, sfcqv_ice, fice, tice ! --- in - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & rainnc, rainc, ice, snow, graupel ! --- in/out: ! --- on RUC levels - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smois, tsice, tslb, sh2o, keepfr, smfrkeep ! --- output: - real (kind=kind_phys), dimension(im), intent(inout) :: & + real (kind=kind_phys), dimension(:), intent(inout) :: & & rhosnf, runof, drain, runoff, srunoff, evbs, evcw, & & stm, wetness, semis_lnd, semis_ice, & ! for land diff --git a/physics/sfc_noah_wrfv4.F90 b/physics/sfc_noah_wrfv4.F90 index c435b2d38..038adf1c6 100644 --- a/physics/sfc_noah_wrfv4.F90 +++ b/physics/sfc_noah_wrfv4.F90 @@ -94,7 +94,8 @@ end subroutine sfc_noah_wrfv4_finalize !! !> \section general_noah_wrfv4_drv NOAH LSM WRFv4 General Algorithm !> @{ - subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, isurban, rdlai, & + subroutine sfc_noah_wrfv4_run ( & + im, isice, flag_lsm, flag_lsm_glacier, srflag, isurban, rdlai, & ua_phys, usemonalb, aoasis, fasdas, dt, zlvl, & nsoil, sthick, lwdn, soldn, solnet, sfcprs, prcp, sfctmp, q1k, & th1, qs1, dqsdt2, vegtyp, soiltyp, slopetyp, shdfac, shmin, & @@ -118,20 +119,20 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is real(kind=kind_phys), intent(in) :: dt, cp, rd, sigma, cph2o, cpice, lsubf - integer, dimension(im), intent(in) :: vegtyp, soiltyp, slopetyp - logical, dimension(im), intent(in) :: flag_lsm, flag_lsm_glacier - real(kind=kind_phys), dimension(im), intent(in) :: srflag, zlvl, lwdn, soldn, solnet, & + integer, dimension(:), intent(in) :: vegtyp, soiltyp, slopetyp + logical, dimension(:), intent(in) :: flag_lsm, flag_lsm_glacier + real(kind=kind_phys), dimension(:), intent(in) :: srflag, zlvl, lwdn, soldn, solnet, & sfcprs, prcp, sfctmp, q1k, th1, qs1, & dqsdt2, shmin, shmax, snoalb, tbot - real(kind=kind_phys), dimension(nsoil), intent(in) :: sthick + real(kind=kind_phys), dimension(:), intent(in) :: sthick - real(kind=kind_phys), dimension(im), intent(inout) :: shdfac, albbrd, z0brd, z0k, emissi, & + real(kind=kind_phys), dimension(:), intent(inout) :: shdfac, albbrd, z0brd, z0k, emissi, & cmc, t1, snowhk, sneqv, chk, flx1, & flx2, flx3, ribb, snotime - real(kind=kind_phys), dimension(im,nsoil), intent(inout) :: stc, smc, swc + real(kind=kind_phys), dimension(:,:), intent(inout) :: stc, smc, swc !variables that are intent(out) in module_sf_noahlsm, but are inout here due to being set within an IF statement - real(kind=kind_phys), dimension(im), intent(inout) :: embrd, sheat, eta, ec, & + real(kind=kind_phys), dimension(:), intent(inout) :: embrd, sheat, eta, ec, & edir, ett, esnow, etp, ssoil, sncovr, & runoff1, runoff2, soilm, qsurf, smcwlt, & smcref, smcmax diff --git a/physics/sfc_noah_wrfv4_interstitial.F90 b/physics/sfc_noah_wrfv4_interstitial.F90 index b30f8a131..7b37de568 100644 --- a/physics/sfc_noah_wrfv4_interstitial.F90 +++ b/physics/sfc_noah_wrfv4_interstitial.F90 @@ -144,21 +144,21 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & ! Note that the version of NOAH LSM expected here is "generic" - there are no urban, fasdas, or ! or University of Arizona(?) additions. - integer, intent(in) :: im, nsoil, ialb, isice - logical, intent(in) :: restart, first_time_step - real(kind=kind_phys), intent(in) :: dt, rhowater, rd, rvrdm1, eps, epsm1 - - logical, dimension(im), intent(in) :: flag_guess, flag_iter, land - real(kind=kind_phys), dimension(im), intent(in) :: sfcprs, tprcp, sfctmp, q1, prslki, wind, cm, ch, snwdph - real(kind=kind_phys), dimension(im), intent(in) :: weasd, tsfc, vtype - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smc, stc, slc - - logical, dimension(im), intent(inout) :: flag_lsm, flag_lsm_glacier - real(kind=kind_phys), dimension(im), intent(inout) :: snoalb, prcp, q2k, rho1, qs1, th1, dqsdt2, canopy, cmc, snowhk, chk, cmm, chh - real(kind=kind_phys), dimension(im), intent(inout) :: weasd_save, snwdph_save, tsfc_save, canopy_save - real(kind=kind_phys), dimension(im,nsoil), intent(inout) :: smc_save, stc_save, slc_save - real(kind=kind_phys), dimension(im), intent(inout) :: ep, evap, hflx, gflux, drain, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(nsoil), intent(inout) :: sthick + integer, intent(in) :: im, nsoil, ialb, isice + logical, intent(in) :: restart, first_time_step + real(kind=kind_phys), intent(in) :: dt, rhowater, rd, rvrdm1, eps, epsm1 + + logical, dimension(:), intent(in) :: flag_guess, flag_iter, land + real(kind=kind_phys), dimension(:), intent(in) :: sfcprs, tprcp, sfctmp, q1, prslki, wind, cm, ch, snwdph + real(kind=kind_phys), dimension(:), intent(in) :: weasd, tsfc, vtype + real(kind=kind_phys), dimension(:,:), intent(in) :: smc, stc, slc + + logical, dimension(:), intent(inout) :: flag_lsm, flag_lsm_glacier + real(kind=kind_phys), dimension(:), intent(inout) :: snoalb, prcp, q2k, rho1, qs1, th1, dqsdt2, canopy, cmc, snowhk, chk, cmm, chh + real(kind=kind_phys), dimension(:), intent(inout) :: weasd_save, snwdph_save, tsfc_save, canopy_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: smc_save, stc_save, slc_save + real(kind=kind_phys), dimension(:), intent(inout) :: ep, evap, hflx, gflux, drain, evbs, evcw, trans, sbsno, snowc, snohf + real(kind=kind_phys), dimension(:), intent(inout) :: sthick character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -688,17 +688,17 @@ subroutine sfc_noah_wrfv4_post_run (im, nsoil, land, flag_guess, flag_lsm, & implicit none integer, intent(in) :: im, nsoil - logical, dimension(im), intent(in) :: land, flag_guess, flag_lsm + logical, dimension(:), intent(in) :: land, flag_guess, flag_lsm real(kind=kind_phys), intent(in) :: rhowater, cp, hvap - real(kind=kind_phys), dimension(im), intent(in) :: cmc, rho1, sheat, eta, & + real(kind=kind_phys), dimension(:), intent(in) :: cmc, rho1, sheat, eta, & flx1, flx2, flx3, sncovr, runoff1, runoff2, soilm, snowhk - real(kind=kind_phys), dimension(im), intent(in) :: weasd_save, snwdph_save, tsfc_save, tsurf, canopy_save, smcmax - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smc_save, stc_save, slc_save + real(kind=kind_phys), dimension(:), intent(in) :: weasd_save, snwdph_save, tsfc_save, tsurf, canopy_save, smcmax + real(kind=kind_phys), dimension(:,:), intent(in) :: smc_save, stc_save, slc_save - real(kind=kind_phys), dimension(im), intent(inout) :: canopy, shflx, lhflx, & + real(kind=kind_phys), dimension(:), intent(inout) :: canopy, shflx, lhflx, & snohf, snowc, runoff, drain, stm, wet1 - real(kind=kind_phys), dimension(im), intent(inout) :: weasd, snwdph, tsfc - real(kind=kind_phys), dimension(im, nsoil), intent(inout) :: smc, stc, slc + real(kind=kind_phys), dimension(:), intent(inout) :: weasd, snwdph, tsfc + real(kind=kind_phys), dimension(:,:), intent(inout) :: smc, stc, slc character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_noahmp_drv.F90 b/physics/sfc_noahmp_drv.F90 index 392e29071..e7ee1940a 100644 --- a/physics/sfc_noahmp_drv.F90 +++ b/physics/sfc_noahmp_drv.F90 @@ -153,140 +153,141 @@ subroutine noahmpdrv_run & ! --- CCPP interface fields (in call order) ! - integer , intent(in) :: im ! horiz dimension and num of used pts - integer , intent(in) :: km ! vertical soil layer dimension - integer , intent(in) :: itime ! NOT USED - real(kind=kind_phys), dimension(im) , intent(in) :: ps ! surface pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(in) :: u1 ! u-component of wind [m/s] - real(kind=kind_phys), dimension(im) , intent(in) :: v1 ! u-component of wind [m/s] - real(kind=kind_phys), dimension(im) , intent(in) :: t1 ! layer 1 temperature [K] - real(kind=kind_phys), dimension(im) , intent(in) :: q1 ! layer 1 specific humidity [kg/kg] - integer , dimension(im) , intent(in) :: soiltyp ! soil type (integer index) - integer , dimension(im) , intent(in) :: vegtype ! vegetation type (integer index) - real(kind=kind_phys), dimension(im) , intent(in) :: sigmaf ! areal fractional cover of green vegetation - real(kind=kind_phys), dimension(im) , intent(in) :: dlwflx ! downward longwave radiation [W/m2] - real(kind=kind_phys), dimension(im) , intent(in) :: dswsfc ! downward shortwave radiation [W/m2] - real(kind=kind_phys), dimension(im) , intent(in) :: snet ! total sky sfc netsw flx into ground[W/m2] - real(kind=kind_phys) , intent(in) :: delt ! time interval [s] - real(kind=kind_phys), dimension(im) , intent(in) :: tg3 ! deep soil temperature [K] - real(kind=kind_phys), dimension(im) , intent(in) :: cm ! surface exchange coeff for momentum [-] - real(kind=kind_phys), dimension(im) , intent(in) :: ch ! surface exchange coeff heat & moisture[-] - real(kind=kind_phys), dimension(im) , intent(in) :: prsl1 ! sfc layer 1 mean pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(in) :: prslki ! to calculate potential temperature - real(kind=kind_phys), dimension(im) , intent(in) :: zf ! height of bottom layer [m] - logical , dimension(im) , intent(in) :: dry ! = T if a point with any land - real(kind=kind_phys), dimension(im) , intent(in) :: wind ! wind speed [m/s] - integer , dimension(im) , intent(in) :: slopetyp ! surface slope classification - real(kind=kind_phys), dimension(im) , intent(in) :: shdmin ! min green vegetation coverage [fraction] - real(kind=kind_phys), dimension(im) , intent(in) :: shdmax ! max green vegetation coverage [fraction] - real(kind=kind_phys), dimension(im) , intent(in) :: snoalb ! upper bound on max albedo over deep snow - real(kind=kind_phys), dimension(im) , intent(inout) :: sfalb ! mean surface albedo [fraction] - logical , dimension(im) , intent(in) :: flag_iter ! - logical , dimension(im) , intent(in) :: flag_guess ! - integer , intent(in) :: idveg ! option for dynamic vegetation - integer , intent(in) :: iopt_crs ! option for canopy stomatal resistance - integer , intent(in) :: iopt_btr ! option for soil moisture factor for stomatal resistance - integer , intent(in) :: iopt_run ! option for runoff and groundwater - integer , intent(in) :: iopt_sfc ! option for surface layer drag coeff (ch & cm) - integer , intent(in) :: iopt_frz ! option for supercooled liquid water (or ice fraction) - integer , intent(in) :: iopt_inf ! option for frozen soil permeability - integer , intent(in) :: iopt_rad ! option for radiation transfer - integer , intent(in) :: iopt_alb ! option for ground snow surface albedo - integer , intent(in) :: iopt_snf ! option for partitioning precipitation into rainfall & snowfall - integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature - integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) - real(kind=kind_phys), dimension(im) , intent(in) :: xlatin ! latitude - real(kind=kind_phys), dimension(im) , intent(in) :: xcoszin ! cosine of zenith angle - integer , intent(in) :: iyrlen ! year length [days] - real(kind=kind_phys) , intent(in) :: julian ! julian day of year - real(kind=kind_phys), dimension(im) , intent(in) :: rainn_mp ! microphysics non-convective precipitation [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: rainc_mp ! microphysics convective precipitation [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: snow_mp ! microphysics snow [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: graupel_mp ! microphysics graupel [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: ice_mp ! microphysics ice/hail [mm] - real(kind=kind_phys) , intent(in) :: con_hvap ! latent heat condensation [J/kg] - real(kind=kind_phys) , intent(in) :: con_cp ! specific heat air [J/kg/K] - real(kind=kind_phys) , intent(in) :: con_jcal ! joules per calorie (not used) - real(kind=kind_phys) , intent(in) :: rhoh2o ! density of water [kg/m^3] - real(kind=kind_phys) , intent(in) :: con_eps ! Rd/Rv - real(kind=kind_phys) , intent(in) :: con_epsm1 ! Rd/Rv - 1 - real(kind=kind_phys) , intent(in) :: con_fvirt ! Rv/Rd - 1 - real(kind=kind_phys) , intent(in) :: con_rd ! gas constant air [J/kg/K] - real(kind=kind_phys) , intent(in) :: con_hfus ! lat heat H2O fusion [J/kg] - real(kind=kind_phys), dimension(im) , intent(inout) :: weasd ! water equivalent accumulated snow depth [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: snwdph ! snow depth [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: tskin ! ground surface skin temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: tprcp ! total precipitation [m] - real(kind=kind_phys), dimension(im) , intent(inout) :: srflag ! snow/rain flag for precipitation - real(kind=kind_phys), dimension(im,km) , intent(inout) :: smc ! total soil moisture content [m3/m3] - real(kind=kind_phys), dimension(im,km) , intent(inout) :: stc ! soil temp [K] - real(kind=kind_phys), dimension(im,km) , intent(inout) :: slc ! liquid soil moisture [m3/m3] - real(kind=kind_phys), dimension(im) , intent(inout) :: canopy ! canopy moisture content [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: trans ! total plant transpiration [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: tsurf ! surface skin temperature [after iteration] - real(kind=kind_phys), dimension(im) , intent(inout) :: zorl ! surface roughness [cm] - real(kind=kind_phys), dimension(im) , intent(inout) :: snowxy ! actual no. of snow layers - real(kind=kind_phys), dimension(im) , intent(inout) :: tvxy ! vegetation leaf temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: tgxy ! bulk ground surface temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: canicexy ! canopy-intercepted ice [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: canliqxy ! canopy-intercepted liquid water [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: eahxy ! canopy air vapor pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(inout) :: tahxy ! canopy air temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: cmxy ! bulk momentum drag coefficient [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: chxy ! bulk sensible heat exchange coefficient [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: fwetxy ! wetted or snowed fraction of the canopy [-] - real(kind=kind_phys), dimension(im) , intent(inout) :: sneqvoxy ! snow mass at last time step[mm h2o] - real(kind=kind_phys), dimension(im) , intent(inout) :: alboldxy ! snow albedo at last time step [-] - real(kind=kind_phys), dimension(im) , intent(inout) :: qsnowxy ! snowfall on the ground [mm/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: wslakexy ! lake water storage [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: zwtxy ! water table depth [m] - real(kind=kind_phys), dimension(im) , intent(inout) :: waxy ! water in the "aquifer" [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: wtxy ! groundwater storage [mm] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: tsnoxy ! snow temperature [K] - real(kind=kind_phys), dimension(im,-2:4), intent(inout) :: zsnsoxy ! snow/soil layer depth [m] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: snicexy ! snow layer ice [mm] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: snliqxy ! snow layer liquid water [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: lfmassxy ! leaf mass [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: rtmassxy ! mass of fine roots [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: stmassxy ! stem mass [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: woodxy ! mass of wood (incl. woody roots) [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: stblcpxy ! stable carbon in deep soil [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: fastcpxy ! short-lived carbon, shallow soil [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: xlaixy ! leaf area index [m2/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: xsaixy ! stem area index [m2/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: taussxy ! snow age factor [-] - real(kind=kind_phys), dimension(im,1:4) , intent(inout) :: smoiseq ! eq volumetric soil moisture [m3/m3] - real(kind=kind_phys), dimension(im) , intent(inout) :: smcwtdxy ! soil moisture content in the layer to the water table when deep - real(kind=kind_phys), dimension(im) , intent(inout) :: deeprechxy ! recharge to the water table when deep - real(kind=kind_phys), dimension(im) , intent(inout) :: rechxy ! recharge to the water table - real(kind=kind_phys), dimension(im) , intent(out) :: albdvis ! albedo - direct visible [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albdnir ! albedo - direct NIR [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albivis ! albedo - diffuse visible [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albinir ! albedo - diffuse NIR [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: emiss ! sfc lw emissivity [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: sncovr1 ! snow cover over land [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: qsurf ! specific humidity at sfc [kg/kg] - real(kind=kind_phys), dimension(im) , intent(out) :: gflux ! soil heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: drain ! subsurface runoff [mm/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evap ! total latent heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: hflx ! sensible heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: ep ! potential evaporation [mm/s?] - real(kind=kind_phys), dimension(im) , intent(out) :: runoff ! surface runoff [mm/s] - real(kind=kind_phys), dimension(im) , intent(out) :: cmm ! cm*U [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: chh ! ch*U*rho [kg/m2/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evbs ! direct soil evaporation [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evcw ! canopy water evaporation [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: sbsno ! sublimation/deposit from snopack [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: snowc ! fractional snow cover [-] - real(kind=kind_phys), dimension(im) , intent(out) :: stm ! total soil column moisture content [mm] - real(kind=kind_phys), dimension(im) , intent(out) :: snohf ! snow/freezing-rain latent heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: smcwlt2 ! dry soil moisture threshold [m3/m3] - real(kind=kind_phys), dimension(im) , intent(out) :: smcref2 ! soil moisture threshold [m3/m3] - real(kind=kind_phys), dimension(im) , intent(out) :: wet1 ! normalized surface soil saturated fraction - real(kind=kind_phys), dimension(im) , intent(out) :: t2mmp ! combined T2m from tiles - real(kind=kind_phys), dimension(im) , intent(out) :: q2mp ! combined q2m from tiles - character(len=*) , intent(out) :: errmsg - integer , intent(out) :: errflg + integer , intent(in) :: im ! horiz dimension and num of used pts + integer , intent(in) :: km ! vertical soil layer dimension + integer, , intent(in) :: lsnowl ! lower bound for snow level arrays + integer , intent(in) :: itime ! NOT USED + real(kind=kind_phys), dimension(:) , intent(in) :: ps ! surface pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(in) :: u1 ! u-component of wind [m/s] + real(kind=kind_phys), dimension(:) , intent(in) :: v1 ! u-component of wind [m/s] + real(kind=kind_phys), dimension(:) , intent(in) :: t1 ! layer 1 temperature [K] + real(kind=kind_phys), dimension(:) , intent(in) :: q1 ! layer 1 specific humidity [kg/kg] + integer , dimension(:) , intent(in) :: soiltyp ! soil type (integer index) + integer , dimension(:) , intent(in) :: vegtype ! vegetation type (integer index) + real(kind=kind_phys), dimension(:) , intent(in) :: sigmaf ! areal fractional cover of green vegetation + real(kind=kind_phys), dimension(:) , intent(in) :: dlwflx ! downward longwave radiation [W/m2] + real(kind=kind_phys), dimension(:) , intent(in) :: dswsfc ! downward shortwave radiation [W/m2] + real(kind=kind_phys), dimension(:) , intent(in) :: snet ! total sky sfc netsw flx into ground[W/m2] + real(kind=kind_phys) , intent(in) :: delt ! time interval [s] + real(kind=kind_phys), dimension(:) , intent(in) :: tg3 ! deep soil temperature [K] + real(kind=kind_phys), dimension(:) , intent(in) :: cm ! surface exchange coeff for momentum [-] + real(kind=kind_phys), dimension(:) , intent(in) :: ch ! surface exchange coeff heat & moisture[-] + real(kind=kind_phys), dimension(:) , intent(in) :: prsl1 ! sfc layer 1 mean pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(in) :: prslki ! to calculate potential temperature + real(kind=kind_phys), dimension(:) , intent(in) :: zf ! height of bottom layer [m] + logical , dimension(:) , intent(in) :: dry ! = T if a point with any land + real(kind=kind_phys), dimension(:) , intent(in) :: wind ! wind speed [m/s] + integer , dimension(:) , intent(in) :: slopetyp ! surface slope classification + real(kind=kind_phys), dimension(:) , intent(in) :: shdmin ! min green vegetation coverage [fraction] + real(kind=kind_phys), dimension(:) , intent(in) :: shdmax ! max green vegetation coverage [fraction] + real(kind=kind_phys), dimension(:) , intent(in) :: snoalb ! upper bound on max albedo over deep snow + real(kind=kind_phys), dimension(:) , intent(inout) :: sfalb ! mean surface albedo [fraction] + logical , dimension(:) , intent(in) :: flag_iter ! + logical , dimension(:) , intent(in) :: flag_guess ! + integer , intent(in) :: idveg ! option for dynamic vegetation + integer , intent(in) :: iopt_crs ! option for canopy stomatal resistance + integer , intent(in) :: iopt_btr ! option for soil moisture factor for stomatal resistance + integer , intent(in) :: iopt_run ! option for runoff and groundwater + integer , intent(in) :: iopt_sfc ! option for surface layer drag coeff (ch & cm) + integer , intent(in) :: iopt_frz ! option for supercooled liquid water (or ice fraction) + integer , intent(in) :: iopt_inf ! option for frozen soil permeability + integer , intent(in) :: iopt_rad ! option for radiation transfer + integer , intent(in) :: iopt_alb ! option for ground snow surface albedo + integer , intent(in) :: iopt_snf ! option for partitioning precipitation into rainfall & snowfall + integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature + integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) + real(kind=kind_phys), dimension(;) , intent(in) :: xlatin ! latitude + real(kind=kind_phys), dimension(;) , intent(in) :: xcoszin ! cosine of zenith angle + integer , intent(in) :: iyrlen ! year length [days] + real(kind=kind_phys) , intent(in) :: julian ! julian day of year + real(kind=kind_phys), dimension(:) , intent(in) :: rainn_mp ! microphysics non-convective precipitation [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: rainc_mp ! microphysics convective precipitation [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: snow_mp ! microphysics snow [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: graupel_mp ! microphysics graupel [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: ice_mp ! microphysics ice/hail [mm] + real(kind=kind_phys) , intent(in) :: con_hvap ! latent heat condensation [J/kg] + real(kind=kind_phys) , intent(in) :: con_cp ! specific heat air [J/kg/K] + real(kind=kind_phys) , intent(in) :: con_jcal ! joules per calorie (not used) + real(kind=kind_phys) , intent(in) :: rhoh2o ! density of water [kg/m^3] + real(kind=kind_phys) , intent(in) :: con_eps ! Rd/Rv + real(kind=kind_phys) , intent(in) :: con_epsm1 ! Rd/Rv - 1 + real(kind=kind_phys) , intent(in) :: con_fvirt ! Rv/Rd - 1 + real(kind=kind_phys) , intent(in) :: con_rd ! gas constant air [J/kg/K] + real(kind=kind_phys) , intent(in) :: con_hfus ! lat heat H2O fusion [J/kg] + real(kind=kind_phys), dimension(:) , intent(inout) :: weasd ! water equivalent accumulated snow depth [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: snwdph ! snow depth [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: tskin ! ground surface skin temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: tprcp ! total precipitation [m] + real(kind=kind_phys), dimension(:) , intent(inout) :: srflag ! snow/rain flag for precipitation + real(kind=kind_phys), dimension(:,:) , intent(inout) :: smc ! total soil moisture content [m3/m3] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: stc ! soil temp [K] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: slc ! liquid soil moisture [m3/m3] + real(kind=kind_phys), dimension(:) , intent(inout) :: canopy ! canopy moisture content [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: trans ! total plant transpiration [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: tsurf ! surface skin temperature [after iteration] + real(kind=kind_phys), dimension(:) , intent(inout) :: zorl ! surface roughness [cm] + real(kind=kind_phys), dimension(:) , intent(inout) :: snowxy ! actual no. of snow layers + real(kind=kind_phys), dimension(:) , intent(inout) :: tvxy ! vegetation leaf temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: tgxy ! bulk ground surface temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: canicexy ! canopy-intercepted ice [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: canliqxy ! canopy-intercepted liquid water [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: eahxy ! canopy air vapor pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(inout) :: tahxy ! canopy air temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: cmxy ! bulk momentum drag coefficient [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: chxy ! bulk sensible heat exchange coefficient [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: fwetxy ! wetted or snowed fraction of the canopy [-] + real(kind=kind_phys), dimension(:) , intent(inout) :: sneqvoxy ! snow mass at last time step[mm h2o] + real(kind=kind_phys), dimension(:) , intent(inout) :: alboldxy ! snow albedo at last time step [-] + real(kind=kind_phys), dimension(:) , intent(inout) :: qsnowxy ! snowfall on the ground [mm/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: wslakexy ! lake water storage [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: zwtxy ! water table depth [m] + real(kind=kind_phys), dimension(:) , intent(inout) :: waxy ! water in the "aquifer" [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: wtxy ! groundwater storage [mm] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: tsnoxy ! snow temperature [K] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: zsnsoxy ! snow/soil layer depth [m] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: snicexy ! snow layer ice [mm] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: snliqxy ! snow layer liquid water [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: lfmassxy ! leaf mass [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: rtmassxy ! mass of fine roots [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: stmassxy ! stem mass [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: woodxy ! mass of wood (incl. woody roots) [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: stblcpxy ! stable carbon in deep soil [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: fastcpxy ! short-lived carbon, shallow soil [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: xlaixy ! leaf area index [m2/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: xsaixy ! stem area index [m2/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: taussxy ! snow age factor [-] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: smoiseq ! eq volumetric soil moisture [m3/m3] + real(kind=kind_phys), dimension(:) , intent(inout) :: smcwtdxy ! soil moisture content in the layer to the water table when deep + real(kind=kind_phys), dimension(:) , intent(inout) :: deeprechxy ! recharge to the water table when deep + real(kind=kind_phys), dimension(:) , intent(inout) :: rechxy ! recharge to the water table + real(kind=kind_phys), dimension(:) , intent(out) :: albdvis ! albedo - direct visible [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albdnir ! albedo - direct NIR [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albivis ! albedo - diffuse visible [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albinir ! albedo - diffuse NIR [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: emiss ! sfc lw emissivity [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: sncovr1 ! snow cover over land [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: qsurf ! specific humidity at sfc [kg/kg] + real(kind=kind_phys), dimension(:) , intent(out) :: gflux ! soil heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: drain ! subsurface runoff [mm/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evap ! total latent heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: hflx ! sensible heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: ep ! potential evaporation [mm/s?] + real(kind=kind_phys), dimension(:) , intent(out) :: runoff ! surface runoff [mm/s] + real(kind=kind_phys), dimension(:) , intent(out) :: cmm ! cm*U [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: chh ! ch*U*rho [kg/m2/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evbs ! direct soil evaporation [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evcw ! canopy water evaporation [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: sbsno ! sublimation/deposit from snopack [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: snowc ! fractional snow cover [-] + real(kind=kind_phys), dimension(:) , intent(out) :: stm ! total soil column moisture content [mm] + real(kind=kind_phys), dimension(:) , intent(out) :: snohf ! snow/freezing-rain latent heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: smcwlt2 ! dry soil moisture threshold [m3/m3] + real(kind=kind_phys), dimension(:) , intent(out) :: smcref2 ! soil moisture threshold [m3/m3] + real(kind=kind_phys), dimension(:) , intent(out) :: wet1 ! normalized surface soil saturated fraction + real(kind=kind_phys), dimension(:) , intent(out) :: t2mmp ! combined T2m from tiles + real(kind=kind_phys), dimension(:) , intent(out) :: q2mp ! combined q2m from tiles + character(len=*) , intent(out) :: errmsg + integer , intent(out) :: errflg ! ! --- some new options, hard code for now @@ -339,11 +340,11 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(im, km) :: stc_old real(kind=kind_phys), dimension(im, km) :: slc_old real(kind=kind_phys), dimension(im, km) :: smoiseq_old - real(kind=kind_phys), dimension(im,-2: 0) :: tsno_old - real(kind=kind_phys), dimension(im,-2: 0) :: snice_old - real(kind=kind_phys), dimension(im,-2: 0) :: snliq_old - real(kind=kind_phys), dimension(im,-2:km) :: zsnso_old - real(kind=kind_phys), dimension(im,-2:km) :: tsnso_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: tsno_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: snice_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: snliq_old + real(kind=kind_phys), dimension(im,lsnowl:km) :: zsnso_old + real(kind=kind_phys), dimension(im,lsnowl:km) :: tsnso_old ! ! --- local inputs to noah-mp and glacier subroutines; listed in order in noah-mp call diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index f1dbbf1ad..0674e9cc3 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -93,6 +93,14 @@ type = integer intent = in optional = F +[lsnowl] + standard_name = lower_bound_of_snow_vertical_dimension_for_land_surface_model + long_name = lower bound of of snow-related arrays for land surface model + units = count + dimensions = () + type = integer + intent = in + optional = F [itime] standard_name = index_of_time_step long_name = current forecast iteration diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index bb28c6275..7a2dd9e09 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -787,20 +787,19 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, icy + logical, dimension(:), intent(in) :: wet, icy real (kind=kind_phys), intent(in) :: rlapse, tgice - real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf + real (kind=kind_phys), dimension(:), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 - real (kind=kind_phys), dimension(im), intent(in) :: xt, xz, & + real (kind=kind_phys), dimension(:), intent(in) :: xt, xz, & & dt_cool, z_c, tref, xlon ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: tsurf_wat, & + real (kind=kind_phys), dimension(:), intent(inout) :: tsurf_wat, & & tsfc_wat ! --- outputs: - real (kind=kind_phys), dimension(size(xlon,1)), intent(out) :: & - & dtzm + real (kind=kind_phys), dimension(:), intent(out) :: dtzm character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 index f186c7bec..14fc6b49d 100644 --- a/physics/shinhongvdif.F90 +++ b/physics/shinhongvdif.F90 @@ -111,33 +111,33 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & logical, intent(in ) :: lssav, ldiag3d, qdiag3d, & flag_for_pbl_generic_tend ! 3D in - real(kind=kind_phys), dimension(:,:) , & + real(kind=kind_phys), dimension(:,:) , & intent(in ) :: phil, & pi2d, & p2d, & ux, & vx, & tx - real(kind=kind_phys), dimension( im, km, ntrac ) , & + real(kind=kind_phys), dimension(:,:,:) , & intent(in ) :: qx - real(kind=kind_phys), dimension( :,: ) , & + real(kind=kind_phys), dimension(:,:) , & intent(in ) :: p2di, & phii ! 3D in&out - real(kind=kind_phys), dimension(:,:) , & + real(kind=kind_phys), dimension(:,:) , & intent(inout) :: utnp, & vtnp, & ttnp - real(kind=kind_phys), dimension(:,:, : ) , & + real(kind=kind_phys), dimension(:,:,:) , & intent(inout) :: qtnp - real(kind=kind_phys), dimension(:,:) , & + real(kind=kind_phys), dimension(:,:) , & intent(inout) :: du3dt_PBL, dv3dt_PBL, dt3dt_PBL, dq3dt_PBL, do3dt_PBL ! 2D in - integer, dimension(:) , & + integer, dimension(:) , & intent(in ) :: landmask - real(kind=kind_phys), dimension(:) , & + real(kind=kind_phys), dimension(:) , & intent(in ) :: heat, & evap, & br, & @@ -151,10 +151,10 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & v10, & dx ! 2D: out - integer, dimension(:) , & + integer, dimension(:) , & intent(out ) :: kpbl1d - real(kind=kind_phys), dimension(:) , & + real(kind=kind_phys), dimension(:) , & intent(out ) :: hpbl, & dusfc, & dvsfc, & diff --git a/physics/ugwpv1_gsldrag.F90 b/physics/ugwpv1_gsldrag.F90 index 649d994a8..c06fb067f 100644 --- a/physics/ugwpv1_gsldrag.F90 +++ b/physics/ugwpv1_gsldrag.F90 @@ -84,15 +84,15 @@ subroutine ugwpv1_gsldrag_init ( & integer, intent (in) :: nlunit character(len=*), intent (in) :: input_nml_file(:) integer, intent (in) :: logunit - integer, intent(in) :: jdat(8) + integer, intent (in) :: jdat(:) integer, intent (in) :: lonr integer, intent (in) :: levs integer, intent (in) :: latr - real(kind=kind_phys), intent (in) :: ak(levs+1), bk(levs+1) + real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp real(kind=kind_phys), intent (in) :: con_p0, con_pi, con_rerth - real(kind=kind_phys), intent(in) :: con_g, con_cp, con_rd, con_rv, con_omega, con_fvirt + real(kind=kind_phys), intent (in) :: con_g, con_cp, con_rd, con_rv, con_omega, con_fvirt logical, intent (in) :: do_ugwp logical, intent (in) :: do_ugwp_v0, do_ugwp_v0_orog_only, & @@ -308,7 +308,6 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ldiag3d, lssav, flag_for_gwd_generic_tend, do_gsl_drag_ls_bl, do_gsl_drag_ss, & do_gsl_drag_tofd, do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, & gwd_opt, do_tofd, ldiag_ugwp, cdmbgwd, jdat, & -! con_g, con_omega, con_pi, con_cp, con_rd, con_rv, con_rerth, con_fvirt, & nmtvr, hprime, oc, theta, sigma, gamma, elvmax, clx, oa4, & varss,oc1ss,oa4ss,ol4ss, dx, xlat, xlat_d, sinlat, coslat, area, & rain, br1, hpbl, kpbl, slmsk, & @@ -318,10 +317,10 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd dudt_oss, dvdt_oss, du_osscol, dv_osscol, & dudt_ofd, dvdt_ofd, du_ofdcol, dv_ofdcol, & dudt_ngw, dvdt_ngw, dtdt_ngw, kdis_ngw, dudt_gw, dvdt_gw, dtdt_gw, kdis_gw, & - tau_ogw, tau_ngw, tau_oss, & + tau_ogw, tau_ngw, tau_oss, & zogw, zlwb, zobl, zngw, dusfcg, dvsfcg, dudt, dvdt, dtdt, rdxzb, & ldu3dt_ogw, ldv3dt_ogw, ldt3dt_ogw, ldu3dt_ngw, ldv3dt_ngw, ldt3dt_ngw, & - lprnt, ipr, errmsg, errflg) + lprnt, ipr, errmsg, errflg) ! !######################################################################## ! Attention New Arrays and Names must be ADDED inside @@ -364,20 +363,20 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd integer, intent(in) :: me, master, im, levs, ntrac,lonr real(kind=kind_phys), intent(in) :: dtp, fhzero - integer, intent(in) :: kdt, jdat(8) + integer, intent(in) :: kdt, jdat(:) ! SSO parameters and variables integer, intent(in) :: gwd_opt !gwd_opt and nmtvr are "redundant" controls integer, intent(in) :: nmtvr - real(kind=kind_phys), intent(in) :: cdmbgwd(4) ! for gsl_drag + real(kind=kind_phys), intent(in) :: cdmbgwd(:) ! for gsl_drag - real(kind=kind_phys), intent(in), dimension(im) :: hprime, oc, theta, sigma, gamma + real(kind=kind_phys), intent(in), dimension(:) :: hprime, oc, theta, sigma, gamma - real(kind=kind_phys), intent(in), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:,:) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: varss,oc1ss,dx - real(kind=kind_phys), intent(in), dimension(im, 4) :: oa4ss,ol4ss + real(kind=kind_phys), intent(in), dimension(:) :: varss,oc1ss,dx + real(kind=kind_phys), intent(in), dimension(:,:) :: oa4ss,ol4ss !===== !ccpp-style passing constants, I prefer to take them out from the "call-subr" list @@ -386,48 +385,48 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ! con_rv, con_rerth, con_fvirt ! grids - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area ! State vars + PBL/slmsk +rain - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs) :: q1 - integer, intent(in), dimension(im) :: kpbl + real(kind=kind_phys), intent(in), dimension(:,:) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:,:) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:) :: q1 + integer, intent(in), dimension(:) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: rain - real(kind=kind_phys), intent(in), dimension(im) :: br1, hpbl, slmsk + real(kind=kind_phys), intent(in), dimension(:) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: br1, hpbl, slmsk ! ! moved to GFS_phys_time_vary -! real(kind=kind_phys), intent(in), dimension(im) :: ddy_j1tau, ddy_j2tau -! integer, intent(in), dimension(im) :: jindx1_tau, jindx2_tau - real(kind=kind_phys), intent(in), dimension(im) :: tau_amf +! real(kind=kind_phys), intent(in), dimension(:) :: ddy_j1tau, ddy_j2tau +! integer, intent(in), dimension(:) :: jindx1_tau, jindx2_tau + real(kind=kind_phys), intent(in), dimension(:) :: tau_amf !Output (optional): - real(kind=kind_phys), intent(out), dimension(im) :: & + real(kind=kind_phys), intent(out), dimension(:) :: & du_ogwcol, dv_ogwcol, du_oblcol, dv_oblcol, & du_osscol, dv_osscol, du_ofdcol, dv_ofdcol ! ! we may add later but due to launch in the upper layes ~ mPa comparing to ORO Pa*(0.1) ! du_ngwcol, dv_ngwcol - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: tau_ogw, tau_ngw, tau_oss + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: tau_ogw, tau_ngw, tau_oss - real(kind=kind_phys), intent(out) , dimension(im, levs) :: & + real(kind=kind_phys), intent(out) , dimension(:,:) :: & dudt_ogw, dvdt_ogw, dudt_obl, dvdt_obl, & dudt_oss, dvdt_oss, dudt_ofd, dvdt_ofd - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dudt_ngw, dvdt_ngw, kdis_ngw - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dudt_gw, dvdt_gw, kdis_gw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dudt_ngw, dvdt_ngw, kdis_ngw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dudt_gw, dvdt_gw, kdis_gw - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dtdt_ngw, dtdt_gw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dtdt_ngw, dtdt_gw - real(kind=kind_phys), intent(out) , dimension(im) :: zogw, zlwb, zobl, zngw + real(kind=kind_phys), intent(out) , dimension(:) :: zogw, zlwb, zobl, zngw ! ! - real(kind=kind_phys), intent(inout), dimension(im, levs) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dudt, dvdt, dtdt ! ! These arrays are only allocated if ldiag=.true. @@ -439,7 +438,7 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd - real(kind=kind_phys), intent(out), dimension(im) :: rdxzb ! for stoch phys. mtb-level + real(kind=kind_phys), intent(out), dimension(:) :: rdxzb ! for stoch phys. mtb-level character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/unified_ugwp.F90 b/physics/unified_ugwp.F90 index 7fdc43b2b..64b923021 100644 --- a/physics/unified_ugwp.F90 +++ b/physics/unified_ugwp.F90 @@ -74,13 +74,13 @@ subroutine unified_ugwp_init (me, master, nlunit, input_nml_file, logunit, & integer, intent (in) :: nlunit character(len=*), intent (in) :: input_nml_file(:) integer, intent (in) :: logunit - integer, intent(in) :: jdat(8) + integer, intent (in) :: jdat(:) integer, intent (in) :: lonr integer, intent (in) :: levs integer, intent (in) :: latr real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp - real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes + real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in real(kind=kind_phys), intent (in) :: con_p0, con_pi, con_rerth logical, intent (in) :: do_ugwp @@ -216,25 +216,25 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, ! interface variables integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr integer, intent(in) :: gwd_opt - integer, intent(in), dimension(im) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma - real(kind=kind_phys), intent(in), dimension(im) :: varss,oc1ss, dx + integer, intent(in), dimension(:) :: kpbl + real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma + real(kind=kind_phys), intent(in), dimension(:) :: varss,oc1ss, dx !vay-nov 2020 - real(kind=kind_phys), intent(in), dimension(im,4) :: oa4ss,ol4ss + real(kind=kind_phys), intent(in), dimension(:,:) :: oa4ss,ol4ss - logical, intent(in) :: flag_for_gwd_generic_tend + logical, intent(in) :: flag_for_gwd_generic_tend ! elvmax is intent(in) for CIRES UGWPv1, but intent(inout) for GFS GWDPS - real(kind=kind_phys), intent(inout), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs) :: q1 - real(kind=kind_phys), intent(in) :: dtp, fhzero, cdmbgwd(4) - integer, intent(in) :: jdat(8) + real(kind=kind_phys), intent(inout), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:,:) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:,:) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:,:) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:) :: q1 + real(kind=kind_phys), intent(in) :: dtp, fhzero, cdmbgwd(:) + integer, intent(in) :: jdat(:) logical, intent(in) :: do_tofd, ldiag_ugwp !Output (optional): @@ -248,14 +248,14 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, & dtaux2d_ss(:,:),dtauy2d_ss(:,:), & & dtaux2d_fd(:,:),dtauy2d_fd(:,:) - real(kind=kind_phys), intent(in) :: br1(im), & - & hpbl(im), & - & slmsk(im) + real(kind=kind_phys), intent(in) :: br1(:), & + & hpbl(:), & + & slmsk(:) - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb - real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw - real(kind=kind_phys), intent(out), dimension(im, levs) :: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb + real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw + real(kind=kind_phys), intent(out), dimension(:,:) :: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis real(kind=kind_phys), intent(out), dimension(:,:) :: dudt_mtb, dudt_tms real(kind=kind_phys), intent(out), dimension(:,:) :: dtaux2d_ls, dtauy2d_ls @@ -267,12 +267,12 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, ! These arrays only allocated if ldiag_ugwp = .true. real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:,:):: dudt, dvdt, dtdt real(kind=kind_phys), intent(in) :: con_g, con_omega, con_pi, con_cp, con_rd, & con_rv, con_rerth, con_fvirt - real(kind=kind_phys), intent(in), dimension(im) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: rain integer, intent(in) :: ntke real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke From 52bf572a7ed80fc9bf94026882282ed15492e941 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 7 Apr 2021 14:24:35 -0600 Subject: [PATCH 055/119] Bugfix for precipitation quantities, fix Fortran/metadata inconsistencies, use assumed-size arrays --- physics/mp_thompson.F90 | 20 ++++++++++---------- physics/mp_thompson.meta | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index cb4fbfffd..23533fbd6 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -370,11 +370,11 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(in ) :: omega(:,:) real(kind_phys), intent(in ) :: dtp ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip - real(kind_phys), intent( out) :: prcp(:) - real(kind_phys), intent( out) :: rain(:) - real(kind_phys), intent( out) :: graupel(:) - real(kind_phys), intent( out) :: ice(:) - real(kind_phys), intent( out) :: snow(:) + real(kind_phys), intent(inout) :: prcp(:) + real(kind_phys), intent(inout) :: rain(:) + real(kind_phys), intent(inout) :: graupel(:) + real(kind_phys), intent(inout) :: ice(:) + real(kind_phys), intent(inout) :: snow(:) real(kind_phys), intent( out) :: sr(:) ! Radar reflectivity real(kind_phys), intent( out) :: refl_10cm(:,:) @@ -610,11 +610,11 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & !> - Convert rainfall deltas from mm to m (on physics timestep); add to inout variables ! "rain" in Thompson MP refers to precipitation (total of liquid rainfall+snow+graupel+ice) - prcp = max(0.0, delta_rain_mp/1000.0_kind_phys) - graupel = max(0.0, delta_graupel_mp/1000.0_kind_phys) - ice = max(0.0, delta_ice_mp/1000.0_kind_phys) - snow = max(0.0, delta_snow_mp/1000.0_kind_phys) - rain = max(0.0, (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) + prcp = max(0.0, prcp + delta_rain_mp/1000.0_kind_phys) + graupel = max(0.0, graupel + delta_graupel_mp/1000.0_kind_phys) + ice = max(0.0, ice + delta_ice_mp/1000.0_kind_phys) + snow = max(0.0, snow + delta_snow_mp/1000.0_kind_phys) + rain = max(0.0, rain + (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) end subroutine mp_thompson_run !>@} diff --git a/physics/mp_thompson.meta b/physics/mp_thompson.meta index 7f1e9197e..237890024 100644 --- a/physics/mp_thompson.meta +++ b/physics/mp_thompson.meta @@ -250,7 +250,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [re_ice] standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um @@ -259,7 +259,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [re_snow] standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um @@ -268,7 +268,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [mpicomm] standard_name = mpi_comm From 56c8d3a267f337b32716a491bb23a8095bf4dd2b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 9 Apr 2021 08:34:01 -0600 Subject: [PATCH 056/119] Do not use OpenMP in physics/aerinterp.F90 with gfortran (compatibility issue) --- physics/aerinterp.F90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/physics/aerinterp.F90 b/physics/aerinterp.F90 index 6ea8af7f4..25472632f 100644 --- a/physics/aerinterp.F90 +++ b/physics/aerinterp.F90 @@ -314,7 +314,7 @@ SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & tx2 = 1.0 - tx1 if (n2 > 12) n2 = n2 -12 -! +#ifndef __GFORTRAN__ !$OMP parallel num_threads(nthrds) default(none) & !$OMP shared(npts,ntrcaer,aerin,aer_pres,prsl) & !$OMP shared(ddx,ddy,jindx1,jindx2,iindx1,iindx2) & @@ -323,6 +323,7 @@ SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & !$OMP copyin(tx1,tx2) firstprivate(tx1,tx2) !$OMP do +#endif DO L=1,levsaer DO J=1,npts J1 = JINDX1(J) @@ -346,10 +347,12 @@ SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & +TEMI*DDY(j)*aer_pres(I1,J2,L,n2)+DDX(j)*TEMJ*aer_pres(I2,J1,L,n2)) ENDDO ENDDO +#ifndef __GFORTRAN__ !$OMP end do ! don't flip, input is the same direction as GFS (bottom-up) !$OMP do +#endif DO J=1,npts DO L=1,lev if(prsl(j,L).ge.aerpres(j,1)) then @@ -378,9 +381,11 @@ SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & endif ENDDO !L-loop ENDDO !J-loop +#ifndef __GFORTRAN__ !$OMP end do !$OMP end parallel +#endif RETURN END SUBROUTINE aerinterpol From 6b997420d4f40a29e2b4c40db9429a62b52dcfc5 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 9 Apr 2021 08:34:32 -0600 Subject: [PATCH 057/119] Bugfix in physics/GFS_phys_time_vary.fv3.F90, add missing 'if (iaerclm)' condition --- physics/GFS_phys_time_vary.fv3.F90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index cf489c571..0f53edc35 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -379,8 +379,11 @@ subroutine GFS_phys_time_vary_init ( if (errflg/=0) return - call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & - idate, errmsg, errflg) + if (iaerclm) then + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) + if (errflg/=0) return + end if if (lsm == lsm_noahmp) then if (all(tvxy < zero)) then From ead8bd6194a771a19b34a0579e722ca1b0c29bae Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 9 Apr 2021 14:56:02 +0000 Subject: [PATCH 058/119] Bugfixes for GP/ThompsonMP coupling --- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 2 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index 73a1b9474..1ad7c3da9 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -206,7 +206,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do cld_rerain(1:nCol,1:nLev) = rerain_def ! Compute cloud-fraction. Else, use cld_frac passes through un-touched. Handled in sgs_cloudpre. - if(.not. do_mynnedmf .or. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv + if(.not. do_mynnedmf .and. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) if(.not. lmfshal) alpha0 = 2000. ! Xu-Randall (1996) cloud-fraction diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index b3040fc1a..849e8822c 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -290,10 +290,10 @@ intent = in optional = F [tracer] - standard_name = chemical_tracers - long_name = chemical tracers - units = g g-1 - dimensions = (horizontal_dimension,vertical_dimension,number_of_tracers) + standard_name = tracer_concentration + long_name = model layer mean tracer concentration + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) type = real kind = kind_phys intent = in From fdcff10ac1495e9885fdc884a47ace4f5b6cfc2b Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 9 Apr 2021 10:00:59 -0600 Subject: [PATCH 059/119] fix bug in UGWPv0 where it was using the wrong arguments in a oro_wam_2017() call; also cires_orowam2017.F90 appears to be a duplicate and is not used by any scheme --- physics/cires_orowam2017.F90 | 354 ----------------------------------- physics/ugwp_driver_v0.F | 1 - 2 files changed, 355 deletions(-) delete mode 100644 physics/cires_orowam2017.F90 diff --git a/physics/cires_orowam2017.F90 b/physics/cires_orowam2017.F90 deleted file mode 100644 index d5fda5cc0..000000000 --- a/physics/cires_orowam2017.F90 +++ /dev/null @@ -1,354 +0,0 @@ -module cires_orowam2017 - - -contains - - - subroutine oro_wam_2017(im, levs,npt,ipt, kref,kdt,me,master, & - & dtp,dxres, taub, u1, v1, t1, xn, yn, bn2, rho, prsi, prsL, & - & grav, omega, con_rd, del, sigma, hprime, gamma, theta, & - & sinlat, xlatd, taup, taud, pkdis) -! - USE MACHINE , ONLY : kind_phys -! - implicit none - - integer :: im, levs - integer :: npt - integer :: kdt, me, master - integer :: kref(im), ipt(im) - real(kind=kind_phys), intent(in) :: dtp, dxres - real(kind=kind_phys), intent(in) :: taub(im) - - real(kind=kind_phys), intent(in) :: sinlat(im), xlatd(im) - real(kind=kind_phys), intent(in), dimension(im) :: sigma, & - & hprime, gamma, theta - - real(kind=kind_phys), intent(in), dimension(im) :: xn, yn - - real(kind=kind_phys), intent(in), dimension(im, levs) :: & - & u1, v1, t1, bn2, rho, prsl, del - real(kind=kind_phys), intent(in) :: grav, omega, con_rd - - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi -! -! out : taup, taud, pkdis -! - real(kind=kind_phys), intent(inout), dimension(im, levs+1) :: taup - real(kind=kind_phys), intent(inout), dimension(im, levs) :: taud - real(kind=kind_phys), intent(inout), dimension(im, levs) :: pkdis - real(kind=kind_phys) :: belps, aelps, nhills, selps -! -! multiwave oro-spectra -! locals -! - integer :: i, j, k, isp, iw - - integer, parameter :: nworo = 30 - real(kind=kind_phys), parameter :: fc_flag = 0.0 - real(kind=kind_phys), parameter :: mkzmin = 6.28e-3/50.0 - real(kind=kind_phys), parameter :: mkz2min = mkzmin* mkzmin - real(kind=kind_phys), parameter :: kedmin = 1.e-3 - real(kind=kind_phys), parameter :: kedmax = 350.,axmax=250.e-5 - real(kind=kind_phys), parameter :: rtau = 0.01 ! nonlin-OGW scale 1/10sec - real(kind=kind_phys), parameter :: Linsat2 =0.5 - real(kind=kind_phys), parameter :: kxmin = 6.28e-3/100. - real(kind=kind_phys), parameter :: kxmax = 6.28e-3/5.0 - real(kind=kind_phys), parameter :: dkx = (kxmax -kxmin)/(nworo-1) - real(kind=kind_phys), parameter :: kx_slope= -5./3. - real(kind=kind_phys), parameter :: hps =7000., rhp2 = .5/hps - real(kind=kind_phys), parameter :: cxmin=0.5, cxmin2=cxmin*cxmin - - real :: akx(nworo), cxoro(nworo), akx2(nworo) - real :: aspkx(nworo), c2f2(nworo) , cdf2(nworo) - real :: tau_sp(nworo,levs+1), wkdis(nworo, levs+1) - real :: tau_kx(nworo),taub_kx(nworo) - real, dimension(nworo, levs+1) :: wrms, akzw - - real :: tauz(levs+1), rms_wind(levs+1) - real :: wave_act(nworo,levs+1) - - real :: kxw, kzw, kzw2, kzw3, kzi, dzmet, rhoint - real :: rayf, kturb - real :: uz, bv, bv2,kxsp, fcor2, cf2 - - real :: fdis - real :: wfdm, wfdt, wfim, wfit - real :: betadis, betam, betat, kds, cx, rhofac - real :: etwk, etws, tauk, cx2sat - real :: cdf1, tau_norm -! -! mean flow -! - real, dimension(levs+1) :: uzi,rhoi,ktur, kalp, dzi - - integer :: nw, nzi, ksrc - taud (:, :) = 0.0 ; pkdis(:,:) = 0.0 ; taup (:,:) = 0.0 - tau_sp (:,:) = 0.0 ; wrms(:,:) = 0.0 - nw = nworo - nzi = levs+1 - - do iw = 1, nw -! !kxw = 0.25/(dxres)*iw - kxw = kxmin+(iw-1)*dkx - akx(iw) = kxw - akx2(iw) = kxw*kxw - aspkx(iw) = kxw ** (kx_slope) - tau_kx(iw) = aspkx(iw)*dkx - enddo - - tau_norm = sum(tau_kx) - tau_kx(:) = tau_kx(:)/tau_norm - - if (kdt == 1) then -771 format( 'vay-oro19 ', 3(2x,F8.3)) - write(6,771) & - & maxval(tau_kx)*maxval(taub)*1.e3, & - & minval(tau_kx), maxval(tau_kx) - endif -! -! main loop over oro-points -! - do i =1, npt - j = ipt(i) - -! -! estimate "nhills" => stochastic choices for OGWs -! - if (taub(i) > 0.) then -! -! max_kxridge =min( .5*sigma(j)/hprime(j), kmax) -! ridge-dependent dkx = (max_kxridge -kxmin)/(nw-1) -! option to make grid-box variable kx-spectra kxw = kxmin+(iw-1)*dkx -! - wave_act(1:nw, 1:levs+1) = 1.0 - ksrc = kref(i) - tauz(1:ksrc) = taub(i) - taub_kx(1:nw) = tau_kx(1:nw) * taub(i) - wkdis(:,:) = kedmin - - call oro_meanflow(levs, nzi, u1(j,:), v1(j,:), t1(j,:), & - & prsi(j,:), prsL(j,:), grav, con_rd, & - & del(j,:), rho(i,:), & - & bn2(i,:), uzi, rhoi,ktur, kalp,dzi, & - & xn(i), yn(i)) - - fcor2 = (2*omega*sinlat(j))*(2*omega*sinlat(j))*fc_flag - - k = ksrc - - bv2 = bn2(i,k) - uz = uzi(k) !u1(j,ksrc)*xn(i)+v1(j,ksrc)*yn(i)! - kturb = ktur(k) - rayf = kalp(k) - rhoint = rhoi(k) - dzmet = dzi(k) - kzw = max(sqrt(bv2)/max(cxmin, uz), mkzmin) -! -! specify oro-kx spectra and related variables k=ksrc -! - do iw = 1, nw - kxw = akx(iw) - cxoro(iw) = 0.0 - uz - c2f2(iw) = fcor2/akx2(iw) - wrms(iw,k)= taub_kx(iw)/rhoint*kzw/kxw - tau_sp(iw, k) = taub_kx(iw) -! -! - if (cxoro(iw) > cxmin) then - wave_act(iw,k:levs+1) = 0. ! crit-level - else - cdf2(iw) = cxoro(iw)*cxoro(iw) -c2f2(iw) - if ( cdf2(iw) < cxmin2) then - wave_act(iw,k:levs+1) = 0. ! coriolis cut-off - else - kzw2 = max(Bv2/Cdf2(iw) - akx2(iw), mkz2min) - kzw = sqrt(kzw2) - akzw(iw,k)= kzw - wrms(iw,k)= taub_kx(iw)/rhoint * kzw/kxw - endif - endif - enddo ! nw-spectral loop -! -! defined abobe, k = ksrc: akx(nworo), cxoro(nworo), tau_sp(ksrc, nworo) -! propagate upward multiwave-spectra are filtered by dissipation & instability -! -! tau_sp(:,ksrc+1:levs+1) = tau_sp(:, ksrc) - do k= ksrc+1, levs - uz = uzi(k) - bv2 =bn2(i,k) - bv = sqrt(bv2) - rayf = kalp(k) - rhoint= rhoi(k) - dzmet = dzi(k) - rhofac = rhoi(k-1)/rhoi(k) - - do iw = 1, nworo -! - if (wave_act(iw, k-1) <= 0.0) cycle - cxoro(iw)= 0.0 - uz - if ( cxoro(iw) > cxmin) then - wave_act(iw,k:levs+1) = 0.0 ! crit-level - else - cdf2(iw) = cxoro(iw)*cxoro(iw) -c2f2(iw) - if ( cdf2(iw) < cxmin2) wave_act(iw,k:levs+1) = 0.0 - endif - if ( wave_act(iw,k) <= 0.0) cycle -! -! upward propagation -! - kzw2 = Bv2/Cdf2(iw) - akx2(iw) - - if (kzw2 < mkz2min) then - wave_act(iw,k:levs+1) = 0.0 - else -! -! upward propagation w/o reflection -! - kxw = akx(iw) - kzw = sqrt(kzw2) - akzw(iw,k) = kzw - kzw3 = kzw2*kzw - - cx = cxoro(iw) - betadis = cdf2(iw) / (Cx*Cx+c2f2(iw)) - betaM = 1.0 / (1.0+betadis) - betaT = 1.0 - BetaM - kds = wkdis(iw,k-1) - - etws = wrms(iw,k-1)*rhofac * kzw/akzw(iw,k-1) - - kturb = ktur(k)+pkdis(j,k-1) - wfiM = kturb*kzw2 +rayf - wfiT = wfiM ! do updates with Pr-numbers Kv/Kt - cdf1 = sqrt(Cdf2(iw)) - wfdM = wfiM/(kxw*Cdf1)*BetaM - wfdT = wfiT/(kxw*Cdf1)*BetaT - kzi = 2.*kzw*(wfdM+wfdT)*dzmet - Fdis = exp(-kzi) - - etwk = etws*Fdis - Cx2sat = Linsat2*Cdf2(iw) - - if (etwk > cx2sat) then - Kds = kxw*Cdf1*rhp2/kzw3 - etwk = cx2sat - wfiM = kds*kzw2 - wfdM = wfiM/(kxw*Cdf1) - kzi = 2.*kzw*(wfdm + wfdm)*dzmet - etwk = cx2sat*exp(-kzi) - endif -! if( lat(j) eq 40.5 ) then stop - wkdis(iw,k) = kds - wrms(iw,k) = etwk - tauk = etwk*kxw/kzw - tau_sp(iw,k) = tauk *rhoint - if ( tau_sp(iw,k) > tau_sp(iw,k-1)) & - & tau_sp(iw,k) = tau_sp(iw,k-1) - - ENDIF ! upward - ENDDO ! spectral - -!......... do spectral sum of rms, wkdis, tau - - tauz(k) = sum( tau_sp(:,k)*wave_act(:,k) ) - rms_wind(k) = sum( wrms(:,k)*wave_act(:,k) ) - - pkdis(j,k) = sum(wkdis(:,k)*wave_act(:,k))+rms_wind(k)*rtau - - if (pkdis(j,k) > kedmax) pkdis(j,k) = kedmax - - ENDDO ! k=ksrc+1, levs - - k = ksrc - tauz(k) = sum(tau_sp(:,k)*wave_act(:,k)) - tauz(k) = tauz(k+1) ! zero momentum dep-n at k=ksrc - - pkdis(j,k) = sum(wkdis(:,k)*wave_act(:,k)) - rms_wind(k) = sum(wrms(:,k)*wave_act(:,k)) - tauz(levs+1) = tauz(levs) - taup(i, 1:levs+1) = tauz(1:levs+1) - do k=ksrc, levs - taud(i,k) = ( tauz(k+1) - tauz(k))*grav/del(j,k) -! if (taud(i,k) .gt. 0)taud(i,k)=taud(i,k)*.01 -! if (abs(taud(i,k)).ge.axmax)taud(i,k)=sign(taud(i,k),axmax) - enddo - endif ! taub > 0 - enddo ! oro-points (i, j, ipt) -!23456 - end subroutine oro_wam_2017 -!------------------------------------------------------------- -! -! define mean flow and dissipation for OGW-kx spectrum -! -!------------------------------------------------------------- - subroutine oro_meanflow(nz, nzi, u1, v1, t1, pint, pmid, & - & grav, con_rd, & - & delp, rho, bn2, uzi, rhoi, ktur, kalp, dzi, xn, yn) - - use ugwp_common_v1 , only : velmin, dw2min - implicit none - - integer :: nz, nzi - real, dimension(nz ) :: u1, v1, t1, delp, rho, pmid - real, dimension(nz ) :: bn2 ! define at the interfaces - real, dimension(nz+1) :: pint - real :: xn, yn - real,intent(in) :: grav, con_rd -! output - - real, dimension(nz+1) :: dzi, uzi, rhoi, ktur, kalp - -! locals - integer :: i, j, k - real :: ui, vi, ti, uz, vz, shr2, rdz, kamp - real :: zgrow, zmet, rdpm, ritur, kmol, w1 - real :: rgrav, rdi -! paremeters - real, parameter :: hps = 7000., rpspa = 1.e-5 - real, parameter :: rhps=1.0/hps - real, parameter :: h4= 0.25/hps - real, parameter :: rimin = 1.0/8.0, kedmin = 0.01 - real, parameter :: lturb = 30. , uturb = 150.0 - real, parameter :: lsc2 = lturb*lturb,usc2 = uturb*uturb - kalp(1:nzi) = 2.e-7 ! radiative damping - - rgrav = 1.0/grav - rdi = 1.0/con_rd - - do k=2, nz - rdpm = grav/(pmid(k-1)-pmid(k)) - ui = .5*(u1(k-1)+u1(k)) - vi = .5*(v1(k-1)+v1(k)) - uzi(k) = Ui*xn + Vi*yn - ti = .5*(t1(k-1)+t1(k)) - rhoi(k) = rdi*pint(k)/ti - rdz = rdpm *rhoi(k) - dzi(k) = 1./rdz - uz = u1(k)-u1(k-1) - vz = v1(k)-v1(k-1) - shr2 = rdz*rdz*(max(uz*uz+vz*vz, dw2min)) - zmet = -hps*alog(pint(k)*rpspa) - zgrow = exp(zmet*h4) - kmol = 2.e-5*exp(zmet*rhps)+kedmin - ritur = max(bn2(k)/shr2, rimin) - kamp = sqrt(shr2)*lsc2 *zgrow - w1 = 1./(1. + 5*ritur) - ktur(k) = kamp * w1 * w1 +kmol - enddo - - k = 1 - uzi(k) = uzi(k+1) - ktur(k) = ktur(k+1) - rhoi(k) = rdi*pint(k)/t1(k+1) - dzi(k) = rgrav*delp(k)/rhoi(k) - - k = nzi - uzi(k) = uzi(k-1) - ktur(k) = ktur(k-1) - rhoi(k) = rhoi(k-1)*.5 - dzi(k) = dzi(k-1) - - end subroutine oro_meanflow - -end module cires_orowam2017 diff --git a/physics/ugwp_driver_v0.F b/physics/ugwp_driver_v0.F index abb78e7a6..265350bf7 100644 --- a/physics/ugwp_driver_v0.F +++ b/physics/ugwp_driver_v0.F @@ -792,7 +792,6 @@ SUBROUTINE GWDPS_V0(IM, km, imx, do_tofd, call oro_wam_2017(im, km, npt, ipt, kref, kdt, me, master, & dtp, dxres, taub, u1, v1, t1, xn, yn, bnv2, ro, prsi,prsL, - & con_g, con_omega, & del, sigma, hprime, gamma, theta, & sinlat, xlatd, taup, taud, pkdis) From efbca168f186b1260459297b2a0943b68fa7e3fc Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 9 Apr 2021 10:44:17 -0600 Subject: [PATCH 060/119] fix another call with the wrong number of arguments caught by the SCM intel/debug build --- physics/cires_ugwpv1_oro.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/physics/cires_ugwpv1_oro.F90 b/physics/cires_ugwpv1_oro.F90 index 46191f404..904731b16 100644 --- a/physics/cires_ugwpv1_oro.F90 +++ b/physics/cires_ugwpv1_oro.F90 @@ -848,7 +848,6 @@ subroutine orogw_v1 (im, km, imx, me, master, dtp, kdt, do_tofd, & call oro_spectral_solver(im, km, npt, ipt, kref, kdt, me, master, & dtp, dxres, taub, u1, v1, t1, xn, yn, bnv2, ro, prsi,prsl, & - grav, omega1, rd, & del, sigma, hprime, gamma, theta, sinlat, xlatd, taup, taud, pkdis) endif ! oro_linsat - linsatdis-solver for stationary OGWs From c86bb23b739c78d90ebc2fe6bef0243a62cffec6 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 9 Apr 2021 20:32:45 +0000 Subject: [PATCH 061/119] Fix conflict bug from previous merge. --- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 32 +++++++++++---------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index e3f9dccbf..325648086 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -40,9 +40,9 @@ end subroutine GFS_rrtmgp_thompsonmp_pre_init subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, doLWrad, & i_cldliq, i_cldice, i_cldrain, i_cldsnow, i_cldgrpl, i_cldtot, i_cldliq_nc, & i_cldice_nc, i_twa, effr_in, p_lev, p_lay, tv_lay, t_lay, effrin_cldliq, & - effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, cld_frac_mg, con_g, & - con_rd, con_eps, uni_cld, lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, & - imfdeepcnv_gf, doGP_cldoptics_PADE, doGP_cldoptics_LUT, & + effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, con_g, con_rd, & + con_eps, lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, imfdeepcnv_gf, & + doGP_cldoptics_PADE, doGP_cldoptics_LUT, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & cld_rerain, precip_frac, errmsg, errflg) @@ -67,7 +67,6 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do doSWrad, & ! Call SW radiation? doLWrad, & ! Call LW radiation effr_in, & ! Use cloud effective radii provided by model? - uni_cld, & ! Use provided cloud-fraction? lmfshal, & ! Flag for mass-flux shallow convection scheme used by Xu-Randall lmfdeep2, & ! Flag for some scale-aware mass-flux convection scheme active ltaerosol, & ! Flag for aerosol option @@ -85,8 +84,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do qs_lay, & ! Saturation vapor pressure (Pa) q_lay, & ! water-vapor mixing ratio (kg/kg) relhum, & ! Relative humidity - p_lay, & ! Pressure at model-layers (Pa) - cld_frac_mg ! Cloud-fraction from MG scheme. WTF????? + p_lay ! Pressure at model-layers (Pa) real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & @@ -214,19 +212,15 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do ! Compute cloud-fraction. Else, use value provided if(.not. do_mynnedmf .and. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv ! Cloud-fraction - if (uni_cld) then - cld_frac(1:nCol,1:nLev) = cld_frac_mg(1:nCol,1:nLev) - else - if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) - if(.not. lmfshal) alpha0 = 2000. - ! Xu-Randall (1996) cloud-fraction - do iLay = 1, nLev - do iCol = 1, nCol - cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & - cld_condensate(iCol,iLay,4) - cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & - qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) - enddo + if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) + if(.not. lmfshal) alpha0 = 2000. + ! Xu-Randall (1996) cloud-fraction + do iLay = 1, nLev + do iCol = 1, nCol + cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & + cld_condensate(iCol,iLay,4) + cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & + qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) enddo enddo endif From 486db7cb9c3d1927ecc72636d2832e2ecb655592 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Fri, 9 Apr 2021 15:04:23 -0600 Subject: [PATCH 062/119] CCPPv5.0.0 scientific documentation sync --- physics/GFS_GWD_generic.F90 | 2 +- physics/GFS_MP_generic.F90 | 11 +- physics/GFS_rad_time_vary.fv3.F90 | 2 +- physics/GFS_rrtmg_post.F90 | 7 +- physics/GFS_rrtmg_setup.F90 | 7 +- physics/GFS_stochastics.F90 | 6 +- physics/GFS_surface_generic.F90 | 1 + physics/GFS_time_vary_pre.fv3.F90 | 3 +- physics/cires_ugwp.F90 | 4 +- physics/cires_ugwp_post.F90 | 9 +- physics/cnvc90.f | 7 + physics/cs_conv.F90 | 12 + physics/cu_gf_driver.F90 | 5 + physics/cu_ntiedtke.F90 | 5 + physics/dcyc2.f | 4 + physics/drag_suite.F90 | 5 +- physics/get_prs_fv3.F90 | 11 + physics/module_MYNNSFC_wrapper.F90 | 2 +- physics/module_SGSCloud_RadPre.F90 | 5 +- physics/module_gfdl_cloud_microphys.F90 | 2 +- physics/module_sf_mynn.F90 | 70 +- physics/module_sf_noahmp_glacier.f90 | 1347 ++++++++++++----------- physics/module_sf_noahmplsm.f90 | 824 +++++++------- physics/noahmp_tables.f90 | 348 +++--- physics/radiation_aerosols.f | 5 - physics/rascnv.F90 | 14 + physics/rrtmg_lw_cloud_optics.F90 | 56 +- physics/rrtmg_lw_post.F90 | 4 +- physics/rrtmg_sw_post.F90 | 4 +- physics/sfcsub.F | 2 +- physics/ugwp_driver_v0.F | 2 + 31 files changed, 1462 insertions(+), 1324 deletions(-) diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index 2ab0fb37a..94153d532 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -1,4 +1,4 @@ -!> \file GFS_GWD_generic.f +!> \file GFS_GWD_generic.F90 !! This file contains the CCPP-compliant orographic gravity wave !! drag pre interstitial codes. diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index ecfd876d0..09fe3475a 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -65,6 +65,7 @@ end subroutine GFS_MP_generic_pre_finalize end module GFS_MP_generic_pre +!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module !> This module contains the subroutine that calculates !! precipitation type and its post, which provides precipitation forcing !! to LSM. @@ -74,8 +75,7 @@ module GFS_MP_generic_post subroutine GFS_MP_generic_post_init() end subroutine GFS_MP_generic_post_init -!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module -!! \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() +!> \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() !! will be called. the tallies are then summed in calwxt_dominant(). For GFDL cloud MP scheme, determine convective !! rain/snow by surface temperature; and determine explicit rain/snow by rain/snow coming out directly from MP. !! @@ -119,15 +119,8 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d ! Stochastic physics / surface perturbations -<<<<<<< HEAD real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl -======= - logical, intent(in) :: do_sppt, ca_global - real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr - real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc - real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl, dsnow_cpl ->>>>>>> 3f240db... Merge pull request #540 from climbfuji/release_public_v2_gnu10_crashes ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp diff --git a/physics/GFS_rad_time_vary.fv3.F90 b/physics/GFS_rad_time_vary.fv3.F90 index a081ddcf1..8dd070b12 100644 --- a/physics/GFS_rad_time_vary.fv3.F90 +++ b/physics/GFS_rad_time_vary.fv3.F90 @@ -1,4 +1,4 @@ -!>\file GFS_rad_time_vary.F90 +!>\file GFS_rad_time_vary.fv3.F90 !! Contains code related to GFS physics suite setup (radiation part of time_vary_step) module GFS_rad_time_vary diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 index 278d3c416..b882930bf 100644 --- a/physics/GFS_rrtmg_post.F90 +++ b/physics/GFS_rrtmg_post.F90 @@ -1,10 +1,12 @@ !>\file GFS_rrtmg_post.f90 !! This file contains + +!>\defgroup GFS_rrtmg_post_mod GFS RRTMG Scheme Post module GFS_rrtmg_post contains -!>\defgroup GFS_rrtmg_post GFS RRTMG Scheme Post -!! @{ +!> \section arg_table_GFS_rrtmg_post_init Argument Table +!! subroutine GFS_rrtmg_post_init () end subroutine GFS_rrtmg_post_init @@ -200,5 +202,4 @@ end subroutine GFS_rrtmg_post_run subroutine GFS_rrtmg_post_finalize () end subroutine GFS_rrtmg_post_finalize -!! @} end module GFS_rrtmg_post diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 85ffe7d67..dd2a19b5d 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -1,5 +1,7 @@ !> \file GFS_rrtmg_setup.f90 !! This file contains + +!> \defgroup GFS_rrtmg_setup_mod GFS RRTMG Scheme Setup module GFS_rrtmg_setup use physparam, only : isolar , ictmflg, ico2flg, ioznflg, iaerflg,& @@ -38,9 +40,7 @@ module GFS_rrtmg_setup contains -!> \defgroup GFS_rrtmg_setup GFS RRTMG Scheme Setup -!! @{ -!! \section arg_table_GFS_rrtmg_setup_init Argument Table +!> \section arg_table_GFS_rrtmg_setup_init Argument Table !! \htmlinclude GFS_rrtmg_setup_init.html !! subroutine GFS_rrtmg_setup_init ( & @@ -817,5 +817,4 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, & end subroutine radupdate !----------------------------------- -!! @} end module GFS_rrtmg_setup diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index 10081e2af..5e6329a10 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -1,6 +1,8 @@ !> \file GFS_stochastics.f90 !! This file contains code previously in GFS_stochastics_driver. +!>\defgroup gfs_stoch GFS Stochastics Physics Module +!! This module module GFS_stochastics contains @@ -12,9 +14,6 @@ subroutine GFS_stochastics_finalize() end subroutine GFS_stochastics_finalize -!>\defgroup gfs_stoch GFS Stochastics Physics Module -!! This module -!> @{ !> \section arg_table_GFS_stochastics_run Argument Table !! \htmlinclude GFS_stochastics_run.html !! @@ -357,4 +356,3 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc end subroutine GFS_stochastics_run end module GFS_stochastics -!> @} diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index aaabde80a..2392e6bb0 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -1,6 +1,7 @@ !> \file GFS_surface_generic.F90 !! Contains code related to all GFS surface schemes. +!>\defgroup mod_GFS_surface_generic_pre GFS Surface Generic Pre module module GFS_surface_generic_pre use machine, only: kind_phys diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 index ba971fa67..71a33c8be 100644 --- a/physics/GFS_time_vary_pre.fv3.F90 +++ b/physics/GFS_time_vary_pre.fv3.F90 @@ -1,6 +1,7 @@ -!> \file GFS_time_vary_pre.F90 +!> \file GFS_time_vary_pre.fv3.F90 !! Contains code related to GFS physics suite setup (generic part of time_vary_step) +!>\defgroup gfs_time_vary_pre_mod GFS Time Vary Pre Module module GFS_time_vary_pre use funcphys, only: gfuncphys diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 index 672a2ac81..f985f3fdd 100644 --- a/physics/cires_ugwp.F90 +++ b/physics/cires_ugwp.F90 @@ -10,6 +10,7 @@ !! 3. GW Effects: Unified representation of GW impacts on the "resolved" flow for all sources (energy-balanced schemes for momentum, heat and mixing). !! https://www.weather.gov/media/sti/nggps/Presentations%202017/02%20NGGPS_VYUDIN_2017_.pdf +!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm module cires_ugwp use machine, only: kind_phys @@ -136,8 +137,6 @@ end subroutine cires_ugwp_finalize ! order = dry-adj=>conv=mp-aero=>radiation -sfc/land- chem -> vertdiff-> [rf-gws]=> ion-re ! ----------------------------------------------------------------------- !>@brief These subroutines and modules execute the CIRES UGWP Version 0 -!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm -!> @{ !! The physics of NGWs in the UGWP framework (Yudin et al. 2018 \cite yudin_et_al_2018) is represented by four GW-solvers, which is introduced in Lindzen (1981) \cite lindzen_1981, Hines (1997) \cite hines_1997, Alexander and Dunkerton (1999) \cite alexander_and_dunkerton_1999, and Scinocca (2003) \cite scinocca_2003. The major modification of these GW solvers is represented by the addition of the background dissipation of temperature and winds to the saturation criteria for wave breaking. This feature is important in the mesosphere and thermosphere for WAM applications and it considers appropriate scale-dependent dissipation of waves near the model top lid providing the momentum and energy conservation in the vertical column physics (Shaw and Shepherd 2009 \cite shaw_and_shepherd_2009). In the UGWP-v0, the modification of Scinocca (2003) \cite scinocca_2003 scheme for NGWs with non-hydrostatic and rotational effects for GW propagations and background dissipation is represented by the subroutine \ref fv3_ugwp_solv2_v0. In the next release of UGWP, additional GW-solvers will be implemented along with physics-based triggering of waves and stochastic approaches for selection of GW modes characterized by horizontal phase velocities, azimuthal directions and magnitude of the vertical momentum flux (VMF). !! !! In UGWP-v0, the specification for the VMF function is adopted from the GEOS-5 global atmosphere model of GMAO NASA/GSFC, as described in Molod et al. (2015) \cite molod_et_al_2015 and employed in the MERRRA-2 reanalysis (Gelaro et al., 2017 \cite gelaro_et_al_2017). The Fortran subroutine \ref slat_geos5_tamp describes the latitudinal shape of VMF-function as displayed in Figure 3 of Molod et al. (2015) \cite molod_et_al_2015. It shows that the enhanced values of VMF in the equatorial region gives opportunity to simulate the QBO-like oscillations in the equatorial zonal winds and lead to more realistic simulations of the equatorial dynamics in GEOS-5 operational and MERRA-2 reanalysis products. For the first vertically extended version of FV3GFS in the stratosphere and mesosphere, this simplified function of VMF allows us to tune the model climate and to evaluate multi-year simulations of FV3GFS with the MERRA-2 and ERA-5 reanalysis products, along with temperature, ozone, and water vapor observations of current satellite missions. After delivery of the UGWP-code, the EMC group developed and tested approach to modulate the zonal mean NGW forcing by 3D-distributions of the total precipitation as a proxy for the excitation of NGWs by convection and the vertically-integrated (surface - tropopause) Turbulent Kinetic Energy (TKE). The verification scores with updated NGW forcing, as reported elsewhere by EMC researchers, display noticeable improvements in the forecast scores produced by FV3GFS configuration extended into the mesosphere. @@ -377,5 +376,4 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr end subroutine cires_ugwp_run !! @} -!>@} end module cires_ugwp diff --git a/physics/cires_ugwp_post.F90 b/physics/cires_ugwp_post.F90 index 68c90bc55..cb337b315 100644 --- a/physics/cires_ugwp_post.F90 +++ b/physics/cires_ugwp_post.F90 @@ -1,11 +1,13 @@ !> \file cires_ugwp_post.F90 !! This file contains + +!>\defgroup cires_ugwp_post_mod CIRES UGWP Scheme Post module cires_ugwp_post contains -!>\defgroup cires_ugwp_post CIRES UGWP Scheme Post -!! @{ +!> \section arg_table_cires_ugwp_post_init Argument Table +!! subroutine cires_ugwp_post_init () end subroutine cires_ugwp_post_init @@ -68,8 +70,9 @@ subroutine cires_ugwp_post_run (ldiag_ugwp, dtf, im, levs, & end subroutine cires_ugwp_post_run +!> \section arg_table_cires_ugwp_post_finalize Argument Table +!! subroutine cires_ugwp_post_finalize () end subroutine cires_ugwp_post_finalize -!! @} end module cires_ugwp_post diff --git a/physics/cnvc90.f b/physics/cnvc90.f index fe3601ce2..9bef0ebf9 100644 --- a/physics/cnvc90.f +++ b/physics/cnvc90.f @@ -6,6 +6,9 @@ module cnvc90 contains + +!! \section arg_table_cnvc90_init Argument Table +!! subroutine cnvc90_init() end subroutine cnvc90_init @@ -127,8 +130,12 @@ SUBROUTINE cnvc90_run(CLSTP,IM,RN,KBOT,KTOP,KM,PRSI, & END SUBROUTINE cnvc90_run !> @} + +!! \section arg_table_cnvc90_finalize Argument Table +!! subroutine cnvc90_finalize() end subroutine cnvc90_finalize + end module cnvc90 diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index a7b03d387..c8699fb69 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -4,9 +4,13 @@ module cs_conv_pre contains +!! \section arg_table_cs_conv_pre_init Argument Table +!! subroutine cs_conv_pre_init() end subroutine cs_conv_pre_init +!! \section arg_table_cs_conv_pre_finalize Argument Table +!! subroutine cs_conv_pre_finalize() end subroutine cs_conv_pre_finalize @@ -72,9 +76,13 @@ end module cs_conv_pre module cs_conv_post contains +!! \section arg_table_cs_conv_post_init Argument Table +!! subroutine cs_conv_post_init() end subroutine cs_conv_post_init +!! \section arg_table_cs_conv_post_finalize Argument Table +!! subroutine cs_conv_post_finalize() end subroutine cs_conv_post_finalize @@ -208,9 +216,13 @@ module cs_conv contains +!> \section arg_table_cs_conv_init Argument Table +!! subroutine cs_conv_init() end subroutine cs_conv_init +!> \section arg_table_cs_conv_finalize Argument Table +!! subroutine cs_conv_finalize() end subroutine cs_conv_finalize diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index dcf0d183b..30ad8e6ab 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -46,6 +46,11 @@ subroutine cu_gf_driver_init(mpirank, mpiroot, errmsg, errflg) end subroutine cu_gf_driver_init + +!> \brief Brief description of the subroutine +!! +!! \section arg_table_cu_gf_driver_finalize Argument Table +!! subroutine cu_gf_driver_finalize() end subroutine cu_gf_driver_finalize ! diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 index a39930d77..a824c6af4 100644 --- a/physics/cu_ntiedtke.F90 +++ b/physics/cu_ntiedtke.F90 @@ -129,6 +129,11 @@ subroutine cu_ntiedtke_init(mpirank, mpiroot, errmsg, errflg) end subroutine cu_ntiedtke_init + +!> \brief Brief description of the subroutine +!! +!! \section arg_table_cu_ntiedtke_finalize Argument Table +!! subroutine cu_ntiedtke_finalize() end subroutine cu_ntiedtke_finalize ! diff --git a/physics/dcyc2.f b/physics/dcyc2.f index f29d593a3..b4af3d867 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -16,9 +16,13 @@ module dcyc2t3 contains +!! \section arg_table_dcyc2t3_init Argument Table +!! subroutine dcyc2t3_init() end subroutine dcyc2t3_init +!! \section arg_table_dcyc2t3_finalize Argument Table +!! subroutine dcyc2t3_finalize() end subroutine dcyc2t3_finalize diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 index 2e68ceb12..48f85c5db 100644 --- a/physics/drag_suite.F90 +++ b/physics/drag_suite.F90 @@ -7,6 +7,8 @@ module drag_suite contains +!> \section arg_table_drag_suite_init Argument Table +!! subroutine drag_suite_init() end subroutine drag_suite_init @@ -1309,7 +1311,8 @@ subroutine drag_suite_run( & end subroutine drag_suite_run !------------------------------------------------------------------- ! - +!> \section arg_table_drag_suite_finalize Argument Table +!! subroutine drag_suite_finalize() end subroutine drag_suite_finalize diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 index 224c8c853..543df55bb 100644 --- a/physics/get_prs_fv3.F90 +++ b/physics/get_prs_fv3.F90 @@ -12,6 +12,9 @@ module get_prs_fv3 contains + +!! \section arg_table_get_prs_fv3_init Argument Table +!! subroutine get_prs_fv3_init() end subroutine get_prs_fv3_init @@ -52,6 +55,9 @@ subroutine get_prs_fv3_run(ix, levs, phii, prsi, tgrs, qgrs1, del, del_gz, errms end subroutine get_prs_fv3_run + +!! \section arg_table_get_prs_fv3_finalize Argument Table +!! subroutine get_prs_fv3_finalize() end subroutine get_prs_fv3_finalize @@ -73,6 +79,8 @@ module get_phi_fv3 contains +!! \section arg_table_get_phi_fv3_init Argument Table +!! subroutine get_phi_fv3_init() end subroutine get_phi_fv3_init @@ -115,6 +123,9 @@ subroutine get_phi_fv3_run(ix, levs, gt0, gq01, del_gz, phii, phil, errmsg, errf end subroutine get_phi_fv3_run + +!! \section arg_table_get_phi_fv3_finalize Argument Table +!! subroutine get_phi_fv3_finalize() end subroutine get_phi_fv3_finalize diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..db5eef99a 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -40,7 +40,7 @@ end subroutine mynnsfc_wrapper_init subroutine mynnsfc_wrapper_finalize () end subroutine mynnsfc_wrapper_finalize -!>\defgroup gsd_mynn_sfc GSD MYNN Surface Layer Scheme Module +!>\defgroup mynn_sfc GSD MYNN Surface Layer Scheme Module !> \brief This scheme (1) performs pre-mynnsfc work, (2) runs the mynn sfc layer scheme, and (3) performs post-mynnsfc work !! \section arg_table_mynnsfc_wrapper_run Argument Table !! \htmlinclude mynnsfc_wrapper_run.html diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 592b88e32..a315f9efa 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -6,6 +6,7 @@ !! scale) qc, qi and cloud fraction coming from the microphysics scheme. !! 4) Recompute the diagnostic high, mid, low, total and bl clouds to be consistent with radiation +!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module module sgscloud_radpre contains @@ -16,9 +17,7 @@ end subroutine sgscloud_radpre_init subroutine sgscloud_radpre_finalize () end subroutine sgscloud_radpre_finalize -!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module -!> \ingroup sgscloud_radpre -!! This interstitial code adds the subgrid clouds to the resolved-scale clouds +!> This interstitial code adds the subgrid clouds to the resolved-scale clouds !! if there is no resolved-scale clouds in that particular grid box. It can also !! specify a cloud fraction for resolved-scale clouds, using Xu-Randall (1996), !! if desired. diff --git a/physics/module_gfdl_cloud_microphys.F90 b/physics/module_gfdl_cloud_microphys.F90 index 5750d27fd..da332728f 100644 --- a/physics/module_gfdl_cloud_microphys.F90 +++ b/physics/module_gfdl_cloud_microphys.F90 @@ -1,6 +1,6 @@ !> \file gfdl_cloud_microphys.F90 !! This file contains the full GFDL cloud microphysics (Chen and Lin (2013) -!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou2019toward). +!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou_etal_2019). !! The module is paired with 'gfdl_fv_sat_adj', which performs the "fast" !! processes !>author Shian-Jiann Lin, Linjiong Zhou diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 340fb703a..d09332571 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -2,7 +2,7 @@ !! This file contains !WRF:MODEL_LAYER:PHYSICS ! -!>\ingroup gsd_mynn_sfc +!>\ingroup mynn_sfc !>\defgroup module_sf_mynn_mod GSD MYNN SFC Module MODULE module_sf_mynn @@ -123,7 +123,7 @@ MODULE module_sf_mynn !------------------------------------------------------------------- !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine SUBROUTINE SFCLAY_mynn( & U3D,V3D,T3D,QV3D,P3D,dz8w, & !in @@ -471,7 +471,7 @@ SUBROUTINE SFCLAY_mynn( & END SUBROUTINE SFCLAY_MYNN !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine calculates u*, z/L, and the exchange coefficients !! which are passed to subsequent scheme to calculate the fluxes. !! This scheme has options to calculate the fluxes and near-surface @@ -2126,7 +2126,7 @@ SUBROUTINE SFCLAY1D_mynn( & END SUBROUTINE SFCLAY1D_mynn !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the thermal and moisture roughness lengths !! from Zilitinkevich (1995) and Zilitinkevich et al. (2001) over !! land and water, respectively. @@ -2198,6 +2198,7 @@ SUBROUTINE zilitinkevich_1995(Z_0,Zt,Zq,restar,ustar,KARMAN,& END SUBROUTINE zilitinkevich_1995 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE davis_etal_2008(Z_0,ustar) !a.k.a. : Donelan et al. (2004) @@ -2228,7 +2229,7 @@ SUBROUTINE davis_etal_2008(Z_0,ustar) END SUBROUTINE davis_etal_2008 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for roughness length was designed account for. !!wave steepness. SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) @@ -2254,7 +2255,7 @@ SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) END SUBROUTINE Taylor_Yelland_2001 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This version of Charnock's relation employs a varying !! Charnock parameter, similar to COARE3.0 [Fairall et al. (2003)]. !! The Charnock parameter CZC is varied from .011 to .018. @@ -2279,7 +2280,7 @@ SUBROUTINE charnock_1955(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE charnock_1955 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This version of Charnock's relation employs a varying !!Charnock parameter, taken from COARE 3.5 [Edson et al. (2001, JPO)]. !!The Charnock parameter CZC is varied from about .005 to .028 @@ -2307,7 +2308,7 @@ SUBROUTINE edson_etal_2013(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE edson_etal_2013 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for the thermal and moisture roughness lengths !! (Zt and Zq) relates them to Z0 via the roughness Reynolds number (Ren). !!This formula comes from Fairall et al. (2003). It is modified from @@ -2340,7 +2341,7 @@ SUBROUTINE garratt_1992(Zt,Zq,Z_0,Ren,landsea) END SUBROUTINE garratt_1992 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE3.0 formulation, empirically derived from COARE and HEXMAX data @@ -2388,7 +2389,7 @@ SUBROUTINE fairall_etal_2003(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2003 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE 3.5/4.0 formulation, empirically derived from COARE and HEXMAX data @@ -2417,7 +2418,7 @@ SUBROUTINE fairall_etal_2014(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2014 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is a modified version of Yang et al (2002 QJRMS, 2008 JAMC) !! and Chen et al (2010, J of Hydromet). Although it was originally !! designed for arid regions with bare soil, it is modified @@ -2475,6 +2476,7 @@ SUBROUTINE Yang_2008(Z_0,Zt,Zq,ustar,tstar,qst,Ren,visc) END SUBROUTINE Yang_2008 !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison +!>\ingroup mynn_sfc SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) REAL, INTENT(OUT) :: z0max @@ -2534,10 +2536,7 @@ SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) END SUBROUTINE GFS_z0_lnd !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison -! This formulation comes from Zheng et al. (2012, JGR), which is a -! modified form of the Zilitinkevich thermal roughness length but it adds -! the dependence on vegetation fraction. -! +!>\ingroup mynn_sfc SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) REAL, INTENT(OUT) :: ztmax @@ -2565,6 +2564,7 @@ SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) END SUBROUTINE GFS_zt_lnd !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) REAL, INTENT(OUT) :: z0rl_ocn @@ -2617,6 +2617,7 @@ SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) END SUBROUTINE GFS_z0_ocn !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) REAL, INTENT(OUT) :: ztmax @@ -2659,6 +2660,7 @@ SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) END SUBROUTINE GFS_zt_ocn !-------------------------------------------------------------------- +!>\ingroup mynn_sfc !! add fitted z0,zt curves for hurricane application (used in HWRF/HMON) !! Weiguo Wang, 2019-0425 @@ -2708,6 +2710,7 @@ SUBROUTINE znot_m_v6(uref, znotm) END SUBROUTINE znot_m_v6 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v6(uref, znott) IMPLICIT NONE @@ -2772,7 +2775,7 @@ SUBROUTINE znot_t_v6(uref, znott) END SUBROUTINE znot_t_v6 !------------------------------------------------------------------- - +!>\ingroup mynn_sfc SUBROUTINE znot_m_v7(uref, znotm) IMPLICIT NONE @@ -2820,6 +2823,7 @@ SUBROUTINE znot_m_v7(uref, znotm) END SUBROUTINE znot_m_v7 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v7(uref, znott) IMPLICIT NONE @@ -2886,7 +2890,7 @@ SUBROUTINE znot_t_v7(uref, znott) END SUBROUTINE znot_t_v7 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is taken from Andreas (2002; J. of Hydromet) and !! Andreas et al. (2005; BLM). !! @@ -2937,7 +2941,7 @@ SUBROUTINE Andreas_2002(Z_0,bvisc,ustar,Zt,Zq) END SUBROUTINE Andreas_2002 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996). SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) @@ -2973,7 +2977,7 @@ SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_Hogstrom_1996 !-------------------------------------------------------------------- -!> \ingroup module_sf_mynn_mod +!> \ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996), but with different constants compatible !! with Dyer and Hicks (1970/74?). This formulation is used for @@ -3012,7 +3016,7 @@ SUBROUTINE PSI_DyerHicks(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_DyerHicks !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Beljaar and Holtslag 1991, which is an extension of Holtslag !! and Debruin 1989. @@ -3043,7 +3047,7 @@ SUBROUTINE PSI_Beljaars_Holtslag_1991(psi_m, psi_h, zL) END SUBROUTINE PSI_Beljaars_Holtslag_1991 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions come from !! Zilitinkevich and Esau (2007, BM), which are formulatioed from the !! "generalized similarity theory" and tuned to the LES DATABASE64 @@ -3074,7 +3078,7 @@ SUBROUTINE PSI_Zilitinkevich_Esau_2007(psi_m, psi_h, zL) END SUBROUTINE PSI_Zilitinkevich_Esau_2007 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the flux-profile relationships !! of Businger el al. 1971. SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) @@ -3106,7 +3110,7 @@ SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) END SUBROUTINE PSI_Businger_1971 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns flux-profile relatioships based off !!of Lobocki (1993), which is derived from the MY-level 2 model. !!Suselj and Sood (2010) applied the surface layer length scales @@ -3139,12 +3143,12 @@ SUBROUTINE PSI_Suselj_Sood_2010(psi_m, psi_h, zL) END SUBROUTINE PSI_Suselj_Sood_2010 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns the stability functions based off +!! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. +!! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) - ! This subroutine returns the stability functions based off - ! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. - ! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) - IMPLICIT NONE REAL, INTENT(IN) :: zL,z0L REAL, INTENT(OUT) :: psim1,psih1 @@ -3158,12 +3162,12 @@ SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) END SUBROUTINE PSI_CB2005 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns a more robust z/L that best matches +!! the z/L from Hogstrom (1996) for unstable conditions and Beljaars +!! and Holtslag (1991) for stable conditions. SUBROUTINE Li_etal_2010(zL, Rib, zaz0, z0zt) - !This subroutine returns a more robust z/L that best matches - !the z/L from Hogstrom (1996) for unstable conditions and Beljaars - !and Holtslag (1991) for stable conditions. - IMPLICIT NONE REAL, INTENT(OUT) :: zL REAL, INTENT(IN) :: Rib, zaz0, z0zt @@ -3439,6 +3443,7 @@ END SUBROUTINE psi_init ! ================================================================== ! ... integrated similarity functions from MYNN... ! +!>\ingroup mynn_sfc REAL function psim_stable_full(zolf) REAL :: zolf @@ -3448,6 +3453,7 @@ REAL function psim_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_stable_full(zolf) REAL :: zolf @@ -3457,6 +3463,7 @@ REAL function psih_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psim_unstable_full(zolf) REAL :: zolf,x,ym,psimc,psimk @@ -3473,6 +3480,7 @@ REAL function psim_unstable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_unstable_full(zolf) REAL :: zolf,y,yh,psihc,psihk diff --git a/physics/module_sf_noahmp_glacier.f90 b/physics/module_sf_noahmp_glacier.f90 index ebe4654bd..be24381f4 100644 --- a/physics/module_sf_noahmp_glacier.f90 +++ b/physics/module_sf_noahmp_glacier.f90 @@ -13,58 +13,58 @@ module noahmp_glacier_globals ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) ! =====================================options for different schemes================================ -! options for ground snow surface albedo -! 1-> BATS; 2 -> CLASS +!> options for ground snow surface albedo +!! 1-> BATS; 2 -> CLASS INTEGER :: OPT_ALB != 2 !(suggested 2) -! options for partitioning precipitation into rainfall & snowfall -! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP options for partitioning precipitation into rainfall & snowfall +!! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP zero heat flux from bottom (ZBOT and TBOT not used) -! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) +!> options for lower boundary condition of soil temperature +!! 1 -> zero heat flux from bottom (ZBOT and TBOT not used) +!! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) INTEGER :: OPT_TBOT != 2 !(suggested 2) -! options for snow/soil temperature time scheme (only layer 1) -! 1 -> semi-implicit; 2 -> full implicit (original Noah) +!> options for snow/soil temperature time scheme (only layer 1) +!! 1 -> semi-implicit; 2 -> full implicit (original Noah) INTEGER :: OPT_STC != 1 !(suggested 1) -! options for glacier treatment -! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah +!> options for glacier treatment +!! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah INTEGER :: OPT_GLA != 1 !(suggested 1) ! adjustable parameters for snow processes - REAL, PARAMETER :: Z0SNO = 0.002 !snow surface roughness length (m) (0.002) - REAL, PARAMETER :: SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) - REAL, PARAMETER :: SWEMX = 1.00 !new snow mass to fully cover old snow (mm) - !equivalent to 10mm depth (density = 100 kg/m3) + REAL, PARAMETER :: Z0SNO = 0.002 !< snow surface roughness length (m) (0.002) + REAL, PARAMETER :: SSI = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) + REAL, PARAMETER :: SWEMX = 1.00 !< new snow mass to fully cover old snow (mm) + !< equivalent to 10mm depth (density = 100 kg/m3) !------------------------------------------------------------------------------------------! end module noahmp_glacier_globals @@ -138,72 +138,72 @@ subroutine noahmp_glacier (& implicit none ! -------------------------------------------------------------------------------------------------- ! input - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer ! output - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: t2m !2-m air temperature over bare ground part [k] + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: t2m !< 2-m air temperature over bare ground part [k] real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi real (kind=kind_phys) , intent(out) :: fpice real (kind=kind_phys) , intent(out) :: ch2b real (kind=kind_phys) , intent(out) :: esnow - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) #ifdef CCPP @@ -212,25 +212,25 @@ subroutine noahmp_glacier (& #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: rhoair !density air (kg/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: qmelt !internal pack melt - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: beg_wb !beginning water for error check + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: qmelt !< internal pack melt + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: beg_wb !< beginning water for error check real (kind=kind_phys) :: zbot = -8.0 character*256 message @@ -330,6 +330,7 @@ subroutine noahmp_glacier (& end subroutine noahmp_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! re-process atmospheric forcing subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & qair ,eair ,rhoair ,solad ,solai , & swdown ) @@ -340,25 +341,25 @@ subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & ! -------------------------------------------------------------------------------------------------- ! inputs - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] ! outputs - real (kind=kind_phys) , intent(out) :: thair !potential temperature (k) - real (kind=kind_phys) , intent(out) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) , intent(out) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(out) :: swdown !downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(out) :: thair !< potential temperature (k) + real (kind=kind_phys) , intent(out) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) , intent(out) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(out) :: swdown !< downward solar filtered by sun angle [w/m2] !locals - real (kind=kind_phys) :: pair !atm bottom level pressure (pa) + real (kind=kind_phys) :: pair !< atm bottom level pressure (pa) ! -------------------------------------------------------------------------------------------------- pair = sfcprs ! atm bottom level pressure (pa) @@ -408,43 +409,43 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: qsnow !snowfall on the ground (mm/s) - real (kind=kind_phys) , intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(in) :: eair !vapor pressure air (pa) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: qair !specific humidity (kg/kg) - real (kind=kind_phys) , intent(in) :: sfctmp !air temperature (k) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: uu !wind speed in e-w dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in n-s dir (m/s) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !incoming direct solar rad. (w/m2) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !incoming diffuse solar rad. (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys) , intent(in) :: zref !reference height (m) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. (k) - real (kind=kind_phys) , intent(in) :: zbot !depth for tbot [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !depth of snow & soil layer-bottom [m] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: qsnow !< snowfall on the ground (mm/s) + real (kind=kind_phys) , intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(in) :: eair !< vapor pressure air (pa) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: qair !< specific humidity (kg/kg) + real (kind=kind_phys) , intent(in) :: sfctmp !< air temperature (k) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in e-w dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in n-s dir (m/s) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !< incoming direct solar rad. (w/m2) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !< incoming diffuse solar rad. (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys) , intent(in) :: zref !< reference height (m) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. (k) + real (kind=kind_phys) , intent(in) :: zbot !< depth for tbot [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< depth of snow & soil layer-bottom [m] ! input & output - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys) , intent(inout) :: sneqv !snow mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step(class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !snow aging factor - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step(class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< snow aging factor + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*) , intent(inout) :: errmsg @@ -452,42 +453,42 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i #endif ! outputs - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume ice [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume liq. water [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) , intent(out) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!pounding at ground [mm] - real (kind=kind_phys) , intent(out) :: sag !solar rad. absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsa !tot. absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !tot. reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw. rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evaporation (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: trad !radiative temperature (k) - real (kind=kind_phys) , intent(out) :: t2m !2 m height air temperature (k) - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: lathea !latent heat vap./sublimation (j/kg) + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume ice [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume liq. water [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) , intent(out) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< pounding at ground [mm] + real (kind=kind_phys) , intent(out) :: sag !< solar rad. absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsa !< tot. absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< tot. reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw. rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evaporation (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: trad !< radiative temperature (k) + real (kind=kind_phys) , intent(out) :: t2m !< 2 m height air temperature (k) + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: lathea !< latent heat vap./sublimation (j/kg) real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi - real (kind=kind_phys) , intent(out) :: ch2b !sensible heat conductance, canopy air to zlvl air (m/s) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys) , intent(out) :: ch2b !< sensible heat conductance, canopy air to zlvl air (m/s) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) ! local - real (kind=kind_phys) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys) :: zlvl !reference height (m) - real (kind=kind_phys) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys) :: zpd !zero plane displacement (m) - real (kind=kind_phys) :: z0mg !z0 momentum, ground (m) - real (kind=kind_phys) :: emg !ground emissivity - real (kind=kind_phys) :: fire !emitted ir (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !temporary used in phase change - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys) :: rhsur !raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys) :: zlvl !< reference height (m) + real (kind=kind_phys) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys) :: zpd !< zero plane displacement (m) + real (kind=kind_phys) :: z0mg !< z0 momentum, ground (m) + real (kind=kind_phys) :: emg !< ground emissivity + real (kind=kind_phys) :: fire !< emitted ir (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !< temporary used in phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys) :: rhsur !< raltive humidity in surface soil/snow air space (-) ! --------------------------------------------------------------------------------------------------- @@ -600,29 +601,29 @@ subroutine thermoprop_glacier (nsoil ,nsnow ,isnow ,dzsnso , & !in implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers [m] - real (kind=kind_phys) , intent(in) :: snowh !snow height [m] + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers [m] + real (kind=kind_phys) , intent(in) :: snowh !< snow height [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !computing energy for phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !< computing energy for phase change ! -------------------------------------------------------------------------------------------------- ! locals integer :: iz, iz2 - real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !snow thermal conductivity (j/m3/k) - real (kind=kind_phys) :: zmid !mid-point soil depth + real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !< snow thermal conductivity (j/m3/k) + real (kind=kind_phys) :: zmid !< mid-point soil depth ! -------------------------------------------------------------------------------------------------- ! compute snow thermal conductivity and heat capacity @@ -665,6 +666,7 @@ end subroutine thermoprop_glacier ! ================================================================================================== ! -------------------------------------------------------------------------------------------------- !>\ingroup NoahMP_LSM +!! snow bulk density, volumetric capacity, and thermal conductivity subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -674,25 +676,25 @@ subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , !--------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: isnow !number of snow layers (-) - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: isnow !< number of snow layers (-) + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !thermal conductivity (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !< thermal conductivity (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] ! locals integer :: iz - real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !bulk density of snow(kg/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !< bulk density of snow(kg/m3) !--------------------------------------------------------------------------------------------------- ! thermal capacity of snow @@ -730,35 +732,35 @@ subroutine radiation_glacier (dt ,tg ,sneqvo ,sneqv ,cosz , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! input - real (kind=kind_phys), intent(in) :: dt !time step [s] - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow mass (mm) - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys), intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !incoming diffuse solar radiation (w/m2) + real (kind=kind_phys), intent(in) :: dt !< time step [s] + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow mass (mm) + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys), intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !< incoming diffuse solar radiation (w/m2) ! inout - real (kind=kind_phys), intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys), dimension(1:2) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys), dimension(1:2) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) :: albsni !< snow albedo (diffuse) ! output - real (kind=kind_phys), intent(out) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsa !total absorbed solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsa !< total absorbed solar radiation (w/m2) ! local - integer :: ib !number of radiation bands - integer :: nband !number of radiation bands - real (kind=kind_phys) :: fage !snow age function (0 - new snow) - real (kind=kind_phys) :: alb !current class albedo - real (kind=kind_phys) :: abs !temporary absorbed rad - real (kind=kind_phys) :: ref !temporary reflected rad - real (kind=kind_phys) :: fsno !snow-cover fraction, = 1 if any snow - real (kind=kind_phys), dimension(1:2) :: albice !albedo land ice: 1=vis, 2=nir + integer :: ib !< number of radiation bands + integer :: nband !< number of radiation bands + real (kind=kind_phys) :: fage !< snow age function (0 - new snow) + real (kind=kind_phys) :: alb !< current class albedo + real (kind=kind_phys) :: abs !< temporary absorbed rad + real (kind=kind_phys) :: ref !< temporary reflected rad + real (kind=kind_phys) :: fsno !< snow-cover fraction, = 1 if any snow + real (kind=kind_phys), dimension(1:2) :: albice !< albedo land ice: 1=vis, 2=nir real (kind=kind_phys),parameter :: mpe = 1.e-6 @@ -820,27 +822,27 @@ subroutine snow_age_glacier (dt,tg,sneqvo,sneqv,tauss,fage) ! from bats ! ------------------------ input/output variables -------------------------------------------------- !input - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow water per unit ground area (mm) + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow water per unit ground area (mm) ! inout - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age !output - real (kind=kind_phys), intent(out) :: fage !snow age + real (kind=kind_phys), intent(out) :: fage !< snow age !local - real (kind=kind_phys) :: tage !total aging effects - real (kind=kind_phys) :: age1 !effects of grain growth due to vapor diffusion - real (kind=kind_phys) :: age2 !effects of grain growth at freezing of melt water - real (kind=kind_phys) :: age3 !effects of soot - real (kind=kind_phys) :: dela !temporary variable - real (kind=kind_phys) :: sge !temporary variable - real (kind=kind_phys) :: dels !temporary variable - real (kind=kind_phys) :: dela0 !temporary variable - real (kind=kind_phys) :: arg !temporary variable + real (kind=kind_phys) :: tage !< total aging effects + real (kind=kind_phys) :: age1 !< effects of grain growth due to vapor diffusion + real (kind=kind_phys) :: age2 !< effects of grain growth at freezing of melt water + real (kind=kind_phys) :: age3 !< effects of soot + real (kind=kind_phys) :: dela !< temporary variable + real (kind=kind_phys) :: sge !< temporary variable + real (kind=kind_phys) :: dels !< temporary variable + real (kind=kind_phys) :: dela0 !< temporary variable + real (kind=kind_phys) :: arg !< temporary variable ! see yang et al. (1997) j.of climate for detail. !--------------------------------------------------------------------------------------------------- @@ -874,26 +876,26 @@ subroutine snowalb_bats_glacier (nband,cosz,fage,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: cosz !cosine solar zenith angle - real (kind=kind_phys),intent(in) :: fage !snow age correction + real (kind=kind_phys),intent(in) :: cosz !< cosine solar zenith angle + real (kind=kind_phys),intent(in) :: fage !< snow age correction ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- - real (kind=kind_phys) :: fzen !zenith angle correction - real (kind=kind_phys) :: cf1 !temperary variable - real (kind=kind_phys) :: sl2 !2.*sl - real (kind=kind_phys) :: sl1 !1/sl - real (kind=kind_phys) :: sl !adjustable parameter - real (kind=kind_phys), parameter :: c1 = 0.2 !default in bats - real (kind=kind_phys), parameter :: c2 = 0.5 !default in bats -! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. ! double the default to match sleepers river's -! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. ! snow surface albedo (double aging effects) + real (kind=kind_phys) :: fzen !< zenith angle correction + real (kind=kind_phys) :: cf1 !< temperary variable + real (kind=kind_phys) :: sl2 !< 2.*sl + real (kind=kind_phys) :: sl1 !< 1/sl + real (kind=kind_phys) :: sl !< adjustable parameter + real (kind=kind_phys), parameter :: c1 = 0.2 !< default in bats + real (kind=kind_phys), parameter :: c2 = 0.5 !< default in bats +! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. !< double the default to match sleepers river's +! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. !< snow surface albedo (double aging effects) ! --------------------------------------------------------------------------------------------- ! zero albedos for all points @@ -924,19 +926,19 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys),intent(in) :: dt !time step (sec) - real (kind=kind_phys),intent(in) :: albold !snow albedo at last time step + real (kind=kind_phys),intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys),intent(in) :: dt !< time step (sec) + real (kind=kind_phys),intent(in) :: albold !< snow albedo at last time step ! in & out real (kind=kind_phys), intent(inout) :: alb ! ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------------------- @@ -964,6 +966,8 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) end subroutine snowalb_class_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for glacier. subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z0m , & !in zlvl ,zpd ,qair ,sfctmp ,rhoair ,sfcprs , & !in ur ,gamma ,rsurf ,lwdn ,rhsur ,smc , & !in @@ -988,37 +992,37 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), intent(in) :: emg !ground emissivity - integer, intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity of snow/soil (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: qair !specific humidity at height zlvl (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys), intent(in) :: sfcprs !density air (kg/m3) - real (kind=kind_phys), intent(in) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys), intent(in) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys), intent(in) :: lwdn !atmospheric longwave radiation (w/m2) - real (kind=kind_phys), intent(in) :: rhsur !raltive humidity in surface soil/snow air space (-) - real (kind=kind_phys), intent(in) :: eair !vapor pressure air at height (pa) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !soil/snow temperature (k) - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !soil moisture - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !soil liquid water - real (kind=kind_phys), intent(in) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: snowh !actual snow depth [m] - real (kind=kind_phys), intent(in) :: lathea !latent heat of vaporization/subli (j/kg) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), intent(in) :: emg !< ground emissivity + integer, intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity of snow/soil (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at height zlvl (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: sfcprs !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys), intent(in) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys), intent(in) :: lwdn !< atmospheric longwave radiation (w/m2) + real (kind=kind_phys), intent(in) :: rhsur !< raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys), intent(in) :: eair !< vapor pressure air at height (pa) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< soil/snow temperature (k) + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !< soil moisture + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !< soil liquid water + real (kind=kind_phys), intent(in) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< actual snow depth [m] + real (kind=kind_phys), intent(in) :: lathea !< latent heat of vaporization/subli (j/kg) ! input/output - real (kind=kind_phys), intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys), intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys), intent(inout) :: tgb !ground temperature (k) - real (kind=kind_phys), intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys), intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys), intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys), intent(inout) :: tgb !< ground temperature (k) + real (kind=kind_phys), intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1027,49 +1031,49 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z ! output ! -sab + irb[tg] + shb[tg] + evb[tg] + ghb[tg] = 0 - real (kind=kind_phys), intent(out) :: irb !net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: shb !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: evb !latent heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: ghb !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys), intent(out) :: t2mb !2 m height air temperature (k) - real (kind=kind_phys), intent(out) :: q2b !bare ground heat conductance - real (kind=kind_phys), intent(out) :: ehb2 !sensible heat conductance for diagnostics + real (kind=kind_phys), intent(out) :: irb !< net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: shb !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: evb !< latent heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: ghb !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys), intent(out) :: t2mb !< 2 m height air temperature (k) + real (kind=kind_phys), intent(out) :: q2b !< bare ground heat conductance + real (kind=kind_phys), intent(out) :: ehb2 !< sensible heat conductance for diagnostics ! local variables - integer :: niterb !number of iterations for surface temperature - real (kind=kind_phys) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys) :: dtg !change in tg, last iteration (k) - integer :: mozsgn !number of times moz changes sign - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: fm2 !monin-obukhov momentum adjustment at 2m - real (kind=kind_phys) :: fh2 !monin-obukhov heat adjustment at 2m - real (kind=kind_phys) :: ch2 !surface exchange at 2m - real (kind=kind_phys) :: h !temporary sensible heat flux (w/m2) - real (kind=kind_phys) :: fv !friction velocity (m/s) - real (kind=kind_phys) :: cir !coefficients for ir as function of ts**4 - real (kind=kind_phys) :: cgh !coefficients for st as function of ts - real (kind=kind_phys) :: csh !coefficients for sh as function of ts - real (kind=kind_phys) :: cev !coefficients for ev as function of esat[ts] - real (kind=kind_phys) :: cq2b ! - integer :: iter !iteration index - real (kind=kind_phys) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys) :: moz !monin-obukhov stability parameter - real (kind=kind_phys) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys) :: ramb !aerodynamic resistance for momentum (s/m) - real (kind=kind_phys) :: rahb !aerodynamic resistance for sensible heat (s/m) - real (kind=kind_phys) :: rawb !aerodynamic resistance for water vapor (s/m) - real (kind=kind_phys) :: estg !saturation vapor pressure at tg (pa) - real (kind=kind_phys) :: destg !d(es)/dt at tg (pa/k) - real (kind=kind_phys) :: esatw !es for water - real (kind=kind_phys) :: esati !es for ice - real (kind=kind_phys) :: dsatw !d(es)/dt at tg (pa/k) for water - real (kind=kind_phys) :: dsati !d(es)/dt at tg (pa/k) for ice - real (kind=kind_phys) :: a !temporary calculation - real (kind=kind_phys) :: b !temporary calculation - real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice + integer :: niterb !< number of iterations for surface temperature + real (kind=kind_phys) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys) :: dtg !< change in tg, last iteration (k) + integer :: mozsgn !< number of times moz changes sign + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: fm2 !< monin-obukhov momentum adjustment at 2m + real (kind=kind_phys) :: fh2 !< monin-obukhov heat adjustment at 2m + real (kind=kind_phys) :: ch2 !< surface exchange at 2m + real (kind=kind_phys) :: h !< temporary sensible heat flux (w/m2) + real (kind=kind_phys) :: fv !< friction velocity (m/s) + real (kind=kind_phys) :: cir !< coefficients for ir as function of ts**4 + real (kind=kind_phys) :: cgh !< coefficients for st as function of ts + real (kind=kind_phys) :: csh !< coefficients for sh as function of ts + real (kind=kind_phys) :: cev !< coefficients for ev as function of esat[ts] + real (kind=kind_phys) :: cq2b !< + integer :: iter !< iteration index + real (kind=kind_phys) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys) :: moz !< monin-obukhov stability parameter + real (kind=kind_phys) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys) :: ramb !< aerodynamic resistance for momentum (s/m) + real (kind=kind_phys) :: rahb !< aerodynamic resistance for sensible heat (s/m) + real (kind=kind_phys) :: rawb !< aerodynamic resistance for water vapor (s/m) + real (kind=kind_phys) :: estg !< saturation vapor pressure at tg (pa) + real (kind=kind_phys) :: destg !< d(es)/dt at tg (pa/k) + real (kind=kind_phys) :: esatw !< es for water + real (kind=kind_phys) :: esati !< es for ice + real (kind=kind_phys) :: dsatw !< d(es)/dt at tg (pa/k) for water + real (kind=kind_phys) :: dsati !< d(es)/dt at tg (pa/k) for ice + real (kind=kind_phys) :: a !< temporary calculation + real (kind=kind_phys) :: b !< temporary calculation + real (kind=kind_phys) :: t, tdc !< kelvin to degree celsius with limit -50 to +50 + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice tdc(t) = min( 50., max(-50.,(t-tfrz)) ) @@ -1201,27 +1205,27 @@ end subroutine glacier_flux !>\ingroup NoahMP_LSM subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- -! use polynomials to calculate saturation vapor pressure and derivative with -! respect to temperature: over water when t > 0 c and over ice when t <= 0 c +!> use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c implicit none !--------------------------------------------------------------------------------------------------- ! in - real (kind=kind_phys), intent(in) :: t !temperature + real (kind=kind_phys), intent(in) :: t !< temperature !out - real (kind=kind_phys), intent(out) :: esw !saturation vapor pressure over water (pa) - real (kind=kind_phys), intent(out) :: esi !saturation vapor pressure over ice (pa) - real (kind=kind_phys), intent(out) :: desw !d(esat)/dt over water (pa/k) - real (kind=kind_phys), intent(out) :: desi !d(esat)/dt over ice (pa/k) + real (kind=kind_phys), intent(out) :: esw !< saturation vapor pressure over water (pa) + real (kind=kind_phys), intent(out) :: esi !< saturation vapor pressure over ice (pa) + real (kind=kind_phys), intent(out) :: desw !< d(esat)/dt over water (pa/k) + real (kind=kind_phys), intent(out) :: desi !< d(esat)/dt over ice (pa/k) ! local - real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !coefficients for esat over water - real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !coefficients for esat over ice - real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !coefficients for dsat over water - real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !coefficients for dsat over ice + real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !< coefficients for esat over water + real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !< coefficients for esat over ice + real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !< coefficients for dsat over water + real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !< coefficients for dsat over ice parameter (a0=6.107799961 , a1=4.436518521e-01, & a2=1.428945805e-02, a3=2.650648471e-04, & @@ -1251,6 +1255,7 @@ subroutine esat(t, esw, esi, desw, desi) end subroutine esat ! ================================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in qair ,sfctmp ,h ,rhoair ,mpe ,ur , & !in #ifdef CCPP @@ -1265,25 +1270,25 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in implicit none ! ------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: iter !iteration index - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: qair !specific humidity at reference height (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !temperature at reference height (k) - real (kind=kind_phys), intent(in) :: h !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m**3) - real (kind=kind_phys), intent(in) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys), intent(in) :: ur !wind speed (m/s) + integer, intent(in) :: iter !< iteration index + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at reference height (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< temperature at reference height (k) + real (kind=kind_phys), intent(in) :: h !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m**3) + real (kind=kind_phys), intent(in) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys), intent(in) :: ur !< wind speed (m/s) ! in & out - real (kind=kind_phys), intent(inout) :: moz !monin-obukhov stability (z/l) - integer, intent(inout) :: mozsgn !number of times moz changes sign - real (kind=kind_phys), intent(inout) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fm2 !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh2 !sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: moz !< monin-obukhov stability (z/l) + integer, intent(inout) :: mozsgn !< number of times moz changes sign + real (kind=kind_phys), intent(inout) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1291,26 +1296,26 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in #endif ! outputs - real (kind=kind_phys), intent(out) :: fv !friction velocity (m/s) - real (kind=kind_phys), intent(out) :: cm !drag coefficient for momentum - real (kind=kind_phys), intent(out) :: ch !drag coefficient for heat - real (kind=kind_phys), intent(out) :: ch2 !drag coefficient for heat + real (kind=kind_phys), intent(out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum + real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat + real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat ! locals - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: tmpcm !temporary calculation for cm - real (kind=kind_phys) :: tmpch !temporary calculation for ch - real (kind=kind_phys) :: mol !monin-obukhov length (m) - real (kind=kind_phys) :: tvir !temporary virtual temperature (k) - real (kind=kind_phys) :: tmp1,tmp2,tmp3 !temporary calculation - real (kind=kind_phys) :: fmnew !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fhnew !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: moz2 !2/l - real (kind=kind_phys) :: tmpcm2 !temporary calculation for cm2 - real (kind=kind_phys) :: tmpch2 !temporary calculation for ch2 - real (kind=kind_phys) :: fm2new !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fh2new !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: tmp12,tmp22,tmp32 !temporary calculation + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: tmpcm !< temporary calculation for cm + real (kind=kind_phys) :: tmpch !< temporary calculation for ch + real (kind=kind_phys) :: mol !< monin-obukhov length (m) + real (kind=kind_phys) :: tvir !< temporary virtual temperature (k) + real (kind=kind_phys) :: tmp1,tmp2,tmp3 !< temporary calculation + real (kind=kind_phys) :: fmnew !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fhnew !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: moz2 !< 2/l + real (kind=kind_phys) :: tmpcm2 !< temporary calculation for cm2 + real (kind=kind_phys) :: tmpch2 !< temporary calculation for ch2 + real (kind=kind_phys) :: fm2new !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fh2new !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: tmp12,tmp22,tmp32 !< temporary calculation real (kind=kind_phys) :: cmfm, chfh, cm2fm2, ch2fh2 @@ -1430,26 +1435,26 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in hcpct , & !in stc ) !inout ! -------------------------------------------------------------------------------------------------- -! compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures -! during melting season may exceed melting point (tfrz) but later in phasechange -! subroutine the snow temperatures are reset to tfrz for melting snow. +!> compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures +!! during melting season may exceed melting point (tfrz) but later in phasechange +!! subroutine the snow temperatures are reset to tfrz for melting snow. ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- !input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: tbot ! - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), intent(in) :: snowh !snow depth (m) - real (kind=kind_phys), intent(in) :: zbot !from soil surface (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bot. depth from snow surf.(m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity (j/m3/k) + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: tbot !< + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< snow depth (m) + real (kind=kind_phys), intent(in) :: zbot !< from soil surface (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bot. depth from snow surf.(m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity (j/m3/k) !input and output @@ -1458,10 +1463,10 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in !local integer :: iz - real (kind=kind_phys) :: zbotsno !zbot from snow surface + real (kind=kind_phys) :: zbotsno !< zbot from snow surface real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: ai, bi, ci, rhsts - real (kind=kind_phys) :: eflxb !energy influx from soil bottom (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !light through water (w/m2) + real (kind=kind_phys) :: eflxb !< energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !< light through water (w/m2) ! ---------------------------------------------------------------------- @@ -1496,34 +1501,34 @@ subroutine hrt_glacier (nsnow ,nsoil ,isnow ,zsnso , & !in botflx ) !out ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- -! calculate the right hand side of the time tendency term of the soil -! thermal diffusion equation. also to compute ( prepare ) the matrix -! coefficients for the tri-diagonal matrix of the implicit time scheme. +!> calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute ( prepare ) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers - real (kind=kind_phys), intent(in) :: tbot !bottom soil temp. at zbot (k) - real (kind=kind_phys), intent(in) :: zbot !depth of lower boundary condition (m) - !from soil surface not snow surface - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !depth of layer-bottom of snow/soil (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow/soil temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !light through water (w/m2) + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers + real (kind=kind_phys), intent(in) :: tbot !< bottom soil temp. at zbot (k) + real (kind=kind_phys), intent(in) :: zbot !< depth of lower boundary condition (m) + !! from soil surface not snow surface + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< depth of layer-bottom of snow/soil (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow/soil temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !< light through water (w/m2) ! output - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !right-hand side of the matrix - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !left-hand side coefficient - real (kind=kind_phys), intent(out) :: botflx !energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !< right-hand side of the matrix + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !< left-hand side coefficient + real (kind=kind_phys), intent(out) :: botflx !< energy influx from soil bottom (w/m2) ! local @@ -1592,7 +1597,7 @@ subroutine hstep_glacier (nsnow ,nsoil ,isnow ,dt , & !in ai ,bi ,ci ,rhsts , & !inout stc ) !inout ! ---------------------------------------------------------------------- -! calculate/update the soil temperature field. +!> calculate/update the soil temperature field. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- @@ -1710,48 +1715,48 @@ subroutine phasechange_glacier (nsnow ,nsoil ,isnow ,dt ,fact , & smc ,sh2o , & !inout qmelt ,imelt ,ponding ) !out ! ---------------------------------------------------------------------- -! melting/freezing of snow water and soil water +!> melting/freezing of snow water and soil water ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! inputs - integer, intent(in) :: nsnow !maximum no. of snow layers [=3] - integer, intent(in) :: nsoil !no. of soil layers [=4] - integer, intent(in) :: isnow !actual no. of snow layers [<=3] - real (kind=kind_phys), intent(in) :: dt !land model time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !temporary - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: nsnow !< maximum no. of snow layers [=3] + integer, intent(in) :: nsoil !< no. of soil layers [=4] + integer, intent(in) :: isnow !< actual no. of snow layers [<=3] + real (kind=kind_phys), intent(in) :: dt !< land model time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !< temporary + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! inputs/outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), intent(inout) :: sneqv - real (kind=kind_phys), intent(inout) :: snowh - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !total soil water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), intent(inout) :: sneqv !< + real (kind=kind_phys), intent(inout) :: snowh !< + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< total soil water [m3/m3] ! outputs - real (kind=kind_phys), intent(out) :: qmelt !snowmelt rate [mm/s] - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index - real (kind=kind_phys), intent(out) :: ponding!snowmelt when snow has no layer [mm] + real (kind=kind_phys), intent(out) :: qmelt !< snowmelt rate [mm/s] + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index + real (kind=kind_phys), intent(out) :: ponding!< snowmelt when snow has no layer [mm] ! local - integer :: j,k !do loop index - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !energy residual [w/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !melting or freezing water [kg/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !soil/snow ice mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !soil/snow liquid water mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !energy residual or loss after melting/freezing - real (kind=kind_phys) :: temp1 !temporary variables [kg/m2] - real (kind=kind_phys) :: propor - real (kind=kind_phys) :: xmf !total latent heat of phase change + integer :: j,k !< do loop index + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !< energy residual [w/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !< melting or freezing water [kg/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !< soil/snow ice mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !< soil/snow liquid water mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !< energy residual or loss after melting/freezing + real (kind=kind_phys) :: temp1 !< temporary variables [kg/m2] + real (kind=kind_phys) :: propor !< + real (kind=kind_phys) :: xmf !< total latent heat of phase change ! ---------------------------------------------------------------------- ! initialization @@ -2107,53 +2112,53 @@ subroutine water_glacier (nsnow ,nsoil ,imelt ,dt ,prcp ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [1-melt; 2-freeze] - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: prcp !precipitation (mm/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(inout) :: qvap !soil surface evaporation rate[mm/s] - real (kind=kind_phys), intent(inout) :: qdew !soil surface dew rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [1-melt; 2-freeze] + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: prcp !< precipitation (mm/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(inout) :: qvap !< soil surface evaporation rate[mm/s] + real (kind=kind_phys), intent(inout) :: qdew !< soil surface dew rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice content [m3/m3] - real (kind=kind_phys) , intent(inout) :: ponding ![mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice content [m3/m3] + real (kind=kind_phys) , intent(inout) :: ponding !< [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys), intent(out) :: runsub !baseflow (sturation excess) [mm/s] - real (kind=kind_phys), intent(out) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: fpice !precipitation frozen fraction - real (kind=kind_phys), intent(out) :: esnow ! + real (kind=kind_phys), intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys), intent(out) :: runsub !< baseflow (sturation excess) [mm/s] + real (kind=kind_phys), intent(out) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(out) :: ponding1!< + real (kind=kind_phys), intent(out) :: ponding2!< + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: fpice !< precipitation frozen fraction + real (kind=kind_phys), intent(out) :: esnow !< ! local - real (kind=kind_phys) :: qrain !rain at ground srf (mm) [+] - real (kind=kind_phys) :: qseva !soil surface evap rate [mm/s] - real (kind=kind_phys) :: qsdew !soil surface dew rate [mm/s] - real (kind=kind_phys) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys) :: qsnsub !snow surface sublimation rate [mm/s] - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: snoflow !glacier flow [mm/s] - real (kind=kind_phys) :: bdfall !density of new snow (mm water/m snow) - real (kind=kind_phys) :: replace !replacement water due to sublimation of glacier - real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !soil ice content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !soil liquid water content [m3/m3] + real (kind=kind_phys) :: qrain !< rain at ground srf (mm) [+] + real (kind=kind_phys) :: qseva !< soil surface evap rate [mm/s] + real (kind=kind_phys) :: qsdew !< soil surface dew rate [mm/s] + real (kind=kind_phys) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys) :: qsnsub !< snow surface sublimation rate [mm/s] + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: snoflow !< glacier flow [mm/s] + real (kind=kind_phys) :: bdfall !< density of new snow (mm water/m snow) + real (kind=kind_phys) :: replace !< replacement water due to sublimation of glacier + real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !< soil ice content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !< soil liquid water content [m3/m3] integer :: ilev @@ -2276,41 +2281,41 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input & output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: snoflow!glacier flow [mm] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: snoflow!< glacier flow [mm] + real (kind=kind_phys), intent(out) :: ponding1 !< + real (kind=kind_phys), intent(out) :: ponding2 !< ! local integer :: iz - real (kind=kind_phys) :: bdsnow !bulk density of snow (kg/m3) + real (kind=kind_phys) :: bdsnow !< bulk density of snow (kg/m3) ! ---------------------------------------------------------------------- snoflow = 0.0 ponding1 = 0.0 @@ -2399,33 +2404,33 @@ subroutine snowfall_glacier (nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout snliq ,sneqv ) !inout ! ---------------------------------------------------------------------- -! snow depth and density to account for the new snowfall. -! new values of snow depth & density returned. +!> snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !swow water equivalent [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< swow water equivalent [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] ! local - integer :: newnode ! 0-no new layers, 1-creating new layers + integer :: newnode !< 0-no new layers, 1-creating new layers ! ---------------------------------------------------------------------- newnode = 0 @@ -2468,38 +2473,38 @@ subroutine compact_glacier (nsnow ,nsoil ,dt ,stc ,snice , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers [ =4] - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep + integer, intent(in) :: nsoil !< no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep ! input and output - integer, intent(inout) :: isnow ! actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer thickness [m] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer thickness [m] ! local - real (kind=kind_phys), parameter :: c2 = 21.e-3 ![m3/kg] ! default 21.e-3 - real (kind=kind_phys), parameter :: c3 = 2.5e-6 ![1/s] - real (kind=kind_phys), parameter :: c4 = 0.04 ![1/k] - real (kind=kind_phys), parameter :: c5 = 2.0 ! - real (kind=kind_phys), parameter :: dm = 100.0 !upper limit on destructive metamorphism compaction [kg/m3] - real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !viscosity coefficient [kg-s/m2] + real (kind=kind_phys), parameter :: c2 = 21.e-3 !< [m3/kg] ! default 21.e-3 + real (kind=kind_phys), parameter :: c3 = 2.5e-6 !< [1/s] + real (kind=kind_phys), parameter :: c4 = 0.04 !< [1/k] + real (kind=kind_phys), parameter :: c5 = 2.0 !< + real (kind=kind_phys), parameter :: dm = 100.0 !< upper limit on destructive metamorphism compaction [kg/m3] + real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !< viscosity coefficient [kg-s/m2] !according to anderson, it is between 0.52e6~1.38e6 - real (kind=kind_phys) :: burden !pressure of overlying snow [kg/m2] - real (kind=kind_phys) :: ddz1 !rate of settling of snow pack due to destructive metamorphism. - real (kind=kind_phys) :: ddz2 !rate of compaction of snow pack due to overburden. - real (kind=kind_phys) :: ddz3 !rate of compaction of snow pack due to melt [1/s] - real (kind=kind_phys) :: dexpf !expf=exp(-c4*(273.15-stc)). - real (kind=kind_phys) :: td !stc - tfrz [k] - real (kind=kind_phys) :: pdzdtc !nodal rate of change in fractional-thickness due to compaction [fraction/s] - real (kind=kind_phys) :: void !void (1 - snice - snliq) - real (kind=kind_phys) :: wx !water mass (ice + liquid) [kg/m2] - real (kind=kind_phys) :: bi !partial density of ice [kg/m3] - real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !fraction of ice at current time step + real (kind=kind_phys) :: burden !< pressure of overlying snow [kg/m2] + real (kind=kind_phys) :: ddz1 !< rate of settling of snow pack due to destructive metamorphism. + real (kind=kind_phys) :: ddz2 !< rate of compaction of snow pack due to overburden. + real (kind=kind_phys) :: ddz3 !< rate of compaction of snow pack due to melt [1/s] + real (kind=kind_phys) :: dexpf !< expf=exp(-c4*(273.15-stc)). + real (kind=kind_phys) :: td !< stc - tfrz [k] + real (kind=kind_phys) :: pdzdtc !< nodal rate of change in fractional-thickness due to compaction [fraction/s] + real (kind=kind_phys) :: void !< void (1 - snice - snliq) + real (kind=kind_phys) :: wx !< water mass (ice + liquid) [kg/m2] + real (kind=kind_phys) :: bi !< partial density of ice [kg/m3] + real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !< fraction of ice at current time step integer :: j @@ -2569,32 +2574,32 @@ subroutine combine_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water equivalent [m] - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: ponding1 - real (kind=kind_phys), intent(inout) :: ponding2 + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water equivalent [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: ponding1 !< + real (kind=kind_phys), intent(inout) :: ponding2 !< ! local variables: - integer :: i,j,k,l ! node indices - integer :: isnow_old ! number of top snow layer - integer :: mssi ! node index - integer :: neibor ! adjacent node selected for combination - real (kind=kind_phys) :: zwice ! total ice mass in snow - real (kind=kind_phys) :: zwliq ! total liquid water in snow - real (kind=kind_phys) :: dzmin(3) ! minimum of top snow layer + integer :: i,j,k,l !< node indices + integer :: isnow_old !< number of top snow layer + integer :: mssi !< node index + integer :: neibor !< adjacent node selected for combination + real (kind=kind_phys) :: zwice !< total ice mass in snow + real (kind=kind_phys) :: zwliq !< total liquid water in snow + real (kind=kind_phys) :: dzmin(3) !< minimum of top snow layer data dzmin /0.045, 0.05, 0.2/ ! data dzmin /0.025, 0.025, 0.1/ ! mb: change limit !----------------------------------------------------------------------- @@ -2741,24 +2746,24 @@ subroutine combo_glacier(dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ----------------------------------------------------------------------s ! input - real (kind=kind_phys), intent(in) :: dz2 !nodal thickness of 2 elements being combined [m] - real (kind=kind_phys), intent(in) :: wliq2 !liquid water of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: wice2 !ice of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: t2 !nodal temperature of element 2 [k] - real (kind=kind_phys), intent(inout) :: dz !nodal thickness of 1 elements being combined [m] - real (kind=kind_phys), intent(inout) :: wliq !liquid water of element 1 - real (kind=kind_phys), intent(inout) :: wice !ice of element 1 [kg/m2] - real (kind=kind_phys), intent(inout) :: t !node temperature of element 1 [k] + real (kind=kind_phys), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m] + real (kind=kind_phys), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: wice2 !< ice of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: t2 !< nodal temperature of element 2 [k] + real (kind=kind_phys), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m] + real (kind=kind_phys), intent(inout) :: wliq !< liquid water of element 1 + real (kind=kind_phys), intent(inout) :: wice !< ice of element 1 [kg/m2] + real (kind=kind_phys), intent(inout) :: t !< node temperature of element 1 [k] ! local - real (kind=kind_phys) :: dzc !total thickness of nodes 1 and 2 (dzc=dz+dz2). - real (kind=kind_phys) :: wliqc !combined liquid water [kg/m2] - real (kind=kind_phys) :: wicec !combined ice [kg/m2] - real (kind=kind_phys) :: tc !combined node temperature [k] - real (kind=kind_phys) :: h !enthalpy of element 1 [j/m2] - real (kind=kind_phys) :: h2 !enthalpy of element 2 [j/m2] - real (kind=kind_phys) :: hc !temporary + real (kind=kind_phys) :: dzc !< total thickness of nodes 1 and 2 (dzc=dz+dz2). + real (kind=kind_phys) :: wliqc !< combined liquid water [kg/m2] + real (kind=kind_phys) :: wicec !< combined ice [kg/m2] + real (kind=kind_phys) :: tc !< combined node temperature [k] + real (kind=kind_phys) :: h !< enthalpy of element 1 [j/m2] + real (kind=kind_phys) :: h2 !< enthalpy of element 2 [j/m2] + real (kind=kind_phys) :: hc !< temporary !----------------------------------------------------------------------- @@ -2792,30 +2797,30 @@ subroutine divide_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, intent(in) :: nsoil !no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, intent(in) :: nsoil !< no. of soil layers [ =4] ! input and output - integer , intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] + integer , intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] ! local variables: - integer :: j !indices - integer :: msno !number of layer (top) to msno (bot) - real (kind=kind_phys) :: drr !thickness of the combined [m] - real (kind=kind_phys), dimension( 1:nsnow) :: dz !snow layer thickness [m] - real (kind=kind_phys), dimension( 1:nsnow) :: swice !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: swliq !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: tsno !node temperature [k] - real (kind=kind_phys) :: zwice !temporary - real (kind=kind_phys) :: zwliq !temporary - real (kind=kind_phys) :: propor!temporary - real (kind=kind_phys) :: dtdz !temporary + integer :: j !< indices + integer :: msno !< number of layer (top) to msno (bot) + real (kind=kind_phys) :: drr !< thickness of the combined [m] + real (kind=kind_phys), dimension( 1:nsnow) :: dz !< snow layer thickness [m] + real (kind=kind_phys), dimension( 1:nsnow) :: swice !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: swliq !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: tsno !< node temperature [k] + real (kind=kind_phys) :: zwice !< temporary + real (kind=kind_phys) :: zwliq !< temporary + real (kind=kind_phys) :: propor!< temporary + real (kind=kind_phys) :: dtdz !< temporary ! ---------------------------------------------------------------------- do j = 1,nsnow @@ -2918,48 +2923,48 @@ subroutine snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in ponding1 ,ponding2 ,fsh , & !inout qsnbot ) !out ! ---------------------------------------------------------------------- -! renew the mass of ice lens (snice) and liquid (snliq) of the -! surface snow layer resulting from sublimation (frost) / evaporation (dew) +!> renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers[=3] - integer, intent(in) :: nsoil !no. of soil layers[=4] - real (kind=kind_phys), intent(in) :: dt !time step - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] + integer, intent(in) :: nsnow !< maximum no. of snow layers[=3] + integer, intent(in) :: nsoil !< no. of soil layers[=4] + real (kind=kind_phys), intent(in) :: dt !< time step + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer depth [m] - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] real (kind=kind_phys), intent(inout) :: ponding1 real (kind=kind_phys), intent(inout) :: ponding2 - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! local variables: - integer :: j !do loop/array indices - real (kind=kind_phys) :: qin !water flow into the element (mm/s) - real (kind=kind_phys) :: qout !water flow out of the element (mm/s) - real (kind=kind_phys) :: wgdif !ice mass after minus sublimation - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !partial volume of liquid water in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !partial volume of ice lens in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !effective porosity = porosity - vol_ice + integer :: j !< do loop/array indices + real (kind=kind_phys) :: qin !< water flow into the element (mm/s) + real (kind=kind_phys) :: qout !< water flow out of the element (mm/s) + real (kind=kind_phys) :: wgdif !< ice mass after minus sublimation + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !< partial volume of liquid water in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !< partial volume of ice lens in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !< effective porosity = porosity - vol_ice real (kind=kind_phys) :: propor, temp ! ---------------------------------------------------------------------- @@ -3080,39 +3085,39 @@ subroutine error_glacier (iloc ,jloc ,swdown ,fsa ,fsr ,fira , & runsrf ,runsub ,sneqv ,dt ,beg_wb ) #endif ! -------------------------------------------------------------------------------------------------- -! check surface energy balance and water balance +!> check surface energy balance and water balance ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: swdown !downward solar filtered by sun angle [w/m2] - real (kind=kind_phys) , intent(in) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fira !total net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fgev !ground evaporation heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: ssoil !ground heat flux (w/m2) [+ to soil] + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: swdown !< downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(in) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fira !< total net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fgev !< ground evaporation heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: ssoil !< ground heat flux (w/m2) [+ to soil] real (kind=kind_phys) , intent(in) :: sag - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: edir !soil surface evaporation rate[mm/s] - real (kind=kind_phys) , intent(in) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(in) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(in) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: beg_wb !water storage at begin of a timesetp [mm] + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: edir !< soil surface evaporation rate[mm/s] + real (kind=kind_phys) , intent(in) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(in) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(in) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: beg_wb !< water storage at begin of a timesetp [mm] #ifdef CCPP character(len=*) , intent(inout) :: errmsg integer , intent(inout) :: errflg #endif - real (kind=kind_phys) :: end_wb !water storage at end of a timestep [mm] - real (kind=kind_phys) :: errwat !error in water balance [mm/timestep] - real (kind=kind_phys) :: erreng !error in surface energy balance [w/m2] - real (kind=kind_phys) :: errsw !error in shortwave radiation balance [w/m2] + real (kind=kind_phys) :: end_wb !< water storage at end of a timestep [mm] + real (kind=kind_phys) :: errwat !< error in water balance [mm/timestep] + real (kind=kind_phys) :: erreng !< error in surface energy balance [w/m2] + real (kind=kind_phys) :: errsw !< error in shortwave radiation balance [w/m2] character(len=256) :: message ! -------------------------------------------------------------------------------------------------- errsw = swdown - (fsa + fsr) @@ -3162,12 +3167,12 @@ subroutine noahmp_options_glacier(iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, iop implicit none - integer, intent(in) :: iopt_alb !snow surface albedo (1->bats; 2->class) - integer, intent(in) :: iopt_snf !rainfall & snowfall (1-jordan91; 2->bats; 3->noah) - integer, intent(in) :: iopt_tbot !lower boundary of soil temperature (1->zero-flux; 2->noah) - integer, intent(in) :: iopt_stc !snow/soil temperature time scheme (only layer 1) - ! 1 -> semi-implicit; 2 -> full implicit (original noah) - integer, intent(in) :: iopt_gla ! glacier option (1->phase change; 2->simple) + integer, intent(in) :: iopt_alb !< snow surface albedo (1->bats; 2->class) + integer, intent(in) :: iopt_snf !< rainfall & snowfall (1-jordan91; 2->bats; 3->noah) + integer, intent(in) :: iopt_tbot !< lower boundary of soil temperature (1->zero-flux; 2->noah) + integer, intent(in) :: iopt_stc !< snow/soil temperature time scheme (only layer 1) + !! 1 -> semi-implicit; 2 -> full implicit (original noah) + integer, intent(in) :: iopt_gla !< glacier option (1->phase change; 2->simple) ! ------------------------------------------------------------------------------------------------- diff --git a/physics/module_sf_noahmplsm.f90 b/physics/module_sf_noahmplsm.f90 index 8cba5871e..045540061 100644 --- a/physics/module_sf_noahmplsm.f90 +++ b/physics/module_sf_noahmplsm.f90 @@ -73,7 +73,7 @@ module module_sf_noahmplsm ! =====================================options for different schemes================================ ! **recommended - integer :: dveg ! options for dynamic vegetation: + integer :: dveg !< options for dynamic vegetation: ! 1 -> off (use table lai; use fveg = shdfac from input) ! 2 -> on (together with opt_crs = 1) ! 3 -> off (use table lai; calculate fveg) @@ -85,16 +85,16 @@ module module_sf_noahmplsm ! 9 -> off (use input LAI; use maximum vegetation fraction) ! 10 -> crop model on (use maximum vegetation fraction) - integer :: opt_crs ! options for canopy stomatal resistance + integer :: opt_crs !< options for canopy stomatal resistance ! **1 -> ball-berry ! 2 -> jarvis - integer :: opt_btr ! options for soil moisture factor for stomatal resistance + integer :: opt_btr !< options for soil moisture factor for stomatal resistance ! **1 -> noah (soil moisture) ! 2 -> clm (matric potential) ! 3 -> ssib (matric potential) - integer :: opt_run ! options for runoff and groundwater + integer :: opt_run !< options for runoff and groundwater ! **1 -> topmodel with groundwater (niu et al. 2007 jgr) ; ! 2 -> topmodel with an equilibrium water table (niu et al. 2005 jgr) ; ! 3 -> original surface and subsurface runoff (free drainage) @@ -102,59 +102,59 @@ module module_sf_noahmplsm ! 5 -> miguez-macho&fan groundwater scheme (miguez-macho et al. 2007 jgr; fan et al. 2007 jgr) ! (needs further testing for public use) - integer :: opt_sfc ! options for surface layer drag coeff (ch & cm) + integer :: opt_sfc !< options for surface layer drag coeff (ch & cm) ! **1 -> m-o ! **2 -> original noah (chen97) ! **3 -> myj consistent; 4->ysu consistent. mb: removed in v3.7 for further testing - integer :: opt_frz ! options for supercooled liquid water (or ice fraction) + integer :: opt_frz !< options for supercooled liquid water (or ice fraction) ! **1 -> no iteration (niu and yang, 2006 jhm) ! 2 -> koren's iteration - integer :: opt_inf ! options for frozen soil permeability + integer :: opt_inf !< options for frozen soil permeability ! **1 -> linear effects, more permeable (niu and yang, 2006, jhm) ! 2 -> nonlinear effects, less permeable (old) - integer :: opt_rad ! options for radiation transfer + integer :: opt_rad !< options for radiation transfer ! 1 -> modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg) ! 2 -> two-stream applied to grid-cell (gap = 0) ! **3 -> two-stream applied to vegetated fraction (gap=1-fveg) - integer :: opt_alb ! options for ground snow surface albedo + integer :: opt_alb !< options for ground snow surface albedo ! 1 -> bats ! **2 -> class - integer :: opt_snf ! options for partitioning precipitation into rainfall & snowfall + integer :: opt_snf !< options for partitioning precipitation into rainfall & snowfall ! **1 -> jordan (1991) ! 2 -> bats: when sfctmp sfctmp < tfrz ! 4 -> use wrf microphysics output - integer :: opt_tbot ! options for lower boundary condition of soil temperature + integer :: opt_tbot !< options for lower boundary condition of soil temperature ! 1 -> zero heat flux from bottom (zbot and tbot not used) ! **2 -> tbot at zbot (8m) read from a file (original noah) - integer :: opt_stc ! options for snow/soil temperature time scheme (only layer 1) + integer :: opt_stc !< options for snow/soil temperature time scheme (only layer 1) ! **1 -> semi-implicit; flux top boundary condition ! 2 -> full implicit (original noah); temperature top boundary condition ! 3 -> same as 1, but fsno for ts calculation (generally improves snow; v3.7) - integer :: opt_rsf ! options for surface resistent to evaporation/sublimation + integer :: opt_rsf !< options for surface resistent to evaporation/sublimation ! **1 -> sakaguchi and zeng, 2009 ! 2 -> sellers (1992) ! 3 -> adjusted sellers to decrease rsurf for wet soil ! 4 -> option 1 for non-snow; rsurf = rsurf_snow for snow (set in mptable); ad v3.8 - integer :: opt_soil ! options for defining soil properties + integer :: opt_soil !< options for defining soil properties ! **1 -> use input dominant soil texture ! 2 -> use input soil texture that varies with depth ! 3 -> use soil composition (sand, clay, orgm) and pedotransfer functions (opt_pedo) ! 4 -> use input soil properties (bexp_3d, smcmax_3d, etc.) - integer :: opt_pedo ! options for pedotransfer functions (used when opt_soil = 3) + integer :: opt_pedo !< options for pedotransfer functions (used when opt_soil = 3) ! **1 -> saxton and rawls (2006) - integer :: opt_crop ! options for crop model + integer :: opt_crop !< options for crop model ! **0 -> no crop model, will run default dynamic vegetation ! 1 -> liu, et al. 2016 @@ -162,23 +162,23 @@ module module_sf_noahmplsm ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) (not used mb: 20140718) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) (not used mb: 20140718) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) integer, private, parameter :: mband = 2 integer, private, parameter :: nsoil = 4 @@ -197,60 +197,60 @@ module module_sf_noahmplsm integer :: iscrop integer :: eblforest - real (kind=kind_phys) :: ch2op !maximum intercepted h2o per unit lai+sai (mm) - real (kind=kind_phys) :: dleaf !characteristic leaf dimension (m) - real (kind=kind_phys) :: z0mvt !momentum roughness length (m) - real (kind=kind_phys) :: hvt !top of canopy (m) - real (kind=kind_phys) :: hvb !bottom of canopy (m) - real (kind=kind_phys) :: den !tree density (no. of trunks per m2) - real (kind=kind_phys) :: rc !tree crown radius (m) - real (kind=kind_phys) :: mfsno !snowmelt m parameter () - real (kind=kind_phys) :: scffac !snow cover factor (m) - real (kind=kind_phys) :: saim(12) !monthly stem area index, one-sided - real (kind=kind_phys) :: laim(12) !monthly leaf area index, one-sided - real (kind=kind_phys) :: sla !single-side leaf area per kg [m2/kg] - real (kind=kind_phys) :: dilefc !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: dilefw !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: fragr !fraction of growth respiration !original was 0.3 - real (kind=kind_phys) :: ltovrc !leaf turnover [1/s] - - real (kind=kind_phys) :: c3psn !photosynthetic pathway: 0. = c4, 1. = c3 - real (kind=kind_phys) :: kc25 !co2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: akc !q10 for kc25 - real (kind=kind_phys) :: ko25 !o2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: ako !q10 for ko25 - real (kind=kind_phys) :: vcmx25 !maximum rate of carboxylation at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: avcmx !q10 for vcmx25 - real (kind=kind_phys) :: bp !minimum leaf conductance (umol/m**2/s) - real (kind=kind_phys) :: mp !slope of conductance-to-photosynthesis relationship - real (kind=kind_phys) :: qe25 !quantum efficiency at 25c (umol co2 / umol photon) - real (kind=kind_phys) :: aqe !q10 for qe25 - real (kind=kind_phys) :: rmf25 !leaf maintenance respiration at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: rms25 !stem maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: rmr25 !root maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: arm !q10 for maintenance respiration - real (kind=kind_phys) :: folnmx !foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: tmin !minimum temperature for photosynthesis (k) + real (kind=kind_phys) :: ch2op !< maximum intercepted h2o per unit lai+sai (mm) + real (kind=kind_phys) :: dleaf !< characteristic leaf dimension (m) + real (kind=kind_phys) :: z0mvt !< momentum roughness length (m) + real (kind=kind_phys) :: hvt !< top of canopy (m) + real (kind=kind_phys) :: hvb !< bottom of canopy (m) + real (kind=kind_phys) :: den !< tree density (no. of trunks per m2) + real (kind=kind_phys) :: rc !< tree crown radius (m) + real (kind=kind_phys) :: mfsno !< snowmelt m parameter () + real (kind=kind_phys) :: scffac !< snow cover factor (m) + real (kind=kind_phys) :: saim(12) !< monthly stem area index, one-sided + real (kind=kind_phys) :: laim(12) !< monthly leaf area index, one-sided + real (kind=kind_phys) :: sla !< single-side leaf area per kg [m2/kg] + real (kind=kind_phys) :: dilefc !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: dilefw !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: fragr !< fraction of growth respiration !original was 0.3 + real (kind=kind_phys) :: ltovrc !< leaf turnover [1/s] + + real (kind=kind_phys) :: c3psn !< photosynthetic pathway: 0. = c4, 1. = c3 + real (kind=kind_phys) :: kc25 !< co2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akc !< q10 for kc25 + real (kind=kind_phys) :: ko25 !< o2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: ako !< q10 for ko25 + real (kind=kind_phys) :: vcmx25 !< maximum rate of carboxylation at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: avcmx !< q10 for vcmx25 + real (kind=kind_phys) :: bp !< minimum leaf conductance (umol/m**2/s) + real (kind=kind_phys) :: mp !< slope of conductance-to-photosynthesis relationship + real (kind=kind_phys) :: qe25 !< quantum efficiency at 25c (umol co2 / umol photon) + real (kind=kind_phys) :: aqe !< q10 for qe25 + real (kind=kind_phys) :: rmf25 !< leaf maintenance respiration at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: rms25 !< stem maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: rmr25 !< root maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: arm !< q10 for maintenance respiration + real (kind=kind_phys) :: folnmx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: tmin !< minimum temperature for photosynthesis (k) - real (kind=kind_phys) :: xl !leaf/stem orientation index - real (kind=kind_phys) :: rhol(mband) !leaf reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: rhos(mband) !stem reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: taul(mband) !leaf transmittance: 1=vis, 2=nir - real (kind=kind_phys) :: taus(mband) !stem transmittance: 1=vis, 2=nir - - real (kind=kind_phys) :: mrp !microbial respiration parameter (umol co2 /kg c/ s) - real (kind=kind_phys) :: cwpvt !empirical canopy wind parameter - - real (kind=kind_phys) :: wrrat !wood to non-wood ratio - real (kind=kind_phys) :: wdpool !wood pool (switch 1 or 0) depending on woody or not [-] - real (kind=kind_phys) :: tdlef !characteristic t for leaf freezing [k] - - integer :: nroot !number of soil layers with root present - real (kind=kind_phys) :: rgl !parameter used in radiation stress function - real (kind=kind_phys) :: rsmin !minimum stomatal resistance [s m-1] - real (kind=kind_phys) :: hs !parameter used in vapor pressure deficit function - real (kind=kind_phys) :: topt !optimum transpiration air temperature [k] - real (kind=kind_phys) :: rsmax !maximal stomatal resistance [s m-1] + real (kind=kind_phys) :: xl !< leaf/stem orientation index + real (kind=kind_phys) :: rhol(mband) !< leaf reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: rhos(mband) !< stem reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: taul(mband) !< leaf transmittance: 1=vis, 2=nir + real (kind=kind_phys) :: taus(mband) !< stem transmittance: 1=vis, 2=nir + + real (kind=kind_phys) :: mrp !< microbial respiration parameter (umol co2 /kg c/ s) + real (kind=kind_phys) :: cwpvt !< empirical canopy wind parameter + + real (kind=kind_phys) :: wrrat !< wood to non-wood ratio + real (kind=kind_phys) :: wdpool !< wood pool (switch 1 or 0) depending on woody or not [-] + real (kind=kind_phys) :: tdlef !< characteristic t for leaf freezing [k] + + integer :: nroot !< number of soil layers with root present + real (kind=kind_phys) :: rgl !< parameter used in radiation stress function + real (kind=kind_phys) :: rsmin !< minimum stomatal resistance [s m-1] + real (kind=kind_phys) :: hs !< parameter used in vapor pressure deficit function + real (kind=kind_phys) :: topt !< optimum transpiration air temperature [k] + real (kind=kind_phys) :: rsmax !< maximal stomatal resistance [s m-1] real (kind=kind_phys) :: slarea real (kind=kind_phys) :: eps(5) @@ -259,111 +259,111 @@ module module_sf_noahmplsm ! from the rad section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: albsat(mband) !saturated soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albdry(mband) !dry soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albice(mband) !albedo land ice: 1=vis, 2=nir - real (kind=kind_phys) :: alblak(mband) !albedo frozen lakes: 1=vis, 2=nir - real (kind=kind_phys) :: omegas(mband) !two-stream parameter omega for snow - real (kind=kind_phys) :: betads !two-stream parameter betad for snow - real (kind=kind_phys) :: betais !two-stream parameter betad for snow - real (kind=kind_phys) :: eg(2) !emissivity + real (kind=kind_phys) :: albsat(mband) !< saturated soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albdry(mband) !< dry soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albice(mband) !< albedo land ice: 1=vis, 2=nir + real (kind=kind_phys) :: alblak(mband) !< albedo frozen lakes: 1=vis, 2=nir + real (kind=kind_phys) :: omegas(mband) !< two-stream parameter omega for snow + real (kind=kind_phys) :: betads !< two-stream parameter betad for snow + real (kind=kind_phys) :: betais !< two-stream parameter betad for snow + real (kind=kind_phys) :: eg(2) !< emissivity !------------------------------------------------------------------------------------------! ! from the globals section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: co2 !co2 partial pressure - real (kind=kind_phys) :: o2 !o2 partial pressure - real (kind=kind_phys) :: timean !gridcell mean topgraphic index (global mean) - real (kind=kind_phys) :: fsatmx !maximum surface saturated fraction (global mean) - real (kind=kind_phys) :: z0sno !snow surface roughness length (m) (0.002) - real (kind=kind_phys) :: ssi !liquid water holding capacity for snowpack (m3/m3) - real (kind=kind_phys) :: snow_ret_fac !snowpack water release timescale factor (1/s) - real (kind=kind_phys) :: swemx !new snow mass to fully cover old snow (mm) - real (kind=kind_phys) :: snow_emis !snow emissivity - real (kind=kind_phys) :: tau0 !tau0 from yang97 eqn. 10a - real (kind=kind_phys) :: grain_growth !growth from vapor diffusion yang97 eqn. 10b - real (kind=kind_phys) :: extra_growth !extra growth near freezing yang97 eqn. 10c - real (kind=kind_phys) :: dirt_soot !dirt and soot term yang97 eqn. 10d - real (kind=kind_phys) :: bats_cosz !zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real (kind=kind_phys) :: bats_vis_new !new snow visible albedo - real (kind=kind_phys) :: bats_nir_new !new snow nir albedo - real (kind=kind_phys) :: bats_vis_age !age factor for diffuse visible snow albedo yang97 eqn. 17 - real (kind=kind_phys) :: bats_nir_age !age factor for diffuse nir snow albedo yang97 eqn. 18 - real (kind=kind_phys) :: bats_vis_dir !cosz factor for direct visible snow albedo yang97 eqn. 15 - real (kind=kind_phys) :: bats_nir_dir !cosz factor for direct nir snow albedo yang97 eqn. 16 - real (kind=kind_phys) :: rsurf_snow !surface resistance for snow(s/m) - real (kind=kind_phys) :: rsurf_exp !exponent in the shape parameter for soil resistance option 1 + real (kind=kind_phys) :: co2 !< co2 partial pressure + real (kind=kind_phys) :: o2 !< o2 partial pressure + real (kind=kind_phys) :: timean !< gridcell mean topgraphic index (global mean) + real (kind=kind_phys) :: fsatmx !< maximum surface saturated fraction (global mean) + real (kind=kind_phys) :: z0sno !< snow surface roughness length (m) (0.002) + real (kind=kind_phys) :: ssi !< liquid water holding capacity for snowpack (m3/m3) + real (kind=kind_phys) :: snow_ret_fac !< snowpack water release timescale factor (1/s) + real (kind=kind_phys) :: swemx !< new snow mass to fully cover old snow (mm) + real (kind=kind_phys) :: snow_emis !< snow emissivity + real (kind=kind_phys) :: tau0 !< tau0 from yang97 eqn. 10a + real (kind=kind_phys) :: grain_growth !< growth from vapor diffusion yang97 eqn. 10b + real (kind=kind_phys) :: extra_growth !< extra growth near freezing yang97 eqn. 10c + real (kind=kind_phys) :: dirt_soot !< dirt and soot term yang97 eqn. 10d + real (kind=kind_phys) :: bats_cosz !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real (kind=kind_phys) :: bats_vis_new !< new snow visible albedo + real (kind=kind_phys) :: bats_nir_new !< new snow nir albedo + real (kind=kind_phys) :: bats_vis_age !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real (kind=kind_phys) :: bats_nir_age !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real (kind=kind_phys) :: bats_vis_dir !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real (kind=kind_phys) :: bats_nir_dir !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real (kind=kind_phys) :: rsurf_snow !< surface resistance for snow(s/m) + real (kind=kind_phys) :: rsurf_exp !< exponent in the shape parameter for soil resistance option 1 !------------------------------------------------------------------------------------------! ! from the crop section of mptable.tbl !------------------------------------------------------------------------------------------! - integer :: pltday ! planting date - integer :: hsday ! harvest date - real (kind=kind_phys) :: plantpop ! plant density [per ha] - used? - real (kind=kind_phys) :: irri ! irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) - real (kind=kind_phys) :: gddtbase ! base temperature for gdd accumulation [c] - real (kind=kind_phys) :: gddtcut ! upper temperature for gdd accumulation [c] - real (kind=kind_phys) :: gdds1 ! gdd from seeding to emergence - real (kind=kind_phys) :: gdds2 ! gdd from seeding to initial vegetative - real (kind=kind_phys) :: gdds3 ! gdd from seeding to post vegetative - real (kind=kind_phys) :: gdds4 ! gdd from seeding to intial reproductive - real (kind=kind_phys) :: gdds5 ! gdd from seeding to pysical maturity - integer :: c3c4 ! photosynthetic pathway: 1 = c3 2 = c4 - real (kind=kind_phys) :: aref ! reference maximum co2 assimulation rate - real (kind=kind_phys) :: psnrf ! co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) - real (kind=kind_phys) :: i2par ! fraction of incoming solar radiation to photosynthetically active radiation - real (kind=kind_phys) :: tassim0 ! minimum temperature for co2 assimulation [c] - real (kind=kind_phys) :: tassim1 ! co2 assimulation linearly increasing until temperature reaches t1 [c] - real (kind=kind_phys) :: tassim2 ! co2 assmilation rate remain at aref until temperature reaches t2 [c] - real (kind=kind_phys) :: k ! light extinction coefficient - real (kind=kind_phys) :: epsi ! initial light use efficiency - real (kind=kind_phys) :: q10mr ! q10 for maintainance respiration - real (kind=kind_phys) :: foln_mx ! foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: lefreez ! characteristic t for leaf freezing [k] - real (kind=kind_phys) :: dile_fc(nstage) ! coeficient for temperature leaf stress death [1/s] - real (kind=kind_phys) :: dile_fw(nstage) ! coeficient for water leaf stress death [1/s] - real (kind=kind_phys) :: fra_gr ! fraction of growth respiration - real (kind=kind_phys) :: lf_ovrc(nstage) ! fraction of leaf turnover [1/s] - real (kind=kind_phys) :: st_ovrc(nstage) ! fraction of stem turnover [1/s] - real (kind=kind_phys) :: rt_ovrc(nstage) ! fraction of root tunrover [1/s] - real (kind=kind_phys) :: lfmr25 ! leaf maintenance respiration at 25c [umol co2/m**2 /s] - real (kind=kind_phys) :: stmr25 ! stem maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: rtmr25 ! root maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: grainmr25 ! grain maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: lfpt(nstage) ! fraction of carbohydrate flux to leaf - real (kind=kind_phys) :: stpt(nstage) ! fraction of carbohydrate flux to stem - real (kind=kind_phys) :: rtpt(nstage) ! fraction of carbohydrate flux to root - real (kind=kind_phys) :: grainpt(nstage) ! fraction of carbohydrate flux to grain - real (kind=kind_phys) :: bio2lai ! leaf are per living leaf biomass [m^2/kg] + integer :: pltday !< planting date + integer :: hsday !< harvest date + real (kind=kind_phys) :: plantpop !< plant density [per ha] - used? + real (kind=kind_phys) :: irri !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + real (kind=kind_phys) :: gddtbase !< base temperature for gdd accumulation [c] + real (kind=kind_phys) :: gddtcut !< upper temperature for gdd accumulation [c] + real (kind=kind_phys) :: gdds1 !< gdd from seeding to emergence + real (kind=kind_phys) :: gdds2 !< gdd from seeding to initial vegetative + real (kind=kind_phys) :: gdds3 !< gdd from seeding to post vegetative + real (kind=kind_phys) :: gdds4 !< gdd from seeding to intial reproductive + real (kind=kind_phys) :: gdds5 !< gdd from seeding to pysical maturity + integer :: c3c4 !< photosynthetic pathway: 1 = c3 2 = c4 + real (kind=kind_phys) :: aref !< reference maximum co2 assimulation rate + real (kind=kind_phys) :: psnrf !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real (kind=kind_phys) :: i2par !< fraction of incoming solar radiation to photosynthetically active radiation + real (kind=kind_phys) :: tassim0 !< minimum temperature for co2 assimulation [c] + real (kind=kind_phys) :: tassim1 !< co2 assimulation linearly increasing until temperature reaches t1 [c] + real (kind=kind_phys) :: tassim2 !< co2 assmilation rate remain at aref until temperature reaches t2 [c] + real (kind=kind_phys) :: k !< light extinction coefficient + real (kind=kind_phys) :: epsi !< initial light use efficiency + real (kind=kind_phys) :: q10mr !< q10 for maintainance respiration + real (kind=kind_phys) :: foln_mx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: lefreez !< characteristic t for leaf freezing [k] + real (kind=kind_phys) :: dile_fc(nstage) !< coeficient for temperature leaf stress death [1/s] + real (kind=kind_phys) :: dile_fw(nstage) !< coeficient for water leaf stress death [1/s] + real (kind=kind_phys) :: fra_gr !< fraction of growth respiration + real (kind=kind_phys) :: lf_ovrc(nstage) !< fraction of leaf turnover [1/s] + real (kind=kind_phys) :: st_ovrc(nstage) !< fraction of stem turnover [1/s] + real (kind=kind_phys) :: rt_ovrc(nstage) !< fraction of root tunrover [1/s] + real (kind=kind_phys) :: lfmr25 !< leaf maintenance respiration at 25c [umol co2/m**2 /s] + real (kind=kind_phys) :: stmr25 !< stem maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: rtmr25 !< root maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: grainmr25 !< grain maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: lfpt(nstage) !< fraction of carbohydrate flux to leaf + real (kind=kind_phys) :: stpt(nstage) !< fraction of carbohydrate flux to stem + real (kind=kind_phys) :: rtpt(nstage) !< fraction of carbohydrate flux to root + real (kind=kind_phys) :: grainpt(nstage) !< fraction of carbohydrate flux to grain + real (kind=kind_phys) :: bio2lai !< leaf are per living leaf biomass [m^2/kg] !------------------------------------------------------------------------------------------! ! from the soilparm.tbl tables, as functions of soil category. !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: bexp(nsoil) !b parameter - real (kind=kind_phys) :: smcdry(nsoil) !dry soil moisture threshold where direct evap from top + real (kind=kind_phys) :: bexp(nsoil) !< b parameter + real (kind=kind_phys) :: smcdry(nsoil) !< dry soil moisture threshold where direct evap from top !layer ends (volumetric) (not used mb: 20140718) - real (kind=kind_phys) :: smcwlt(nsoil) !wilting point soil moisture (volumetric) - real (kind=kind_phys) :: smcref(nsoil) !reference soil moisture (field capacity) (volumetric) - real (kind=kind_phys) :: smcmax (nsoil) !porosity, saturated value of soil moisture (volumetric) - real (kind=kind_phys) :: psisat(nsoil) !saturated soil matric potential - real (kind=kind_phys) :: dksat(nsoil) !saturated soil hydraulic conductivity - real (kind=kind_phys) :: dwsat(nsoil) !saturated soil hydraulic diffusivity - real (kind=kind_phys) :: quartz(nsoil) !soil quartz content - real (kind=kind_phys) :: f1 !soil thermal diffusivity/conductivity coef (not used mb: 20140718) + real (kind=kind_phys) :: smcwlt(nsoil) !< wilting point soil moisture (volumetric) + real (kind=kind_phys) :: smcref(nsoil) !< reference soil moisture (field capacity) (volumetric) + real (kind=kind_phys) :: smcmax (nsoil) !< porosity, saturated value of soil moisture (volumetric) + real (kind=kind_phys) :: psisat(nsoil) !< saturated soil matric potential + real (kind=kind_phys) :: dksat(nsoil) !< saturated soil hydraulic conductivity + real (kind=kind_phys) :: dwsat(nsoil) !< saturated soil hydraulic diffusivity + real (kind=kind_phys) :: quartz(nsoil) !< soil quartz content + real (kind=kind_phys) :: f1 !< soil thermal diffusivity/conductivity coef (not used mb: 20140718) !------------------------------------------------------------------------------------------! ! from the genparm.tbl file !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: slope !slope index (0 - 1) - real (kind=kind_phys) :: csoil !vol. soil heat capacity [j/m3/k] - real (kind=kind_phys) :: zbot !depth (m) of lower boundary soil temperature - real (kind=kind_phys) :: czil !calculate roughness length of heat + real (kind=kind_phys) :: slope !< slope index (0 - 1) + real (kind=kind_phys) :: csoil !< vol. soil heat capacity [j/m3/k] + real (kind=kind_phys) :: zbot !< depth (m) of lower boundary soil temperature + real (kind=kind_phys) :: czil !< calculate roughness length of heat real (kind=kind_phys) :: refdk real (kind=kind_phys) :: refkdt - real (kind=kind_phys) :: kdt !used in compute maximum infiltration rate (in infil) - real (kind=kind_phys) :: frzx !used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: kdt !< used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: frzx !< used in compute maximum infiltration rate (in infil) end type noahmp_parameters @@ -418,129 +418,129 @@ subroutine noahmp_sflx (parameters, & ! input type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: ice !ice (ice = 1) - integer , intent(in) :: ist !surface type 1->soil; 2->lake - integer , intent(in) :: vegtyp !vegetation type - INTEGER , INTENT(IN) :: CROPTYPE !crop type - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(inout) :: zlvl !reference height (m) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: foln !foliage nitrogen (%) [1-saturated] - real (kind=kind_phys) , intent(in) :: shdfac !green vegetation fraction [0.0-1.0] - integer , intent(in) :: yearlen!number of days in the particular year. - real (kind=kind_phys) , intent(in) :: julian !julian day of year (floating point) - real (kind=kind_phys) , intent(in) :: lat !latitude (radians) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !equilibrium soil water content [m3/m3] - real (kind=kind_phys) , intent(in) :: prcpconv ! convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpnonc ! non-convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpshcv ! shallow convective precip entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpsnow ! snow entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpgrpl ! graupel entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcphail ! hail entering land model [mm/s] ! mb/an : v3.7 + integer , intent(in) :: ice !< ice (ice = 1) + integer , intent(in) :: ist !< surface type 1->soil; 2->lake + integer , intent(in) :: vegtyp !< vegetation type + INTEGER , INTENT(IN) :: CROPTYPE !< crop type + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(inout) :: zlvl !< reference height (m) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: foln !< foliage nitrogen (%) [1-saturated] + real (kind=kind_phys) , intent(in) :: shdfac !< green vegetation fraction [0.0-1.0] + integer , intent(in) :: yearlen!< number of days in the particular year. + real (kind=kind_phys) , intent(in) :: julian !< julian day of year (floating point) + real (kind=kind_phys) , intent(in) :: lat !< latitude (radians) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !< equilibrium soil water content [m3/m3] + real (kind=kind_phys) , intent(in) :: prcpconv !< convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpnonc !< non-convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpshcv !< shallow convective precip entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpsnow !< snow entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpgrpl !< graupel entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcphail !< hail entering land model [mm/s] ! mb/an : v3.7 !jref:start; in - real (kind=kind_phys) , intent(in) :: qc !cloud water mixing ratio - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer - real (kind=kind_phys) , intent(in) :: psfc !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: dz8w !thickness of lowest layer + real (kind=kind_phys) , intent(in) :: qc !< cloud water mixing ratio + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer + real (kind=kind_phys) , intent(in) :: psfc !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: dz8w !< thickness of lowest layer real (kind=kind_phys) , intent(in) :: dx - real (kind=kind_phys) , intent(in) :: shdmax !yearly max vegetation fraction + real (kind=kind_phys) , intent(in) :: shdmax !< yearly max vegetation fraction !jref:end ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !rainfall [mm/s] - real (kind=kind_phys) , intent(inout) :: fwet !wetted or snowed fraction of canopy (-) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: eah !canopy air vapor pressure (pa) - real (kind=kind_phys) , intent(inout) :: tah !canopy air tmeperature (k) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !< rainfall [mm/s] + real (kind=kind_phys) , intent(inout) :: fwet !< wetted or snowed fraction of canopy (-) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: eah !< canopy air vapor pressure (pa) + real (kind=kind_phys) , intent(inout) :: tah !< canopy air tmeperature (k) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys) , intent(inout) :: canice !intercepted ice mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tv !vegetation temperature (k) - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: zwt !depth to water table [m] - real (kind=kind_phys) , intent(inout) :: wa !water storage in aquifer [mm] - real (kind=kind_phys) , intent(inout) :: wt !water in aquifer&saturated soil [mm] - real (kind=kind_phys) , intent(inout) :: wslake !lake water storage (can be neg.) (mm) - real (kind=kind_phys), intent(inout) :: smcwtd !soil water content between bottom of the soil and water table [m3/m3] - real (kind=kind_phys), intent(inout) :: deeprech !recharge to or from the water table when deep [m] - real (kind=kind_phys), intent(inout) :: rech !recharge to or from the water table when shallow [m] (diagnostic) + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys) , intent(inout) :: canice !< intercepted ice mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tv !< vegetation temperature (k) + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: zwt !< depth to water table [m] + real (kind=kind_phys) , intent(inout) :: wa !< water storage in aquifer [mm] + real (kind=kind_phys) , intent(inout) :: wt !< water in aquifer&saturated soil [mm] + real (kind=kind_phys) , intent(inout) :: wslake !< lake water storage (can be neg.) (mm) + real (kind=kind_phys), intent(inout) :: smcwtd !< soil water content between bottom of the soil and water table [m3/m3] + real (kind=kind_phys), intent(inout) :: deeprech !< recharge to or from the water table when deep [m] + real (kind=kind_phys), intent(inout) :: rech !< recharge to or from the water table when shallow [m] (diagnostic) ! output - real (kind=kind_phys) , intent(out) :: z0wrf !combined z0 sent to coupled model - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fcev !canopy evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fctr !transpiration heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) :: ts !surface temperature (k) - real (kind=kind_phys) , intent(out) :: ecan !evaporation of intercepted water (mm/s) - real (kind=kind_phys) , intent(out) :: etran !transpiration rate (mm/s) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: psn !total photosynthesis (umol co2/m2/s) [+] - real (kind=kind_phys) , intent(out) :: apar !photosyn active energy by canopy (w/m2) - real (kind=kind_phys) , intent(out) :: sav !solar rad absorbed by veg. (w/m2) - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsno !snow cover fraction on the ground (-) - real (kind=kind_phys) , intent(out) :: fveg !green vegetation fraction [0.0-1.0] - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) :: errwat !water error [kg m{-2}] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt out bottom of pack [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] + real (kind=kind_phys) , intent(out) :: z0wrf !< combined z0 sent to coupled model + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fcev !< canopy evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fctr !< transpiration heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) :: ts !< surface temperature (k) + real (kind=kind_phys) , intent(out) :: ecan !< evaporation of intercepted water (mm/s) + real (kind=kind_phys) , intent(out) :: etran !< transpiration rate (mm/s) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: psn !< total photosynthesis (umol co2/m2/s) [+] + real (kind=kind_phys) , intent(out) :: apar !< photosyn active energy by canopy (w/m2) + real (kind=kind_phys) , intent(out) :: sav !< solar rad absorbed by veg. (w/m2) + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsno !< snow cover fraction on the ground (-) + real (kind=kind_phys) , intent(out) :: fveg !< green vegetation fraction [0.0-1.0] + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) :: errwat !< water error [kg m{-2}] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt out bottom of pack [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] real (kind=kind_phys) , intent(out) :: esnow - real (kind=kind_phys) , intent(out) :: rb ! leaf boundary layer resistance (s/m) - real (kind=kind_phys) , intent(out) :: laisun ! sunlit leaf area index (m2/m2) - real (kind=kind_phys) , intent(out) :: laisha ! shaded leaf area index (m2/m2) + real (kind=kind_phys) , intent(out) :: rb !< leaf boundary layer resistance (s/m) + real (kind=kind_phys) , intent(out) :: laisun !< sunlit leaf area index (m2/m2) + real (kind=kind_phys) , intent(out) :: laisha !< shaded leaf area index (m2/m2) !jref:start; output - real (kind=kind_phys) , intent(out) :: t2mv !2-m air temperature over vegetated part [k] - real (kind=kind_phys) , intent(out) :: t2mb !2-m air temperature over bare ground part [k] - real (kind=kind_phys), intent(out) :: rssun !sunlit leaf stomatal resistance (s/m) - real (kind=kind_phys), intent(out) :: rssha !shaded leaf stomatal resistance (s/m) + real (kind=kind_phys) , intent(out) :: t2mv !< 2-m air temperature over vegetated part [k] + real (kind=kind_phys) , intent(out) :: t2mb !< 2-m air temperature over bare ground part [k] + real (kind=kind_phys), intent(out) :: rssun !< sunlit leaf stomatal resistance (s/m) + real (kind=kind_phys), intent(out) :: rssha !< shaded leaf stomatal resistance (s/m) real (kind=kind_phys), intent(out) :: bgap real (kind=kind_phys), intent(out) :: wgap - real (kind=kind_phys), dimension(1:2) , intent(out) :: albd ! albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albi ! albedo (diffuse) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albd !< albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albi !< albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) real (kind=kind_phys), intent(out) :: tgv real (kind=kind_phys), intent(out) :: tgb real (kind=kind_phys) :: q1 @@ -552,59 +552,59 @@ subroutine noahmp_sflx (parameters, & #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: cmc !intercepted water (canice+canliq) (mm) - real (kind=kind_phys) :: taux !wind stress: e-w (n/m2) - real (kind=kind_phys) :: tauy !wind stress: n-s (n/m2) - real (kind=kind_phys) :: rhoair !density air (kg/m3) -! real (kind=kind_phys), dimension( 1: 5) :: vocflx !voc fluxes [ug c m-2 h-1] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys) :: qprecc !convective precipitation (mm/s) - real (kind=kind_phys) :: qprecl !large-scale precipitation (mm/s) - real (kind=kind_phys) :: igs !growing season index (0=off, 1=on) - real (kind=kind_phys) :: elai !leaf area index, after burying by snow - real (kind=kind_phys) :: esai !stem area index, after burying by snow - real (kind=kind_phys) :: bevap !soil water evaporation factor (0 - 1) - real (kind=kind_phys), dimension( 1:nsoil) :: btrani !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: btran !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: qin !groundwater recharge [mm/s] - real (kind=kind_phys) :: qdis !groundwater discharge [mm/s] - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: totsc !total soil carbon (g/m2) - real (kind=kind_phys) :: totlb !total living carbon (g/m2) - real (kind=kind_phys) :: t2m !2-meter air temperature (k) - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) :: beg_wb !water storage at begin of a step [mm] - real (kind=kind_phys),intent(out) :: irc !canopy net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: irg !ground net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shc !canopy sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shg !ground sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evg !ground evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghv !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: irb !net longwave rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shb !sensible heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evb !evaporation heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghb !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: evc !canopy evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: tr !transpiration heat [w/m2] [+ to atm] - real (kind=kind_phys), intent(out) :: fpice !snow fraction in precipitation - real (kind=kind_phys), intent(out) :: pahv !precipitation advected heat - vegetation net (w/m2) - real (kind=kind_phys), intent(out) :: pahg !precipitation advected heat - under canopy net (w/m2) - real (kind=kind_phys), intent(out) :: pahb !precipitation advected heat - bare ground net (w/m2) - real (kind=kind_phys), intent(out) :: pah !precipitation advected heat - total (w/m2) + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: cmc !< intercepted water (canice+canliq) (mm) + real (kind=kind_phys) :: taux !< wind stress: e-w (n/m2) + real (kind=kind_phys) :: tauy !< wind stress: n-s (n/m2) + real (kind=kind_phys) :: rhoair !< density air (kg/m3) +! real (kind=kind_phys), dimension( 1: 5) :: vocflx !< voc fluxes [ug c m-2 h-1] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys) :: qprecc !< convective precipitation (mm/s) + real (kind=kind_phys) :: qprecl !< large-scale precipitation (mm/s) + real (kind=kind_phys) :: igs !< growing season index (0=off, 1=on) + real (kind=kind_phys) :: elai !< leaf area index, after burying by snow + real (kind=kind_phys) :: esai !< stem area index, after burying by snow + real (kind=kind_phys) :: bevap !< soil water evaporation factor (0 - 1) + real (kind=kind_phys), dimension( 1:nsoil) :: btrani !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: btran !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: qin !< groundwater recharge [mm/s] + real (kind=kind_phys) :: qdis !< groundwater discharge [mm/s] + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: totsc !< total soil carbon (g/m2) + real (kind=kind_phys) :: totlb !< total living carbon (g/m2) + real (kind=kind_phys) :: t2m !< 2-meter air temperature (k) + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) :: beg_wb !< water storage at begin of a step [mm] + real (kind=kind_phys),intent(out) :: irc !< canopy net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: irg !< ground net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shc !< canopy sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shg !< ground sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evg !< ground evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghv !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: irb !< net longwave rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shb !< sensible heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evb !< evaporation heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghb !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: evc !< canopy evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: tr !< transpiration heat [w/m2] [+ to atm] + real (kind=kind_phys), intent(out) :: fpice !< snow fraction in precipitation + real (kind=kind_phys), intent(out) :: pahv !< precipitation advected heat - vegetation net (w/m2) + real (kind=kind_phys), intent(out) :: pahg !< precipitation advected heat - under canopy net (w/m2) + real (kind=kind_phys), intent(out) :: pahb !< precipitation advected heat - bare ground net (w/m2) + real (kind=kind_phys), intent(out) :: pah !< precipitation advected heat - total (w/m2) !jref:start real (kind=kind_phys) :: fsrv @@ -613,58 +613,58 @@ subroutine noahmp_sflx (parameters, & real (kind=kind_phys),intent(out) :: q2b real (kind=kind_phys) :: q2e real (kind=kind_phys) :: qfx - real (kind=kind_phys),intent(out) :: chv !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb !sensible heat exchange coefficient over bare-ground - real (kind=kind_phys),intent(out) :: chleaf !leaf exchange coefficient - real (kind=kind_phys),intent(out) :: chuc !under canopy exchange coefficient - real (kind=kind_phys),intent(out) :: chv2 !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb2 !sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chv !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb !< sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chleaf !< leaf exchange coefficient + real (kind=kind_phys),intent(out) :: chuc !< under canopy exchange coefficient + real (kind=kind_phys),intent(out) :: chv2 !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb2 !< sensible heat exchange coefficient over bare-ground !jref:end ! carbon ! inputs - real (kind=kind_phys) , intent(in) :: co2air !atmospheric co2 concentration (pa) - real (kind=kind_phys) , intent(in) :: o2air !atmospheric o2 concentration (pa) + real (kind=kind_phys) , intent(in) :: co2air !< atmospheric co2 concentration (pa) + real (kind=kind_phys) , intent(in) :: o2air !< atmospheric o2 concentration (pa) ! inputs and outputs : prognostic variables - real (kind=kind_phys) , intent(inout) :: lfmass !leaf mass [g/m2] - real (kind=kind_phys) , intent(inout) :: rtmass !mass of fine roots [g/m2] - real (kind=kind_phys) , intent(inout) :: stmass !stem mass [g/m2] - real (kind=kind_phys) , intent(inout) :: wood !mass of wood (incl. woody roots) [g/m2] - real (kind=kind_phys) , intent(inout) :: stblcp !stable carbon in deep soil [g/m2] - real (kind=kind_phys) , intent(inout) :: fastcp !short-lived carbon, shallow soil [g/m2] - real (kind=kind_phys) , intent(inout) :: lai !leaf area index [-] - real (kind=kind_phys) , intent(inout) :: sai !stem area index [-] - real (kind=kind_phys) , intent(inout) :: grain !grain mass [g/m2] - real (kind=kind_phys) , intent(inout) :: gdd !growing degree days - integer , intent(inout) :: pgs !plant growing stage [-] + real (kind=kind_phys) , intent(inout) :: lfmass !< leaf mass [g/m2] + real (kind=kind_phys) , intent(inout) :: rtmass !< mass of fine roots [g/m2] + real (kind=kind_phys) , intent(inout) :: stmass !< stem mass [g/m2] + real (kind=kind_phys) , intent(inout) :: wood !< mass of wood (incl. woody roots) [g/m2] + real (kind=kind_phys) , intent(inout) :: stblcp !< stable carbon in deep soil [g/m2] + real (kind=kind_phys) , intent(inout) :: fastcp !< short-lived carbon, shallow soil [g/m2] + real (kind=kind_phys) , intent(inout) :: lai !< leaf area index [-] + real (kind=kind_phys) , intent(inout) :: sai !< stem area index [-] + real (kind=kind_phys) , intent(inout) :: grain !< grain mass [g/m2] + real (kind=kind_phys) , intent(inout) :: gdd !< growing degree days + integer , intent(inout) :: pgs !< plant growing stage [-] ! outputs - real (kind=kind_phys) , intent(out) :: nee !net ecosys exchange (g/m2/s co2) - real (kind=kind_phys) , intent(out) :: gpp !net instantaneous assimilation [g/m2/s c] - real (kind=kind_phys) , intent(out) :: npp !net primary productivity [g/m2/s c] - real (kind=kind_phys) :: autors !net ecosystem respiration (g/m2/s c) - real (kind=kind_phys) :: heters !organic respiration (g/m2/s c) - real (kind=kind_phys) :: troot !root-zone averaged temperature (k) - real (kind=kind_phys) :: bdfall !bulk density of new snow (kg/m3) ! mb/an: v3.7 - real (kind=kind_phys) :: rain !rain rate (mm/s) ! mb/an: v3.7 - real (kind=kind_phys) :: snow !liquid equivalent snow rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) , intent(out) :: nee !< net ecosys exchange (g/m2/s co2) + real (kind=kind_phys) , intent(out) :: gpp !< net instantaneous assimilation [g/m2/s c] + real (kind=kind_phys) , intent(out) :: npp !< net primary productivity [g/m2/s c] + real (kind=kind_phys) :: autors !< net ecosystem respiration (g/m2/s c) + real (kind=kind_phys) :: heters !< organic respiration (g/m2/s c) + real (kind=kind_phys) :: troot !< root-zone averaged temperature (k) + real (kind=kind_phys) :: bdfall !< bulk density of new snow (kg/m3) ! mb/an: v3.7 + real (kind=kind_phys) :: rain !< rain rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) :: snow !< liquid equivalent snow rate (mm/s) ! mb/an: v3.7 real (kind=kind_phys) :: fp ! mb/an: v3.7 real (kind=kind_phys) :: prcp ! mb/an: v3.7 !more local variables for precip heat mb - real (kind=kind_phys) :: qintr !interception rate for rain (mm/s) - real (kind=kind_phys) :: qdripr !drip rate for rain (mm/s) - real (kind=kind_phys) :: qthror !throughfall for rain (mm/s) - real (kind=kind_phys) :: qints !interception (loading) rate for snowfall (mm/s) - real (kind=kind_phys) :: qdrips !drip (unloading) rate for intercepted snow (mm/s) - real (kind=kind_phys) :: qthros !throughfall of snowfall (mm/s) - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: latheav !latent heat vap./sublimation (j/kg) - real (kind=kind_phys) :: latheag !latent heat vap./sublimation (j/kg) - logical :: frozen_ground ! used to define latent heat pathway - logical :: frozen_canopy ! used to define latent heat pathway - LOGICAL :: dveg_active ! flag to run dynamic vegetation - LOGICAL :: crop_active ! flag to run crop model + real (kind=kind_phys) :: qintr !< interception rate for rain (mm/s) + real (kind=kind_phys) :: qdripr !< drip rate for rain (mm/s) + real (kind=kind_phys) :: qthror !< throughfall for rain (mm/s) + real (kind=kind_phys) :: qints !< interception (loading) rate for snowfall (mm/s) + real (kind=kind_phys) :: qdrips !< drip (unloading) rate for intercepted snow (mm/s) + real (kind=kind_phys) :: qthros !< throughfall of snowfall (mm/s) + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: latheav !< latent heat vap./sublimation (j/kg) + real (kind=kind_phys) :: latheag !< latent heat vap./sublimation (j/kg) + logical :: frozen_ground !< used to define latent heat pathway + logical :: frozen_canopy !< used to define latent heat pathway + LOGICAL :: dveg_active !< flag to run dynamic vegetation + LOGICAL :: crop_active !< flag to run crop model ! intent (out) variables need to be assigned a value. these normally get assigned values ! only if dveg == 2. @@ -882,6 +882,7 @@ end subroutine noahmp_sflx !== begin atm ====================================================================================== !>\ingroup NoahMP_LSM +!! re-precess atmospheric forcing. subroutine atm (parameters,sfcprs ,sfctmp ,q2 , & prcpconv,prcpnonc ,prcpshcv,prcpsnow,prcpgrpl,prcphail , & soldn ,cosz ,thair ,qair , & @@ -1029,6 +1030,8 @@ end subroutine atm !== begin phenology ================================================================================ !>\ingroup NoahMP_LSM +!!vegetation phenology considering vegetation canopy being buried by snow and +!!evolution in time. subroutine phenology (parameters,vegtyp ,croptype, snowh , tv , lat , yearlen , julian , & !in lai , sai , troot , elai , esai , igs, pgs) @@ -1143,6 +1146,8 @@ end subroutine phenology !== begin precip_heat ============================================================================== !>\ingroup NoahMP_LSM +!! Michael Barlage: Oct 2013 - Split canwater to calculate precip movement for +!! tracking of advected heat. subroutine precip_heat (parameters,iloc ,jloc ,vegtyp ,dt ,uu ,vv , & !in elai ,esai ,fveg ,ist , & !in bdfall ,rain ,snow ,fp , & !in @@ -1373,6 +1378,7 @@ end subroutine precip_heat !== begin error ==================================================================================== !>\ingroup NoahMP_LSM +!! check surface energy balance and water balance. subroutine error (parameters,swdown ,fsa ,fsr ,fira ,fsh ,fcev , & fgev ,fctr ,ssoil ,beg_wb ,canliq ,canice , & sneqv ,wa ,smc ,dzsnso ,prcp ,ecan , & @@ -1567,6 +1573,13 @@ end subroutine error !== begin energy =================================================================================== !>\ingroup NoahMP_LSM +!! We use different approaches to deal with subgrid features of radiation +!! transfer and turbulent transfer. we use 'tile' approach to compute turbulent +!! fluxes,while we use modified two-stream to compute radiation transfer. +!! tile approach, assemblying vegetation canopies together, +!! may expose too much ground surfaces (either covered by snow or grass) to solar +!! radiation. the modified two-stream assumes vegetation covers fully the +!! gridcell but with gaps between tree crowns. subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in isnow ,dt ,rhoair ,sfcprs ,qair , & !in sfctmp ,thair ,lwdn ,uu ,vv ,zref , & !in @@ -2357,6 +2370,7 @@ end subroutine thermoprop !== begin csnow ==================================================================================== !>\ingroup NoahMP_LSM +!! snow bulk density,volumetric capacity, and thermal conductivity subroutine csnow (parameters,isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -2417,6 +2431,8 @@ end subroutine csnow !== begin tdfcnd =================================================================================== !>\ingroup NoahMP_LSM +!! calculate thermal diffusivity and conductivity of the soil. peters-lidard +!! approach (peters-lidard et al., 1998) subroutine tdfcnd (parameters, isoil, df, smc, sh2o) ! -------------------------------------------------------------------------------------------------- ! calculate thermal diffusivity and conductivity of the soil. @@ -2656,6 +2672,9 @@ end subroutine radiation !== begin albedo =================================================================================== !>\ingroup NoahMP_LSM +!! surface albedos. also fluxes (per unit incoming direct and diffuse radiation) +!! reflected, transmitted, and absorbed by vegetation. also sunlight fraction +!! of the canopy. subroutine albedo (parameters,vegtyp ,ist ,ice ,nsoil , & !in dt ,cosz ,fage ,elai ,esai , & !in tg ,tv ,snowh ,fsno ,fwet , & !in @@ -3195,6 +3214,11 @@ end subroutine groundalb !== begin twostream ================================================================================ !>\ingroup NoahMP_LSM +!! use two-stream approximation of Dickinson (1983) adv geophysics +!! 25: 305-353 and sellers (1985) int j remote sensing 6: 1335-1372 +!! to calculate fluxes absorbed by vegetation, reflected by vegetation, +!! and transmitted through vegetation for unit incoming direct or diffuse +!! flux given an underlying surface with known albedo. subroutine twostream (parameters,ib ,ic ,vegtyp ,cosz ,vai , & !in fwet ,t ,albgrd ,albgri ,rho , & !in tau ,fveg ,ist ,iloc ,jloc , & !in @@ -3446,6 +3470,8 @@ end subroutine twostream !== begin vege_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve for vegetation (tv) and +!! ground (tg) temperatures that balance the surface energy budgets. subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & !in dt ,sav ,sag ,lwdn ,ur , & !in uu ,vv ,sfctmp ,thair ,qair , & !in @@ -4012,6 +4038,8 @@ end subroutine vege_flux !== begin bare_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for bare soil fraction. subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & !in lwdn ,ur ,uu ,vv ,sfctmp , & !in thair ,qair ,eair ,rhoair ,snowh , & !in @@ -4337,6 +4365,8 @@ end subroutine bare_flux !== begin ragrb ==================================================================================== !>\ingroup NoahMP_LSM +!! compute under-canopy aerodynamic resistance rag and leaf boundary layer +!! resistance rb. subroutine ragrb(parameters,iter ,vai ,rhoair ,hg ,tah , & !in zpd ,z0mg ,z0hg ,hcan ,uc , & !in z0h ,fv ,cwp ,vegtyp ,mpe , & !in @@ -4439,6 +4469,7 @@ end subroutine ragrb !== begin sfcdif1 ================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat. subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in & zlvl ,zpd ,z0m ,z0h ,ur , & !in & mpe ,iloc ,jloc , & !in @@ -4618,6 +4649,8 @@ end subroutine sfcdif1 !== begin sfcdif2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate surface layer exchange coefficients via iteractive process (Chen et +!! al. 1997, blm) subroutine sfcdif2(parameters,iter ,z0 ,thz0 ,thlm ,sfcspd , & !in zlm ,iloc ,jloc , & !in akms ,akhs ,rlmo ,wstar2 , & !in @@ -4825,6 +4858,8 @@ end subroutine sfcdif2 !== begin esat ===================================================================================== !>\ingroup NoahMP_LSM +!! use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c. subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- ! use polynomials to calculate saturation vapor pressure and derivative with @@ -5013,6 +5048,10 @@ end subroutine stomata !== begin canres =================================================================================== !>\ingroup NoahMP_LSM +!! calculate canopy resistance which depends on incoming solar radiation, +!! air temperature, atmospheric water vapor pressure deficit at the lowest +!! model level, and soil moisture (preferably unfrozen soil moisture rather +!! than total). subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in rc ,psn ,iloc ,jloc ) !out @@ -5130,6 +5169,10 @@ end subroutine calhum !== begin tsnosoi ================================================================================== !>\ingroup NoahMP_LSM +!! compute snow (up to 3l) and soil (4l) temperature. note that snow +!! temperatures during melting season may exceed melting point (tfrz) but later +!! in phasechange subroutine the snow temperatures are reset to tfrz for melting +!! snow. subroutine tsnosoi (parameters,ice ,nsoil ,nsnow ,isnow ,ist , & !in tbot ,zsnso ,ssoil ,df ,hcpct , & !in sag ,dt ,snowh ,dzsnso , & !in @@ -5266,6 +5309,9 @@ end subroutine tsnosoi !== begin hrt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute (prepare) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. subroutine hrt (parameters,nsnow ,nsoil ,isnow ,zsnso , & stc ,tbot ,zbot ,dt , & df ,hcpct ,ssoil ,phi , & @@ -5369,6 +5415,7 @@ end subroutine hrt !== begin hstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update the soil temperature fields. subroutine hstep (parameters,nsnow ,nsoil ,isnow ,dt , & ai ,bi ,ci ,rhsts , & stc ) @@ -5489,6 +5536,7 @@ end subroutine rosr12 !== begin phasechange ============================================================================== !>\ingroup NoahMP_LSM +!! melting/freezing of snow water and soil water subroutine phasechange (parameters,nsnow ,nsoil ,isnow ,dt ,fact , & !in dzsnso ,hcpct ,ist ,iloc ,jloc , & !in stc ,snice ,snliq ,sneqv ,snowh , & !inout @@ -5720,6 +5768,10 @@ end subroutine phasechange !== begin frh2o ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate amount of supercooled liquid soil water content if +!! temperature is below 273.15k (tfrz). requires newton-type iteration +!! to solve the nonlinear implicit equation given in eqn 17 of koren et al. +!! (1999, jgr, vol 104(d16),19569-19585) subroutine frh2o (parameters,isoil,free,tkelv,smc,sh2o,& #ifdef CCPP errmsg,errflg) @@ -6106,6 +6158,7 @@ end subroutine water !== begin canwater ================================================================================= !>\ingroup NoahMP_LSM +!! canopy hydrology subroutine canwater (parameters,vegtyp ,dt , & !in fcev ,fctr ,elai , & !in esai ,tg ,fveg ,iloc , jloc , & !in @@ -6373,6 +6426,8 @@ end subroutine snowwater !== begin snowfall ================================================================================= !>\ingroup NoahMP_LSM +!! snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. subroutine snowfall (parameters,nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in sfctmp ,iloc ,jloc , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout @@ -6924,6 +6979,8 @@ end subroutine compact !== begin snowh2o ================================================================================== !>\ingroup NoahMP_LSM +!! renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) subroutine snowh2o (parameters,nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in qrain ,iloc ,jloc , & !in isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout @@ -7074,6 +7131,7 @@ end subroutine snowh2o !== begin soilwater ================================================================================ !>\ingroup NoahMP_LSM +!! calculate surface runoff and soil moisture. subroutine soilwater (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in qinsur ,qseva ,etrani ,sice ,iloc , jloc, & !in sh2o ,smc ,zwt ,vegtyp ,& !inout @@ -7345,6 +7403,7 @@ end subroutine soilwater !== begin zwteq ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate equilibrium water table depth (niu et al., 2005) subroutine zwteq (parameters,nsoil ,nsnow ,zsoil ,dzsnso ,sh2o ,zwt) ! ---------------------------------------------------------------------- ! calculate equilibrium water table depth (niu et al., 2005) @@ -7402,6 +7461,7 @@ end subroutine zwteq !== begin infil ==================================================================================== !>\ingroup NoahMP_LSM +!! compute inflitration rate at soil surface and surface runoff subroutine infil (parameters,nsoil ,dt ,zsoil ,sh2o ,sice , & !in sicemax,qinsur , & !in pddum ,runsrf ) !out @@ -7503,6 +7563,9 @@ end subroutine infil !== begin srt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! water diffusion equation. also to compute (prepare) the matrix coefficients +!! for the tri-diagonal matrix of the implicit time scheme. subroutine srt (parameters,nsoil ,zsoil ,dt ,pddum ,etrani , & !in qseva ,sh2o ,smc ,zwt ,fcr , & !in sicemax,fcrmax ,iloc ,jloc ,smcwtd , & !in @@ -7637,6 +7700,7 @@ end subroutine srt !== begin sstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update soil moisture content values. subroutine sstep (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in sice ,iloc ,jloc ,zwt , & !in sh2o ,smc ,ai ,bi ,ci , & !inout @@ -7765,6 +7829,7 @@ end subroutine sstep !== begin wdfcnd1 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd1 (parameters,wdf,wcnd,smc,fcr,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -7805,6 +7870,7 @@ end subroutine wdfcnd1 !== begin wdfcnd2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd2 (parameters,wdf,wcnd,smc,sice,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -8038,6 +8104,8 @@ end subroutine groundwater !== begin shallowwatertable ======================================================================== !>\ingroup NoahMP_LSM +!! diagnoses water table depth and computes recharge when the water table is +!! within the resolved soil layers, according to the miguez-macho&fan scheme. subroutine shallowwatertable (parameters,nsnow ,nsoil ,zsoil, dt , & !in dzsnso ,smceq ,iloc ,jloc , & !in smc ,wtd ,smcwtd ,rech, qdrain ) !inout @@ -8296,6 +8364,8 @@ end subroutine carbon !== begin co2flux ================================================================================== !>\ingroup NoahMP_LSM +!! the original code is from Dickinson et al.(1998), modified by guo-yue niu, +!! 2004 subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in dzsnso ,stc ,psn ,troot ,tv , & !in wroot ,wstres ,foln ,lapm , & !in @@ -8567,7 +8637,9 @@ subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in end subroutine co2flux !== begin carbon_crop ============================================================================== - +!>\ingroup NoahMP_LSM +!! initial crop version created by xing liu +!! initial crop version added by barlage v3.8 subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julian , & !in dzsnso ,stc ,smc ,tv ,psn ,foln ,btran , & !in soldn ,t2m , & !in @@ -8685,7 +8757,9 @@ subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julia end subroutine carbon_crop !== begin co2flux_crop ============================================================================= - +!>\ingroup NoahMP_LSM +!! the original code from re dickinson et al.(1998) and guo-yue niu (2004), +!! modified by xing liu, 2014. subroutine co2flux_crop (parameters, & !in dt ,stc ,psn ,tv ,wroot ,wstres ,foln , & !in ipa ,iha ,pgs , & !in xing @@ -8966,7 +9040,7 @@ subroutine co2flux_crop (parameters, end subroutine co2flux_crop !== begin growing_gdd ============================================================================== - +!>\ingroup NoahMP_LSM subroutine growing_gdd (parameters, & !in t2m , dt, julian, & !in gdd , & !inout @@ -9063,7 +9137,7 @@ subroutine growing_gdd (parameters, & !in end subroutine growing_gdd !== begin psn_crop ================================================================================= - +!>\ingroup NoahMP_LSM subroutine psn_crop ( parameters, & !in soldn, xlai,t2m, & !in psncrop ) !out diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 6341ae61a..9cb25b3f3 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -35,7 +35,7 @@ module noahmp_tables integer :: high_intensity_industrial_table = 33 ! - real :: ch2op_table(mvt) !maximum intercepted h2o per unit lai+sai (mm) + real :: ch2op_table(mvt) !< maximum intercepted h2o per unit lai+sai (mm) data ( ch2op_table(i),i=1,mvt) / 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & & 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & @@ -43,14 +43,14 @@ module noahmp_tables & 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: dleaf_table(mvt) !characteristic leaf dimension (m) + real :: dleaf_table(mvt) !< characteristic leaf dimension (m) data ( dleaf_table(i),i=1,mvt) / 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: z0mvt_table(mvt) !momentum roughness length (m) + real :: z0mvt_table(mvt) !< momentum roughness length (m) data ( z0mvt_table(i),i=1,mvt) / 1.09, 1.10, 0.85, 0.80, 0.80, 0.20, & & 0.06, 0.60, 0.50, 0.12, 0.30, 0.15, & & 1.00, 0.14, 0.00, 0.00, 0.00, 0.30, & @@ -59,28 +59,28 @@ module noahmp_tables ! - real :: hvt_table(mvt) !top of canopy (m) + real :: hvt_table(mvt) !< top of canopy (m) data ( hvt_table(i),i=1,mvt) / 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, & & 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, & & 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, & & 2.00, 0.50, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hvb_table(mvt) !bottom of canopy (m) + real :: hvb_table(mvt) !< bottom of canopy (m) data ( hvb_table(i),i=1,mvt) / 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, & & 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, & & 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, & & 0.20, 0.10, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: den_table(mvt) !tree density (no. of trunks per m2) + real :: den_table(mvt) !< tree density (no. of trunks per m2) data ( den_table (i),i=1,mvt) / 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, & & 10.0, 10.0, 0.02, 100., 5.05, 25.0, & & 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, & & 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / ! - real :: rc_table(mvt) !tree crown radius (m) + real :: rc_table(mvt) !< tree crown radius (m) data ( rc_table (i),i=1,mvt) / 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, & & 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, & @@ -88,14 +88,14 @@ module noahmp_tables & 0.30, 0.30, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mfsno_table(mvt) !snowmelt curve parameter () + real :: mfsno_table(mvt) !< snowmelt curve parameter () data ( mfsno_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, & & 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, & & 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, & & 3.50, 3.50, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: scffac_table(mvt) !snow cover factor (m) + real :: scffac_table(mvt) !< snow cover factor (m) data (scffac_table(i),i=1,mvt) / 0.005, 0.005, 0.005, 0.005, 0.005, & & 0.008, 0.008, 0.010, 0.010, 0.010, & & 0.010, 0.007, 0.021, 0.013, 0.015, & @@ -105,7 +105,7 @@ module noahmp_tables ! - real :: saim_table(mvt,12) !monthly stem area index, one-sided + real :: saim_table(mvt,12) !< monthly stem area index, one-sided data (saim_table (i,1),i=1,mvt) / 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, & & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & @@ -189,7 +189,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / !! lai - real :: laim_table(mvt,12) !monthly leaf area index, one-sided + real :: laim_table(mvt,12) !< monthly leaf area index, one-sided data (laim_table (i,1),i=1,mvt) / 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, & & 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, & @@ -271,35 +271,35 @@ module noahmp_tables & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: sla_table(mvt) !single-side leaf area per kg [m2/kg] + real :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] data ( sla_table (i),i=1,mvt) / 80, 80, 80, 80, 80, 60, & & 60, 60, 50, 60, 80, 80, & & 60, 80, 0, 0, 0, 80, & & 80, 80, 0, 0, 0, 0, & & 0, 0, 0, 0, 0, 0 / - real :: dilefc_table(mvt) !coeficient for leaf stress death [1/s] + real :: dilefc_table(mvt) !< coeficient for leaf stress death [1/s] data (dilefc_table (i),i=1,mvt) / 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, & & 0.20, 0.20, 0.50, 0.20, 0.4, 0.50, & & 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, & & 0.40, 0.30, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: dilefw_table(mvt) !coeficient for leaf stress death [1/s] + real :: dilefw_table(mvt) !< coeficient for leaf stress death [1/s] data (dilefw_table(i),i=1,mvt) / 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, & & 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, & & 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, & & 0.20, 0.20, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: fragr_table(mvt) !fraction of growth respiration !original was 0.3 + real :: fragr_table(mvt) !< fraction of growth respiration !original was 0.3 data ( fragr_table(i),i=1,mvt) / 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, & & 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, & & 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, & & 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ltovrc_table(mvt) !leaf turnover [1/s] + real :: ltovrc_table(mvt) !< leaf turnover [1/s] data ( ltovrc_table(i),i=1,mvt) / 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, & & 0.65, 0.65, 0.65, 0.50, 1.4, 1.6, & & 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, & @@ -307,21 +307,21 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / ! - real :: c3psn_table(mvt) !photosynthetic pathway: 0. = c4, 1. = c3 + real :: c3psn_table(mvt) !< photosynthetic pathway: 0. = c4, 1. = c3 data ( c3psn_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: kc25_table(mvt) !co2 michaelis-menten constant at 25c (pa) + real :: kc25_table(mvt) !< co2 michaelis-menten constant at 25c (pa) data ( kc25_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: akc_table(mvt) !q10 for kc25 + real :: akc_table(mvt) !< q10 for kc25 data ( akc_table (i),i=1,mvt) / 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & @@ -329,7 +329,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: ko25_table(mvt) !o2 michaelis-menten constant at 25c (pa) + real :: ko25_table(mvt) !< o2 michaelis-menten constant at 25c (pa) data ( ko25_table (i),i=1,mvt) / 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & @@ -337,14 +337,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ako_table(mvt) !q10 for ko25 + real :: ako_table(mvt) !< q10 for ko25 data ( ako_table (i),i=1,mvt) / 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: vcmx25_table(mvt) !maximum rate of carboxylation at 25c (umol co2/m**2/s) + real :: vcmx25_table(mvt) !< maximum rate of carboxylation at 25c (umol co2/m**2/s) data ( vcmx25_table(i),i=1,mvt) / 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, & & 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, & & 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, & @@ -352,7 +352,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: avcmx_table(mvt) !q10 for vcmx25 + real :: avcmx_table(mvt) !< q10 for vcmx25 data ( avcmx_table (i),i=1,mvt) / 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & @@ -361,70 +361,70 @@ module noahmp_tables - real :: bp_table(mvt) !minimum leaf conductance (umol/m**2/s) + real :: bp_table(mvt) !< minimum leaf conductance (umol/m**2/s) data ( bp_table (i),i=1,mvt) / 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & & 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & & 1.e15, 2.e3,1.e15, 2.e3,1.e15, 2.e3, & & 2.e3, 2.e3, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mp_table(mvt) !slope of conductance-to-photosynthesis relationship + real :: mp_table(mvt) !< slope of conductance-to-photosynthesis relationship data ( mp_table (i),i=1,mvt) / 6., 9., 6., 9., 9., 9., & & 9., 9., 9., 9., 9., 9., & & 9., 9., 9., 9., 9., 9., & & 9., 9., 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: qe25_table(mvt) !quantum efficiency at 25c (umol co2 / umo photon) + real :: qe25_table(mvt) !< quantum efficiency at 25c (umol co2 / umo photon) data ( qe25_table (i),i=1,mvt) / 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & & 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & & 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, & & 0.06, 0.06, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: aqe_table(mvt) !q10 for qe25 + real :: aqe_table(mvt) !< q10 for qe25 data ( aqe_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: rmf25_table(mvt) !leaf maintenance respiration at 25c (umol co2/m**2/s) + real :: rmf25_table(mvt) !< leaf maintenance respiration at 25c (umol co2/m**2/s) data ( rmf25_table (i),i=1,mvt) / 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, & & 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, & & 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, & & 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rms25_table(mvt) !stem maintenance respiration at 25c (umol co2/kg bio/s) + real :: rms25_table(mvt) !< stem maintenance respiration at 25c (umol co2/kg bio/s) data ( rms25_table (i),i=1,mvt) / 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, & & 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, & & 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, & & 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rmr25_table(mvt) !root maintenance respiration at 25c (umol co2/kg bio/s) + real :: rmr25_table(mvt) !< root maintenance respiration at 25c (umol co2/kg bio/s) data ( rmr25_table (i),i=1,mvt) / 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, & & 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, & & 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: arm_table(mvt) !q10 for maintenance respiration + real :: arm_table(mvt) !< q10 for maintenance respiration data ( arm_table (i),i=1,mvt) / 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: folnmx_table(mvt) !foliage nitrogen concentration when f(n)=1 (%) + real :: folnmx_table(mvt) !< foliage nitrogen concentration when f(n)=1 (%) data (folnmx_table (i),i=1,mvt) / 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & & 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & & 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, & & 1.5, 1.5, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: tmin_table(mvt) !minimum temperature for photosynthesis (k) + real :: tmin_table(mvt) !< minimum temperature for photosynthesis (k) data ( tmin_table (i),i=1,mvt) / 265, 273, 268, 273, 268, 273, & & 273, 273, 273, 273, 268, 273, & & 0, 273, 0, 0, 0, 268, & @@ -433,14 +433,14 @@ module noahmp_tables ! - real :: xl_table(mvt) !leaf/stem orientation index + real :: xl_table(mvt) !< leaf/stem orientation index data ( xl_table (i),i=1,mvt) / 0.010,0.010,0.010,0.250,0.250,0.010, & & 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, & & 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, & & 0.250, 0.250, 0.000, 0.000, 0.000, 0.000, & & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / ! - real :: rhol_table(mvt,mband) !leaf reflectance: 1=vis, 2=nir + real :: rhol_table(mvt,mband) !< leaf reflectance: 1=vis, 2=nir data ( rhol_table (i,1),i=1,mvt) / 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, & & 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, & @@ -456,7 +456,7 @@ module noahmp_tables & 0.45, 0.45, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rhos_table(mvt,mband) !stem reflectance: 1=vis, 2=nir + real :: rhos_table(mvt,mband) !< stem reflectance: 1=vis, 2=nir data ( rhos_table (i,1),i=1,mvt) / 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, & & 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, & @@ -472,7 +472,7 @@ module noahmp_tables ! &_______________________________________________________________________& - real :: taul_table(mvt,mband) !leaf transmittance: 1=vis, 2=nir + real :: taul_table(mvt,mband) !< leaf transmittance: 1=vis, 2=nir ! data ( taul_table (i,1),i=1,mvt) / 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, & & 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, & @@ -486,7 +486,7 @@ module noahmp_tables & 0.25, 0.25, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: taus_table(mvt,mband) !stem transmittance: 1=vis, 2=nir + real :: taus_table(mvt,mband) !< stem transmittance: 1=vis, 2=nir data(taus_table (i,1),i=1,mvt) / 0.001,0.001,0.001,0.001,0.001, 0.001, & & 0.001, 0.001, 0.001, 0.220, 0.1105,0.220, & & 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, & @@ -501,7 +501,7 @@ module noahmp_tables & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / - real :: mrp_table(mvt) !microbial respiration parameter (umol co2 /kg c/ s) + real :: mrp_table(mvt) !< microbial respiration parameter (umol co2 /kg c/ s) data ( mrp_table (i),i=1,mvt) / 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, & & 0.19, 0.19, 0.40, 0.17,0.285, 0.23, & & 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, & @@ -509,7 +509,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / ! - real :: cwpvt_table(mvt) !empirical canopy wind parameter + real :: cwpvt_table(mvt) !< empirical canopy wind parameter data ( cwpvt_table (i),i=1,mvt) / 0.18, 0.67, 0.18, 0.67, 0.29, 1.00, & & 2.00, 1.30, 1.00, 5.00, 1.17, 1.67, & & 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, & @@ -517,21 +517,21 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wrrat_table(mvt) !wood to non-wood ratio + real :: wrrat_table(mvt) !< wood to non-wood ratio data ( wrrat_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, & & 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, & & 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wdpool_table(mvt) !wood pool (switch 1 or 0) depending on woody or not [-] + real :: wdpool_table(mvt) !< wood pool (switch 1 or 0) depending on woody or not [-] data ( wdpool_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, & & 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, & & 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: tdlef_table(mvt) !characteristic t for leaf freezing [k] + real :: tdlef_table(mvt) !< characteristic t for leaf freezing [k] data ( tdlef_table (i),i=1,mvt) / 278, 278, 268, 278, 268, 278, & & 278, 278, 278, 278, 268, 278, & & 278, 278, 0, 0, 0, 268, & @@ -539,28 +539,28 @@ module noahmp_tables & 0, 0, 0, 0, 0, 0 / - real :: nroot_table(mvt) !number of soil layers with root present + real :: nroot_table(mvt) !< number of soil layers with root present data ( nroot_table (i),i=1,mvt) / 4, 4, 4, 4, 4, 3, & & 3, 3, 3, 3, 2, 3, & & 1, 3, 1, 1, 0, 3, & & 3, 2, 0, 0, 0, 0, & & 0, 0, 0, 0, 0, 0 / - real :: rgl_table(mvt) !parameter used in radiation stress function + real :: rgl_table(mvt) !< parameter used in radiation stress function data ( rgl_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 100.0,& & 100.0, 100.0, 65.0, 100.0, 65.0, 100.0, & & 999.0, 100.0, 999.0, 999.0, 30.0, 100.0, & & 100.0, 100.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rs_table(mvt) !minimum stomatal resistance [s m-1] + real :: rs_table(mvt) !< minimum stomatal resistance [s m-1] data ( rs_table (i),i=1,mvt) / 125.0, 150.0,150.0,100.0,125.0,300.0,& & 170.0,300.0, 70.0, 40.0, 70.0, 40.0, & & 200.0, 40.0, 999.0,999.0,100.0,150.0, & & 150.0, 200.0,0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hs_table(mvt) !parameter used in vapor pressure deficit function + real :: hs_table(mvt) !< parameter used in vapor pressure deficit function data ( hs_table (i),i=1,mvt) / 47.35,41.69,47.35,54.53,51.93,42.00, & & 39.18, 42.00, 54.53, 36.35, 55.97, 36.25, & & 999.0, 36.25, 999.0, 999.0, 51.75, 42.00, & @@ -568,14 +568,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: topt_table(mvt) !optimum transpiration air temperature [k] + real :: topt_table(mvt) !< optimum transpiration air temperature [k] data ( topt_table (i),i=1,mvt) / 298.0,298.0,298.0,298.0,298.0,298.0, & & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & & 298.0, 298.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rsmax_table(mvt) !maximal stomatal resistance [s m-1] + real :: rsmax_table(mvt) !< maximal stomatal resistance [s m-1] data ( rsmax_table (i),i=1,mvt) / 5000., 5000.,5000.,5000.,5000.,5000.,& & 5000., 5000., 5000., 5000., 5000., 5000., & & 5000., 5000., 5000., 5000., 5000., 5000., & @@ -726,41 +726,41 @@ module noahmp_tables ! genparm.tbl parameters - real :: slope_table(9) !slope factor for soil drainage + real :: slope_table(9) !< slope factor for soil drainage data (slope_table(i), i=1,9) /0.1, 0.6, 1.0, 0.35, 0.55, 0.8, & & 0.63, 0.0, 0.0 / - real :: csoil_table = 2.00e+6 !soil heat capacity [j m-3 k-1] - real :: refdk_table = 2.0e-6 !parameter in the surface runoff parameterization - real :: refkdt_table = 3.0 !parameter in the surface runoff parameterization - real :: frzk_table =0.15 !frozen ground parameter - real :: zbot_table = -8.0 !depth [m] of lower boundary soil temperature - real :: czil_table = 0.1 !parameter used in the calculation of the roughness length for heat + real :: csoil_table = 2.00e+6 !< soil heat capacity [j m-3 k-1] + real :: refdk_table = 2.0e-6 !< parameter in the surface runoff parameterization + real :: refkdt_table = 3.0 !< parameter in the surface runoff parameterization + real :: frzk_table =0.15 !< frozen ground parameter + real :: zbot_table = -8.0 !< depth [m] of lower boundary soil temperature + real :: czil_table = 0.1 !< parameter used in the calculation of the roughness length for heat ! mptable.tbl radiation parameters ! &_______________________________________________________________________& - real :: albsat_table(msc,mband) !saturated soil albedos: 1=vis, 2=nir + real :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir data(albsat_table(i,1),i=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/ data(albsat_table(i,2),i=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ - real :: albdry_table(msc,mband) !dry soil albedos: 1=vis, 2=nir + real :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir data(albdry_table(i,1),i=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ data(albdry_table(i,2),i=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/ - real :: albice_table(mband) !albedo land ice: 1=vis, 2=nir + real :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir data (albice_table(i),i=1,mband) /0.80, 0.55/ - real :: alblak_table(mband) !albedo frozen lakes: 1=vis, 2=nir + real :: alblak_table(mband) !< albedo frozen lakes: 1=vis, 2=nir data (alblak_table(i),i=1,mband) /0.60, 0.40/ - real :: omegas_table(mband) !two-stream parameter omega for snow + real :: omegas_table(mband) !< two-stream parameter omega for snow data (omegas_table(i),i=1,mband) /0.8, 0.4/ - real :: betads_table = 0.5 !two-stream parameter betad for snow - real :: betais_table = 0.5 !two-stream parameter betad for snow + real :: betads_table = 0.5 !< two-stream parameter betad for snow + real :: betais_table = 0.5 !< two-stream parameter betad for snow - real :: eg_table(2) !emissivity + real :: eg_table(2) !< emissivity data eg_table /0.97, 0.98 / real :: betads, betais @@ -769,30 +769,30 @@ module noahmp_tables ! mptable.tbl global parameters - real :: co2_table = 395.e-06 !co2 partial pressure - real :: o2_table = 0.209 !o2 partial pressure - real :: timean_table = 10.5 !gridcell mean topgraphic index (global mean) - real :: fsatmx_table = 0.38 !maximum surface saturated fraction (global mean) - - real :: z0sno_table = 0.002 !snow surface roughness length (m) (0.002) - real :: ssi_table = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) - real :: snow_ret_fac_table = 5.e-5 !snowpack water release timescale factor (1/s) - real :: swemx_table = 1.00 !new snow mass to fully cover old snow (mm) - - real :: tau0_table = 1.e6 !tau0 from yang97 eqn. 10a - real :: grain_growth_table = 5000. !growth from vapor diffusion yang97 eqn. 10b - real :: extra_growth_table = 10. !extra growth near freezing yang97 eqn. 10c - real :: dirt_soot_table = 0.3 !dirt and soot term yang97 eqn. 10d - real :: bats_cosz_table = 2.0 !zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real :: bats_vis_new_table = 0.95 !new snow visible albedo - real :: bats_nir_new_table = 0.65 !new snow nir albedo - real :: bats_vis_age_table = 0.2 !age factor for diffuse visible snow albedo yang97 eqn. 17 - real :: bats_nir_age_table = 0.5 !age factor for diffuse nir snow albedo yang97 eqn. 18 - real :: bats_vis_dir_table = 0.4 !cosz factor for direct visible snow albedo yang97 eqn. 15 - real :: bats_nir_dir_table = 0.4 !cosz factor for direct nir snow albedo yang97 eqn. 16 - real :: rsurf_snow_table = 50.0 !surface resistance for snow(s/m) - real :: rsurf_exp_table = 5.0 !exponent in the shape parameter for soil resistance option 1 - real :: snow_emis_table = 0.95 !surface emissivity + real :: co2_table = 395.e-06 !< co2 partial pressure + real :: o2_table = 0.209 !< o2 partial pressure + real :: timean_table = 10.5 !< gridcell mean topgraphic index (global mean) + real :: fsatmx_table = 0.38 !< maximum surface saturated fraction (global mean) + + real :: z0sno_table = 0.002 !< snow surface roughness length (m) (0.002) + real :: ssi_table = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) + real :: snow_ret_fac_table = 5.e-5 !< snowpack water release timescale factor (1/s) + real :: swemx_table = 1.00 !< new snow mass to fully cover old snow (mm) + + real :: tau0_table = 1.e6 !< tau0 from yang97 eqn. 10a + real :: grain_growth_table = 5000. !< growth from vapor diffusion yang97 eqn. 10b + real :: extra_growth_table = 10. !< extra growth near freezing yang97 eqn. 10c + real :: dirt_soot_table = 0.3 !< dirt and soot term yang97 eqn. 10d + real :: bats_cosz_table = 2.0 !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real :: bats_vis_new_table = 0.95 !< new snow visible albedo + real :: bats_nir_new_table = 0.65 !< new snow nir albedo + real :: bats_vis_age_table = 0.2 !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real :: bats_nir_age_table = 0.5 !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real :: bats_vis_dir_table = 0.4 !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real :: bats_nir_dir_table = 0.4 !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real :: rsurf_snow_table = 50.0 !< surface resistance for snow(s/m) + real :: rsurf_exp_table = 5.0 !< exponent in the shape parameter for soil resistance option 1 + real :: snow_emis_table = 0.95 !< surface emissivity ! Noah mp crops @@ -806,77 +806,77 @@ module noahmp_tables ! &_______________________________________________________________________& - integer :: pltday_table(ncrop) ! planting date + integer :: pltday_table(ncrop) !< planting date data (pltday_table(i), i=1,5) /130,111,111,111,111/ - integer :: hsday_table(ncrop) ! harvest date + integer :: hsday_table(ncrop) !< harvest date data (hsday_table(i),i=1,5) /280,300,300,300,300/ - real :: plantpop_table(ncrop) ! plant density [per ha] - used? + real :: plantpop_table(ncrop) !< plant density [per ha] - used? data (plantpop_table(i),i=1,5) /78.0,78.0,78.0,78.0,78.0/ - real :: irri_table(ncrop) ! irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + real :: irri_table(ncrop) !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) data (irri_table(i),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: gddtbase_table(ncrop) ! base temperature for gdd accumulation [c] + real :: gddtbase_table(ncrop) !< base temperature for gdd accumulation [c] data (gddtbase_table(i),i=1,5) /10.0,10.0,10.0,10.0,10.0/ - real :: gddtcut_table(ncrop) ! upper temperature for gdd accumulation [c] + real :: gddtcut_table(ncrop) !< upper temperature for gdd accumulation [c] data (gddtcut_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: gdds1_table(ncrop) ! gdd from seeding to emergence + real :: gdds1_table(ncrop) !< gdd from seeding to emergence data (gdds1_table(i),i=1,5) /60.0,50.0,50.0,50.0,50.0/ - real :: gdds2_table(ncrop) ! gdd from seeding to initial vegetative + real :: gdds2_table(ncrop) !< gdd from seeding to initial vegetative data (gdds2_table(i),i=1,5) /675.0,718.0,718.0,718.0,718.0/ - real :: gdds3_table(ncrop) ! gdd from seeding to post vegetative + real :: gdds3_table(ncrop) !< gdd from seeding to post vegetative data (gdds3_table(i),i=1,5) /1183.0,933.0,933.0,933.0,933.0/ - real :: gdds4_table(ncrop) ! gdd from seeding to intial reproductive + real :: gdds4_table(ncrop) !< gdd from seeding to intial reproductive data (gdds4_table(i),i=1,5) /1253.0,1103.0,1103.0,1103.0,1103.0/ - real :: gdds5_table(ncrop) ! gdd from seeding to pysical maturity + real :: gdds5_table(ncrop) !< gdd from seeding to pysical maturity data (gdds5_table(i),i=1,5) /1605.0,1555.0,1555.0,1555.0,1555.0/ - integer :: c3c4_table(ncrop) ! photosynthetic pathway: 1. = c3 2. = c4 + integer :: c3c4_table(ncrop) !< photosynthetic pathway: 1. = c3 2. = c4 data (c3c4_table(i),i=1,5) /2.0,1.0,2.0,2.0,2.0/ - real :: aref_table(ncrop) ! reference maximum co2 assimulation rate + real :: aref_table(ncrop) !< reference maximum co2 assimulation rate data (aref_table(i),i=1,5) /7.0,7.0,7.0,7.0,7.0/ - real :: psnrf_table(ncrop) ! co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real :: psnrf_table(ncrop) !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) data (psnrf_table(i),i=1,5) /0.85,0.85,0.85,0.85,0.85/ - real :: i2par_table(ncrop) ! fraction of incoming solar radiation to photosynthetically active radiation + real :: i2par_table(ncrop) !< fraction of incoming solar radiation to photosynthetically active radiation data (i2par_table(i),i=1,5) / 0.5,0.5,0.5,0.5,0.5/ - real :: tassim0_table(ncrop) ! minimum temperature for co2 assimulation [c] + real :: tassim0_table(ncrop) !< minimum temperature for co2 assimulation [c] data (tassim0_table(i),i=1,5) /8.0,8.0,8.0,8.0,8.0/ - real :: tassim1_table(ncrop) ! co2 assimulation linearly increasing until temperature reaches t1 [c] + real :: tassim1_table(ncrop) !< co2 assimulation linearly increasing until temperature reaches t1 [c] data (tassim1_table(i),i=1,5) /18.0,18.0,18.0,18.0,18.0/ - real :: tassim2_table(ncrop) ! co2 assmilation rate remain at aref until temperature reaches t2 [c] + real :: tassim2_table(ncrop) !< co2 assmilation rate remain at aref until temperature reaches t2 [c] data (tassim2_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: k_table(ncrop) ! light extinction coefficient + real :: k_table(ncrop) !< light extinction coefficient data ( k_table(i),i=1,5) /0.55,0.55,0.55,0.55,0.55/ - real :: epsi_table(ncrop) ! initial light use efficiency + real :: epsi_table(ncrop) !< initial light use efficiency data (epsi_table(i),i=1,5) /12.5,12.5,12.5,12.5,12.5/ - real :: q10mr_table(ncrop) ! q10 for maintainance respiration + real :: q10mr_table(ncrop) !< q10 for maintainance respiration data (q10mr_table(i),i=1,5) /2.0,2.0,2.0,2.0,2.0/ - real :: foln_mx_table(ncrop) ! foliage nitrogen concentration when f(n)=1 (%) + real :: foln_mx_table(ncrop) !< foliage nitrogen concentration when f(n)=1 (%) data (foln_mx_table(i),i=1,5) /1.5,1.5,1.5,1.5,1.5/ - real :: lefreez_table(ncrop) ! characteristic t for leaf freezing [k] + real :: lefreez_table(ncrop) !< characteristic t for leaf freezing [k] data (lefreez_table(i),i=1,5) /268,268,268,268,268/ - real :: dile_fc_table(ncrop,nstage) ! coeficient for temperature leaf stress death [1/s] + real :: dile_fc_table(ncrop,nstage) !< coeficient for temperature leaf stress death [1/s] data (dile_fc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -886,7 +886,7 @@ module noahmp_tables data (dile_fc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: dile_fw_table(ncrop,nstage) ! coeficient for water leaf stress death [1/s] + real :: dile_fw_table(ncrop,nstage) !< coeficient for water leaf stress death [1/s] data (dile_fw_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -896,10 +896,10 @@ module noahmp_tables data (dile_fw_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: fra_gr_table(ncrop) ! fraction of growth respiration + real :: fra_gr_table(ncrop) !< fraction of growth respiration data (fra_gr_table(i),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - real :: lf_ovrc_table(ncrop,nstage) ! fraction of leaf turnover [1/s] + real :: lf_ovrc_table(ncrop,nstage) !< fraction of leaf turnover [1/s] data (lf_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -909,7 +909,7 @@ module noahmp_tables data (lf_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: st_ovrc_table(ncrop,nstage) ! fraction of stem turnover [1/s] + real :: st_ovrc_table(ncrop,nstage) !< fraction of stem turnover [1/s] data (st_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -919,7 +919,7 @@ module noahmp_tables data (st_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: rt_ovrc_table(ncrop,nstage) ! fraction of root tunrover [1/s] + real :: rt_ovrc_table(ncrop,nstage) !< fraction of root tunrover [1/s] data (rt_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -929,19 +929,19 @@ module noahmp_tables data (rt_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: lfmr25_table(ncrop) ! leaf maintenance respiration at 25c [umol co2/m**2 /s] + real :: lfmr25_table(ncrop) !< leaf maintenance respiration at 25c [umol co2/m**2 /s] data (lfmr25_table(i),i=1,5) /1.0,1.0,1.0,1.0,1.0/ - real :: stmr25_table(ncrop) ! stem maintenance respiration at 25c [umol co2/kg bio/s] + real :: stmr25_table(ncrop) !< stem maintenance respiration at 25c [umol co2/kg bio/s] data (stmr25_table(i),i=1,5) /0.05,0.1,0.1,0.1,0.1/ - real :: rtmr25_table(ncrop) ! root maintenance respiration at 25c [umol co2/kg bio/s] + real :: rtmr25_table(ncrop) !< root maintenance respiration at 25c [umol co2/kg bio/s] data (rtmr25_table(i),i=1,5) /0.05,0.0,0.0,0.0,0.0/ - real :: grainmr25_table(ncrop) ! grain maintenance respiration at 25c [umol co2/kg bio/s] + real :: grainmr25_table(ncrop) !< grain maintenance respiration at 25c [umol co2/kg bio/s] data (grainmr25_table(i),i=1,5) /0.0,0.1,0.1,0.1,0.1/ - real :: lfpt_table(ncrop,nstage) ! fraction of carbohydrate flux to leaf + real :: lfpt_table(ncrop,nstage) !< fraction of carbohydrate flux to leaf data (lfpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lfpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lfpt_table(i,3),i=1,5) /0.4,0.4,0.4,0.4,0.4/ @@ -952,7 +952,7 @@ module noahmp_tables data (lfpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: stpt_table(ncrop,nstage) ! fraction of carbohydrate flux to stem + real :: stpt_table(ncrop,nstage) !< fraction of carbohydrate flux to stem data (stpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (stpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (stpt_table(i,3),i=1,5) /0.2,0.2,0.2,0.2,0.2/ @@ -963,7 +963,7 @@ module noahmp_tables data (stpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: rtpt_table(ncrop,nstage) ! fraction of carbohydrate flux to root + real :: rtpt_table(ncrop,nstage) !< fraction of carbohydrate flux to root data (rtpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,3),i=1,5) /0.34,0.4,0.4,0.4,0.4/ @@ -973,7 +973,7 @@ module noahmp_tables data (rtpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: grainpt_table(ncrop,nstage) ! fraction of carbohydrate flux to grain + real :: grainpt_table(ncrop,nstage) !< fraction of carbohydrate flux to grain data (grainpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -983,7 +983,7 @@ module noahmp_tables data (grainpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: bio2lai_table(ncrop) ! leaf are per living leaf biomass [m^2/kg] + real :: bio2lai_table(ncrop) !< leaf are per living leaf biomass [m^2/kg] data (bio2lai_table(i),i=1,5) /0.035,0.015,0.015,0.015,0.015/ ! mptable.tbl optional parameters @@ -992,54 +992,54 @@ module noahmp_tables ! Saxton and Rawls 2006 Pedo-transfer function coefficients !------------------------------------------------------------------------------ - real :: sr2006_theta_1500t_a = -0.024 ! sand coefficient - real :: sr2006_theta_1500t_b = 0.487 ! clay coefficient - real :: sr2006_theta_1500t_c = 0.006 ! orgm coefficient - real :: sr2006_theta_1500t_d = 0.005 ! sand*orgm coefficient - real :: sr2006_theta_1500t_e = -0.013 ! clay*orgm coefficient - real :: sr2006_theta_1500t_f = 0.068 ! sand*clay coefficient - real :: sr2006_theta_1500t_g = 0.031 ! constant adjustment - - real :: sr2006_theta_1500_a = 0.14 ! theta_1500t coefficient - real :: sr2006_theta_1500_b = -0.02 ! constant adjustment - - real :: sr2006_theta_33t_a = -0.251 ! sand coefficient - real :: sr2006_theta_33t_b = 0.195 ! clay coefficient - real :: sr2006_theta_33t_c = 0.011 ! orgm coefficient - real :: sr2006_theta_33t_d = 0.006 ! sand*orgm coefficient - real :: sr2006_theta_33t_e = -0.027 ! clay*orgm coefficient - real :: sr2006_theta_33t_f = 0.452 ! sand*clay coefficient - real :: sr2006_theta_33t_g = 0.299 ! constant adjustment - - real :: sr2006_theta_33_a = 1.283 ! theta_33t*theta_33t coefficient - real :: sr2006_theta_33_b = -0.374 ! theta_33t coefficient - real :: sr2006_theta_33_c = -0.015 ! constant adjustment - - real :: sr2006_theta_s33t_a = 0.278 ! sand coefficient - real :: sr2006_theta_s33t_b = 0.034 ! clay coefficient - real :: sr2006_theta_s33t_c = 0.022 ! orgm coefficient - real :: sr2006_theta_s33t_d = -0.018 ! sand*orgm coefficient - real :: sr2006_theta_s33t_e = -0.027 ! clay*orgm coefficient - real :: sr2006_theta_s33t_f = -0.584 ! sand*clay coefficient - real :: sr2006_theta_s33t_g = 0.078 ! constant adjustment - - real :: sr2006_theta_s33_a = 0.636 ! theta_s33t coefficient - real :: sr2006_theta_s33_b = -0.107 ! constant adjustment - - real :: sr2006_psi_et_a = -21.67 ! sand coefficient - real :: sr2006_psi_et_b = -27.93 ! clay coefficient - real :: sr2006_psi_et_c = -81.97 ! theta_s33 coefficient - real :: sr2006_psi_et_d = 71.12 ! sand*theta_s33 coefficient - real :: sr2006_psi_et_e = 8.29 ! clay*theta_s33 coefficient - real :: sr2006_psi_et_f = 14.05 ! sand*clay coefficient - real :: sr2006_psi_et_g = 27.16 ! constant adjustment - - real :: sr2006_psi_e_a = 0.02 ! psi_et*psi_et coefficient - real :: sr2006_psi_e_b = -0.113 ! psi_et coefficient - real :: sr2006_psi_e_c = -0.7 ! constant adjustment - - real :: sr2006_smcmax_a = -0.097 ! sand adjustment - real :: sr2006_smcmax_b = 0.043 ! constant adjustment + real :: sr2006_theta_1500t_a = -0.024 !< sand coefficient + real :: sr2006_theta_1500t_b = 0.487 !< clay coefficient + real :: sr2006_theta_1500t_c = 0.006 !< orgm coefficient + real :: sr2006_theta_1500t_d = 0.005 !< sand*orgm coefficient + real :: sr2006_theta_1500t_e = -0.013 !< clay*orgm coefficient + real :: sr2006_theta_1500t_f = 0.068 !< sand*clay coefficient + real :: sr2006_theta_1500t_g = 0.031 !< constant adjustment + + real :: sr2006_theta_1500_a = 0.14 !< theta_1500t coefficient + real :: sr2006_theta_1500_b = -0.02 !< constant adjustment + + real :: sr2006_theta_33t_a = -0.251 !< sand coefficient + real :: sr2006_theta_33t_b = 0.195 !< clay coefficient + real :: sr2006_theta_33t_c = 0.011 !< orgm coefficient + real :: sr2006_theta_33t_d = 0.006 !< sand*orgm coefficient + real :: sr2006_theta_33t_e = -0.027 !< clay*orgm coefficient + real :: sr2006_theta_33t_f = 0.452 !< sand*clay coefficient + real :: sr2006_theta_33t_g = 0.299 !< constant adjustment + + real :: sr2006_theta_33_a = 1.283 !< theta_33t*theta_33t coefficient + real :: sr2006_theta_33_b = -0.374 !< theta_33t coefficient + real :: sr2006_theta_33_c = -0.015 !< constant adjustment + + real :: sr2006_theta_s33t_a = 0.278 !< sand coefficient + real :: sr2006_theta_s33t_b = 0.034 !< clay coefficient + real :: sr2006_theta_s33t_c = 0.022 !< orgm coefficient + real :: sr2006_theta_s33t_d = -0.018 !< sand*orgm coefficient + real :: sr2006_theta_s33t_e = -0.027 !< clay*orgm coefficient + real :: sr2006_theta_s33t_f = -0.584 !< sand*clay coefficient + real :: sr2006_theta_s33t_g = 0.078 !< constant adjustment + + real :: sr2006_theta_s33_a = 0.636 !< theta_s33t coefficient + real :: sr2006_theta_s33_b = -0.107 !< constant adjustment + + real :: sr2006_psi_et_a = -21.67 !< sand coefficient + real :: sr2006_psi_et_b = -27.93 !< clay coefficient + real :: sr2006_psi_et_c = -81.97 !< theta_s33 coefficient + real :: sr2006_psi_et_d = 71.12 !< sand*theta_s33 coefficient + real :: sr2006_psi_et_e = 8.29 !< clay*theta_s33 coefficient + real :: sr2006_psi_et_f = 14.05 !< sand*clay coefficient + real :: sr2006_psi_et_g = 27.16 !< constant adjustment + + real :: sr2006_psi_e_a = 0.02 !< psi_et*psi_et coefficient + real :: sr2006_psi_e_b = -0.113 !< psi_et coefficient + real :: sr2006_psi_e_c = -0.7 !< constant adjustment + + real :: sr2006_smcmax_a = -0.097 !< sand adjustment + real :: sr2006_smcmax_b = 0.043 !< constant adjustment end module noahmp_tables diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index f732c37ef..bd2cfd52d 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -127,7 +127,6 @@ !> \ingroup rad !! \defgroup module_radiation_aerosols module_radiation_aerosols -!> @{ !! This module contains climatological atmospheric aerosol schemes for !! radiation computations. !! @@ -766,8 +765,6 @@ end subroutine wrt_aerlog !> This subroutine defines the one wavenumber solar fluxes based on toa !! solar spectral distribution, and define the one wavenumber IR fluxes !! based on black-body emission distribution at a predefined temperature. -!>\section gel_set_spec General Algorithm -!-------------------------------- subroutine set_spectrum !................................ ! --- inputs: (module constants) @@ -915,7 +912,6 @@ end subroutine aer_init !! !!\section gen_clim_aerinit General Algorithm !!@{ -!----------------------------------- subroutine clim_aerinit & & ( solfwv, eirfwv, me & ! --- inputs & ) ! --- outputs @@ -4525,4 +4521,3 @@ end subroutine aer_property_gocart !..........................................! end module module_radiation_aerosols ! !==========================================! -!> @} diff --git a/physics/rascnv.F90 b/physics/rascnv.F90 index e78570f34..c57315109 100644 --- a/physics/rascnv.F90 +++ b/physics/rascnv.F90 @@ -2,6 +2,7 @@ !! This file contains the entire Relaxed Arakawa-Schubert convection !! parameteriztion +!>\defgroup rascnv_schm Relaxed Arakawa-Schubert Convection Scheme module rascnv USE machine , ONLY : kind_phys @@ -103,6 +104,7 @@ module rascnv ! CCPP entry points for gfdl cloud microphysics ! ----------------------------------------------------------------------- +!>\ingroup rascnv_schm !>\brief The subroutine initializes rascnv !! !> \section arg_table_rascnv_init Argument Table @@ -291,6 +293,7 @@ end subroutine rascnv_finalize !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!>\ingroup rascnv_schm !! \section arg_table_rascnv_run Argument Table !! \htmlinclude rascnv_run.html !! @@ -1078,6 +1081,8 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! RETURN end subroutine rascnv_run + +!>\ingroup rascnv_schm SUBROUTINE CLOUD( & & K, KP1, KD, NTRC, KBLMX, kblmn & &, FRACBL, MAX_NEG_BOUY, vsmooth, aw_scal & @@ -2704,6 +2709,7 @@ SUBROUTINE CLOUD( & RETURN end subroutine cloud +!>\ingroup rascnv_schm SUBROUTINE DDRFT( & & K, KP1, KD & &, TLA, ALFIND, wcbase & @@ -3980,6 +3986,7 @@ SUBROUTINE DDRFT( & RETURN end subroutine ddrft +!>\ingroup rascnv_schm SUBROUTINE QSATCN(TT,P,Q,DQDT) ! USE FUNCPHYS , ONLY : fpvs @@ -4011,6 +4018,7 @@ SUBROUTINE QSATCN(TT,P,Q,DQDT) return end subroutine qsatcn +!>\ingroup rascnv_schm SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) implicit none @@ -4061,6 +4069,7 @@ SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) RETURN end subroutine angrad +!>\ingroup rascnv_schm SUBROUTINE SETQRP implicit none @@ -4085,6 +4094,7 @@ SUBROUTINE SETQRP RETURN end subroutine setqrp +!>\ingroup rascnv_schm SUBROUTINE QRABF(QRP,QRAF,QRBF) implicit none ! @@ -4101,6 +4111,7 @@ SUBROUTINE QRABF(QRP,QRAF,QRBF) RETURN end subroutine qrabf +!>\ingroup rascnv_schm SUBROUTINE SETVTP implicit none @@ -4121,6 +4132,7 @@ SUBROUTINE SETVTP RETURN end subroutine setvtp ! +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION QRPF(QRP) ! implicit none @@ -4137,6 +4149,7 @@ real(kind=kind_phys) FUNCTION QRPF(QRP) RETURN end function qrpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION VTPF(ROR) ! implicit none @@ -4151,6 +4164,7 @@ real(kind=kind_phys) FUNCTION VTPF(ROR) RETURN end function vtpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION CLF(PRATE) ! implicit none diff --git a/physics/rrtmg_lw_cloud_optics.F90 b/physics/rrtmg_lw_cloud_optics.F90 index 02f32096a..1dd225514 100644 --- a/physics/rrtmg_lw_cloud_optics.F90 +++ b/physics/rrtmg_lw_cloud_optics.F90 @@ -4,22 +4,22 @@ module mo_rrtmg_lw_cloud_optics implicit none - ! Parameter used for RRTMG cloud-optics + !< Parameter used for RRTMG cloud-optics integer,parameter :: & nBandsLW_RRTMG = 16 - ! ipat is bands index for ebert & curry ice cloud (for iflagice=1) + !< ipat is bands index for ebert & curry ice cloud (for iflagice=1) integer,dimension(nBandsLW_RRTMG),parameter :: & ipat = (/ 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 /) real(kind_phys), parameter :: & - absrain = 0.33e-3, & ! Rain drop absorption coefficient \f$(m^{2}/g)\f$ . - abssnow0 = 1.5, & ! Snow flake absorption coefficient (micron), fu coeff - abssnow1 = 2.34e-3 ! Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef + absrain = 0.33e-3, & !< Rain drop absorption coefficient \f$(m^{2}/g)\f$ . + abssnow0 = 1.5, & !< Snow flake absorption coefficient (micron), fu coeff + abssnow1 = 2.34e-3 !< Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef - ! Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 - ! and 1.80) as a function of total column water vapor. the function - ! has been defined to minimize flux and cooling rate errors in these bands - ! over a wide range of precipitable water values. - ! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() + !< Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 + !! and 1.80) as a function of total column water vapor. the function + !! has been defined to minimize flux and cooling rate errors in these bands + !! over a wide range of precipitable water values. + !! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() real (kind_phys), dimension(nbandsLW_RRTMG) :: & a0 = (/ 1.66, 1.55, 1.58, 1.66, 1.54, 1.454, 1.89, 1.33, & 1.668, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66 /), & @@ -28,11 +28,11 @@ module mo_rrtmg_lw_cloud_optics a2 = (/ 0.00, -12.0, -11.7, 0.00, -0.72, -0.243, 0.19, -0.062, & 0.414, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) real(kind_phys),parameter :: & - diffusivityLow = 1.50, & ! Minimum diffusivity angle for bands 2-3 and 5-9 - diffusivityHigh = 1.80, & ! Maximum diffusivity angle for bands 2-3 and 5-9 - diffusivityB1410 = 1.66 ! Diffusivity for bands 1, 4, and 10 + diffusivityLow = 1.50, & !< Minimum diffusivity angle for bands 2-3 and 5-9 + diffusivityHigh = 1.80, & !< Maximum diffusivity angle for bands 2-3 and 5-9 + diffusivityB1410 = 1.66 !< Diffusivity for bands 1, 4, and 10 - ! RRTMG LW cloud property coefficients + !< RRTMG LW cloud property coefficients real(kind_phys) , dimension(58,nBandsLW_RRTMG),parameter :: & absliq1 = reshape(source=(/ & 1.64047e-03, 6.90533e-02, 7.72017e-02, 7.78054e-02, 7.69523e-02, & !1 @@ -557,26 +557,26 @@ subroutine rrtmg_lw_cloud_optics(ncol, nlay, nBandsLW, cld_lwp, cld_ref_liq, cld ilwcice, tau_cld, tau_precip) ! Inputs integer,intent(in) :: & - nBandsLW, & ! Number of spectral bands - ncol, & ! Number of horizontal gridpoints - nlay, & ! Number of vertical layers + nBandsLW, & !< Number of spectral bands + ncol, & !< Number of horizontal gridpoints + nlay, & !< Number of vertical layers ilwcliq, & ! ilwcice real(kind_phys), dimension(ncol,nlay), intent(in) :: & - cld_frac, & ! Cloud-fraction (1) - cld_lwp, & ! Cloud liquid water path (g/m2) - cld_ref_liq, & ! Effective radius (liquid) (micron) - cld_iwp, & ! Cloud ice water path (g/m2) - cld_ref_ice, & ! Effective radius (ice) (micron) - cld_rwp, & ! Cloud rain water path (g/m2) - cld_ref_rain, & ! Effective radius (rain-drop) (micron) - cld_swp, & ! Cloud snow-water path (g/m2) - cld_ref_snow ! Effective radius (snow-flake) (micron) + cld_frac, & !< Cloud-fraction (1) + cld_lwp, & !< Cloud liquid water path (g/m2) + cld_ref_liq, & !< Effective radius (liquid) (micron) + cld_iwp, & !< Cloud ice water path (g/m2) + cld_ref_ice, & !< Effective radius (ice) (micron) + cld_rwp, & !< Cloud rain water path (g/m2) + cld_ref_rain, & !< Effective radius (rain-drop) (micron) + cld_swp, & !< Cloud snow-water path (g/m2) + cld_ref_snow !< Effective radius (snow-flake) (micron) ! Outputs real(kind_phys),dimension(ncol,nlay,nBandsLW),intent(out) :: & - tau_cld, & ! Cloud optical-depth (1) - tau_precip ! Precipitation optical-depth (1) + tau_cld, & !< Cloud optical-depth (1) + tau_precip !< Precipitation optical-depth (1) ! Local variables integer :: ij,ik,ib,index,ia diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 index bb84c2137..39601b269 100644 --- a/physics/rrtmg_lw_post.F90 +++ b/physics/rrtmg_lw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_lw_post -!!This file contains +!>\file rrtmg_lw_post.F90 +!!This file contains GFS RRTMG scheme post. module rrtmg_lw_post contains diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 index d9946f695..98d9ac767 100644 --- a/physics/rrtmg_sw_post.F90 +++ b/physics/rrtmg_sw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_sw_post -!! This file contains +!>\file rrtmg_sw_post.F90 +!! This file contains GFS RRTMG scheme post. module rrtmg_sw_post contains diff --git a/physics/sfcsub.F b/physics/sfcsub.F index a84e9aef9..2d2b3cbc3 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -3,7 +3,7 @@ !>\defgroup mod_sfcsub GFS sfcsub Module -!!\ingroup LSMs +!!\ingroup Noah_LSM !> @{ !! This module contains grib code for each parameter-used in subroutines sfccycle() !! and setrmsk(). diff --git a/physics/ugwp_driver_v0.F b/physics/ugwp_driver_v0.F index abb78e7a6..1f0f02406 100644 --- a/physics/ugwp_driver_v0.F +++ b/physics/ugwp_driver_v0.F @@ -1,3 +1,5 @@ +!>\file ugwp_driver_v0.F + ! !===================================================================== ! From 3959ba8c453aabf3ed396f56b9f0f7f91a74da9a Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Fri, 9 Apr 2021 15:32:52 -0600 Subject: [PATCH 063/119] doc updates --- physics/cs_conv.F90 | 449 +++++++++++++++++++-------------------- physics/cu_gf_driver.F90 | 5 - physics/cu_ntiedtke.F90 | 5 - physics/dcyc2.f | 4 - physics/drag_suite.F90 | 4 - physics/get_prs_fv3.F90 | 11 - 6 files changed, 218 insertions(+), 260 deletions(-) diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index c8699fb69..24ce63256 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -4,13 +4,9 @@ module cs_conv_pre contains -!! \section arg_table_cs_conv_pre_init Argument Table -!! subroutine cs_conv_pre_init() end subroutine cs_conv_pre_init -!! \section arg_table_cs_conv_pre_finalize Argument Table -!! subroutine cs_conv_pre_finalize() end subroutine cs_conv_pre_finalize @@ -76,18 +72,13 @@ end module cs_conv_pre module cs_conv_post contains -!! \section arg_table_cs_conv_post_init Argument Table -!! subroutine cs_conv_post_init() end subroutine cs_conv_post_init -!! \section arg_table_cs_conv_post_finalize Argument Table -!! subroutine cs_conv_post_finalize() end subroutine cs_conv_post_finalize -!! -!! \section arg_table_cs_conv_post_run Argument Table +!> \section arg_table_cs_conv_post_run Argument Table !! \htmlinclude cs_conv_post_run.html !! subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg) @@ -216,13 +207,9 @@ module cs_conv contains -!> \section arg_table_cs_conv_init Argument Table -!! subroutine cs_conv_init() end subroutine cs_conv_init -!> \section arg_table_cs_conv_finalize Argument Table -!! subroutine cs_conv_finalize() end subroutine cs_conv_finalize @@ -2043,88 +2030,88 @@ SUBROUTINE CUMUP & !! in-cloud properties logical :: lprnt ! ! [OUTPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid water*eta - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice*eta - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! rain generation*eta - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snow generation*eta - REAL(r8) GCYT (IJSDIM) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM) ! cloud top MSE*eta - REAL(r8) GCQT (IJSDIM) ! cloud top moisture*eta - REAL(r8) GCLT (IJSDIM) ! cloud top liquid water*eta - REAL(r8) GCIT (IJSDIM) ! cloud top ice*eta - REAL(r8) GCtrT (IJSDIM, ntrq:ntr) ! cloud top tracer*eta - REAL(r8) GTPRT (IJSDIM) ! cloud top (rain+snow)*eta - REAL(r8) GCUT (IJSDIM) ! cloud top u*eta - REAL(r8) GCVT (IJSDIM) ! cloud top v*eta - REAL(r8) GCwT (IJSDIM) ! cloud top v*eta - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max of cloud top - REAL(r8) WCV (IJSDIM, KMAX) ! updraft velocity (half lev) !DD sigma make output + REAL(r8) ACWF (IJSDIM) !< cloud work function + REAL(r8) GCLZ (IJSDIM, KMAX) !< cloud liquid water*eta + REAL(r8) GCIZ (IJSDIM, KMAX) !< cloud ice*eta + REAL(r8) GPRCIZ(IJSDIM, KMAX) !< rain generation*eta + REAL(r8) GSNWIZ(IJSDIM, KMAX) !< snow generation*eta + REAL(r8) GCYT (IJSDIM) !< norm. mass flux @top + REAL(r8) GCHT (IJSDIM) !< cloud top MSE*eta + REAL(r8) GCQT (IJSDIM) !< cloud top moisture*eta + REAL(r8) GCLT (IJSDIM) !< cloud top liquid water*eta + REAL(r8) GCIT (IJSDIM) !< cloud top ice*eta + REAL(r8) GCtrT (IJSDIM, ntrq:ntr) !< cloud top tracer*eta + REAL(r8) GTPRT (IJSDIM) !< cloud top (rain+snow)*eta + REAL(r8) GCUT (IJSDIM) !< cloud top u*eta + REAL(r8) GCVT (IJSDIM) !< cloud top v*eta + REAL(r8) GCwT (IJSDIM) !< cloud top v*eta + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top + REAL(r8) WCV (IJSDIM, KMAX) !< updraft velocity (half lev) !DD sigma make output ! ! [MODIFIED] - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux + REAL(r8) GCYM (IJSDIM, KMAX) !< norm. mass flux ! ! [INPUT] - REAL(r8) GCHB (IJSDIM) ! cloud base Moist Static Energy - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracers - REAL(r8) GDU (IJSDIM, KMAX) ! U - REAL(r8) GDV (IJSDIM, KMAX) ! V - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDHS (IJSDIM, KMAX) ! saturation MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturation q - REAL(r8) GDT (IJSDIM, KMAX) ! T - REAL(r8) GDTM (IJSDIM, KMAX+1) ! T (half lev) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! q !!DDsigmadiag - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDZ (IJSDIM, KMAX) ! z - REAL(r8) GDZM (IJSDIM, KMAX+1) ! z (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! p (half lev) + REAL(r8) GCHB (IJSDIM) !< cloud base Moist Static Energy + REAL(r8) GCWB (IJSDIM) !< cloud base total water + REAL(r8) GCUB (IJSDIM) !< cloud base U + REAL(r8) GCVB (IJSDIM) !< cloud base V + REAL(r8) GCIB (IJSDIM) !< cloud base ice + REAL(r8) GCtrB (IJSDIM,ntrq:ntr) !< cloud base tracers + REAL(r8) GDU (IJSDIM, KMAX) !< U + REAL(r8) GDV (IJSDIM, KMAX) !< V + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDHS (IJSDIM, KMAX) !< saturation MSE + REAL(r8) GDQS (IJSDIM, KMAX) !< saturation q + REAL(r8) GDT (IJSDIM, KMAX) !< T + REAL(r8) GDTM (IJSDIM, KMAX+1) !< T (half lev) + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< q !!DDsigmadiag + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(r8) GDZ (IJSDIM, KMAX) !< z + REAL(r8) GDZM (IJSDIM, KMAX+1) !< z (half lev) + REAL(r8) GDPM (IJSDIM, KMAX+1) !< p (half lev) REAL(r8) FDQS (IJSDIM, KMAX) REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDZTR (IJSDIM) ! tropopause height - REAL(r8) CPRES ! pres. fac. for cum. fric. - REAL(r8) WCB(ijsdim) ! cloud base updraft velocity**2 -! REAL(r8) ERMR ! entrainment rate (ASMODE) + REAL(r8) GDZTR (IJSDIM) !< tropopause height + REAL(r8) CPRES !< pres. fac. for cum. fric. + REAL(r8) WCB(ijsdim) !< cloud base updraft velocity**2 +! REAL(r8) ERMR !< entrainment rate (ASMODE) INTEGER KB (IJSDIM) INTEGER CTP, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) ACWFK (IJSDIM,KMAX) ! cloud work function - REAL(r8) ACWFN (IJSDIM,KMAX) ! negative part of cloud work function - REAL(r8) myGCHt ! cloud top h *eta (half lev) - REAL(r8) GCHMZ (IJSDIM, KMAX) ! cloud h *eta (half lev) - REAL(r8) GCWMZ (IJSDIM, KMAX) ! cloud Qt*eta (half lev) - REAL(r8) GCUMZ (IJSDIM, KMAX) ! cloud U *eta (half lev) - REAL(r8) GCVMZ (IJSDIM, KMAX) ! cloud V *eta (half lev) - REAL(r8) GCqMZ (IJSDIM ) ! cloud qv*eta (half lev) - REAL(r8) GCIMZ (IJSDIM, KMAX) ! cloud Qi*eta (half lev) - REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)! cloud tracer*eta (half lev) - REAL(r8) GTPRMZ(IJSDIM, KMAX) ! rain+snow *eta (half lev) -! - REAL(r8) BUOY (IJSDIM, KMAX) ! buoyancy - REAL(r8) BUOYM (IJSDIM, KMAX) ! buoyancy (half lev) - REAL(r8) WCM (IJSDIM ) ! updraft velocity**2 (half lev) -! REAL(r8) WCM (IJSDIM, KMAX) ! updraft velocity**2 (half lev) + REAL(r8) ACWFK (IJSDIM,KMAX) !< cloud work function + REAL(r8) ACWFN (IJSDIM,KMAX) !< negative part of cloud work function + REAL(r8) myGCHt !< cloud top h *eta (half lev) + REAL(r8) GCHMZ (IJSDIM, KMAX) !< cloud h *eta (half lev) + REAL(r8) GCWMZ (IJSDIM, KMAX) !< cloud Qt*eta (half lev) + REAL(r8) GCUMZ (IJSDIM, KMAX) !< cloud U *eta (half lev) + REAL(r8) GCVMZ (IJSDIM, KMAX) !< cloud V *eta (half lev) + REAL(r8) GCqMZ (IJSDIM ) !< cloud qv*eta (half lev) + REAL(r8) GCIMZ (IJSDIM, KMAX) !< cloud Qi*eta (half lev) + REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)!< cloud tracer*eta (half lev) + REAL(r8) GTPRMZ(IJSDIM, KMAX) !< rain+snow *eta (half lev) +! + REAL(r8) BUOY (IJSDIM, KMAX) !< buoyancy + REAL(r8) BUOYM (IJSDIM, KMAX) !< buoyancy (half lev) + REAL(r8) WCM (IJSDIM ) !< updraft velocity**2 (half lev) +! REAL(r8) WCM (IJSDIM, KMAX) !< updraft velocity**2 (half lev) !DD sigma make output REAL(r8) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) - REAL(r8) GCY (IJSDIM, KMAX) ! norm. mass flux -! REAL(r8) ELAR (IJSDIM, KMAX) ! entrainment rate - REAL(r8) ELAR ! entrainment rate at mid layer -! - REAL(r8) GCHM (IJSDIM, KMAX) ! cloud MSE (half lev) - REAL(r8) GCWM (IJSDIM, KMAX) ! cloud Qt (half lev) !DDsigmadiag - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCLM (IJSDIM, KMAX) ! cloud liquid ( half lev) - REAL(r8) GCIM (IJSDIM, KMAX) ! cloud ice (half lev) - REAL(r8) GCUM (IJSDIM, KMAX) ! cloud U (half lev) - REAL(r8) GCVM (IJSDIM, KMAX) ! cloud V (half lev) - REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) ! cloud tracer (half lev) + REAL(r8) GCY (IJSDIM, KMAX) !< norm. mass flux +! REAL(r8) ELAR (IJSDIM, KMAX) !< entrainment rate + REAL(r8) ELAR !< entrainment rate at mid layer +! + REAL(r8) GCHM (IJSDIM, KMAX) !< cloud MSE (half lev) + REAL(r8) GCWM (IJSDIM, KMAX) !< cloud Qt (half lev) !DDsigmadiag + REAL(r8) GCTM (IJSDIM, KMAX) !< cloud T (half lev) !DDsigmadiag make output + REAL(r8) GCQM (IJSDIM, KMAX) !< cloud q (half lev) !DDsigmadiag make output + REAL(r8) GCLM (IJSDIM, KMAX) !< cloud liquid ( half lev) + REAL(r8) GCIM (IJSDIM, KMAX) !< cloud ice (half lev) + REAL(r8) GCUM (IJSDIM, KMAX) !< cloud U (half lev) + REAL(r8) GCVM (IJSDIM, KMAX) !< cloud V (half lev) + REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) !< cloud tracer (half lev) ! REAL(r8), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB REAL(r8) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & @@ -2675,19 +2662,19 @@ SUBROUTINE CUMBMX & !! cloud base mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) CBMFX (IJSDIM) ! cloud base mass flux + REAL(r8) CBMFX (IJSDIM) !< cloud base mass flux ! ! [INPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCYT (IJSDIM) ! norm mass flux @top - REAL(r8) GDZM (IJSDIM, KMAX+1) ! height - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) DELP (IJSDIM, KMAX) ! delt pressure - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max. of cloud top - INTEGER KB (IJSDIM) ! cloud base - REAL(r8) DELT ! time step + REAL(r8) ACWF (IJSDIM) !< cloud work function + REAL(r8) GCYT (IJSDIM) !< norm mass flux @top + REAL(r8) GDZM (IJSDIM, KMAX+1) !< height + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(r8) DELP (IJSDIM, KMAX) !< delt pressure + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max. of cloud top + INTEGER KB (IJSDIM) !< cloud base + REAL(r8) DELT !< time step INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -2760,26 +2747,26 @@ SUBROUTINE CUMFLX & !! cloud mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX, IM !! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux - REAL(r8) CMDET (IJSDIM, KMAX) !! detrainment mass flux - REAL(r8) GPRCI (IJSDIM, KMAX) !! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) !! snowfall generation - REAL(r8) QLIQ (IJSDIM, KMAX) !! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) !! cloud ice - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux + REAL(r8) CMDET (IJSDIM, KMAX) !< detrainment mass flux + REAL(r8) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(r8) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(r8) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(r8) QICE (IJSDIM, KMAX) !< cloud ice + REAL(r8) GTPRC0(IJSDIM) !< precip. before evap. ! ! [INPUT] - REAL(r8) CBMFX (IJSDIM) !! cloud base mass flux - REAL(r8) GCYM (IJSDIM, KMAX) !! normalized mass flux - REAL(r8) GCYT (IJSDIM) !! detraining mass flux - REAL(r8) GPRCIZ(IJSDIM, KMAX) !! precipitation/M - REAL(r8) GSNWIZ(IJSDIM, KMAX) !! snowfall/M - REAL(r8) GTPRT (IJSDIM) !! rain+snow @top - REAL(r8) GCLZ (IJSDIM, KMAX) !! cloud liquid/M - REAL(r8) GCIZ (IJSDIM, KMAX) !! cloud ice/M - INTEGER KB (IJSDIM) !! cloud base - INTEGER KT (IJSDIM) !! cloud top - INTEGER KTMX !! max of cloud top + REAL(r8) CBMFX (IJSDIM) !< cloud base mass flux + REAL(r8) GCYM (IJSDIM, KMAX) !< normalized mass flux + REAL(r8) GCYT (IJSDIM) !< detraining mass flux + REAL(r8) GPRCIZ(IJSDIM, KMAX) !< precipitation/M + REAL(r8) GSNWIZ(IJSDIM, KMAX) !< snowfall/M + REAL(r8) GTPRT (IJSDIM) !< rain+snow @top + REAL(r8) GCLZ (IJSDIM, KMAX) !< cloud liquid/M + REAL(r8) GCIZ (IJSDIM, KMAX) !< cloud ice/M + INTEGER KB (IJSDIM) !< cloud base + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top INTEGER ISTS, IENS, I, K ! DO K=1,KTMX @@ -2822,30 +2809,30 @@ SUBROUTINE CUMDET & !! detrainment INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! moisture tendency -! REAL(r8) GTCFRC(IJSDIM, KMAX) !! cloud fraction tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTT (IJSDIM, KMAX) !< temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< moisture tendency +! REAL(r8) GTCFRC(IJSDIM, KMAX) !< cloud fraction tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) !! moist static energy - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity qv -! REAL(r8) GDCFRC(IJSDIM, KMAX) !! cloud fraction + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity qv +! REAL(r8) GDCFRC(IJSDIM, KMAX) !< cloud fraction REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) CBMFX (IM, NCTP) !! cloud base mass flux - REAL(r8) GCYT (IJSDIM, NCTP) !! detraining mass flux - REAL(r8) GCHT (IJSDIM, NCTP) !! detraining MSE - REAL(r8) GCQT (IJSDIM, NCTP) !! detraining qv - REAL(r8) GCLT (IJSDIM, NCTP) !! detraining ql - REAL(r8) GCIT (IJSDIM, NCTP) !! detraining qi - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!! detraining tracer - REAL(r8) GCUT (IJSDIM, NCTP) !! detraining u - REAL(r8) GCVT (IJSDIM, NCTP) !! detraining v - REAL(r8) GDQI (IJSDIM, KMAX) !! cloud ice - INTEGER KT (IJSDIM, NCTP) !! cloud top + REAL(r8) CBMFX (IM, NCTP) !< cloud base mass flux + REAL(r8) GCYT (IJSDIM, NCTP) !< detraining mass flux + REAL(r8) GCHT (IJSDIM, NCTP) !< detraining MSE + REAL(r8) GCQT (IJSDIM, NCTP) !< detraining qv + REAL(r8) GCLT (IJSDIM, NCTP) !< detraining ql + REAL(r8) GCIT (IJSDIM, NCTP) !< detraining qi + REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!< detraining tracer + REAL(r8) GCUT (IJSDIM, NCTP) !< detraining u + REAL(r8) GCVT (IJSDIM, NCTP) !< detraining v + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + INTEGER KT (IJSDIM, NCTP) !< cloud top INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -2897,23 +2884,23 @@ SUBROUTINE CUMSBH & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX, NTR, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] REAL(r8) GDH (IJSDIM, KMAX) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity etc + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity etc REAL(r8) GDQI (IJSDIM, KMAX) REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(r8) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(r8) CPRES !< pressure factor for cumulus friction INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -3019,18 +3006,18 @@ SUBROUTINE CUMSBW & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX!! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(r8) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX, ISTS, IENS - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(r8) CPRES !< pressure factor for cumulus friction ! ! [INTERNAL WORK] REAL(r8) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 @@ -3102,46 +3089,46 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation logical, intent(in) :: do_aw, do_awdd, flx_form ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) ! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) ! u tendency - REAL(r8) GTV (IJSDIM, KMAX) ! v tendency - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux + REAL(r8) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux ! ! [OUTPUT] - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux - REAL(r8) GSNWP (IJSDIM, KMAX) ! snowfall flux - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(r8) GPRCP (IJSDIM, KMAX) !< rainfall flux + REAL(r8) GSNWP (IJSDIM, KMAX) !< snowfall flux + REAL(r8) GTEVP (IJSDIM, KMAX) !< evaporation+sublimation + REAL(r8) GMDD (IJSDIM, KMAX) !< downdraft mass flux !AW microphysical tendencies - REAL(r8) gtmelt (IJSDIM, KMAX) ! t tendency ice-liq - REAL(r8) gtevap (IJSDIM, KMAX) ! t tendency liq-vapor - REAL(r8) gtsubl (IJSDIM, KMAX) ! t tendency ice-vapor + REAL(r8) gtmelt (IJSDIM, KMAX) !< t tendency ice-liq + REAL(r8) gtevap (IJSDIM, KMAX) !< t tendency liq-vapor + REAL(r8) gtsubl (IJSDIM, KMAX) !< t tendency ice-vapor !AW eddy flux tendencies - REAL(r8) dtdwn (IJSDIM, KMAX) ! t tendency downdraft detrainment - REAL(r8) dqvdwn (IJSDIM, KMAX) ! qv tendency downdraft detrainment - REAL(r8) dqldwn (IJSDIM, KMAX) ! ql tendency downdraft detrainment - REAL(r8) dqidwn (IJSDIM, KMAX) ! qi tendency downdraft detrainment - REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) ! tracer tendency downdraft detrainment + REAL(r8) dtdwn (IJSDIM, KMAX) !< t tendency downdraft detrainment + REAL(r8) dqvdwn (IJSDIM, KMAX) !< qv tendency downdraft detrainment + REAL(r8) dqldwn (IJSDIM, KMAX) !< ql tendency downdraft detrainment + REAL(r8) dqidwn (IJSDIM, KMAX) !< qi tendency downdraft detrainment + REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) !< tracer tendency downdraft detrainment ! AW downdraft area fraction (assumed zero for now) - REAL(r8) sigmad (IJSDIM,KMAX) !DDsigma cloud downdraft area fraction + REAL(r8) sigmad (IJSDIM,KMAX) !< DDsigma cloud downdraft area fraction ! [INPUT] - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate moist static energy - REAL(r8) GDT (IJSDIM, KMAX) ! air temperature T - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZ (IJSDIM, KMAX) ! altitude - REAL(r8) GDZM (IJSDIM, KMAX+1) ! altitude (half lev) + REAL(r8) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(r8) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity etc + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(r8) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(r8) GDS (IJSDIM, KMAX) !< dry static energy + REAL(r8) GDHS (IJSDIM, KMAX) !< saturate moist static energy + REAL(r8) GDT (IJSDIM, KMAX) !< air temperature T + REAL(r8) GDU (IJSDIM, KMAX) !< u-velocity + REAL(r8) GDV (IJSDIM, KMAX) !< v-velocity + REAL(r8) GDZ (IJSDIM, KMAX) !< altitude + REAL(r8) GDZM (IJSDIM, KMAX+1) !< altitude (half lev) REAL(r8) FDQS (IJSDIM, KMAX) REAL(r8) DELP (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) @@ -3150,29 +3137,29 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation ! ! [INTERNAL WORK] ! Note: Some variables have 3-dimensions for the purpose of budget check. - REAL(r8) EVAPD (IJSDIM, KMAX) ! evap. in downdraft - REAL(r8) SUBLD (IJSDIM, KMAX) ! subl. in downdraft - REAL(r8) EVAPE (IJSDIM, KMAX) ! evap. in environment - REAL(r8) SUBLE (IJSDIM, KMAX) ! subl. in environment - REAL(r8) EVAPX (IJSDIM, KMAX) ! evap. env. to DD - REAL(r8) SUBLX (IJSDIM, KMAX) ! subl. env. to DD - REAL(r8) GMDDE (IJSDIM, KMAX) ! downdraft entrainment - REAL(r8) SNMLT (IJSDIM, KMAX) ! melt - freeze - REAL(r8) GCHDD (IJSDIM, KMAX) ! MSE detrainment - REAL(r8) GCWDD (IJSDIM, KMAX) ! water detrainment - REAL(r8) GTTEV (IJSDIM, KMAX) ! T tendency by evaporation - REAL(r8) GTQEV (IJSDIM, KMAX) ! q tendency by evaporation - REAL(r8) GCHD (ISTS:IENS) ! downdraft MSE - REAL(r8) GCWD (ISTS:IENS) ! downdraft q + REAL(r8) EVAPD (IJSDIM, KMAX) !< evap. in downdraft + REAL(r8) SUBLD (IJSDIM, KMAX) !< subl. in downdraft + REAL(r8) EVAPE (IJSDIM, KMAX) !< evap. in environment + REAL(r8) SUBLE (IJSDIM, KMAX) !< subl. in environment + REAL(r8) EVAPX (IJSDIM, KMAX) !< evap. env. to DD + REAL(r8) SUBLX (IJSDIM, KMAX) !< subl. env. to DD + REAL(r8) GMDDE (IJSDIM, KMAX) !< downdraft entrainment + REAL(r8) SNMLT (IJSDIM, KMAX) !< melt - freeze + REAL(r8) GCHDD (IJSDIM, KMAX) !< MSE detrainment + REAL(r8) GCWDD (IJSDIM, KMAX) !< water detrainment + REAL(r8) GTTEV (IJSDIM, KMAX) !< T tendency by evaporation + REAL(r8) GTQEV (IJSDIM, KMAX) !< q tendency by evaporation + REAL(r8) GCHD (ISTS:IENS) !< downdraft MSE + REAL(r8) GCWD (ISTS:IENS) !< downdraft q ! profiles of downdraft variables for AW flux tendencies - REAL(r8) GCdseD(ISTS:IENS, KMAX) ! downdraft dse - REAL(r8) GCqvD (ISTS:IENS, KMAX) ! downdraft qv -! REAL(r8) GCqlD (ISTS:IENS, KMAX) ! downdraft ql -! REAL(r8) GCqiD (ISTS:IENS, KMAX) ! downdraft qi - REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) ! downdraft tracer - - REAL(r8) GCUD (ISTS:IENS) ! downdraft u - REAL(r8) GCVD (ISTS:IENS) ! downdraft v + REAL(r8) GCdseD(ISTS:IENS, KMAX) !< downdraft dse + REAL(r8) GCqvD (ISTS:IENS, KMAX) !< downdraft qv +! REAL(r8) GCqlD (ISTS:IENS, KMAX) !< downdraft ql +! REAL(r8) GCqiD (ISTS:IENS, KMAX) !< downdraft qi + REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) !< downdraft tracer + + REAL(r8) GCUD (ISTS:IENS) !< downdraft u + REAL(r8) GCVD (ISTS:IENS) !< downdraft v REAL(r8) FSNOW (ISTS:IENS) REAL(r8) GMDDD (ISTS:IENS) @@ -3191,24 +3178,24 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation !DD#endif ! ! [INTERNAL PARM] - REAL(r8), parameter :: TWSNOW = 273.15_r8 ! wet-bulb temp. rain/snow - REAL(r8), parameter :: FTMLT = 4._r8 ! temp. factor for melt - REAL(r8), parameter :: GMFLXC = 5.e-2_r8 ! critical mass flux - REAL(r8), parameter :: VTERMS = 2._r8 ! terminal velocity of snowflake -! REAL(r8), parameter :: MELTAU = 10._r8 ! melting timescale - REAL(r8), parameter :: MELTAU = 20._r8 ! melting timescale ! Moorthi june 30, 2017 -! -! REAL(r8), parameter :: EVAPR = 0.4_r8 ! evaporation factor ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVAPR = 0.3_r8 ! evaporation factor -! REAL(r8), parameter :: EVAPR = 0._r8 ! evaporation factor - REAL(r8), parameter :: REVPDD = 1._r8 ! max rate of DD to evapolation - REAL(r8), parameter :: RDDR = 5.e-4_r8 ! DD rate (T0 R0 W0)^-1 -! REAL(r8), parameter :: RDDR = 0._r8 ! DD rate (T0 R0 W0)^-1 - REAL(r8), parameter :: RDDMX = 0.5_r8 ! norm. flux of downdraft - REAL(r8), parameter :: VTERM = 5._r8 ! term. vel. of precip. -! REAL(r8), parameter :: VTERM = 4._r8 ! term. vel. of precip. ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVATAU = 2._r8 ! evaporation/sublimation timescale - REAL(r8), parameter :: ZDMIN = 5.e2_r8 ! min altitude of downdraft detrainment + REAL(r8), parameter :: TWSNOW = 273.15_r8 !< wet-bulb temp. rain/snow + REAL(r8), parameter :: FTMLT = 4._r8 !< temp. factor for melt + REAL(r8), parameter :: GMFLXC = 5.e-2_r8 !< critical mass flux + REAL(r8), parameter :: VTERMS = 2._r8 !< terminal velocity of snowflake +! REAL(r8), parameter :: MELTAU = 10._r8 !< melting timescale + REAL(r8), parameter :: MELTAU = 20._r8 !< melting timescale ! Moorthi june 30, 2017 +! +! REAL(r8), parameter :: EVAPR = 0.4_r8 !< evaporation factor ! Moorthi June 28, 2017 + REAL(r8), parameter :: EVAPR = 0.3_r8 !< evaporation factor +! REAL(r8), parameter :: EVAPR = 0._r8 !< evaporation factor + REAL(r8), parameter :: REVPDD = 1._r8 !< max rate of DD to evapolation + REAL(r8), parameter :: RDDR = 5.e-4_r8 !< DD rate (T0 R0 W0)^-1 +! REAL(r8), parameter :: RDDR = 0._r8 !< DD rate (T0 R0 W0)^-1 + REAL(r8), parameter :: RDDMX = 0.5_r8 !< norm. flux of downdraft + REAL(r8), parameter :: VTERM = 5._r8 !< term. vel. of precip. +! REAL(r8), parameter :: VTERM = 4._r8 !< term. vel. of precip. ! Moorthi June 28, 2017 + REAL(r8), parameter :: EVATAU = 2._r8 !< evaporation/sublimation timescale + REAL(r8), parameter :: ZDMIN = 5.e2_r8 !< min altitude of downdraft detrainment real(r8), parameter :: evapovtrm=EVAPR/VTERM !NOTE @@ -3555,16 +3542,16 @@ SUBROUTINE CUMCLD & !! cloudiness INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(r8) CUMFRC(IJSDIM) !< cumulus cloud fraction ! ! [MODIFY] - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) QLIQ (IJSDIM, KMAX) ! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! cloud ice - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(r8) CUMCLW(IJSDIM, KMAX) !< cloud water in cumulus + REAL(r8) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(r8) QICE (IJSDIM, KMAX) !< cloud ice + REAL(r8) FLIQC (IJSDIM, KMAX) !< liquid ratio in cumulus ! ! [INPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) ! cumulus mass flux + REAL(r8) GMFLX (IJSDIM, KMAX) !< cumulus mass flux INTEGER KTMX INTEGER ISTS, IENS ! @@ -3573,11 +3560,11 @@ SUBROUTINE CUMCLD & !! cloudiness REAL(r8) CUMF, QC, wrk ! ! [INTERNAL PARAM] - REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &! Mc->cloudiness - CMFMAX = 3.e-1_r8, &! Mc->cloudiness - CLMIN = 1.e-3_r8, &! cloudiness Min. - CLMAX = 0.1_r8, &! cloudiness Max. - FACLW = 0.1_r8, &! Mc->CLW + REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &!< Mc->cloudiness + CMFMAX = 3.e-1_r8, &!< Mc->cloudiness + CLMIN = 1.e-3_r8, &!< cloudiness Min. + CLMAX = 0.1_r8, &!< cloudiness Max. + FACLW = 0.1_r8, &!< Mc->CLW FACLF = (CLMAX-CLMIN)/LOG(CMFMAX/CMFMIN) ! CUMFRC(ISTS:IENS) = zero diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 30ad8e6ab..dcf0d183b 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -46,11 +46,6 @@ subroutine cu_gf_driver_init(mpirank, mpiroot, errmsg, errflg) end subroutine cu_gf_driver_init - -!> \brief Brief description of the subroutine -!! -!! \section arg_table_cu_gf_driver_finalize Argument Table -!! subroutine cu_gf_driver_finalize() end subroutine cu_gf_driver_finalize ! diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 index a824c6af4..a39930d77 100644 --- a/physics/cu_ntiedtke.F90 +++ b/physics/cu_ntiedtke.F90 @@ -129,11 +129,6 @@ subroutine cu_ntiedtke_init(mpirank, mpiroot, errmsg, errflg) end subroutine cu_ntiedtke_init - -!> \brief Brief description of the subroutine -!! -!! \section arg_table_cu_ntiedtke_finalize Argument Table -!! subroutine cu_ntiedtke_finalize() end subroutine cu_ntiedtke_finalize ! diff --git a/physics/dcyc2.f b/physics/dcyc2.f index b4af3d867..f29d593a3 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -16,13 +16,9 @@ module dcyc2t3 contains -!! \section arg_table_dcyc2t3_init Argument Table -!! subroutine dcyc2t3_init() end subroutine dcyc2t3_init -!! \section arg_table_dcyc2t3_finalize Argument Table -!! subroutine dcyc2t3_finalize() end subroutine dcyc2t3_finalize diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 index 48f85c5db..195b1862e 100644 --- a/physics/drag_suite.F90 +++ b/physics/drag_suite.F90 @@ -7,8 +7,6 @@ module drag_suite contains -!> \section arg_table_drag_suite_init Argument Table -!! subroutine drag_suite_init() end subroutine drag_suite_init @@ -1311,8 +1309,6 @@ subroutine drag_suite_run( & end subroutine drag_suite_run !------------------------------------------------------------------- ! -!> \section arg_table_drag_suite_finalize Argument Table -!! subroutine drag_suite_finalize() end subroutine drag_suite_finalize diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 index 543df55bb..224c8c853 100644 --- a/physics/get_prs_fv3.F90 +++ b/physics/get_prs_fv3.F90 @@ -12,9 +12,6 @@ module get_prs_fv3 contains - -!! \section arg_table_get_prs_fv3_init Argument Table -!! subroutine get_prs_fv3_init() end subroutine get_prs_fv3_init @@ -55,9 +52,6 @@ subroutine get_prs_fv3_run(ix, levs, phii, prsi, tgrs, qgrs1, del, del_gz, errms end subroutine get_prs_fv3_run - -!! \section arg_table_get_prs_fv3_finalize Argument Table -!! subroutine get_prs_fv3_finalize() end subroutine get_prs_fv3_finalize @@ -79,8 +73,6 @@ module get_phi_fv3 contains -!! \section arg_table_get_phi_fv3_init Argument Table -!! subroutine get_phi_fv3_init() end subroutine get_phi_fv3_init @@ -123,9 +115,6 @@ subroutine get_phi_fv3_run(ix, levs, gt0, gq01, del_gz, phii, phil, errmsg, errf end subroutine get_phi_fv3_run - -!! \section arg_table_get_phi_fv3_finalize Argument Table -!! subroutine get_phi_fv3_finalize() end subroutine get_phi_fv3_finalize From 4522e6bd9d4044b0de185f1feea0dc7641e8986d Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Fri, 9 Apr 2021 15:36:21 -0600 Subject: [PATCH 064/119] doc updates 2 --- physics/cires_ugwp_post.F90 | 4 ---- physics/cnvc90.f | 6 ------ 2 files changed, 10 deletions(-) diff --git a/physics/cires_ugwp_post.F90 b/physics/cires_ugwp_post.F90 index cb337b315..bc75f10f3 100644 --- a/physics/cires_ugwp_post.F90 +++ b/physics/cires_ugwp_post.F90 @@ -6,8 +6,6 @@ module cires_ugwp_post contains -!> \section arg_table_cires_ugwp_post_init Argument Table -!! subroutine cires_ugwp_post_init () end subroutine cires_ugwp_post_init @@ -70,8 +68,6 @@ subroutine cires_ugwp_post_run (ldiag_ugwp, dtf, im, levs, & end subroutine cires_ugwp_post_run -!> \section arg_table_cires_ugwp_post_finalize Argument Table -!! subroutine cires_ugwp_post_finalize () end subroutine cires_ugwp_post_finalize diff --git a/physics/cnvc90.f b/physics/cnvc90.f index 9bef0ebf9..0f3d0f19d 100644 --- a/physics/cnvc90.f +++ b/physics/cnvc90.f @@ -6,9 +6,6 @@ module cnvc90 contains - -!! \section arg_table_cnvc90_init Argument Table -!! subroutine cnvc90_init() end subroutine cnvc90_init @@ -130,9 +127,6 @@ SUBROUTINE cnvc90_run(CLSTP,IM,RN,KBOT,KTOP,KM,PRSI, & END SUBROUTINE cnvc90_run !> @} - -!! \section arg_table_cnvc90_finalize Argument Table -!! subroutine cnvc90_finalize() end subroutine cnvc90_finalize From 7adb61fc72a186badad3b296fbc994c034f5564d Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Mon, 12 Apr 2021 18:47:07 +0000 Subject: [PATCH 065/119] Fixed conflicts --- physics/sfc_nst.f | 51 +++++++++----------------------------------- physics/sfc_nst.meta | 3 --- 2 files changed, 10 insertions(+), 44 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 0c8a90db3..6bec39288 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,13 +27,8 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: -<<<<<<< HEAD - & pi, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & -======= - & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -675,11 +670,7 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run -<<<<<<< HEAD - & (im, wet, lake, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, -======= - & (im,wet,tgice,tsfco,tsfc_wat,tsurf_wat,tseal,xt,xz,dt_cool, ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 + & (im, wet, tgice, lake, tsfco, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys @@ -691,12 +682,8 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads -<<<<<<< HEAD logical, dimension(im), intent(in) :: wet, lake -======= - logical, dimension(im), intent(in) :: wet real (kind=kind_phys), intent(in) :: tgice ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 real (kind=kind_phys), dimension(im), intent(in) :: & tsfco, tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac logical, intent(in) :: cplflx @@ -738,25 +725,16 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then -<<<<<<< HEAD + z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, & z_c, wet, lake, zero, omz1, im, 1, & nthreads, dtzm) do i=1,im if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile +! tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update -======= - z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, & - & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) - do i=1,im - if (wet(i) .and. oceanfrac(i) > zero) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -800,14 +778,10 @@ end subroutine sfc_nst_post_finalize ! ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ - subroutine sfc_nst_post_run & -<<<<<<< HEAD - & ( im, rlapse, tgice, wet, lake,icy, oro, oro_uf, nstf_name1, & -======= - & ( im, kdt, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 - & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & - & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & + subroutine sfc_nst_post_run & + & ( im, kdt, rlapse, tgice, wet, lake, icy, oro, oro_uf, nstf_name1, & + & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & + & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) use machine , only : kind_phys @@ -818,13 +792,8 @@ subroutine sfc_nst_post_run & integer, parameter :: kp = kind_phys ! --- inputs: -<<<<<<< HEAD - integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, icy, lake -======= integer, intent(in) :: im, kdt, nthreads - logical, dimension(im), intent(in) :: wet, icy ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 + logical, dimension(im), intent(in) :: wet, icy, lake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index cf2d451df..b214fabc3 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -688,14 +688,12 @@ type = logical intent = in optional = F -<<<<<<< HEAD [lake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag dimensions = (horizontal_loop_extent) type = logical -======= [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater @@ -712,7 +710,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys ->>>>>>> 990b9d0416e340e40e4b136561a85f63d46671e2 intent = in optional = F [tsfc_wat] From e1f64173ba60c0b2fb8cdad995d3505889dd2f39 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Tue, 13 Apr 2021 01:47:47 +0000 Subject: [PATCH 066/119] Fixed errors created during merge processes --- physics/sfc_nst.f | 26 ++++++++++++++------------ physics/sfc_nst.meta | 2 ++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 6bec39288..4fb72b28e 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,7 +27,7 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & sbc, pi,tgice, ps, u1, v1, t1, q1, tref, cm, ch, & & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & @@ -555,6 +555,7 @@ subroutine sfc_nst_run & !> - Call get_dtzm_point() to computes \a dtz and \a tsurf. call get_dtzm_point(xt(i),xz(i),dt_cool(i),z_c(i), & zsea1,zsea2,dtz) +! tsurf(i) = max(271.2_kp, tref(i) + dtz ) tsurf(i) = max(tgice, tref(i) + dtz ) ! if (lprnt .and. i == ipr) print *,' tsurf=',tsurf(i),' tref=', @@ -670,8 +671,9 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, tgice, lake, tsfco, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, - & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) + & (im, wet, lake, tgice, tsfco, tsfc_wat, tsurf_wat, + & tseal, xt, xz, dt_cool, z_c, tref, cplflx, + & oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys use module_nst_water_prop, only: get_dtzm_2d @@ -685,7 +687,8 @@ subroutine sfc_nst_pre_run logical, dimension(im), intent(in) :: wet, lake real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: - & tsfco, tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, + & tsfco logical, intent(in) :: cplflx ! --- input/outputs: @@ -703,7 +706,7 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 + real(kind=kind_phys), dimension(im) :: dtzm ! Initialize CCPP error handling variables errmsg = '' @@ -725,15 +728,13 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then - z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, & z_c, wet, lake, zero, omz1, im, 1, & nthreads, dtzm) do i=1,im if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf -! tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile - tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile + tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then @@ -778,10 +779,11 @@ end subroutine sfc_nst_post_finalize ! ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ - subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, lake, icy, oro, oro_uf, nstf_name1, & - & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & - & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & + subroutine sfc_nst_post_run & + & ( im, kdt, rlapse, tgice, wet, lake,icy, oro, oro_uf, & + & nstf_name1, & + & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & + & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) use machine , only : kind_phys diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index b214fabc3..febf9fd28 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -694,6 +694,8 @@ units = flag dimensions = (horizontal_loop_extent) type = logical + intent = in + optional = F [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater From 6a08c3ae2bb98ec82b2086ebc1bd84cbe6b52f40 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Tue, 13 Apr 2021 02:03:50 +0000 Subject: [PATCH 067/119] Fixed some code errors caused during merging processes --- physics/flake_driver.F90 | 24 ++++++++++++-- physics/module_nst_water_prop.f90 | 7 ++-- physics/sfc_nst.f | 54 +++++++++++++++++-------------- physics/sfc_nst.meta | 24 ++++++++++++++ 4 files changed, 79 insertions(+), 30 deletions(-) diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index b882c7404..ea47e4ce0 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -187,6 +187,10 @@ SUBROUTINE flake_driver_run ( & REAL (KIND = kind_phys) :: & lake_depth_max, T_bot_2_in, T_bot_2_out, dxlat,tb,tr,tt,temp,Kbar, DelK + +REAL (KIND = kind_phys) :: x, y !temperarory variables used for Tbot and Tsfc + !initilizations + INTEGER :: i,ipr,iter LOGICAL :: lflk_botsed_use @@ -237,9 +241,23 @@ SUBROUTINE flake_driver_run ( & ! else ! T_sfc(i) = tsurf(i) ! endif - T_sfc(i) = 0.2*tt + 0.8* tsurf(i) + T_sfc(i) = 0.1*tt + 0.9* tsurf(i) + endif +! +! Add empirical climatology of lake Tsfc and Tbot to the current Tsfc and Tbot +! to make sure Tsfc and Tbot are warmer than Tair in Winter or colder than Tair +! in Summer + + x = 0.03279*julian + if(xlat(i) .ge. 0.0) then + y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + T_sfc(i) = T_sfc(i) + 0.3*y + tb = tb + 0.05*y + else + y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + T_sfc(i) = T_sfc(i) - 0.3*y + tb = tb - 0.05*y endif - T_bot(i) = tb T_B1(i) = tb @@ -275,7 +293,7 @@ SUBROUTINE flake_driver_run ( & ! print*,'inside flake driver' ! print*, julian,xlat(i),w_albedo(I),w_extinc(i),lakedepth(i),elev(i),tb,tt,tsurf(i),T_sfc(i) - endif !lake fraction and depth + endif !lake endif !flag enddo 1001 format ( 'At icount=', i5, ' x = ', f5.2,5x, 'y = ', & diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index 39020526c..e02a60c62 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,6 +682,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! +! lake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -697,7 +698,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet + logical, dimension(nx,ny), intent(in) :: wet, lake ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -713,7 +714,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) ) then + if ( wet(i,j) .and. .not. lake(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index c9048f20d..4fb72b28e 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,8 +27,8 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & + & sbc, pi,tgice, ps, u1, v1, t1, q1, tref, cm, ch, & + & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -47,7 +47,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, xlon, sinlat, stress, ! +! prsl1, prslki, wet, lake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,6 +94,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! +! lake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -194,7 +195,8 @@ subroutine sfc_nst_run & real (kind=kind_phys), intent(in) :: timestep real (kind=kind_phys), intent(in) :: solhr - logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet + logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet, & + & lake ! &, icy logical, intent(in) :: lprnt @@ -259,14 +261,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. lake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. lake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -553,6 +555,7 @@ subroutine sfc_nst_run & !> - Call get_dtzm_point() to computes \a dtz and \a tsurf. call get_dtzm_point(xt(i),xz(i),dt_cool(i),z_c(i), & zsea1,zsea2,dtz) +! tsurf(i) = max(271.2_kp, tref(i) + dtz ) tsurf(i) = max(tgice, tref(i) + dtz ) ! if (lprnt .and. i == ipr) print *,' tsurf=',tsurf(i),' tref=', @@ -582,7 +585,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -668,8 +671,9 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im,wet,tgice,tsfco,tsfc_wat,tsurf_wat,tseal,xt,xz,dt_cool, - & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) + & (im, wet, lake, tgice, tsfco, tsfc_wat, tsurf_wat, + & tseal, xt, xz, dt_cool, z_c, tref, cplflx, + & oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys use module_nst_water_prop, only: get_dtzm_2d @@ -680,10 +684,11 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet + logical, dimension(im), intent(in) :: wet, lake real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: - & tsfco, tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, + & tsfco logical, intent(in) :: cplflx ! --- input/outputs: @@ -701,14 +706,14 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 + real(kind=kind_phys), dimension(im) :: dtzm ! Initialize CCPP error handling variables errmsg = '' errflg = 0 do i=1,im - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -723,14 +728,14 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then - z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, & - & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, + & z_c, wet, lake, zero, omz1, im, 1, + & nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update + if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then +! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf + tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile +! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -775,7 +780,8 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & + & ( im, kdt, rlapse, tgice, wet, lake,icy, oro, oro_uf, & + & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) @@ -789,7 +795,7 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, kdt, nthreads - logical, dimension(im), intent(in) :: wet, icy + logical, dimension(im), intent(in) :: wet, icy, lake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 @@ -830,12 +836,12 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, zsea1, zsea2, & + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, lake, zsea1, zsea2, & & im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i)) then + if (wet(i) .and. .not. lake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index dce87e8c4..febf9fd28 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -239,6 +239,14 @@ type = logical intent = in optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [xlon] standard_name = longitude long_name = longitude @@ -680,6 +688,14 @@ type = logical intent = in optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater @@ -865,6 +881,14 @@ type = logical intent = in optional = F +[lake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [icy] standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction From a81cdb9546dcd39024c2ee0c98db3b16bf4e67ab Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Tue, 13 Apr 2021 17:37:21 +0000 Subject: [PATCH 068/119] Corrected merge error --- physics/sfc_nst.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 4fb72b28e..9725e434c 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -734,7 +734,7 @@ subroutine sfc_nst_pre_run do i=1,im if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then From de88abbd5cc9df06041073f537738fb660436c90 Mon Sep 17 00:00:00 2001 From: Laurie Carson Date: Tue, 13 Apr 2021 11:39:43 -0600 Subject: [PATCH 069/119] merge bug-fix --- physics/GFS_MP_generic.F90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index 09fe3475a..43311801a 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -65,7 +65,6 @@ end subroutine GFS_MP_generic_pre_finalize end module GFS_MP_generic_pre -!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module !> This module contains the subroutine that calculates !! precipitation type and its post, which provides precipitation forcing !! to LSM. @@ -75,7 +74,8 @@ module GFS_MP_generic_post subroutine GFS_MP_generic_post_init() end subroutine GFS_MP_generic_post_init -!> \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() +!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module +!! \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() !! will be called. the tallies are then summed in calwxt_dominant(). For GFDL cloud MP scheme, determine convective !! rain/snow by surface temperature; and determine explicit rain/snow by rain/snow coming out directly from MP. !! @@ -119,8 +119,7 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl, dsnow_cpl ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp From 5411d4dd0a22feeec6c71221099889c9b363bb3e Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Tue, 13 Apr 2021 18:06:07 +0000 Subject: [PATCH 070/119] Fixed some issues --- physics/sfc_nst.f | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 9725e434c..ef2a5be5c 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,7 +27,7 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & sbc, pi,tgice, ps, u1, v1, t1, q1, tref, cm, ch, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & @@ -555,7 +555,6 @@ subroutine sfc_nst_run & !> - Call get_dtzm_point() to computes \a dtz and \a tsurf. call get_dtzm_point(xt(i),xz(i),dt_cool(i),z_c(i), & zsea1,zsea2,dtz) -! tsurf(i) = max(271.2_kp, tref(i) + dtz ) tsurf(i) = max(tgice, tref(i) + dtz ) ! if (lprnt .and. i == ipr) print *,' tsurf=',tsurf(i),' tref=', @@ -706,7 +705,7 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm + real(kind=kind_phys), dimension(im) :: dtzm, z_c_0 ! Initialize CCPP error handling variables errmsg = '' @@ -728,6 +727,7 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then + z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, & z_c, wet, lake, zero, omz1, im, 1, & nthreads, dtzm) From 8cd133de15abbefb20ca7717a098eb8b699ff0af Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Wed, 14 Apr 2021 16:43:00 +0000 Subject: [PATCH 071/119] Modified code based on Moorthi's commits: recoded the polynomial equation, redifined lake to use_flake --- physics/GFS_surface_composites.F90 | 10 ++++----- physics/GFS_surface_composites.meta | 2 +- physics/flake_driver.F90 | 12 +++++----- physics/flake_driver.meta | 2 +- physics/module_nst_water_prop.f90 | 8 +++---- physics/sfc_nst.f | 34 ++++++++++++++--------------- physics/sfc_nst.meta | 6 ++--- physics/sfc_ocean.F | 8 +++---- physics/sfc_ocean.meta | 2 +- 9 files changed, 42 insertions(+), 42 deletions(-) diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..a85db3344 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -26,7 +26,7 @@ end subroutine GFS_surface_composites_pre_finalize !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & + dry, icy, use_flake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & @@ -41,7 +41,7 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx integer, intent(in ) :: im, lkm logical, intent(in ) :: frac_grid, cplflx, cplwav2atm logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet + logical, dimension(im), intent(inout) :: dry, icy,use_flake, ocean, wet real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland @@ -230,12 +230,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx do i = 1, im if(lkm == 1) then if(lakefrac(i) >= 0.15 .and. lakedepth(i) > one) then - lake(i) = .true. + use_flake(i) = .true. else - lake(i) = .false. + use_flake(i) = .false. endif else - lake(i) = .false. + use_flake(i) = .false. endif enddo diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..5aa5f3cda 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -116,7 +116,7 @@ type = logical intent = inout optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index ea47e4ce0..f5fce8301 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -51,7 +51,7 @@ SUBROUTINE flake_driver_run ( & ! ---- Inputs im, ps, t1, q1, wind, & dlwflx, dswsfc, weasd, lakedepth, & - lake, xlat, delt, zlvl, elev, & + use_flake, xlat, delt, zlvl, elev, & wet, flag_iter, yearlen, julian, imon, & ! ---- in/outs snwdph, hice, tsurf, fice, T_sfc, hflx, evap, & @@ -95,7 +95,7 @@ SUBROUTINE flake_driver_run ( & real (kind=kind_phys), intent(in) :: julian - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(im), intent(in) :: flag_iter, wet, use_flake character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -216,7 +216,7 @@ SUBROUTINE flake_driver_run ( & do i = 1, im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then T_ice(i) = 273.15 T_snow(i) = 273.15 fetch(i) = 2.0E+03 @@ -250,11 +250,11 @@ SUBROUTINE flake_driver_run ( & x = 0.03279*julian if(xlat(i) .ge. 0.0) then - y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 T_sfc(i) = T_sfc(i) + 0.3*y tb = tb + 0.05*y else - y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 T_sfc(i) = T_sfc(i) - 0.3*y tb = tb - 0.05*y endif @@ -306,7 +306,7 @@ SUBROUTINE flake_driver_run ( & ! call lake interface do i=1,im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then dMsnowdt_in = weasd(i)/delt I_atm_in = dswsfc(i) Q_atm_lw_in = dlwflx(i) diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index 2b857e509..8786abfd5 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -131,7 +131,7 @@ kind = kind_phys intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index e02a60c62..3ca7366bd 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,7 +682,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! -! lake - logical, flag for lake point only 1 ! +! use_flake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -698,7 +698,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet, lake + logical, dimension(nx,ny), intent(in) :: wet, use_flake ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -714,7 +714,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) .and. .not. lake(i,j)) then + if ( wet(i,j) .and. .not. use_flake(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index ef2a5be5c..d8af2bb3c 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -28,7 +28,7 @@ end subroutine sfc_nst_finalize subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & + & prsl1, prslki, prsik1, prslk1, wet,use_flake, xlon, sinlat,& & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -47,7 +47,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, lake, xlon, sinlat, stress, ! +! prsl1, prslki, wet, use_flake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,7 +94,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! -! lake - logical, =T if any lake otherwise ocn +! use_flake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -196,7 +196,7 @@ subroutine sfc_nst_run & real (kind=kind_phys), intent(in) :: solhr logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet, & - & lake + & use_flake ! &, icy logical, intent(in) :: lprnt @@ -261,14 +261,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) .and. .not. lake(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. use_flake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i) .and. .not. lake(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. use_flake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -584,7 +584,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -670,7 +670,7 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, lake, tgice, tsfco, tsfc_wat, tsurf_wat, + & (im, wet, use_flake, tgice, tsfco, tsfc_wat, tsurf_wat, & tseal, xt, xz, dt_cool, z_c, tref, cplflx, & oceanfrac, nthreads, errmsg, errflg) @@ -683,7 +683,7 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, lake + logical, dimension(im), intent(in) :: wet, use_flake real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, @@ -712,7 +712,7 @@ subroutine sfc_nst_pre_run errflg = 0 do i=1,im - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -729,10 +729,10 @@ subroutine sfc_nst_pre_run if (cplflx) then z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, - & z_c, wet, lake, zero, omz1, im, 1, + & z_c, wet, use_flake, zero, omz1, im, 1, & nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then + if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update @@ -780,7 +780,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, lake,icy, oro, oro_uf, & + & ( im, kdt, rlapse, tgice, wet, use_flake,icy, oro, oro_uf, & & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & @@ -795,7 +795,7 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, kdt, nthreads - logical, dimension(im), intent(in) :: wet, icy, lake + logical, dimension(im), intent(in) :: wet, icy, use_flake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 @@ -836,12 +836,12 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, lake, zsea1, zsea2, & - & im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, use_flake, & + & zsea1, zsea2, im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index febf9fd28..6b4835da2 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -239,7 +239,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -688,7 +688,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -881,7 +881,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F index 8da60bb01..736b45f92 100644 --- a/physics/sfc_ocean.F +++ b/physics/sfc_ocean.F @@ -27,7 +27,7 @@ subroutine sfc_ocean_run & !................................... ! --- inputs: & ( im, rd, eps, epsm1, rvrdm1, ps, t1, q1, & - & tskin, cm, ch, prsl1, prslki, wet, lake, wind, &, ! --- inputs + & tskin, cm, ch, prsl1, prslki, wet, use_flake, wind, &, ! --- inputs & flag_iter, & & qsurf, cmm, chh, gflux, evap, hflx, ep, & ! --- outputs & errmsg, errflg & @@ -42,7 +42,7 @@ subroutine sfc_ocean_run & ! inputs: ! ! ( im, ps, t1, q1, tskin, cm, ch, ! !! ( im, ps, u1, v1, t1, q1, tskin, cm, ch, ! -! prsl1, prslki, wet, lake, wind, flag_iter, ! +! prsl1, prslki, wet, use_flake, wind, flag_iter, ! ! outputs: ! ! qsurf, cmm, chh, gflux, evap, hflx, ep ) ! ! ! @@ -102,7 +102,7 @@ subroutine sfc_ocean_run & real (kind=kind_phys), dimension(im), intent(in) :: ps, & & t1, q1, tskin, cm, ch, prsl1, prslki, wind - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(im), intent(in) :: flag_iter, wet, use_flake ! --- outputs: real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & @@ -130,7 +130,7 @@ subroutine sfc_ocean_run & ! ps is in pascals, wind is wind speed, ! rho is density, qss is sat. hum. at surface - if (wet(i) .and. flag_iter(i) .and. .not. lake(i)) then + if (wet(i) .and. flag_iter(i) .and. .not. use_flake(i)) then q0 = max( q1(i), qmin ) rho = prsl1(i) / (rd*t1(i)*(one + rvrdm1*q0)) diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index afdea6c3f..bd7bf241a 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -131,7 +131,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag From 80ae7617e655ef91a743377a76e4eb9fd897df0b Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Wed, 14 Apr 2021 16:49:42 +0000 Subject: [PATCH 072/119] Recoded the polynomial equation and redefined lake as use_flake --- physics/GFS_surface_composites.F90 | 10 ++++----- physics/GFS_surface_composites.meta | 2 +- physics/flake_driver.F90 | 13 ++++++----- physics/flake_driver.meta | 2 +- physics/module_nst_water_prop.f90 | 8 +++---- physics/sfc_nst.f | 34 ++++++++++++++--------------- physics/sfc_nst.meta | 6 ++--- physics/sfc_ocean.F | 8 +++---- physics/sfc_ocean.meta | 2 +- 9 files changed, 43 insertions(+), 42 deletions(-) diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..a85db3344 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -26,7 +26,7 @@ end subroutine GFS_surface_composites_pre_finalize !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & + dry, icy, use_flake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & @@ -41,7 +41,7 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx integer, intent(in ) :: im, lkm logical, intent(in ) :: frac_grid, cplflx, cplwav2atm logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet + logical, dimension(im), intent(inout) :: dry, icy,use_flake, ocean, wet real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland @@ -230,12 +230,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx do i = 1, im if(lkm == 1) then if(lakefrac(i) >= 0.15 .and. lakedepth(i) > one) then - lake(i) = .true. + use_flake(i) = .true. else - lake(i) = .false. + use_flake(i) = .false. endif else - lake(i) = .false. + use_flake(i) = .false. endif enddo diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..5aa5f3cda 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -116,7 +116,7 @@ type = logical intent = inout optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index ea47e4ce0..62c431a59 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -51,7 +51,7 @@ SUBROUTINE flake_driver_run ( & ! ---- Inputs im, ps, t1, q1, wind, & dlwflx, dswsfc, weasd, lakedepth, & - lake, xlat, delt, zlvl, elev, & + use_flake, xlat, delt, zlvl, elev, & wet, flag_iter, yearlen, julian, imon, & ! ---- in/outs snwdph, hice, tsurf, fice, T_sfc, hflx, evap, & @@ -95,7 +95,7 @@ SUBROUTINE flake_driver_run ( & real (kind=kind_phys), intent(in) :: julian - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(im), intent(in) :: flag_iter, wet, use_flake character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -216,7 +216,7 @@ SUBROUTINE flake_driver_run ( & do i = 1, im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then T_ice(i) = 273.15 T_snow(i) = 273.15 fetch(i) = 2.0E+03 @@ -250,11 +250,11 @@ SUBROUTINE flake_driver_run ( & x = 0.03279*julian if(xlat(i) .ge. 0.0) then - y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 T_sfc(i) = T_sfc(i) + 0.3*y tb = tb + 0.05*y else - y = 0.0034*x**5 -0.1241*x**4+1.6231*x**3-8.8666*x**2+17.206*x-4.2929 + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 T_sfc(i) = T_sfc(i) - 0.3*y tb = tb - 0.05*y endif @@ -306,7 +306,7 @@ SUBROUTINE flake_driver_run ( & ! call lake interface do i=1,im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then dMsnowdt_in = weasd(i)/delt I_atm_in = dswsfc(i) Q_atm_lw_in = dlwflx(i) @@ -409,3 +409,4 @@ END SUBROUTINE flake_driver_run !--------------------------------- end module flake_driver + \ No newline at end of file diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index 2b857e509..8786abfd5 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -131,7 +131,7 @@ kind = kind_phys intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index e02a60c62..3ca7366bd 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,7 +682,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! -! lake - logical, flag for lake point only 1 ! +! use_flake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -698,7 +698,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet, lake + logical, dimension(nx,ny), intent(in) :: wet, use_flake ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -714,7 +714,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,lake,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) .and. .not. lake(i,j)) then + if ( wet(i,j) .and. .not. use_flake(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index ef2a5be5c..d8af2bb3c 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -28,7 +28,7 @@ end subroutine sfc_nst_finalize subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, lake, xlon, sinlat, & + & prsl1, prslki, prsik1, prslk1, wet,use_flake, xlon, sinlat,& & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -47,7 +47,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, lake, xlon, sinlat, stress, ! +! prsl1, prslki, wet, use_flake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,7 +94,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! -! lake - logical, =T if any lake otherwise ocn +! use_flake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -196,7 +196,7 @@ subroutine sfc_nst_run & real (kind=kind_phys), intent(in) :: solhr logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet, & - & lake + & use_flake ! &, icy logical, intent(in) :: lprnt @@ -261,14 +261,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) .and. .not. lake(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. use_flake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i) .and. .not. lake(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. use_flake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -584,7 +584,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -670,7 +670,7 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, lake, tgice, tsfco, tsfc_wat, tsurf_wat, + & (im, wet, use_flake, tgice, tsfco, tsfc_wat, tsurf_wat, & tseal, xt, xz, dt_cool, z_c, tref, cplflx, & oceanfrac, nthreads, errmsg, errflg) @@ -683,7 +683,7 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, lake + logical, dimension(im), intent(in) :: wet, use_flake real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, @@ -712,7 +712,7 @@ subroutine sfc_nst_pre_run errflg = 0 do i=1,im - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -729,10 +729,10 @@ subroutine sfc_nst_pre_run if (cplflx) then z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, - & z_c, wet, lake, zero, omz1, im, 1, + & z_c, wet, use_flake, zero, omz1, im, 1, & nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero .and. .not. lake(i)) then + if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update @@ -780,7 +780,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, lake,icy, oro, oro_uf, & + & ( im, kdt, rlapse, tgice, wet, use_flake,icy, oro, oro_uf, & & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & @@ -795,7 +795,7 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, kdt, nthreads - logical, dimension(im), intent(in) :: wet, icy, lake + logical, dimension(im), intent(in) :: wet, icy, use_flake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 @@ -836,12 +836,12 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, lake, zsea1, zsea2, & - & im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, use_flake, & + & zsea1, zsea2, im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i) .and. .not. lake(i)) then + if (wet(i) .and. .not. use_flake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index febf9fd28..6b4835da2 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -239,7 +239,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -688,7 +688,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -881,7 +881,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F index 8da60bb01..736b45f92 100644 --- a/physics/sfc_ocean.F +++ b/physics/sfc_ocean.F @@ -27,7 +27,7 @@ subroutine sfc_ocean_run & !................................... ! --- inputs: & ( im, rd, eps, epsm1, rvrdm1, ps, t1, q1, & - & tskin, cm, ch, prsl1, prslki, wet, lake, wind, &, ! --- inputs + & tskin, cm, ch, prsl1, prslki, wet, use_flake, wind, &, ! --- inputs & flag_iter, & & qsurf, cmm, chh, gflux, evap, hflx, ep, & ! --- outputs & errmsg, errflg & @@ -42,7 +42,7 @@ subroutine sfc_ocean_run & ! inputs: ! ! ( im, ps, t1, q1, tskin, cm, ch, ! !! ( im, ps, u1, v1, t1, q1, tskin, cm, ch, ! -! prsl1, prslki, wet, lake, wind, flag_iter, ! +! prsl1, prslki, wet, use_flake, wind, flag_iter, ! ! outputs: ! ! qsurf, cmm, chh, gflux, evap, hflx, ep ) ! ! ! @@ -102,7 +102,7 @@ subroutine sfc_ocean_run & real (kind=kind_phys), dimension(im), intent(in) :: ps, & & t1, q1, tskin, cm, ch, prsl1, prslki, wind - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(im), intent(in) :: flag_iter, wet, use_flake ! --- outputs: real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & @@ -130,7 +130,7 @@ subroutine sfc_ocean_run & ! ps is in pascals, wind is wind speed, ! rho is density, qss is sat. hum. at surface - if (wet(i) .and. flag_iter(i) .and. .not. lake(i)) then + if (wet(i) .and. flag_iter(i) .and. .not. use_flake(i)) then q0 = max( q1(i), qmin ) rho = prsl1(i) / (rd*t1(i)*(one + rvrdm1*q0)) diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index afdea6c3f..bd7bf241a 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -131,7 +131,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag From b39b3134cfedaeacdf9f6ef7ead518b09af426f8 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 7 Apr 2021 14:42:59 -0600 Subject: [PATCH 073/119] Convert more explicit dimensions of argument variables to assumed-size dimensions, fix Fortran/metadata inconsistencies --- physics/GFS_cloud_diagnostics.F90 | 6 +- physics/GFS_rrtmg_pre.F90 | 10 +- physics/GFS_rrtmg_pre.meta | 52 +- physics/GFS_rrtmg_setup.F90 | 2 +- physics/GFS_rrtmgp_cloud_overlap_pre.F90 | 4 +- physics/GFS_rrtmgp_cloud_overlap_pre.meta | 50 +- physics/GFS_rrtmgp_gfdlmp_pre.F90 | 8 +- physics/GFS_rrtmgp_sw_pre.F90 | 2 +- physics/GFS_rrtmgp_sw_pre.meta | 128 +-- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 8 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 108 +- physics/GFS_rrtmgp_zhaocarr_pre.F90 | 4 +- physics/GFS_rrtmgp_zhaocarr_pre.meta | 34 +- physics/cs_conv.F90 | 1209 +++++++++++---------- physics/cu_gf_driver.F90 | 4 +- physics/gfdl_fv_sat_adj.F90 | 25 +- physics/gfdl_sfc_layer.F90 | 14 +- physics/gmtb_scm_sfc_flux_spec.F90 | 4 + physics/gwdps.f | 4 +- physics/h2o_def.meta | 1 - physics/module_MYJPBL_wrapper.F90 | 4 +- physics/module_MYJPBL_wrapper.meta | 24 +- physics/module_MYJSFC_wrapper.F90 | 2 +- physics/module_MYNNPBL_wrapper.F90 | 18 +- physics/module_MYNNSFC_wrapper.F90 | 41 +- physics/moninedmf.f | 44 +- physics/moninedmf.meta | 2 + physics/mp_fer_hires.meta | 1 + physics/ozne_def.meta | 1 - physics/ozphys_2015.f | 3 +- physics/rascnv.F90 | 55 +- physics/rrtmg_sw_pre.F90 | 2 +- physics/samfdeepcnv.f | 2 +- physics/satmedmfvdifq.meta | 4 +- physics/sfc_noahmp_drv.F90 | 12 +- physics/sfc_nst.meta | 16 +- physics/sfc_sice.f | 20 +- physics/shinhongvdif.F90 | 2 +- physics/shinhongvdif.meta | 12 +- physics/ugwpv1_gsldrag_post.F90 | 21 +- physics/ugwpv1_gsldrag_post.meta | 27 +- physics/unified_ugwp.F90 | 6 +- physics/ysuvdif.F90 | 14 +- physics/ysuvdif.meta | 12 +- 44 files changed, 1007 insertions(+), 1015 deletions(-) diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 index 5aa5dbfa6..215143bb2 100644 --- a/physics/GFS_cloud_diagnostics.F90 +++ b/physics/GFS_cloud_diagnostics.F90 @@ -80,9 +80,9 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l ! Local variables integer i,id,iCol,iLay,icld real(kind_phys) :: tem1 - real(kind_phys),dimension(:,:) :: ptop1 - real(kind_phys),dimension(:) :: rlat - real(kind_phys),dimension(:,:) :: cldcnv + real(kind_phys),dimension(nCol,NK_CLDS+1) :: ptop1 + real(kind_phys),dimension(nCol) :: rlat + real(kind_phys),dimension(nCol,nLev) :: cldcnv if (.not. (lsswr .or. lslwr)) return diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 6ec6497a8..b2219bc8c 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -26,8 +26,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & ltaerosol, lgfdlmprad, uni_cld, effr_in, do_mynnedmf, lmfshal, & lmfdeep2, fhswr, fhlwr, solhr, sup, con_eps, epsm1, fvirt, & rog, rocp, con_rd, xlat_d, xlat, xlon, coslat, sinlat, tsfc, slmsk, & - prsi, prsl, prslk, tgrs, sfc_wts, mg_cld, effrr_in, pert_clds,sppt_wts,& - sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, & !inputs from here and above + prsi, prsl, prslk, tgrs, sfc_wts, mg_cld, effrr_in, pert_clds, & + sppt_wts, sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, & !inputs from here and above coszen, coszdg, effrl_inout, effri_inout, effrs_inout, & clouds1, clouds2, clouds3, clouds4, clouds5, & !in/out from here and above kd, kt, kb, mtopa, mbota, raddt, tsfg, tsfa, de_lgth, alb1d, delp, dz, & !output from here and below @@ -128,7 +128,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & integer, intent(out) :: kd, kt, kb - integer, dimension(im,3), intent(out) :: mbota, mtopa + integer, dimension(:,:), intent(out) :: mbota, mtopa real(kind=kind_phys), intent(out) :: raddt @@ -140,9 +140,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & plyr, tlyr, & qlyr, olyr - real(kind=kind_phys), dimension(:,;), intent(out) :: plvl, tlvl - - + real(kind=kind_phys), dimension(:,:), intent(out) :: plvl, tlvl real(kind=kind_phys), dimension(:,:), intent(out) :: gasvmr_co2, & gasvmr_n2o, & diff --git a/physics/GFS_rrtmg_pre.meta b/physics/GFS_rrtmg_pre.meta index b6e2138ce..344befa97 100644 --- a/physics/GFS_rrtmg_pre.meta +++ b/physics/GFS_rrtmg_pre.meta @@ -395,32 +395,6 @@ type = logical intent = in optional = F -[sppt_wts] - standard_name = weights_for_stochastic_sppt_perturbation - long_name = weights for stochastic sppt perturbation - units = none - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F -[sppt_amp] - standard_name = total_ampltiude_of_sppt_perturbation - long_name = toal ampltidue of stochastic sppt perturbation - units = none - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F -[pert_clds] - standard_name = flag_for_stochastic_cloud_fraction_perturbations - long_name = flag for stochastic cloud fraction physics perturbations - units = flag - dimensions = () - type = logical - intent = in - optional = F [do_mynnedmf] standard_name = do_mynnedmf long_name = flag to activate MYNN-EDMF @@ -661,6 +635,32 @@ kind = kind_phys intent = in optional = F +[pert_clds] + standard_name = flag_for_stochastic_cloud_fraction_perturbations + long_name = flag for stochastic cloud fraction physics perturbations + units = flag + dimensions = () + type = logical + intent = in + optional = F +[sppt_wts] + standard_name = weights_for_stochastic_sppt_perturbation + long_name = weights for stochastic sppt perturbation + units = none + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[sppt_amp] + standard_name = total_ampltiude_of_sppt_perturbation + long_name = toal ampltidue of stochastic sppt perturbation + units = none + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [cnvw_in] standard_name = convective_cloud_water_mixing_ratio_in_phy_f3d long_name = convective cloud water mixing ratio in the phy_f3d array diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 368a5ed4d..f90ca983b 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -185,7 +185,7 @@ subroutine GFS_rrtmg_setup_init ( & logical, intent(in) :: ccnorm integer, intent(in) :: imp_physics logical, intent(in) :: norad_precip - integer, intent(in) :: idate(4) + integer, intent(in) :: idate(:) integer, intent(in) :: iflip ! For consistency checks integer, intent(in) :: im diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 index a2a575ac6..0abfc0e2c 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 @@ -21,9 +21,9 @@ end subroutine GFS_rrtmgp_cloud_overlap_pre_init !! subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWrad, & julian, lat, p_lev, p_lay, tv_lay, con_pi, con_g, con_rd, con_epsq, dcorr_con, & - idcor, iovr, iovr_dcorr, iovr_exprand, iovr_exp, idcor_con, idcor_hogan, & + idcor, iovr, iovr_dcorr, iovr_exp, iovr_exprand, idcor_con, idcor_hogan, & idcor_oreopoulos, cld_frac, & - cloud_overlap_param, precip_overlap_param, de_lgth, deltaZc, errmsg, errflg) + de_lgth, cloud_overlap_param, precip_overlap_param, deltaZc, errmsg, errflg) implicit none ! Inputs diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.meta b/physics/GFS_rrtmgp_cloud_overlap_pre.meta index 273832362..3f7174f90 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.meta +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.meta @@ -23,6 +23,14 @@ type = integer intent = in optional = F +[yearlen] + standard_name = number_of_days_in_year + long_name = number of days in a year + units = days + dimensions = () + type = integer + intent = in + optional = F [doSWrad] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -39,14 +47,6 @@ type = logical intent = in optional = F -[yearlen] - standard_name = number_of_days_in_year - long_name = number of days in a year - units = days - dimensions = () - type = integer - intent = in - optional = F [julian] standard_name = julian_day long_name = julian day @@ -128,6 +128,23 @@ kind = kind_phys intent = in optional = F +[dcorr_con] + standard_name = decorreltion_length_used_by_overlap_method + long_name = decorrelation length (default) used by cloud overlap method (iovr) + units = km + dimensions = () + type = real + intent = in + kind = kind_phys + optional = F +[idcor] + standard_name = flag_for_decorrelation_length_method + long_name = flag for decorrelation length method used in cloud overlap method (iovr) + units = flag + dimensions = () + type = integer + intent = in + optional = F [iovr] standard_name = flag_for_cloud_overlap_method_for_radiation long_name = flag for cloud overlap method @@ -160,14 +177,6 @@ type = integer intent = in optional = F -[idcor] - standard_name = flag_for_decorrelation_length_method - long_name = flag for decorrelation length method used in cloud overlap method (iovr) - units = flag - dimensions = () - type = integer - intent = in - optional = F [idcor_con] standard_name = flag_for_constant_decorrelation_length_method long_name = choice of decorrelation length computation (costant) @@ -192,15 +201,6 @@ type = integer intent = in optional = F -[dcorr_con] - standard_name = decorreltion_length_used_by_overlap_method - long_name = decorrelation length (default) used by cloud overlap method (iovr) - units = km - dimensions = () - type = real - intent = in - kind = kind_phys - optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 index 1f3d34973..fbaf8af68 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 +++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 @@ -64,20 +64,20 @@ subroutine GFS_rrtmgp_gfdlmp_pre_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cld real(kind_phys), intent(in) :: & con_g, & ! Physical constant: gravitational constant con_rd ! Physical constant: gas-constant for dry air - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) effrin_cldliq, & ! Effective radius for liquid cloud-particles (microns) effrin_cldice, & ! Effective radius for ice cloud-particles (microns) effrin_cldrain, & ! Effective radius for rain cloud-particles (microns) effrin_cldsnow ! Effective radius for snow cloud-particles (microns) - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:,:,:),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! Outputs - real(kind_phys), dimension(nCol,nLev),intent(inout) :: & + real(kind_phys), dimension(:,:),intent(inout) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 index 7a4e08d55..68f2a07c1 100644 --- a/physics/GFS_rrtmgp_sw_pre.F90 +++ b/physics/GFS_rrtmgp_sw_pre.F90 @@ -27,7 +27,7 @@ end subroutine GFS_rrtmgp_sw_pre_init !> \section arg_table_GFS_rrtmgp_sw_pre_run !! \htmlinclude GFS_rrtmgp_sw_pre.html !! - subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_list, & + subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, n_var_lndp, lndp_type, lndp_var_list, & lndp_prt_list, doSWrad, solhr, lon, coslat, sinlat, snowd, sncovr, snoalb, zorl, & tsfg, tsfa, hprime, alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, albdvis, & albdnir, albivis, albinir, lsmask, sfc_wts, p_lay, tv_lay, relhum, p_lev, & diff --git a/physics/GFS_rrtmgp_sw_pre.meta b/physics/GFS_rrtmgp_sw_pre.meta index 5a165f9ad..349750879 100644 --- a/physics/GFS_rrtmgp_sw_pre.meta +++ b/physics/GFS_rrtmgp_sw_pre.meta @@ -30,7 +30,7 @@ dimensions = () type = integer intent = in - optional = F + optional = F [n_var_lndp] standard_name = number_of_land_surface_variables_perturbed long_name = number of land surface variables perturbed @@ -38,7 +38,7 @@ dimensions = () type = integer intent = in - optional = F + optional = F [lndp_type] standard_name = index_for_stochastic_land_surface_perturbation_type long_name = index for stochastic land surface perturbations type @@ -47,15 +47,6 @@ type = integer intent = in optional = F -[lndp_prt_list] - standard_name =magnitude_of_perturbations_for_landperts - long_name = magnitude of perturbations for landperts - units = variable - dimensions = (number_of_land_surface_variables_perturbed) - type = real - kind = kind_phys - intent = in - optional = F [lndp_var_list] standard_name = variables_to_be_perturbed_for_landperts long_name = variables to be perturbed for landperts @@ -65,6 +56,15 @@ kind = len=3 intent = in optional = F +[lndp_prt_list] + standard_name =magnitude_of_perturbations_for_landperts + long_name = magnitude of perturbations for landperts + units = variable + dimensions = (number_of_land_surface_variables_perturbed) + type = real + kind = kind_phys + intent = in + optional = F [doSWrad] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -109,15 +109,6 @@ kind = kind_phys intent = in optional = F -[lsmask] - standard_name = sea_land_ice_mask_real - long_name = landmask: sea/land/ice=0/1/2 - units = flag - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -243,7 +234,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [tisfc] standard_name = sea_ice_temperature long_name = sea ice surface skin temperature @@ -289,6 +280,15 @@ kind = kind_phys intent = in optional = F +[lsmask] + standard_name = sea_land_ice_mask_real + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [sfc_wts] standard_name = weights_for_stochastic_surface_physics_perturbation long_name = weights for stochastic surface physics perturbation @@ -298,6 +298,15 @@ kind = kind_phys intent = in optional = F +[p_lay] + standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa + long_name = air pressure at vertical layer for radiation calculation + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [tv_lay] standard_name = virtual_temperature long_name = layer virtual temperature @@ -316,15 +325,6 @@ kind = kind_phys intent = in optional = F -[p_lay] - standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa - long_name = air pressure at vertical layer for radiation calculation - units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation @@ -334,6 +334,40 @@ kind = kind_phys intent = in optional = F +[nday] + standard_name = daytime_points_dimension + long_name = daytime points dimension + units = count + dimensions = () + type = integer + intent = out + optional = F +[idxday] + standard_name = daytime_points + long_name = daytime points + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = out + optional = F +[coszen] + standard_name = cosine_of_zenith_angle + long_name = mean cos of zenith angle over rad call period + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[coszdg] + standard_name = daytime_mean_cosz_over_rad_call_period + long_name = daytime mean cosz over rad call period + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [sfc_alb_nir_dir] standard_name = surface_albedo_nearIR_direct long_name = near-IR (direct) surface albedo (sfc_alb_nir_dir) @@ -370,40 +404,6 @@ kind = kind_phys intent = out optional = F -[nday] - standard_name = daytime_points_dimension - long_name = daytime points dimension - units = count - dimensions = () - type = integer - intent = out - optional = F -[idxday] - standard_name = daytime_points - long_name = daytime points - units = index - dimensions = (horizontal_loop_extent) - type = integer - intent = out - optional = F -[coszen] - standard_name = cosine_of_zenith_angle - long_name = mean cos of zenith angle over rad call period - units = none - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[coszdg] - standard_name = daytime_mean_cosz_over_rad_call_period - long_name = daytime mean cosz over rad call period - units = none - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F [sfc_alb_dif] standard_name = surface_diffused_shortwave_albedo long_name = mean surface diffused sw albedo diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index b54f27d65..8b26a6936 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -79,7 +79,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do con_rd, & ! Physical constant: gas-constant for dry air con_eps ! Physical constant: gas constant air / gas constant H2O - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) t_lay, & ! Temperature (K) qs_lay, & ! Saturation vapor pressure (Pa) @@ -87,13 +87,13 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do relhum, & ! Relative humidity p_lay, & ! Pressure at model-layers (Pa) cld_frac_mg ! Cloud-fraction from MG scheme. WTF????? - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:,:,:),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! In/Outs - real(kind_phys), dimension(nCol,nLev), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index b3edb2f18..7ddecc405 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -197,56 +197,16 @@ type = real kind = kind_phys intent = inout - optional = F -[cld_frac_mg] - standard_name = cloud_fraction_for_MG - long_name = cloud fraction used by Morrison-Gettelman MP - units = frac - dimensions = (horizontal_loop_extent,vertical_dimension) + optional = F +[tracer] + standard_name = chemical_tracers + long_name = chemical tracers + units = g g-1 + dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) type = real kind = kind_phys intent = in - optional = F -[do_mynnedmf] - standard_name = do_mynnedmf - long_name = flag to activate MYNN-EDMF - units = flag - dimensions = () - type = logical - intent = in - optional = F -[imfdeepcnv] - standard_name = flag_for_mass_flux_deep_convection_scheme - long_name = flag for mass-flux deep convection scheme - units = flag - dimensions = () - type = integer - intent = in - optional = F -[imfdeepcnv_gf] - standard_name = flag_for_gf_deep_convection_scheme - long_name = flag for Grell-Freitas deep convection scheme - units = flag - dimensions = () - type = integer - intent = in - optional = F -[doGP_cldoptics_PADE] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE - long_name = logical flag to control cloud optics scheme. - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doGP_cldoptics_LUT] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT - long_name = logical flag to control cloud optics scheme. - units = flag - dimensions = () - type = logical - intent = in - optional = F + optional = F [qs_lay] standard_name = saturation_vapor_pressure long_name = saturation vapor pressure @@ -264,7 +224,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [relhum] standard_name = relative_humidity long_name = layer relative humidity @@ -274,15 +234,15 @@ kind = kind_phys intent = in optional = F -[tracer] - standard_name = chemical_tracers - long_name = chemical tracers - units = g g-1 - dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) +[cld_frac_mg] + standard_name = cloud_fraction_for_MG + long_name = cloud fraction used by Morrison-Gettelman MP + units = frac + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [con_g] standard_name = gravitational_acceleration long_name = gravitational acceleration @@ -342,6 +302,46 @@ type = logical intent = in optional = F +[do_mynnedmf] + standard_name = do_mynnedmf + long_name = flag to activate MYNN-EDMF + units = flag + dimensions = () + type = logical + intent = in + optional = F +[imfdeepcnv] + standard_name = flag_for_mass_flux_deep_convection_scheme + long_name = flag for mass-flux deep convection scheme + units = flag + dimensions = () + type = integer + intent = in + optional = F +[imfdeepcnv_gf] + standard_name = flag_for_gf_deep_convection_scheme + long_name = flag for Grell-Freitas deep convection scheme + units = flag + dimensions = () + type = integer + intent = in + optional = F +[doGP_cldoptics_PADE] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in + optional = F +[doGP_cldoptics_LUT] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in + optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 index 206280362..4379bf4a5 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 +++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 @@ -32,9 +32,9 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss lslwr, effr_in, uni_cld, lmfshal, lat, lsmask, p_lev, p_lay, t_lay, relhum, & tv_lay, effrin_cldliq, effrin_cldice, effrin_cldrain, effrin_cldsnow, & shoc_sgs_cldfrac, cncvw, tracer, & - con_eps, con_epsq, con_epsqs, con_epsm1, con_g, con_ttp, con_rd, con_pi, & + con_ttp, con_epsq, con_epsqs, con_eps, con_epsm1, con_g, con_rd, con_pi, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & - cld_rerain, de_lgth, deltaZ, cloud_overlap_param, errmsg, errflg) + cld_rerain, deltaZ, de_lgth, cloud_overlap_param, errmsg, errflg) implicit none ! Inputs diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.meta b/physics/GFS_rrtmgp_zhaocarr_pre.meta index e3812bb74..1c25d19fd 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.meta +++ b/physics/GFS_rrtmgp_zhaocarr_pre.meta @@ -122,15 +122,15 @@ kind = kind_phys intent = in optional = F -[tv_lay] - standard_name = virtual_temperature - long_name = layer virtual temperature +[t_lay] + standard_name = air_temperature_at_layer_for_RRTMGP + long_name = air temperature at vertical layer for radiation calculation units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [relhum] standard_name = relative_humidity long_name = layer relative humidity @@ -140,15 +140,15 @@ kind = kind_phys intent = in optional = F -[t_lay] - standard_name = air_temperature_at_layer_for_RRTMGP - long_name = air temperature at vertical layer for radiation calculation +[tv_lay] + standard_name = virtual_temperature + long_name = layer virtual temperature units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [effrin_cldliq] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -365,15 +365,6 @@ kind = kind_phys intent = out optional = F -[cloud_overlap_param] - standard_name = cloud_overlap_param - long_name = cloud overlap parameter - units = km - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = out - optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -392,6 +383,15 @@ kind = kind_phys intent = out optional = F +[cloud_overlap_param] + standard_name = cloud_overlap_param + long_name = cloud overlap parameter + units = km + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index ff0770ad9..36926108e 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -19,23 +19,23 @@ subroutine cs_conv_pre_run(im, levs, ntrac, ncld, q, clw1, clw2, & & errmsg, errflg) - use machine , only : r8 => kind_phys + use machine , only : kind_phys - implicit none + implicit none ! --- inputs integer, intent(in) :: im, levs, ntrac, ncld - real(r8), dimension(:,:), intent(in) :: q - real(r8), dimension(:,:), intent(in) :: clw1,clw2 - real(r8), dimension(:), intent(in) :: work1, work2 - real(r8), intent(in) :: cs_parm1, cs_parm2 + real(kind_phys), dimension(:,:), intent(in) :: q + real(kind_phys), dimension(:,:), intent(in) :: clw1,clw2 + real(kind_phys), dimension(:), intent(in) :: work1, work2 + real(kind_phys), intent(in) :: cs_parm1, cs_parm2 ! --- input/output - real(r8), dimension(:), intent(out) :: fswtr, fscav - real(r8), dimension(:), intent(out) :: wcbmax - real(r8), dimension(:,:), intent(out) :: save_q1,save_q2 + real(kind_phys), dimension(:), intent(out) :: fswtr, fscav + real(kind_phys), dimension(:), intent(out) :: wcbmax + real(kind_phys), dimension(:,:), intent(out) :: save_q1,save_q2 ! save_q3 is not allocated for Zhao-Carr MP - real(r8), dimension(:,:), intent(out) :: save_q3 + real(kind_phys), dimension(:,:), intent(out) :: save_q3 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -84,17 +84,17 @@ end subroutine cs_conv_post_finalize !! subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg) - use machine , only : r8 => kind_phys + use machine , only : kind_phys implicit none ! --- inputs integer, intent(in) :: im, kmax logical, intent(in) :: do_aw - real(r8), dimension(:,:), intent(in) :: sigmatot + real(kind_phys), dimension(:,:), intent(in) :: sigmatot ! --- input/output - real(r8), dimension(:,:), intent(out) :: sigmafrac + real(kind_phys), dimension(:,:), intent(out) :: sigmafrac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -132,7 +132,7 @@ module cs_conv !! Author: Minoru Chikira !--------------------------------------------------------------------------------- ! - use machine , only : r8 => kind_phys + use machine , only : kind_phys use physcons, only : cp => con_cp, grav => con_g, & & rair => con_rd, rvap => con_rv, & & cliq => con_cliq, cvap => con_cvap, & @@ -146,20 +146,20 @@ module cs_conv private ! Make default type private to the module - real(r8), parameter :: zero=0.0d0, one=1.0d0, half=0.5d0 - real(r8), parameter :: cpoel=cp/el, cpoesub=cp/(el+emelt), esubocp=1.0/cpoesub, & + real(kind_phys), parameter :: zero=0.0d0, one=1.0d0, half=0.5d0 + real(kind_phys), parameter :: cpoel=cp/el, cpoesub=cp/(el+emelt), esubocp=1.0/cpoesub, & elocp=el/cp, oneocp=one/cp, gocp=grav/cp, gravi=one/grav,& - emeltocp=emelt/cp, cpoemelt=cp/emelt, epsln=1.e-10_r8 + emeltocp=emelt/cp, cpoemelt=cp/emelt, epsln=1.e-10_kind_phys - real(r8), parameter :: fact1=(cvap-cliq)/rvap, fact2=el/rvap-fact1*t0c !< to calculate d(qs)/dT + real(kind_phys), parameter :: fact1=(cvap-cliq)/rvap, fact2=el/rvap-fact1*t0c !< to calculate d(qs)/dT logical, parameter :: adjustp=.true. ! logical, parameter :: adjustp=.false. ! Tuning parameters set from namelist ! -! real(r8), parameter, public :: CLMD = 0.60, & !< entrainment efficiency (now thru argument) - real(r8), parameter, public :: & +! real(kind_phys), parameter, public :: CLMD = 0.60, & !< entrainment efficiency (now thru argument) + real(kind_phys), parameter, public :: & PA=0.15, & !< factor for buoyancy to affect updraft velocity CPRES = 0.55, & !< pressure factor for momentum transport ALP0 = 5.0e7, & !< alpha parameter in prognostic closure @@ -178,11 +178,11 @@ module cs_conv !DD precz0 and preczh control partitioning of water between detrainment !DD and precipitation. Decrease for more precip - real(r8), public :: precz0, preczh, clmd, clmp, clmdpa + real(kind_phys), public :: precz0, preczh, clmd, clmp, clmdpa ! ! Private data ! - real(r8), parameter :: unset_r8 = -999._r8 ! missing value + real(kind_phys), parameter :: unset_kind_phys = -999._kind_phys ! missing value ! integer :: iulog !< unit to write debugging and diagnostic output !DD Note - see if I can find corresponding variable in a GFS module @@ -300,96 +300,97 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & ! otspt(:,2) - on/off switch for tracer transport by subsidence ! should include subgrid PDF and turbulence - real(r8), intent(inout) :: t(:,:) ! temperature at mid-layer (K) - real(r8), intent(inout) :: q(:,:) ! water vapor array including moisture (kg/kg) - real(r8), intent(inout) :: clw(:,:,:) ! tracer array including cloud condensate (kg/kg) - real(r8), intent(in) :: pap(:,:) ! pressure at mid-layer (Pa) - real(r8), intent(in) :: paph(:,:) ! pressure at boundaries (Pa) - real(r8), intent(in) :: zm(:,:) ! geopotential at mid-layer (m) - real(r8), intent(in) :: zi(:,;) ! geopotential at boundaries (m) - real(r8), intent(in) :: fscav(:), fswtr(;), wcbmaxm(:) - real(r8), intent(in) :: precz0in, preczhin, clmdin + real(kind_phys), intent(inout) :: t(:,:) ! temperature at mid-layer (K) + real(kind_phys), intent(inout) :: q(:,:) ! water vapor array including moisture (kg/kg) + real(kind_phys), intent(inout) :: clw(:,:,:) ! tracer array including cloud condensate (kg/kg) + real(kind_phys), intent(in) :: pap(:,:) ! pressure at mid-layer (Pa) + real(kind_phys), intent(in) :: paph(:,:) ! pressure at boundaries (Pa) + real(kind_phys), intent(in) :: zm(:,:) ! geopotential at mid-layer (m) + real(kind_phys), intent(in) :: zi(:,:) ! geopotential at boundaries (m) + real(kind_phys), intent(in) :: fscav(:), fswtr(:), wcbmaxm(:) + real(kind_phys), intent(in) :: precz0in, preczhin, clmdin ! added for cs_convr - real(r8), intent(inout) :: u(:,:) ! zonal wind at mid-layer (m/s) - real(r8), intent(inout) :: v(:,:) ! meridional wind at mid-layer (m/s) + real(kind_phys), intent(inout) :: u(:,:) ! zonal wind at mid-layer (m/s) + real(kind_phys), intent(inout) :: v(:,:) ! meridional wind at mid-layer (m/s) - real(r8), intent(in) :: DELTA ! physics time step - real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) + real(kind_phys), intent(in) :: DELTA ! physics time step + real(kind_phys), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) logical, intent(in) :: do_aw, do_awdd, flx_form ! ! modified arguments ! - real(r8), intent(inout) :: CBMFX(:,:) ! cloud base mass flux (kg/m2/s) + real(kind_phys), intent(inout) :: CBMFX(:,:) ! cloud base mass flux (kg/m2/s) ! ! output arguments ! ! updraft, downdraft, and detrainment mass flux (kg/m2/s) - real(r8), intent(inout), dimension(:,:) :: ud_mf, dd_mf, dt_mf + real(kind_phys), intent(inout), dimension(:,:) :: ud_mf, dd_mf, dt_mf - real(r8), intent(out) :: rain1(:) ! lwe thickness of deep convective precipitation amount (m) + real(kind_phys), intent(out) :: rain1(:) ! lwe thickness of deep convective precipitation amount (m) ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared ! using assumed shape. - real(r8), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & + real(kind_phys), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & cnv_dqldt, clcn, cnv_fice, & cnv_ndrop, cnv_nice, cf_upi ! *GJF - integer, intent(in) :: lprnt, ipr - integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise + logical, intent(in) :: lprnt + integer, intent(in) :: ipr + integer, intent(inout) :: kcnv(:) ! zero if no deep convection and 1 otherwise character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !DDsigma - output added for AW sigma diagnostics ! interface sigma and vertical velocity by cloud type (1=sfc) -! real(r8), intent(out), dimension(:,:,:) :: sigmai, vverti - real(r8), intent(out), dimension(:,:) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) +! real(kind_phys), intent(out), dimension(:,:,:) :: sigmai, vverti + real(kind_phys), intent(out), dimension(:,:) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) ! sigma terms in eq 91 and 92 -! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm +! real(kind_phys), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm !DDsigma ! ! output arguments of CS_CUMLUS ! - real(r8), dimension(IJSDIM,KMAX,nctp) :: vverti + real(kind_phys), dimension(IJSDIM,KMAX,nctp) :: vverti - real(r8) GTT(IJSDIM,KMAX) !< temperature tendency [K/s] - real(r8) GTQ(IJSDIM,KMAX,NTR) !< tracer tendency [kg/kg/s] - real(r8) GTU(IJSDIM,KMAX) !< zonal velocity tendency [m/s2] - real(r8) GTV(IJSDIM,KMAX) !< meridional velocity tendency [m/s2] - real(r8) GTPRP(IJSDIM,KMAX) !< precipitation (including snowfall) flux at interfaces [kg/m2/s] - real(r8) GSNWP(IJSDIM,KMAX) !< snowfall flux at interfaces [kg/m2/s] + real(kind_phys) GTT(IJSDIM,KMAX) !< temperature tendency [K/s] + real(kind_phys) GTQ(IJSDIM,KMAX,NTR) !< tracer tendency [kg/kg/s] + real(kind_phys) GTU(IJSDIM,KMAX) !< zonal velocity tendency [m/s2] + real(kind_phys) GTV(IJSDIM,KMAX) !< meridional velocity tendency [m/s2] + real(kind_phys) GTPRP(IJSDIM,KMAX) !< precipitation (including snowfall) flux at interfaces [kg/m2/s] + real(kind_phys) GSNWP(IJSDIM,KMAX) !< snowfall flux at interfaces [kg/m2/s] integer KT(IJSDIM,nctp) !< cloud top index for each cloud type - real(r8) :: cape(IJSDIM) !< convective available potential energy (J/kg) - real(r8) :: prec(IJSDIM) !< precipitation at surface (including snowfall) (kg/m2/s) - real(r8) :: snow(IJSDIM) !< snowfall at surface (kg/m2/s) + real(kind_phys) :: cape(IJSDIM) !< convective available potential energy (J/kg) + real(kind_phys) :: prec(IJSDIM) !< precipitation at surface (including snowfall) (kg/m2/s) + real(kind_phys) :: snow(IJSDIM) !< snowfall at surface (kg/m2/s) ! ! input arguments of CS_CUMLUS ! - real(r8) GDT(IJSDIM,KMAX) !< temperature [K] - real(r8) GDQ(IJSDIM,KMAX,NTR) !< tracers including moisture [kg/kg] !DDsigmadiag - real(r8) GDU(IJSDIM,KMAX) !< zonal wind [m/s] - real(r8) GDV(IJSDIM,KMAX) !< meridional wind [m/s] - real(r8) GDTM(IJSDIM,KMAX+1) !< temperature at boundaries of layers [K] - real(r8) GDP(IJSDIM,KMAX) !< pressure [Pa] - real(r8) GDPM(IJSDIM,KMAX+1) !< pressure at boundaries of layers [Pa] - real(r8) GDZ(IJSDIM,KMAX) !< altitude [m] - real(r8) GDZM(IJSDIM,KMAX+1) !< altitude at boundaries of layers [m] - real(r8) delp(IJSDIM,KMAX) !< pressure difference between layers [Pa] - real(r8) delpi(IJSDIM,KMAX) !< grav/delp + real(kind_phys) GDT(IJSDIM,KMAX) !< temperature [K] + real(kind_phys) GDQ(IJSDIM,KMAX,NTR) !< tracers including moisture [kg/kg] !DDsigmadiag + real(kind_phys) GDU(IJSDIM,KMAX) !< zonal wind [m/s] + real(kind_phys) GDV(IJSDIM,KMAX) !< meridional wind [m/s] + real(kind_phys) GDTM(IJSDIM,KMAX+1) !< temperature at boundaries of layers [K] + real(kind_phys) GDP(IJSDIM,KMAX) !< pressure [Pa] + real(kind_phys) GDPM(IJSDIM,KMAX+1) !< pressure at boundaries of layers [Pa] + real(kind_phys) GDZ(IJSDIM,KMAX) !< altitude [m] + real(kind_phys) GDZM(IJSDIM,KMAX+1) !< altitude at boundaries of layers [m] + real(kind_phys) delp(IJSDIM,KMAX) !< pressure difference between layers [Pa] + real(kind_phys) delpi(IJSDIM,KMAX) !< grav/delp ! ! local variables ! -!DD real(r8) :: zs(IJSDIM) !< surface height [m] +!DD real(kind_phys) :: zs(IJSDIM) !< surface height [m] integer KTMAX(IJSDIM) !< max of KT - real(r8) :: ftintm, wrk, wrk1, tem + real(kind_phys) :: ftintm, wrk, wrk1, tem integer i, k, n, ISTS, IENS, kp1 !DD borrowed from RAS to go form total condensate to ice/water separately ! parameter (tf=130.16, tcr=160.16, tcrf=1.0/(tcr-tf),tcl=2.0) ! parameter (tf=230.16, tcr=260.16, tcrf=1.0/(tcr-tf)) - real(r8), parameter :: tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf), tcl=2.0 + real(kind_phys), parameter :: tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf), tcl=2.0 logical, save :: first=.true. ! Initialize CCPP error handling variables @@ -724,208 +725,208 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions logical, intent(in) :: otspt1(ntr), otspt2(ntr), lprnt ! ! [OUTPUT] - REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate - REAL(r8), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q - REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u - REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v - REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux + REAL(kind_phys), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate + REAL(kind_phys), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q + REAL(kind_phys), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u + REAL(kind_phys), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v + REAL(kind_phys), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux ! assuming there is no flux at the top of the atmospherea - Moorthi - REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux - REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux - REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux - REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux + REAL(kind_phys), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux + REAL(kind_phys), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux + REAL(kind_phys), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux + REAL(kind_phys), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux - REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) + REAL(kind_phys), INTENT(OUT) :: CAPE (IJSDIM ) INTEGER , INTENT(OUT) :: KT (IJSDIM, NCTP ) ! cloud top ! ! [MODIFIED] - REAL(r8), INTENT(INOUT) :: CBMFX (IM, NCTP) ! cloud base mass flux + REAL(kind_phys), INTENT(INOUT) :: CBMFX (IM, NCTP) ! cloud base mass flux !DDsigma - output added for AW sigma diagnostics ! sigma and vert. velocity as a function of cloud type (1==sfc) - real(r8), intent(out), dimension(IM,KMAX) :: sigma !sigma totaled over cloud type - on interfaces (1=sfc) - real(r8), intent(out), dimension(IM,KMAX,nctp) :: vverti + real(kind_phys), intent(out), dimension(IM,KMAX) :: sigma !sigma totaled over cloud type - on interfaces (1=sfc) + real(kind_phys), intent(out), dimension(IM,KMAX,nctp) :: vverti ! for computing AW flux form of tendencies ! The tendencies are summed over all cloud types -! real(r8), intent(out), dimension(IM,KMAX) :: & !DDsigmadiag - real(r8), allocatable, dimension(:,:) :: sfluxterm, qvfluxterm,& ! tendencies of DSE and water vapor due to eddy mass flux +! real(kind_phys), intent(out), dimension(IM,KMAX) :: & !DDsigmadiag + real(kind_phys), allocatable, dimension(:,:) :: sfluxterm, qvfluxterm,& ! tendencies of DSE and water vapor due to eddy mass flux qlfluxterm, qifluxterm,& ! tendencies of cloud water and cloud ice due to eddy mass flux ! The fluxes are for an individual cloud type and reused. ! condtermt, condtermq are eddy flux of temperature and water vapor condtermt, condtermq, frzterm, & prectermq, prectermfrz - real(r8), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux + real(kind_phys), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux ! ! [INPUT] - REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T - REAL(r8), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag - REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u - REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v - REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T - REAL(r8), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P - REAL(r8), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) - REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude - REAL(r8), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude - REAL(r8), INTENT(IN) :: DELTA ! delta(t) (dynamics) - REAL(r8), INTENT(IN) :: DELTI ! delta(t) (internal variable) + REAL(kind_phys), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T + REAL(kind_phys), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag + REAL(kind_phys), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u + REAL(kind_phys), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v + REAL(kind_phys), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T + REAL(kind_phys), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P + REAL(kind_phys), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) + REAL(kind_phys), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude + REAL(kind_phys), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude + REAL(kind_phys), INTENT(IN) :: DELTA ! delta(t) (dynamics) + REAL(kind_phys), INTENT(IN) :: DELTI ! delta(t) (internal variable) INTEGER, INTENT(IN) :: ISTS, IENS ! array range - real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) + real(kind_phys), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) ! ! [INTERNAL WORK] - REAL(r8), allocatable :: GPRCC (:, :) ! rainfall -! REAL(r8) GPRCC (IJSDIM, NTR) ! rainfall -! REAL(r8) GSNWC (IJSDIM) ! snowfall -! REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus -! REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction -! -! REAL(r8) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction -! REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus -! -! REAL(r8) GDCFRC(IJSDIM, KMAX) ! cloud fraction -! - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate moisture - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate MSE -! - REAL(r8) GCYM (IJSDIM, KMAX, NCTP)! norm. mass flux (half lev) - REAL(r8) GCHB (IJSDIM) ! cloud base MSE-Li*Qi - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer - REAL(r8) GCYT (IJSDIM, NCTP) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM, NCTP) ! cloud top MSE - REAL(r8) GCQT (IJSDIM, NCTP) ! cloud top q - REAL(r8) GCwT (IJSDIM) ! cloud top total water - REAL(r8) GCUT (IJSDIM, NCTP) ! cloud top U - REAL(r8) GCVT (IJSDIM, NCTP) ! cloud top V - REAL(r8) GCLT (IJSDIM, NCTP) ! cloud top cloud water - REAL(r8) GCIT (IJSDIM, NCTP) ! cloud top cloud ice - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP) ! cloud top tracer - REAL(r8) GTPRT (IJSDIM, NCTP) ! precipitation/M - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid for each CTP - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice for each CTP - -! REAL(r8) ACWF (IJSDIM, NCTP) ! cloud work function - REAL(r8) ACWF (IJSDIM ) ! cloud work function - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! precipitation - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snowfall - REAL(r8) GTPRC0(IJSDIM) ! precip. before evap. - - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux (updraft+downdraft) - REAL(r8) QLIQ (IJSDIM, KMAX) ! total cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! total cloud ice - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux -! - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux - -! REAL(r8) CUMHGT(IJSDIM, NCTP) ! cloud top height -! REAL(r8) CTOPP (IJSDIM) ! cloud top pressure - - REAL(r8) GDZTR (IJSDIM) ! tropopause height -! REAL(r8) FLIQOU(IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys), allocatable :: GPRCC (:, :) ! rainfall +! REAL(kind_phys) GPRCC (IJSDIM, NTR) ! rainfall +! REAL(kind_phys) GSNWC (IJSDIM) ! snowfall +! REAL(kind_phys) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus +! REAL(kind_phys) CUMFRC(IJSDIM) ! cumulus cloud fraction +! +! REAL(kind_phys) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction +! REAL(kind_phys) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus +! +! REAL(kind_phys) GDCFRC(IJSDIM, KMAX) ! cloud fraction +! + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate moisture + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDS (IJSDIM, KMAX) ! dry static energy + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturate MSE +! + REAL(kind_phys) GCYM (IJSDIM, KMAX, NCTP)! norm. mass flux (half lev) + REAL(kind_phys) GCHB (IJSDIM) ! cloud base MSE-Li*Qi + REAL(kind_phys) GCWB (IJSDIM) ! cloud base total water + REAL(kind_phys) GCUB (IJSDIM) ! cloud base U + REAL(kind_phys) GCVB (IJSDIM) ! cloud base V + REAL(kind_phys) GCIB (IJSDIM) ! cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer + REAL(kind_phys) GCYT (IJSDIM, NCTP) ! norm. mass flux @top + REAL(kind_phys) GCHT (IJSDIM, NCTP) ! cloud top MSE + REAL(kind_phys) GCQT (IJSDIM, NCTP) ! cloud top q + REAL(kind_phys) GCwT (IJSDIM) ! cloud top total water + REAL(kind_phys) GCUT (IJSDIM, NCTP) ! cloud top U + REAL(kind_phys) GCVT (IJSDIM, NCTP) ! cloud top V + REAL(kind_phys) GCLT (IJSDIM, NCTP) ! cloud top cloud water + REAL(kind_phys) GCIT (IJSDIM, NCTP) ! cloud top cloud ice + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr, NCTP) ! cloud top tracer + REAL(kind_phys) GTPRT (IJSDIM, NCTP) ! precipitation/M + REAL(kind_phys) GCLZ (IJSDIM, KMAX) ! cloud liquid for each CTP + REAL(kind_phys) GCIZ (IJSDIM, KMAX) ! cloud ice for each CTP + +! REAL(kind_phys) ACWF (IJSDIM, NCTP) ! cloud work function + REAL(kind_phys) ACWF (IJSDIM ) ! cloud work function + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) ! precipitation + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) ! snowfall + REAL(kind_phys) GTPRC0(IJSDIM) ! precip. before evap. + + REAL(kind_phys) GMFLX (IJSDIM, KMAX) ! mass flux (updraft+downdraft) + REAL(kind_phys) QLIQ (IJSDIM, KMAX) ! total cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) ! total cloud ice + REAL(kind_phys) GPRCI (IJSDIM, KMAX) ! rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) ! snowfall generation + + REAL(kind_phys) GPRCP (IJSDIM, KMAX) ! rainfall flux +! + REAL(kind_phys) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation + REAL(kind_phys) GMDD (IJSDIM, KMAX) ! downdraft mass flux + +! REAL(kind_phys) CUMHGT(IJSDIM, NCTP) ! cloud top height +! REAL(kind_phys) CTOPP (IJSDIM) ! cloud top pressure + + REAL(kind_phys) GDZTR (IJSDIM) ! tropopause height +! REAL(kind_phys) FLIQOU(IJSDIM, KMAX) ! liquid ratio in cumulus INTEGER KB (IJSDIM) INTEGER KSTRT (IJSDIM) ! tropopause level - REAL(r8) GAMX - REAL(r8) CIN (IJSDIM) + REAL(kind_phys) GAMX + REAL(kind_phys) CIN (IJSDIM) INTEGER JBUOY (IJSDIM) - REAL(r8) DELZ, BUOY, DELWC, DELER - REAL(r8) WCBX (IJSDIM) -! REAL(r8) ERMR (NCTP) ! entrainment rate (ASMODE) + REAL(kind_phys) DELZ, BUOY, DELWC, DELER + REAL(kind_phys) WCBX (IJSDIM) +! REAL(kind_phys) ERMR (NCTP) ! entrainment rate (ASMODE) ! SAVE ERMR INTEGER KTMX (NCTP) ! max of cloud top INTEGER KTMXT ! max of cloud top -! REAL(r8) TIMED - REAL(r8) GDCLDX, GDMU2X, GDMU3X +! REAL(kind_phys) TIMED + REAL(kind_phys) GDCLDX, GDMU2X, GDMU3X ! -! REAL(r8) HBGT (IJSDIM) ! imbalance in column heat -! REAL(r8) WBGT (IJSDIM) ! imbalance in column water +! REAL(kind_phys) HBGT (IJSDIM) ! imbalance in column heat +! REAL(kind_phys) WBGT (IJSDIM) ! imbalance in column water !DDsigma begin local work variables - all on model interfaces (sfc=1) - REAL(r8) lamdai ! lamda for cloud type ctp - REAL(r8) gdqm, gdlm, gdim ! water vapor - REAL(r8) gdtrm(ntrq:ntr) ! tracer + REAL(kind_phys) lamdai ! lamda for cloud type ctp + REAL(kind_phys) gdqm, gdlm, gdim ! water vapor + REAL(kind_phys) gdtrm(ntrq:ntr) ! tracer ! the following are new arguments to cumup to get them out for AW - REAL(r8) wcv (IJSDIM, KMAX) ! in-cloud vertical velocity - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCwM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCiM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GClM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GChM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCtrM (IJSDIM, KMAX, ntrq:ntr) ! cloud tracer (half lev) !DDsigmadiag make output + REAL(kind_phys) wcv (IJSDIM, KMAX) ! in-cloud vertical velocity + REAL(kind_phys) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output + REAL(kind_phys) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCwM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCiM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GClM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GChM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCtrM (IJSDIM, KMAX, ntrq:ntr) ! cloud tracer (half lev) !DDsigmadiag make output ! eddy flux profiles for dse, water vapor, cloud water, cloud ice - REAL(r8), dimension(Kmax+1) :: sfluxtem, qvfluxtem, qlfluxtem, qifluxtem - REAL(r8), dimension(Kmax+1,ntrq:ntr) :: trfluxtem ! tracer + REAL(kind_phys), dimension(Kmax+1) :: sfluxtem, qvfluxtem, qlfluxtem, qifluxtem + REAL(kind_phys), dimension(Kmax+1,ntrq:ntr) :: trfluxtem ! tracer ! tendency profiles - condensation heating, condensation moistening, heating due to ! freezing, total precip production, frozen precip production - REAL(r8), dimension(ijsdim,Kmax) :: dtcondtem, dqcondtem, dtfrztem, dqprectem,& ! Moorthi + REAL(kind_phys), dimension(ijsdim,Kmax) :: dtcondtem, dqcondtem, dtfrztem, dqprectem,& ! Moorthi dfrzprectem, lamdaprod !< product of (1+lamda) through cloud type ctp - REAL(r8), dimension(ijsdim,Kmax) :: dtevap, dqevap, dtmelt, dtsubl + REAL(kind_phys), dimension(ijsdim,Kmax) :: dtevap, dqevap, dtmelt, dtsubl ! factor to modify precip rate to force conservation of water. With bug fixes it's ! not doing anything now. - REAL(r8), dimension(ijsdim) :: moistening_aw - real(r8), dimension(ijsdim,kmax) :: gctbl, gcqbl,gcwbl, gcqlbl, gcqibl, & !DDsigmadiag updraft profiles below cloud Base + REAL(kind_phys), dimension(ijsdim) :: moistening_aw + real(kind_phys), dimension(ijsdim,kmax) :: gctbl, gcqbl,gcwbl, gcqlbl, gcqibl, & !DDsigmadiag updraft profiles below cloud Base sigmad ! downdraft area fraction - real(r8), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag tracer updraft profiles below cloud Base + real(kind_phys), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag tracer updraft profiles below cloud Base ! rhs_q, rhs_h are residuals of condensed water, MSE budgets to compute condensation, ! and heating due to freezing - real(r8) :: rhs_q, rhs_h, fsigma, sigmai, delpinv -! real(r8) :: rhs_q, rhs_h, sftem, qftem, qlftem, qiftem, & + real(kind_phys) :: rhs_q, rhs_h, fsigma, sigmai, delpinv +! real(kind_phys) :: rhs_q, rhs_h, sftem, qftem, qlftem, qiftem, & ! fsigma ! factor to reduce mass flux terms (1-sigma**2) for AW !DDsigma end local work variables ! ! profiles of heating due to precip evaporation, melting and sublimation, and the ! evap, melting and sublimation rates. - REAL(r8), allocatable, dimension(:,:) :: dtdwn, & ! t tendency downdraft detrainment + REAL(kind_phys), allocatable, dimension(:,:) :: dtdwn, & ! t tendency downdraft detrainment dqvdwn, & ! qv tendency downdraft detrainment dqldwn, & ! ql tendency downdraft detrainment dqidwn ! qi tendency downdraft detrainment - REAL(r8), allocatable, dimension(:,:,:) :: dtrdwn ! tracer tendency downdraft detrainment + REAL(kind_phys), allocatable, dimension(:,:,:) :: dtrdwn ! tracer tendency downdraft detrainment !DDsigma end local work variables ! ! [INTERNAL PARM] - REAL(r8), parameter :: WCBMIN = zero ! min. of updraft velocity at cloud base + REAL(kind_phys), parameter :: WCBMIN = zero ! min. of updraft velocity at cloud base -!M REAL(r8) :: WCBMAX = 1.4_r8 ! max. of updraft velocity at cloud base +!M REAL(kind_phys) :: WCBMAX = 1.4_kind_phys ! max. of updraft velocity at cloud base !M wcbas commented by Moorthi since it is not used -!M REAL(r8) :: WCBAS = 2._r8 ! updraft velocity**2 at cloud base (ASMODE) -!M REAL(r8) :: ERAMIN = 1.e-5_r8 ! min. of entrainment rate +!M REAL(kind_phys) :: WCBAS = 2._kind_phys ! updraft velocity**2 at cloud base (ASMODE) +!M REAL(kind_phys) :: ERAMIN = 1.e-5_kind_phys ! min. of entrainment rate ! used only in OPT_ASMODE -!M REAL(r8) :: ERAMAX = 2.e-3_r8 ! max. of entrainment rate +!M REAL(kind_phys) :: ERAMAX = 2.e-3_kind_phys ! max. of entrainment rate ! used only in OPT_ASMODE LOGICAL :: OINICB = .false. ! set 0.d0 to CBMFX when .true. -! REAL(r8) :: VARMIN = 1.e-13_r8 ! minimum of PDF variance -! REAL(r8) :: VARMAX = 5.e-7_r8 ! maximum of PDF variance -! REAL(r8) :: SKWMAX = 0.566_r8 ! maximum of PDF skewness +! REAL(kind_phys) :: VARMIN = 1.e-13_kind_phys ! minimum of PDF variance +! REAL(kind_phys) :: VARMAX = 5.e-7_kind_phys ! maximum of PDF variance +! REAL(kind_phys) :: SKWMAX = 0.566_kind_phys ! maximum of PDF skewness - REAL(r8) :: PSTRMX = 400.e2_r8 ! max P of tropopause - REAL(r8) :: PSTRMN = 50.e2_r8 ! min P of tropopause - REAL(r8) :: GCRSTR = 1.e-4_r8 ! crit. dT/dz tropopause + REAL(kind_phys) :: PSTRMX = 400.e2_kind_phys ! max P of tropopause + REAL(kind_phys) :: PSTRMN = 50.e2_kind_phys ! min P of tropopause + REAL(kind_phys) :: GCRSTR = 1.e-4_kind_phys ! crit. dT/dz tropopause - real(kind=r8) :: tem, esat, mflx_e, cbmfl, tem1, tem2, tem3 + real(kind=kind_phys) :: tem, esat, mflx_e, cbmfl, tem1, tem2, tem3 INTEGER :: KBMX, I, K, CTP, ierr, n, kp1, km1, kk, kbi, l, l1 ! LOGICAL, SAVE :: OFIRST = .TRUE. ! called first time? @@ -1723,7 +1724,7 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions ! is occuring now which is a good sign! DD if(flx_form .and. adjustp) then DO I = ISTS, IENS - if(gprcp(i,1)+gsnwp(i,1) > 1.e-12_r8) then + if(gprcp(i,1)+gsnwp(i,1) > 1.e-12_kind_phys) then moistening_aw(i) = - moistening_aw(i) / (gprcp(i,1)+gsnwp(i,1)) else moistening_aw(i) = 1.0 @@ -1792,42 +1793,42 @@ SUBROUTINE CUMBAS & ! cloud base ! ! [OUTPUT] INTEGER KB (IJSDIM) ! cloud base - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux (half lev) + REAL(kind_phys) GCYM (IJSDIM, KMAX) ! norm. mass flux (half lev) INTEGER KBMX - REAL(r8) GCHB (IJSDIM) ! cloud base MSE - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer + REAL(kind_phys) GCHB (IJSDIM) ! cloud base MSE + REAL(kind_phys) GCWB (IJSDIM) ! cloud base total water + REAL(kind_phys) GCUB (IJSDIM) ! cloud base U + REAL(kind_phys) GCVB (IJSDIM) ! cloud base V + REAL(kind_phys) GCIB (IJSDIM) ! cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer !DDsigma added to arglist for AW, subcloud updraft profiles: temperature, water vapor ! total water, cloud water, and cloud ice respectively - REAL(r8), dimension(ijsdim,kmax) :: gctbl, gcqbl, gcwbl, gcqlbl, gcqibl !>DDsigmadiag - REAL(r8), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag + REAL(kind_phys), dimension(ijsdim,kmax) :: gctbl, gcqbl, gcwbl, gcqlbl, gcqibl !>DDsigmadiag + REAL(kind_phys), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDq (IJSDIM, KMAX, ntr) ! water vapor and tracer - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZM (IJSDIM, KMAX+1) ! Altitude (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! pressure (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) GDq (IJSDIM, KMAX, ntr) ! water vapor and tracer + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturate MSE + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate humidity + REAL(kind_phys) GDQI (IJSDIM, KMAX) ! cloud ice + REAL(kind_phys) GDU (IJSDIM, KMAX) ! u-velocity + REAL(kind_phys) GDV (IJSDIM, KMAX) ! v-velocity + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) ! Altitude (half lev) + REAL(kind_phys) GDPM (IJSDIM, KMAX+1) ! pressure (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) CBASE (IJSDIM) ! one over cloud base height -! REAL(r8) CBASEP(IJSDIM) ! cloud base pressure - REAL(r8) DELZ, GAMX, wrk -! REAL(r8) DELZ, QSL, GAMX, wrk -! REAL(r8), dimension(ijsdim,kmax) :: gchbl !DDsigmadiag - real(r8), dimension(ijsdim) :: gcqb, tx1, spbl, qsl + REAL(kind_phys) CBASE (IJSDIM) ! one over cloud base height +! REAL(kind_phys) CBASEP(IJSDIM) ! cloud base pressure + REAL(kind_phys) DELZ, GAMX, wrk +! REAL(kind_phys) DELZ, QSL, GAMX, wrk +! REAL(kind_phys), dimension(ijsdim,kmax) :: gchbl !DDsigmadiag + real(kind_phys), dimension(ijsdim) :: gcqb, tx1, spbl, qsl INTEGER I, K, kp1, n ! ! [INTERNAL PARM] @@ -2031,91 +2032,91 @@ SUBROUTINE CUMUP & !! in-cloud properties logical :: lprnt ! ! [OUTPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid water*eta - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice*eta - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! rain generation*eta - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snow generation*eta - REAL(r8) GCYT (IJSDIM) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM) ! cloud top MSE*eta - REAL(r8) GCQT (IJSDIM) ! cloud top moisture*eta - REAL(r8) GCLT (IJSDIM) ! cloud top liquid water*eta - REAL(r8) GCIT (IJSDIM) ! cloud top ice*eta - REAL(r8) GCtrT (IJSDIM, ntrq:ntr) ! cloud top tracer*eta - REAL(r8) GTPRT (IJSDIM) ! cloud top (rain+snow)*eta - REAL(r8) GCUT (IJSDIM) ! cloud top u*eta - REAL(r8) GCVT (IJSDIM) ! cloud top v*eta - REAL(r8) GCwT (IJSDIM) ! cloud top v*eta + REAL(kind_phys) ACWF (IJSDIM) ! cloud work function + REAL(kind_phys) GCLZ (IJSDIM, KMAX) ! cloud liquid water*eta + REAL(kind_phys) GCIZ (IJSDIM, KMAX) ! cloud ice*eta + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) ! rain generation*eta + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) ! snow generation*eta + REAL(kind_phys) GCYT (IJSDIM) ! norm. mass flux @top + REAL(kind_phys) GCHT (IJSDIM) ! cloud top MSE*eta + REAL(kind_phys) GCQT (IJSDIM) ! cloud top moisture*eta + REAL(kind_phys) GCLT (IJSDIM) ! cloud top liquid water*eta + REAL(kind_phys) GCIT (IJSDIM) ! cloud top ice*eta + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr) ! cloud top tracer*eta + REAL(kind_phys) GTPRT (IJSDIM) ! cloud top (rain+snow)*eta + REAL(kind_phys) GCUT (IJSDIM) ! cloud top u*eta + REAL(kind_phys) GCVT (IJSDIM) ! cloud top v*eta + REAL(kind_phys) GCwT (IJSDIM) ! cloud top v*eta INTEGER KT (IJSDIM) ! cloud top INTEGER KTMX ! max of cloud top - REAL(r8) WCV (IJSDIM, KMAX) ! updraft velocity (half lev) !DD sigma make output + REAL(kind_phys) WCV (IJSDIM, KMAX) ! updraft velocity (half lev) !DD sigma make output ! ! [MODIFIED] - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux + REAL(kind_phys) GCYM (IJSDIM, KMAX) ! norm. mass flux ! ! [INPUT] - REAL(r8) GCHB (IJSDIM) ! cloud base Moist Static Energy - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracers - REAL(r8) GDU (IJSDIM, KMAX) ! U - REAL(r8) GDV (IJSDIM, KMAX) ! V - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDHS (IJSDIM, KMAX) ! saturation MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturation q - REAL(r8) GDT (IJSDIM, KMAX) ! T - REAL(r8) GDTM (IJSDIM, KMAX+1) ! T (half lev) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! q !!DDsigmadiag - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDZ (IJSDIM, KMAX) ! z - REAL(r8) GDZM (IJSDIM, KMAX+1) ! z (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! p (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDZTR (IJSDIM) ! tropopause height - REAL(r8) CPRES ! pres. fac. for cum. fric. - REAL(r8) WCB(ijsdim) ! cloud base updraft velocity**2 -! REAL(r8) ERMR ! entrainment rate (ASMODE) + REAL(kind_phys) GCHB (IJSDIM) ! cloud base Moist Static Energy + REAL(kind_phys) GCWB (IJSDIM) ! cloud base total water + REAL(kind_phys) GCUB (IJSDIM) ! cloud base U + REAL(kind_phys) GCVB (IJSDIM) ! cloud base V + REAL(kind_phys) GCIB (IJSDIM) ! cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracers + REAL(kind_phys) GDU (IJSDIM, KMAX) ! U + REAL(kind_phys) GDV (IJSDIM, KMAX) ! V + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturation MSE + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturation q + REAL(kind_phys) GDT (IJSDIM, KMAX) ! T + REAL(kind_phys) GDTM (IJSDIM, KMAX+1) ! T (half lev) + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) ! q !!DDsigmadiag + REAL(kind_phys) GDQI (IJSDIM, KMAX) ! cloud ice + REAL(kind_phys) GDZ (IJSDIM, KMAX) ! z + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) ! z (half lev) + REAL(kind_phys) GDPM (IJSDIM, KMAX+1) ! p (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDZTR (IJSDIM) ! tropopause height + REAL(kind_phys) CPRES ! pres. fac. for cum. fric. + REAL(kind_phys) WCB(ijsdim) ! cloud base updraft velocity**2 +! REAL(kind_phys) ERMR ! entrainment rate (ASMODE) INTEGER KB (IJSDIM) INTEGER CTP, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) ACWFK (IJSDIM,KMAX) ! cloud work function - REAL(r8) ACWFN (IJSDIM,KMAX) ! negative part of cloud work function - REAL(r8) myGCHt ! cloud top h *eta (half lev) - REAL(r8) GCHMZ (IJSDIM, KMAX) ! cloud h *eta (half lev) - REAL(r8) GCWMZ (IJSDIM, KMAX) ! cloud Qt*eta (half lev) - REAL(r8) GCUMZ (IJSDIM, KMAX) ! cloud U *eta (half lev) - REAL(r8) GCVMZ (IJSDIM, KMAX) ! cloud V *eta (half lev) - REAL(r8) GCqMZ (IJSDIM ) ! cloud qv*eta (half lev) - REAL(r8) GCIMZ (IJSDIM, KMAX) ! cloud Qi*eta (half lev) - REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)! cloud tracer*eta (half lev) - REAL(r8) GTPRMZ(IJSDIM, KMAX) ! rain+snow *eta (half lev) -! - REAL(r8) BUOY (IJSDIM, KMAX) ! buoyancy - REAL(r8) BUOYM (IJSDIM, KMAX) ! buoyancy (half lev) - REAL(r8) WCM (IJSDIM ) ! updraft velocity**2 (half lev) -! REAL(r8) WCM (IJSDIM, KMAX) ! updraft velocity**2 (half lev) -!DD sigma make output REAL(r8) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) - REAL(r8) GCY (IJSDIM, KMAX) ! norm. mass flux -! REAL(r8) ELAR (IJSDIM, KMAX) ! entrainment rate - REAL(r8) ELAR ! entrainment rate at mid layer -! - REAL(r8) GCHM (IJSDIM, KMAX) ! cloud MSE (half lev) - REAL(r8) GCWM (IJSDIM, KMAX) ! cloud Qt (half lev) !DDsigmadiag - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCLM (IJSDIM, KMAX) ! cloud liquid ( half lev) - REAL(r8) GCIM (IJSDIM, KMAX) ! cloud ice (half lev) - REAL(r8) GCUM (IJSDIM, KMAX) ! cloud U (half lev) - REAL(r8) GCVM (IJSDIM, KMAX) ! cloud V (half lev) - REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) ! cloud tracer (half lev) -! - REAL(r8), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB - REAL(r8) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & + REAL(kind_phys) ACWFK (IJSDIM,KMAX) ! cloud work function + REAL(kind_phys) ACWFN (IJSDIM,KMAX) ! negative part of cloud work function + REAL(kind_phys) myGCHt ! cloud top h *eta (half lev) + REAL(kind_phys) GCHMZ (IJSDIM, KMAX) ! cloud h *eta (half lev) + REAL(kind_phys) GCWMZ (IJSDIM, KMAX) ! cloud Qt*eta (half lev) + REAL(kind_phys) GCUMZ (IJSDIM, KMAX) ! cloud U *eta (half lev) + REAL(kind_phys) GCVMZ (IJSDIM, KMAX) ! cloud V *eta (half lev) + REAL(kind_phys) GCqMZ (IJSDIM ) ! cloud qv*eta (half lev) + REAL(kind_phys) GCIMZ (IJSDIM, KMAX) ! cloud Qi*eta (half lev) + REAL(kind_phys) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)! cloud tracer*eta (half lev) + REAL(kind_phys) GTPRMZ(IJSDIM, KMAX) ! rain+snow *eta (half lev) +! + REAL(kind_phys) BUOY (IJSDIM, KMAX) ! buoyancy + REAL(kind_phys) BUOYM (IJSDIM, KMAX) ! buoyancy (half lev) + REAL(kind_phys) WCM (IJSDIM ) ! updraft velocity**2 (half lev) +! REAL(kind_phys) WCM (IJSDIM, KMAX) ! updraft velocity**2 (half lev) +!DD sigma make output REAL(kind_phys) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) + REAL(kind_phys) GCY (IJSDIM, KMAX) ! norm. mass flux +! REAL(kind_phys) ELAR (IJSDIM, KMAX) ! entrainment rate + REAL(kind_phys) ELAR ! entrainment rate at mid layer +! + REAL(kind_phys) GCHM (IJSDIM, KMAX) ! cloud MSE (half lev) + REAL(kind_phys) GCWM (IJSDIM, KMAX) ! cloud Qt (half lev) !DDsigmadiag + REAL(kind_phys) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output + REAL(kind_phys) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCLM (IJSDIM, KMAX) ! cloud liquid ( half lev) + REAL(kind_phys) GCIM (IJSDIM, KMAX) ! cloud ice (half lev) + REAL(kind_phys) GCUM (IJSDIM, KMAX) ! cloud U (half lev) + REAL(kind_phys) GCVM (IJSDIM, KMAX) ! cloud V (half lev) + REAL(kind_phys) GCtrM (IJSDIM, KMAX,ntrq:ntr) ! cloud tracer (half lev) +! + REAL(kind_phys), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB + REAL(kind_phys) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & DELZ, ELADZ, DCTM , CPGMI, DELC, FICE, ELARM2,GCCMZ, & PRECR, GTPRIZ, DELZL, GCCT, DCT, WCVX, PRCZH, wrk INTEGER K, I, kk, km1, kp1, n @@ -2123,43 +2124,43 @@ SUBROUTINE CUMUP & !! in-cloud properties ! CHARACTER CTNUM*2 ! !DD#ifdef OPT_CUMBGT -!DD REAL(r8) HBGT (IJSDIM) ! heat budget -!DD REAL(r8) WBGT (IJSDIM) ! water budget -!DD REAL(r8) PBGT (IJSDIM) ! precipitation budget -!DD REAL(r8) MBGT (IJSDIM) ! mass budget -!DD REAL(r8) GTPRX (IJSDIM) ! (rain+snow)*eta at top -!DD REAL(r8) GSNWT (IJSDIM) ! cloud top snow*eta -!DD REAL(r8) HBMX, WBMX, PBMX, MBMX +!DD REAL(kind_phys) HBGT (IJSDIM) ! heat budget +!DD REAL(kind_phys) WBGT (IJSDIM) ! water budget +!DD REAL(kind_phys) PBGT (IJSDIM) ! precipitation budget +!DD REAL(kind_phys) MBGT (IJSDIM) ! mass budget +!DD REAL(kind_phys) GTPRX (IJSDIM) ! (rain+snow)*eta at top +!DD REAL(kind_phys) GSNWT (IJSDIM) ! cloud top snow*eta +!DD REAL(kind_phys) HBMX, WBMX, PBMX, MBMX !DD SAVE HBMX, WBMX, PBMX, MBMX !DD#endif ! ! [INTERNAL PARAM] - REAL(r8), parameter :: ZTREF = 1._r8, ztrefi = one/ztref, & + REAL(kind_phys), parameter :: ZTREF = 1._kind_phys, ztrefi = one/ztref, & ELAMIN = zero, ELAMAX = 4.e-3 ! min and max entrainment rate - REAL(r8) :: PB = 1.0_r8 -!m REAL(r8) :: TAUZ = 5.0e3_r8 - REAL(r8) :: TAUZ = 1.0e4_r8 -!m REAL(r8) :: ELMD = 2.4e-3 ! for Neggers and Siebesma (2002) -!m REAL(r8) :: ELAMAX = 5.e-3 ! max. of entrainment rate -! REAL(r8) :: WCCRT = zero -!m REAL(r8) :: WCCRT = 0.01 - REAL(r8) :: WCCRT = 1.0e-6_r8, wvcrt=1.0e-3_r8 - REAL(r8) :: TSICE = 268.15_r8 ! compatible with macrop_driver - REAL(r8) :: TWICE = 238.15_r8 ! compatible with macrop_driver - -! REAL(r8) :: wfn_neg = 0.1 - REAL(r8) :: wfn_neg = 0.15 -! REAL(r8) :: wfn_neg = 0.25 -! REAL(r8) :: wfn_neg = 0.30 -! REAL(r8) :: wfn_neg = 0.35 + REAL(kind_phys) :: PB = 1.0_kind_phys +!m REAL(kind_phys) :: TAUZ = 5.0e3_kind_phys + REAL(kind_phys) :: TAUZ = 1.0e4_kind_phys +!m REAL(kind_phys) :: ELMD = 2.4e-3 ! for Neggers and Siebesma (2002) +!m REAL(kind_phys) :: ELAMAX = 5.e-3 ! max. of entrainment rate +! REAL(kind_phys) :: WCCRT = zero +!m REAL(kind_phys) :: WCCRT = 0.01 + REAL(kind_phys) :: WCCRT = 1.0e-6_kind_phys, wvcrt=1.0e-3_kind_phys + REAL(kind_phys) :: TSICE = 268.15_kind_phys ! compatible with macrop_driver + REAL(kind_phys) :: TWICE = 238.15_kind_phys ! compatible with macrop_driver + +! REAL(kind_phys) :: wfn_neg = 0.1 + REAL(kind_phys) :: wfn_neg = 0.15 +! REAL(kind_phys) :: wfn_neg = 0.25 +! REAL(kind_phys) :: wfn_neg = 0.30 +! REAL(kind_phys) :: wfn_neg = 0.35 - REAL(r8) :: esat, tem -! REAL(r8) :: esat, tem, rhs_h, rhs_q + REAL(kind_phys) :: esat, tem +! REAL(kind_phys) :: esat, tem, rhs_h, rhs_q ! - REAL(r8) Z ! altitude - REAL(r8) ZH ! scale height - REAL(r8) T ! temperature + REAL(kind_phys) Z ! altitude + REAL(kind_phys) ZH ! scale height + REAL(kind_phys) T ! temperature ! ! ! Note: iteration is not made to diagnose cloud ice for simplicity @@ -2178,8 +2179,8 @@ SUBROUTINE CUMUP & !! in-cloud properties enddo do k=1,kmax do i=ists,iens - ACWFK (I,k) = unset_r8 - ACWFN (I,k) = unset_r8 + ACWFK (I,k) = unset_kind_phys + ACWFN (I,k) = unset_kind_phys GCLZ (I,k) = zero GCIZ (I,k) = zero GPRCIZ(I,k) = zero @@ -2192,24 +2193,24 @@ SUBROUTINE CUMUP & !! in-cloud properties GCVMZ (I,k) = zero GTPRMZ(I,k) = zero ! - BUOY (I,k) = unset_r8 - BUOYM (I,k) = unset_r8 - WCV (I,k) = unset_r8 - GCY (I,k) = unset_r8 -! - GCHM (I,k) = unset_r8 - GCWM (I,k) = unset_r8 - GCTM (I,k) = unset_r8 - GCQM (I,k) = unset_r8 - GCLM (I,k) = unset_r8 - GCIM (I,k) = unset_r8 - GCUM (I,k) = unset_r8 - GCVM (I,k) = unset_r8 + BUOY (I,k) = unset_kind_phys + BUOYM (I,k) = unset_kind_phys + WCV (I,k) = unset_kind_phys + GCY (I,k) = unset_kind_phys +! + GCHM (I,k) = unset_kind_phys + GCWM (I,k) = unset_kind_phys + GCTM (I,k) = unset_kind_phys + GCQM (I,k) = unset_kind_phys + GCLM (I,k) = unset_kind_phys + GCIM (I,k) = unset_kind_phys + GCUM (I,k) = unset_kind_phys + GCVM (I,k) = unset_kind_phys enddo enddo do i=ists,iens GCqMZ(I) = zero - WCM(I) = unset_r8 + WCM(I) = unset_kind_phys WCM_(I) = zero enddo ! tracers @@ -2219,7 +2220,7 @@ SUBROUTINE CUMUP & !! in-cloud properties enddo do k=1,kmax do i=ists,iens - GCTRM(I,k,n) = unset_r8 + GCTRM(I,k,n) = unset_kind_phys enddo enddo enddo @@ -2632,16 +2633,16 @@ SUBROUTINE CUMUP & !! in-cloud properties pure function FPREC(Z,ZH) implicit none - real(r8), intent(in) :: Z - real(r8), intent(in) :: ZH - real(r8) :: FPREC + real(kind_phys), intent(in) :: Z + real(kind_phys), intent(in) :: ZH + real(kind_phys) :: FPREC FPREC = MIN(MAX(one-EXP(-(Z-PRECZ0)/ZH), zero), one) end function FPREC pure function FRICE(T) implicit none - real(r8), intent(in) :: T - real(r8) :: FRICE + real(kind_phys), intent(in) :: T + real(kind_phys) :: FRICE FRICE = MIN(MAX((TSICE-T)/(TSICE-TWICE), zero), one) end function FRICE @@ -2663,37 +2664,37 @@ SUBROUTINE CUMBMX & !! cloud base mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) CBMFX (IJSDIM) ! cloud base mass flux + REAL(kind_phys) CBMFX (IJSDIM) ! cloud base mass flux ! ! [INPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCYT (IJSDIM) ! norm mass flux @top - REAL(r8) GDZM (IJSDIM, KMAX+1) ! height - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) DELP (IJSDIM, KMAX) ! delt pressure + REAL(kind_phys) ACWF (IJSDIM) ! cloud work function + REAL(kind_phys) GCYT (IJSDIM) ! norm mass flux @top + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) ! height + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate humidity + REAL(kind_phys) DELP (IJSDIM, KMAX) ! delt pressure INTEGER KT (IJSDIM) ! cloud top INTEGER KTMX ! max. of cloud top INTEGER KB (IJSDIM) ! cloud base - REAL(r8) DELT ! time step + REAL(kind_phys) DELT ! time step INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8), dimension(ijsdim) :: QX, QSX, RHM + REAL(kind_phys), dimension(ijsdim) :: QX, QSX, RHM INTEGER I, K - REAL(r8) ALP, FMAX1, wrk + REAL(kind_phys) ALP, FMAX1, wrk ! ! [INTERNAL PARAM] - REAL(r8) :: FMAX = 1.5e-2_r8 ! maximum flux -! REAL(r8) :: RHMCRT = zero ! critical val. of cloud mean RH -! REAL(r8) :: RHMCRT = 0.25_r8 ! critical val. of cloud mean RH - REAL(r8) :: RHMCRT = 0.50_r8 ! critical val. of cloud mean RH - REAL(r8) :: ALP1 = zero - REAL(r8) :: TAUD = 1.e3_r8 -! REAL(r8) :: TAUD = 6.e2_r8 - REAL(r8) :: ZFMAX = 3.5e3_r8 - REAL(r8) :: ZDFMAX = 5.e2_r8 -! REAL(r8) :: FMAXP = 2._r8 + REAL(kind_phys) :: FMAX = 1.5e-2_kind_phys ! maximum flux +! REAL(kind_phys) :: RHMCRT = zero ! critical val. of cloud mean RH +! REAL(kind_phys) :: RHMCRT = 0.25_kind_phys ! critical val. of cloud mean RH + REAL(kind_phys) :: RHMCRT = 0.50_kind_phys ! critical val. of cloud mean RH + REAL(kind_phys) :: ALP1 = zero + REAL(kind_phys) :: TAUD = 1.e3_kind_phys +! REAL(kind_phys) :: TAUD = 6.e2_kind_phys + REAL(kind_phys) :: ZFMAX = 3.5e3_kind_phys + REAL(kind_phys) :: ZDFMAX = 5.e2_kind_phys +! REAL(kind_phys) :: FMAXP = 2._kind_phys ! do i=ists,iens qx(i) = zero @@ -2748,23 +2749,23 @@ SUBROUTINE CUMFLX & !! cloud mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX, IM !! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux - REAL(r8) CMDET (IJSDIM, KMAX) !! detrainment mass flux - REAL(r8) GPRCI (IJSDIM, KMAX) !! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) !! snowfall generation - REAL(r8) QLIQ (IJSDIM, KMAX) !! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) !! cloud ice - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !! mass flux + REAL(kind_phys) CMDET (IJSDIM, KMAX) !! detrainment mass flux + REAL(kind_phys) GPRCI (IJSDIM, KMAX) !! rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) !! snowfall generation + REAL(kind_phys) QLIQ (IJSDIM, KMAX) !! cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) !! cloud ice + REAL(kind_phys) GTPRC0(IJSDIM) !! precip. before evap. ! ! [INPUT] - REAL(r8) CBMFX (IJSDIM) !! cloud base mass flux - REAL(r8) GCYM (IJSDIM, KMAX) !! normalized mass flux - REAL(r8) GCYT (IJSDIM) !! detraining mass flux - REAL(r8) GPRCIZ(IJSDIM, KMAX) !! precipitation/M - REAL(r8) GSNWIZ(IJSDIM, KMAX) !! snowfall/M - REAL(r8) GTPRT (IJSDIM) !! rain+snow @top - REAL(r8) GCLZ (IJSDIM, KMAX) !! cloud liquid/M - REAL(r8) GCIZ (IJSDIM, KMAX) !! cloud ice/M + REAL(kind_phys) CBMFX (IJSDIM) !! cloud base mass flux + REAL(kind_phys) GCYM (IJSDIM, KMAX) !! normalized mass flux + REAL(kind_phys) GCYT (IJSDIM) !! detraining mass flux + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) !! precipitation/M + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) !! snowfall/M + REAL(kind_phys) GTPRT (IJSDIM) !! rain+snow @top + REAL(kind_phys) GCLZ (IJSDIM, KMAX) !! cloud liquid/M + REAL(kind_phys) GCIZ (IJSDIM, KMAX) !! cloud ice/M INTEGER KB (IJSDIM) !! cloud base INTEGER KT (IJSDIM) !! cloud top INTEGER KTMX !! max of cloud top @@ -2810,34 +2811,34 @@ SUBROUTINE CUMDET & !! detrainment INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! moisture tendency -! REAL(r8) GTCFRC(IJSDIM, KMAX) !! cloud fraction tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTT (IJSDIM, KMAX) !! temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) !! moisture tendency +! REAL(kind_phys) GTCFRC(IJSDIM, KMAX) !! cloud fraction tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !! u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !! v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) !! moist static energy - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity qv -! REAL(r8) GDCFRC(IJSDIM, KMAX) !! cloud fraction - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) CBMFX (IM, NCTP) !! cloud base mass flux - REAL(r8) GCYT (IJSDIM, NCTP) !! detraining mass flux - REAL(r8) GCHT (IJSDIM, NCTP) !! detraining MSE - REAL(r8) GCQT (IJSDIM, NCTP) !! detraining qv - REAL(r8) GCLT (IJSDIM, NCTP) !! detraining ql - REAL(r8) GCIT (IJSDIM, NCTP) !! detraining qi - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!! detraining tracer - REAL(r8) GCUT (IJSDIM, NCTP) !! detraining u - REAL(r8) GCVT (IJSDIM, NCTP) !! detraining v - REAL(r8) GDQI (IJSDIM, KMAX) !! cloud ice + REAL(kind_phys) GDH (IJSDIM, KMAX) !! moist static energy + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !! humidity qv +! REAL(kind_phys) GDCFRC(IJSDIM, KMAX) !! cloud fraction + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) CBMFX (IM, NCTP) !! cloud base mass flux + REAL(kind_phys) GCYT (IJSDIM, NCTP) !! detraining mass flux + REAL(kind_phys) GCHT (IJSDIM, NCTP) !! detraining MSE + REAL(kind_phys) GCQT (IJSDIM, NCTP) !! detraining qv + REAL(kind_phys) GCLT (IJSDIM, NCTP) !! detraining ql + REAL(kind_phys) GCIT (IJSDIM, NCTP) !! detraining qi + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr, NCTP)!! detraining tracer + REAL(kind_phys) GCUT (IJSDIM, NCTP) !! detraining u + REAL(kind_phys) GCVT (IJSDIM, NCTP) !! detraining v + REAL(kind_phys) GDQI (IJSDIM, KMAX) !! cloud ice INTEGER KT (IJSDIM, NCTP) !! cloud top INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GTHCI, GTQVCI, GTXCI + REAL(kind_phys) GTHCI, GTQVCI, GTXCI integer I, K, CTP, kk,n ! @@ -2885,33 +2886,33 @@ SUBROUTINE CUMSBH & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX, NTR, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTT (IJSDIM, KMAX) !! Temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) !! Moisture etc tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !! u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !! v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) + REAL(kind_phys) GDH (IJSDIM, KMAX) + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !! humidity etc + REAL(kind_phys) GDQI (IJSDIM, KMAX) + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) + REAL(kind_phys) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) INTEGER KB(IJSDIM) !! cloud base index - negative means no convection INTEGER KTMX - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(kind_phys) CPRES !! pressure factor for cumulus friction INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) SBH0, SBQ0, SBL0, SBI0, SBC0, SBS0, & + REAL(kind_phys) SBH0, SBQ0, SBL0, SBI0, SBC0, SBS0, & SBH1, SBQ1, SBL1, SBI1, SBC1, SBS1, FX1, & SBU0, SBV0, SBU1, SBV1, GTHCI, GTQVCI, & GTQLCI, GTQICI, GTM2CI, GTM3CI, wrk, wrk1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) FX(ISTS:IENS) - REAL(r8), dimension(IJSDIM, KMAX) :: GTLSBH, GTISBH + REAL(kind_phys), dimension(IJSDIM, KMAX) :: GTLSBH, GTISBH integer :: I, K, KM, KP, n ! ! @@ -3007,22 +3008,22 @@ SUBROUTINE CUMSBW & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX!! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !! u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !! v tendency ! ! [INPUT] - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) + REAL(kind_phys) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) INTEGER KB(IJSDIM) !! cloud base index - negative means no convection INTEGER KTMX, ISTS, IENS - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(kind_phys) CPRES !! pressure factor for cumulus friction ! ! [INTERNAL WORK] - REAL(r8) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 + REAL(kind_phys) FX(ISTS:IENS) integer :: I, K, KM, KP ! @@ -3090,114 +3091,114 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation logical, intent(in) :: do_aw, do_awdd, flx_form ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) ! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) ! u tendency - REAL(r8) GTV (IJSDIM, KMAX) ! v tendency - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux + REAL(kind_phys) GTT (IJSDIM, KMAX) ! Temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) ! Moisture etc tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) ! u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) ! v tendency + REAL(kind_phys) GMFLX (IJSDIM, KMAX) ! mass flux ! ! [OUTPUT] - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux - REAL(r8) GSNWP (IJSDIM, KMAX) ! snowfall flux - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(kind_phys) GPRCP (IJSDIM, KMAX) ! rainfall flux + REAL(kind_phys) GSNWP (IJSDIM, KMAX) ! snowfall flux + REAL(kind_phys) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation + REAL(kind_phys) GMDD (IJSDIM, KMAX) ! downdraft mass flux !AW microphysical tendencies - REAL(r8) gtmelt (IJSDIM, KMAX) ! t tendency ice-liq - REAL(r8) gtevap (IJSDIM, KMAX) ! t tendency liq-vapor - REAL(r8) gtsubl (IJSDIM, KMAX) ! t tendency ice-vapor + REAL(kind_phys) gtmelt (IJSDIM, KMAX) ! t tendency ice-liq + REAL(kind_phys) gtevap (IJSDIM, KMAX) ! t tendency liq-vapor + REAL(kind_phys) gtsubl (IJSDIM, KMAX) ! t tendency ice-vapor !AW eddy flux tendencies - REAL(r8) dtdwn (IJSDIM, KMAX) ! t tendency downdraft detrainment - REAL(r8) dqvdwn (IJSDIM, KMAX) ! qv tendency downdraft detrainment - REAL(r8) dqldwn (IJSDIM, KMAX) ! ql tendency downdraft detrainment - REAL(r8) dqidwn (IJSDIM, KMAX) ! qi tendency downdraft detrainment - REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) ! tracer tendency downdraft detrainment + REAL(kind_phys) dtdwn (IJSDIM, KMAX) ! t tendency downdraft detrainment + REAL(kind_phys) dqvdwn (IJSDIM, KMAX) ! qv tendency downdraft detrainment + REAL(kind_phys) dqldwn (IJSDIM, KMAX) ! ql tendency downdraft detrainment + REAL(kind_phys) dqidwn (IJSDIM, KMAX) ! qi tendency downdraft detrainment + REAL(kind_phys) dtrdwn (IJSDIM, KMAX, ntrq:ntr) ! tracer tendency downdraft detrainment ! AW downdraft area fraction (assumed zero for now) - REAL(r8) sigmad (IJSDIM,KMAX) !DDsigma cloud downdraft area fraction + REAL(kind_phys) sigmad (IJSDIM,KMAX) !DDsigma cloud downdraft area fraction ! [INPUT] - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate moist static energy - REAL(r8) GDT (IJSDIM, KMAX) ! air temperature T - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZ (IJSDIM, KMAX) ! altitude - REAL(r8) GDZM (IJSDIM, KMAX+1) ! altitude (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GPRCI (IJSDIM, KMAX) ! rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) ! snowfall generation + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) ! humidity etc + REAL(kind_phys) GDQI (IJSDIM, KMAX) ! cloud ice + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate humidity + REAL(kind_phys) GDS (IJSDIM, KMAX) ! dry static energy + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturate moist static energy + REAL(kind_phys) GDT (IJSDIM, KMAX) ! air temperature T + REAL(kind_phys) GDU (IJSDIM, KMAX) ! u-velocity + REAL(kind_phys) GDV (IJSDIM, KMAX) ! v-velocity + REAL(kind_phys) GDZ (IJSDIM, KMAX) ! altitude + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) ! altitude (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) INTEGER KB (IJSDIM) INTEGER KTMX, ISTS, IENS ! ! [INTERNAL WORK] ! Note: Some variables have 3-dimensions for the purpose of budget check. - REAL(r8) EVAPD (IJSDIM, KMAX) ! evap. in downdraft - REAL(r8) SUBLD (IJSDIM, KMAX) ! subl. in downdraft - REAL(r8) EVAPE (IJSDIM, KMAX) ! evap. in environment - REAL(r8) SUBLE (IJSDIM, KMAX) ! subl. in environment - REAL(r8) EVAPX (IJSDIM, KMAX) ! evap. env. to DD - REAL(r8) SUBLX (IJSDIM, KMAX) ! subl. env. to DD - REAL(r8) GMDDE (IJSDIM, KMAX) ! downdraft entrainment - REAL(r8) SNMLT (IJSDIM, KMAX) ! melt - freeze - REAL(r8) GCHDD (IJSDIM, KMAX) ! MSE detrainment - REAL(r8) GCWDD (IJSDIM, KMAX) ! water detrainment - REAL(r8) GTTEV (IJSDIM, KMAX) ! T tendency by evaporation - REAL(r8) GTQEV (IJSDIM, KMAX) ! q tendency by evaporation - REAL(r8) GCHD (ISTS:IENS) ! downdraft MSE - REAL(r8) GCWD (ISTS:IENS) ! downdraft q + REAL(kind_phys) EVAPD (IJSDIM, KMAX) ! evap. in downdraft + REAL(kind_phys) SUBLD (IJSDIM, KMAX) ! subl. in downdraft + REAL(kind_phys) EVAPE (IJSDIM, KMAX) ! evap. in environment + REAL(kind_phys) SUBLE (IJSDIM, KMAX) ! subl. in environment + REAL(kind_phys) EVAPX (IJSDIM, KMAX) ! evap. env. to DD + REAL(kind_phys) SUBLX (IJSDIM, KMAX) ! subl. env. to DD + REAL(kind_phys) GMDDE (IJSDIM, KMAX) ! downdraft entrainment + REAL(kind_phys) SNMLT (IJSDIM, KMAX) ! melt - freeze + REAL(kind_phys) GCHDD (IJSDIM, KMAX) ! MSE detrainment + REAL(kind_phys) GCWDD (IJSDIM, KMAX) ! water detrainment + REAL(kind_phys) GTTEV (IJSDIM, KMAX) ! T tendency by evaporation + REAL(kind_phys) GTQEV (IJSDIM, KMAX) ! q tendency by evaporation + REAL(kind_phys) GCHD (ISTS:IENS) ! downdraft MSE + REAL(kind_phys) GCWD (ISTS:IENS) ! downdraft q ! profiles of downdraft variables for AW flux tendencies - REAL(r8) GCdseD(ISTS:IENS, KMAX) ! downdraft dse - REAL(r8) GCqvD (ISTS:IENS, KMAX) ! downdraft qv -! REAL(r8) GCqlD (ISTS:IENS, KMAX) ! downdraft ql -! REAL(r8) GCqiD (ISTS:IENS, KMAX) ! downdraft qi - REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) ! downdraft tracer - - REAL(r8) GCUD (ISTS:IENS) ! downdraft u - REAL(r8) GCVD (ISTS:IENS) ! downdraft v - REAL(r8) FSNOW (ISTS:IENS) - REAL(r8) GMDDD (ISTS:IENS) - - REAL(r8) GDTW, GCHX, GCTX, GCQSX, GTPRP, EVSU, GTEVE, LVIC, & + REAL(kind_phys) GCdseD(ISTS:IENS, KMAX) ! downdraft dse + REAL(kind_phys) GCqvD (ISTS:IENS, KMAX) ! downdraft qv +! REAL(kind_phys) GCqlD (ISTS:IENS, KMAX) ! downdraft ql +! REAL(kind_phys) GCqiD (ISTS:IENS, KMAX) ! downdraft qi + REAL(kind_phys) GCtrD (ISTS:IENS, ntrq:ntr) ! downdraft tracer + + REAL(kind_phys) GCUD (ISTS:IENS) ! downdraft u + REAL(kind_phys) GCVD (ISTS:IENS) ! downdraft v + REAL(kind_phys) FSNOW (ISTS:IENS) + REAL(kind_phys) GMDDD (ISTS:IENS) + + REAL(kind_phys) GDTW, GCHX, GCTX, GCQSX, GTPRP, EVSU, GTEVE, LVIC, & DQW, DTW, GDQW, DZ, GCSD, FDET, GDHI, GMDDX, & GMDDMX, GCHDX, GCWDX, GCUDD, GCVDD, GTHCI, GTQVCI, & wrk, wrk1, wrk2, wrk3, wrk4, tx1, & WMX, HMX, DDWMX, DDHMX, dp_above, dp_below, fsigma, & fmelt, fevp, wrkn, gctrdd(ntrq:ntr) -!M REAL(r8) GTHCI, GTQVCI, GTQLCI, GTQICI, GTUCI, GTVCI +!M REAL(kind_phys) GTHCI, GTQVCI, GTQLCI, GTQICI, GTUCI, GTVCI !DD#ifdef OPT_CUMBGT ! Water, energy, downdraft water and downdraft energy budgets -! REAL(r8), dimension(ISTS:IENS) :: WBGT, HBGT, DDWBGT, DDHBGT +! REAL(kind_phys), dimension(ISTS:IENS) :: WBGT, HBGT, DDWBGT, DDHBGT integer ij, i, k, kp1, n !DD#endif ! ! [INTERNAL PARM] - REAL(r8), parameter :: TWSNOW = 273.15_r8 ! wet-bulb temp. rain/snow - REAL(r8), parameter :: FTMLT = 4._r8 ! temp. factor for melt - REAL(r8), parameter :: GMFLXC = 5.e-2_r8 ! critical mass flux - REAL(r8), parameter :: VTERMS = 2._r8 ! terminal velocity of snowflake -! REAL(r8), parameter :: MELTAU = 10._r8 ! melting timescale - REAL(r8), parameter :: MELTAU = 20._r8 ! melting timescale ! Moorthi june 30, 2017 -! -! REAL(r8), parameter :: EVAPR = 0.4_r8 ! evaporation factor ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVAPR = 0.3_r8 ! evaporation factor -! REAL(r8), parameter :: EVAPR = 0._r8 ! evaporation factor - REAL(r8), parameter :: REVPDD = 1._r8 ! max rate of DD to evapolation - REAL(r8), parameter :: RDDR = 5.e-4_r8 ! DD rate (T0 R0 W0)^-1 -! REAL(r8), parameter :: RDDR = 0._r8 ! DD rate (T0 R0 W0)^-1 - REAL(r8), parameter :: RDDMX = 0.5_r8 ! norm. flux of downdraft - REAL(r8), parameter :: VTERM = 5._r8 ! term. vel. of precip. -! REAL(r8), parameter :: VTERM = 4._r8 ! term. vel. of precip. ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVATAU = 2._r8 ! evaporation/sublimation timescale - REAL(r8), parameter :: ZDMIN = 5.e2_r8 ! min altitude of downdraft detrainment - real(r8), parameter :: evapovtrm=EVAPR/VTERM + REAL(kind_phys), parameter :: TWSNOW = 273.15_kind_phys ! wet-bulb temp. rain/snow + REAL(kind_phys), parameter :: FTMLT = 4._kind_phys ! temp. factor for melt + REAL(kind_phys), parameter :: GMFLXC = 5.e-2_kind_phys ! critical mass flux + REAL(kind_phys), parameter :: VTERMS = 2._kind_phys ! terminal velocity of snowflake +! REAL(kind_phys), parameter :: MELTAU = 10._kind_phys ! melting timescale + REAL(kind_phys), parameter :: MELTAU = 20._kind_phys ! melting timescale ! Moorthi june 30, 2017 +! +! REAL(kind_phys), parameter :: EVAPR = 0.4_kind_phys ! evaporation factor ! Moorthi June 28, 2017 + REAL(kind_phys), parameter :: EVAPR = 0.3_kind_phys ! evaporation factor +! REAL(kind_phys), parameter :: EVAPR = 0._kind_phys ! evaporation factor + REAL(kind_phys), parameter :: REVPDD = 1._kind_phys ! max rate of DD to evapolation + REAL(kind_phys), parameter :: RDDR = 5.e-4_kind_phys ! DD rate (T0 R0 W0)^-1 +! REAL(kind_phys), parameter :: RDDR = 0._kind_phys ! DD rate (T0 R0 W0)^-1 + REAL(kind_phys), parameter :: RDDMX = 0.5_kind_phys ! norm. flux of downdraft + REAL(kind_phys), parameter :: VTERM = 5._kind_phys ! term. vel. of precip. +! REAL(kind_phys), parameter :: VTERM = 4._kind_phys ! term. vel. of precip. ! Moorthi June 28, 2017 + REAL(kind_phys), parameter :: EVATAU = 2._kind_phys ! evaporation/sublimation timescale + REAL(kind_phys), parameter :: ZDMIN = 5.e2_kind_phys ! min altitude of downdraft detrainment + real(kind_phys), parameter :: evapovtrm=EVAPR/VTERM !NOTE ! downdraft area ffraction still needs to be computed for AW, assumed zero for now, @@ -3543,29 +3544,29 @@ SUBROUTINE CUMCLD & !! cloudiness INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(kind_phys) CUMFRC(IJSDIM) ! cumulus cloud fraction ! ! [MODIFY] - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) QLIQ (IJSDIM, KMAX) ! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! cloud ice - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus + REAL(kind_phys) QLIQ (IJSDIM, KMAX) ! cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) ! cloud ice + REAL(kind_phys) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus ! ! [INPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) ! cumulus mass flux + REAL(kind_phys) GMFLX (IJSDIM, KMAX) ! cumulus mass flux INTEGER KTMX INTEGER ISTS, IENS ! ! [WORK] INTEGER I, K - REAL(r8) CUMF, QC, wrk + REAL(kind_phys) CUMF, QC, wrk ! ! [INTERNAL PARAM] - REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &! Mc->cloudiness - CMFMAX = 3.e-1_r8, &! Mc->cloudiness - CLMIN = 1.e-3_r8, &! cloudiness Min. - CLMAX = 0.1_r8, &! cloudiness Max. - FACLW = 0.1_r8, &! Mc->CLW + REAL(kind_phys), parameter :: CMFMIN = 2.e-3_kind_phys, &! Mc->cloudiness + CMFMAX = 3.e-1_kind_phys, &! Mc->cloudiness + CLMIN = 1.e-3_kind_phys, &! cloudiness Min. + CLMAX = 0.1_kind_phys, &! cloudiness Max. + FACLW = 0.1_kind_phys, &! Mc->CLW FACLF = (CLMAX-CLMIN)/LOG(CMFMAX/CMFMIN) ! CUMFRC(ISTS:IENS) = zero @@ -3615,37 +3616,37 @@ SUBROUTINE CUMUPR & !! Tracer Updraft INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) - REAL(r8) GPRCC (IJSDIM, NTR) + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) + REAL(kind_phys) GPRCC (IJSDIM, NTR) ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) - REAL(r8) CBMFX (IM, NCTP) - REAL(r8) GCYM (IJSDIM, KMAX, nctp) - REAL(r8) GCYT (IJSDIM, NCTP) - REAL(r8) GCQT (IJSDIM, NCTP) - REAL(r8) GCLT (IJSDIM, NCTP) - REAL(r8) GCIT (IJSDIM, NCTP) - REAL(r8) GTPRT (IJSDIM, NCTP) - REAL(r8) GTEVP (IJSDIM, KMAX) - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. - real(r8) fscav(ntr), fswtr(ntr) + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) + REAL(kind_phys) CBMFX (IM, NCTP) + REAL(kind_phys) GCYM (IJSDIM, KMAX, nctp) + REAL(kind_phys) GCYT (IJSDIM, NCTP) + REAL(kind_phys) GCQT (IJSDIM, NCTP) + REAL(kind_phys) GCLT (IJSDIM, NCTP) + REAL(kind_phys) GCIT (IJSDIM, NCTP) + REAL(kind_phys) GTPRT (IJSDIM, NCTP) + REAL(kind_phys) GTEVP (IJSDIM, KMAX) + REAL(kind_phys) GTPRC0(IJSDIM) !! precip. before evap. + real(kind_phys) fscav(ntr), fswtr(ntr) INTEGER KB (IJSDIM ) INTEGER KBMX INTEGER KT (IJSDIM, NCTP) INTEGER KTMX (NCTP) INTEGER KTMXT - REAL(r8) DELPI (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) LOGICAL OTSPT (NTR) !! transport with this routine? INTEGER ISTS, IENS ! ! [INTERNAL WORK] INTEGER I, K, LT, TP, CTP - REAL(r8) :: GCRTD, SCAV, GCWT, GPRCR, evpf, cbmfxl - REAL(r8), dimension(ists:iens) :: GCRB, GCRT, DR, gtprc0i -! REAL(r8), dimension(ists:iens,kmax) :: DGCB, DZ, RDZM, EVPF -! REAL(r8), dimension(ists:iens,nctp) :: DZT, RGCWT, MASK1, MASK2 - REAL(r8), dimension(ists:iens,nctp) :: RGCWT, MASK1 + REAL(kind_phys) :: GCRTD, SCAV, GCWT, GPRCR, evpf, cbmfxl + REAL(kind_phys), dimension(ists:iens) :: GCRB, GCRT, DR, gtprc0i +! REAL(kind_phys), dimension(ists:iens,kmax) :: DGCB, DZ, RDZM, EVPF +! REAL(kind_phys), dimension(ists:iens,nctp) :: DZT, RGCWT, MASK1, MASK2 + REAL(kind_phys), dimension(ists:iens,nctp) :: RGCWT, MASK1 ! do i=ists,iens if (gtprc0(i) > zero) then @@ -3752,18 +3753,18 @@ SUBROUTINE CUMDNR & !! Tracer Downdraft INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) ! Temperature tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) ! Temperature tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux - REAL(r8) DELPI (IJSDIM, KMAX ) + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) + REAL(kind_phys) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(kind_phys) DELPI (IJSDIM, KMAX ) LOGICAL OTSPT (NTR) INTEGER KTMX, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GCRD (ISTS:IENS) ! downdraft q - REAL(r8) GMDDE, GMDDD, GCRDD + REAL(kind_phys) GCRD (ISTS:IENS) ! downdraft q + REAL(kind_phys) GMDDE, GMDDD, GCRDD INTEGER I, K, LT, kp1 ! ! @@ -3803,20 +3804,20 @@ SUBROUTINE CUMSBR & !! Tracer Subsidence INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) !! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) !! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) !! tracer - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) !! tracer + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !! mass flux INTEGER KTMX LOGICAL OTSPT (NTR) !! tracer transport on/off INTEGER ISTS, IENS ! ! [INTERNAL WORK] INTEGER I, K, KM, KP, LT - REAL(r8) SBR0, SBR1, FX1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) SBR0, SBR1, FX1 + REAL(kind_phys) FX(ISTS:IENS) ! DO LT=1,NTR IF (OTSPT(LT)) THEN @@ -3857,12 +3858,12 @@ SUBROUTINE CUMFXR & ! Tracer mass fixe INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) ! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) ! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) ! tracer - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELTA ! time step + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) ! tracer + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELTA ! time step INTEGER KTMX INTEGER IMFXR (NTR) ! 0: mass fixer is not applied @@ -3877,10 +3878,10 @@ SUBROUTINE CUMFXR & ! Tracer mass fixe INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GDR1 - REAL(r8) GDR2 (ISTS:IENS, KMAX) - REAL(r8), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT - REAL(r8) FWAT + REAL(kind_phys) GDR1 + REAL(kind_phys) GDR2 (ISTS:IENS, KMAX) + REAL(kind_phys), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT + REAL(kind_phys) FWAT INTEGER I, K, LT ! ! Attention: tracers are forced to be positive unless IMFXR=0. @@ -3949,12 +3950,12 @@ SUBROUTINE CUMFXR1 & ! Tracer mass fixer INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX) ! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX) ! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX) ! tracer - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELTA ! time step + REAL(kind_phys) GDR (IJSDIM, KMAX) ! tracer + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELTA ! time step INTEGER KTMX INTEGER IMFXR ! 0: mass fixer is not applied @@ -3967,10 +3968,10 @@ SUBROUTINE CUMFXR1 & ! Tracer mass fixer INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GDR1 - REAL(r8) GDR2 (ISTS:IENS, KMAX) - REAL(r8), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT - REAL(r8) FWAT + REAL(kind_phys) GDR1 + REAL(kind_phys) GDR2 (ISTS:IENS, KMAX) + REAL(kind_phys), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT + REAL(kind_phys) FWAT INTEGER I, K ! ! Attention: tracers are forced to be positive unless IMFXR=0. @@ -4035,17 +4036,17 @@ SUBROUTINE CUMCHK & ! check range of output va INTEGER, INTENT(IN) :: IJSDIM, KMAX, NTR ! DD, for GFS, pass in ! ! [INPUT] - REAL(r8) GTT (IJSDIM, KMAX) ! heating rate - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! change in q - REAL(r8) GTU (IJSDIM, KMAX) ! tendency of u - REAL(r8) GTV (IJSDIM, KMAX) ! tendency of v - REAL(r8) GPRCC (IJSDIM, NTR ) ! rainfall - REAL(r8) GSNWC (IJSDIM) ! snowfall - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction - REAL(r8) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus - REAL(r8) GTPRP (IJSDIM, KMAX) ! rain+snow flux + REAL(kind_phys) GTT (IJSDIM, KMAX) ! heating rate + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) ! change in q + REAL(kind_phys) GTU (IJSDIM, KMAX) ! tendency of u + REAL(kind_phys) GTV (IJSDIM, KMAX) ! tendency of v + REAL(kind_phys) GPRCC (IJSDIM, NTR ) ! rainfall + REAL(kind_phys) GSNWC (IJSDIM) ! snowfall + REAL(kind_phys) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus + REAL(kind_phys) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(kind_phys) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction + REAL(kind_phys) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys) GTPRP (IJSDIM, KMAX) ! rain+snow flux ! INTEGER ISTS, IENS ! @@ -4053,19 +4054,19 @@ SUBROUTINE CUMCHK & ! check range of output va INTEGER I, K ! ! [INTERNAL PARM] - REAL(r8) :: GTTMAX = 1.e-2_r8 - REAL(r8) :: GTQVMAX = 1.e-4_r8 - REAL(r8) :: GTQLMAX = 1.e-5_r8 - REAL(r8) :: GTUMAX = 1.e-2_r8 - REAL(r8) :: GTVMAX = 1.e-2_r8 - REAL(r8) :: GTCFMAX = 1.e-3_r8 - REAL(r8) :: PRCCMAX = 1.e-2_r8 - REAL(r8) :: SNWCMAX = 1.e-2_r8 - REAL(r8) :: CLWMAX = 1.e-3_r8 - REAL(r8) :: TPRPMAX = 1.e-2_r8 - REAL(r8) :: GTQIMAX = 1.e-5_r8 - !REAL(r8) :: GTM2MAX = 1._r8 - !REAL(r8) :: GTM3MAX = 1._r8 + REAL(kind_phys) :: GTTMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTQVMAX = 1.e-4_kind_phys + REAL(kind_phys) :: GTQLMAX = 1.e-5_kind_phys + REAL(kind_phys) :: GTUMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTVMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTCFMAX = 1.e-3_kind_phys + REAL(kind_phys) :: PRCCMAX = 1.e-2_kind_phys + REAL(kind_phys) :: SNWCMAX = 1.e-2_kind_phys + REAL(kind_phys) :: CLWMAX = 1.e-3_kind_phys + REAL(kind_phys) :: TPRPMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTQIMAX = 1.e-5_kind_phys + !REAL(kind_phys) :: GTM2MAX = 1._kind_phys + !REAL(kind_phys) :: GTM3MAX = 1._kind_phys ! DO K=1,KMAX DO I=ISTS, IENS diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 48b40dfd8..27165e067 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -109,7 +109,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & integer, dimension (:), intent(out) :: hbot,htop,kcnv integer, dimension (:), intent(in) :: xland real(kind=kind_phys), dimension (:), intent(in) :: pbl - integer, dimension (:) :: tropics + integer, dimension (im) :: tropics ! ruc variable real(kind=kind_phys), dimension (:), intent(in) :: hfx2,qfx2,psuri real(kind=kind_phys), dimension (:,:), intent(out) :: ud_mf,dd_mf,dt_mf @@ -119,7 +119,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum ! Local water vapor mixing ratios and cloud water mixing ratios - real(kind=kind_phys), dimension (:,:) :: qv2di, qv, forceqv, cnvw + real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw ! real(kind=kind_phys), dimension(:),intent(in) :: garea real(kind=kind_phys), intent(in ) :: dt diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 index d10e9fe0f..6140fa680 100644 --- a/physics/gfdl_fv_sat_adj.F90 +++ b/physics/gfdl_fv_sat_adj.F90 @@ -256,7 +256,7 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, logical, intent(in) :: hydrostatic logical, intent(in) :: fast_mp_consv real(kind=kind_dyn), intent(inout) :: te0_2d(:,:) - real(kind=kind_dyn), intent( out) :: te0(:,:,;) + real(kind=kind_dyn), intent( out) :: te0(:,:,:) ! If multi-gases physics are not used, ngas is one and qvi identical to qv integer, intent(in) :: ngas real(kind=kind_dyn), intent(inout) :: qvi(:,:,:,:) @@ -268,8 +268,8 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, real(kind=kind_dyn), intent(inout) :: qg(:,:,:) real(kind=kind_dyn), intent(in) :: hs(:,:) real(kind=kind_dyn), intent(in) :: peln(:,:,:) - ! For hydrostatic build, kmdelz=1, otherwise kmdelz=km (see fv_arrays.F90) - real(kind=kind_dyn), intent(in) :: delz(:,:) + ! For hydrostatic build, delz's third dimension is 1:kmdelz=1:1, otherwise 1:km (see fv_arrays.F90) + real(kind=kind_dyn), intent(in) :: delz(:,:,:) real(kind=kind_dyn), intent(in) :: delp(:,:,:) real(kind=kind_dyn), intent(inout) :: pt(:,:,:) real(kind=kind_dyn), intent(inout) :: pkz(:,:,:) @@ -333,18 +333,19 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, else kdelz = k end if - call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & - te0(isd,jsd,k), & + call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & + te0(isd:ied,jsd:jed,k), & #ifdef MULTI_GASES - qvi(isd,jsd,k,1:ngas), & + qvi(isd:ied,jsd:jed,k,1:ngas), & #else - qv(isd,jsd,k), & + qv(isd:ied,jsd:jed,k), & #endif - ql(isd,jsd,k), qi(isd,jsd,k), & - qr(isd,jsd,k), qs(isd,jsd,k), qg(isd,jsd,k), & - hs, dpln, delz(is:,js:,kdelz), pt(isd,jsd,k), delp(isd,jsd,k),& - q_con(isd:,jsd:,k), cappa(isd:,jsd:,k), area, dtdt(is,js,k), & - out_dt, last_step, do_qa, qa(isd,jsd,k)) + ql(isd:ied,jsd:jed,k), qi(isd:ied,jsd:jed,k), & + qr(isd:ied,jsd:jed,k), qs(isd:ied,jsd:jed,k), qg(isd:ied,jsd:jed,k), & + hs, dpln, delz(is:ie,js:je,kdelz), pt(isd:ied,jsd:jed,k), & + delp(isd:ied,jsd:jed,k), q_con(isd:ied,jsd:jed,k), & + cappa(isd:ied,jsd:jed,k), area, dtdt(is:ie,js:je,k), & + out_dt, last_step, do_qa, qa(isd:ied,jsd:jed,k)) if ( .not. hydrostatic ) then do j=js,je do i=is,ie diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 341f84fb3..68d38c56c 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -374,10 +374,10 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = ztmax(i)*100.0 !convert from m to cm z0max(i) = z0max(i)*100.0 !convert from m to cm - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_lnd(i), rib_lnd(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_lnd(i:i), rib_lnd(i:i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return @@ -523,10 +523,10 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = ztmax(i)*100.0 !m to cm z0max(i) = z0max(i)*100.0 !m to cm - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ice(i), rib_ice(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ice(i:i), rib_ice(i:i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return @@ -630,10 +630,10 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & !GJF: mflux2 expects negative roughness length for ocean points znt_ocn(i) = -znt_ocn(i) - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i), rib_ocn(i), & - xxfh(i), znt_ocn(i), mznt(i), tstrc(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i:i), rib_ocn(i:i), & + xxfh(i), znt_ocn(i:i), mznt(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return diff --git a/physics/gmtb_scm_sfc_flux_spec.F90 b/physics/gmtb_scm_sfc_flux_spec.F90 index 22730f9f2..1ec2131af 100644 --- a/physics/gmtb_scm_sfc_flux_spec.F90 +++ b/physics/gmtb_scm_sfc_flux_spec.F90 @@ -15,6 +15,10 @@ module gmtb_scm_sfc_flux_spec CONTAINS !******************************************************************************************* +!! +!! \section arg_table_gmtb_scm_sfc_flux_spec_init Argument Table +!! \htmlinclude gmtb_scm_sfc_flux_spec_init.html +!! subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) logical, intent(in) :: lheatstrg diff --git a/physics/gwdps.f b/physics/gwdps.f index 66cff45e7..285bdf67c 100644 --- a/physics/gwdps.f +++ b/physics/gwdps.f @@ -298,7 +298,7 @@ subroutine gwdps_run( & integer, intent(in) :: im, km, imx, kdt, ipr, me integer, intent(in) :: KPBL(:) ! Index for the PBL top layer! real(kind=kind_phys), intent(in) :: & - & deltim, G, CP, RD, RV, cdmbgwd(4) + & deltim, G, CP, RD, RV, cdmbgwd(:) real(kind=kind_phys), intent(inout) :: & & A(:,:), B(:,:), C(:,:) real(kind=kind_phys), intent(in) :: & @@ -307,7 +307,7 @@ subroutine gwdps_run( & & PRSL(:,:), PRSLK(:,:), PHIL(:,:), & & PHII(:,:) real(kind=kind_phys), intent(in) :: & - & OC(:), OA4(:,:), CLX4(:,;), HPRIME(:) + & OC(:), OA4(:,:), CLX4(:,:), HPRIME(:) real(kind=kind_phys), intent(inout) :: ELVMAX(:) real(kind=kind_phys), intent(in) :: & & THETA(:), SIGMA(:), GAMMA(:) diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 21f3b903f..524828ba4 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -26,4 +26,3 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys - active = (flag_for_stratospheric_water_vapor_physics) \ No newline at end of file diff --git a/physics/module_MYJPBL_wrapper.F90 b/physics/module_MYJPBL_wrapper.F90 index 9179c3068..086309897 100644 --- a/physics/module_MYJPBL_wrapper.F90 +++ b/physics/module_MYJPBL_wrapper.F90 @@ -90,7 +90,7 @@ SUBROUTINE myjpbl_wrapper_run( & & prsik_1, prslk_1, prslki, slmsk, garea, & snowd, evap, hflx, cm, ch, wind, hprime1 real(kind=kind_phys),dimension(:),intent(inout) :: & - & pblh, zorl, ustar, tsfc, qsfc + & zorl, ustar, tsfc, qsfc real(kind=kind_phys),dimension(:),intent(inout) :: & & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & @@ -98,7 +98,7 @@ SUBROUTINE myjpbl_wrapper_run( & & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q real(kind=kind_phys),dimension(:),intent(out) :: & - & dusfc,dvsfc,dtsfc,dqsfc,gamt,gamq + & pblh,dusfc,dvsfc,dtsfc,dqsfc,gamt,gamq integer,dimension(:),intent(out) :: kpbl integer,dimension(:),intent(in) :: kinver diff --git a/physics/module_MYJPBL_wrapper.meta b/physics/module_MYJPBL_wrapper.meta index 758dfb77b..17efdb1c3 100644 --- a/physics/module_MYJPBL_wrapper.meta +++ b/physics/module_MYJPBL_wrapper.meta @@ -405,7 +405,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [ch] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air @@ -414,7 +414,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [wind] standard_name = wind_speed_at_lowest_model_layer @@ -443,19 +443,19 @@ kind = kind_phys intent = inout optional = F -[hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward sensible heat flux - units = K m s-1 +[evap] + standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward latent heat flux + units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[evap] - standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward latent heat flux - units = kg kg-1 m s-1 +[hflx] + standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward sensible heat flux + units = K m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -576,7 +576,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [gamq] standard_name = countergradient_mixing_term_for_water_vapor @@ -585,7 +585,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 index ee683b97c..d908900c4 100644 --- a/physics/module_MYJSFC_wrapper.F90 +++ b/physics/module_MYJSFC_wrapper.F90 @@ -121,7 +121,7 @@ SUBROUTINE myjsfc_wrapper_run( & !MYJ-3D - real(kind=kind_phys),dimension(::),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & phii, prsi real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 778e6993e..36c78cab0 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -239,13 +239,13 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys) :: tem !MYNN-3D - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: phii - real(kind=kind_phys), dimension(im,levs ), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: phii + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & dtdt, dudt, dvdt, & & dqdt_water_vapor, dqdt_liquid_cloud, dqdt_ice_cloud, & & dqdt_cloud_droplet_num_conc, dqdt_ice_num_conc, & & dqdt_ozone, dqdt_water_aer_num_conc, dqdt_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & qke, qke_adv, EL_PBL, Sh3D, & & qc_bl, qi_bl, cldfra_bl !These 10 arrays are only allocated when bl_mynn_output > 0 @@ -253,7 +253,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & edmf_a,edmf_w,edmf_qt, & & edmf_thl,edmf_ent,edmf_qc, & & sub_thl,sub_sqv,det_thl,det_sqv - real(kind=kind_phys), dimension(im,levs), intent(in) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: & & u,v,omega,t3d, & & exner,prsl, & & qgrs_water_vapor, & @@ -264,13 +264,13 @@ SUBROUTINE mynnedmf_wrapper_run( & & qgrs_ozone, & & qgrs_water_aer_num_conc, & & qgrs_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(out) :: & + real(kind=kind_phys), dimension(:,:), intent(out) :: & & Tsq, Qsq, Cov, exch_h, exch_m real(kind=kind_phys), dimension(:,:), intent(inout) :: & & du3dt_PBL, du3dt_OGWD, dv3dt_PBL, dv3dt_OGWD, & & do3dt_PBL, dq3dt_PBL, dt3dt_PBL - real(kind=kind_phys), dimension(im), intent(in) :: xmu - real(kind=kind_phys), dimension(im, levs), intent(in) :: htrsw, htrlw + real(kind=kind_phys), dimension(:), intent(in) :: xmu + real(kind=kind_phys), dimension(:,:), intent(in) :: htrsw, htrlw !LOCAL real(kind=kind_phys), dimension(im,levs) :: & & sqv,sqc,sqi,qnc,qni,ozone,qnwfa,qnifa, & @@ -316,11 +316,11 @@ SUBROUTINE mynnedmf_wrapper_run( & & dusfci_cpl,dvsfci_cpl,dtsfci_cpl,dqsfci_cpl !LOCAL - real, dimension(:) :: & + real, dimension(im) :: & & WSTAR,DELTA,qcg,hfx,qfx,rmol,xland, & & uoce,voce,vdfg,znt,ts - real, dimension(:) :: dusfci1,dvsfci1,dtsfci1,dqsfci1 + real, dimension(im) :: dusfci1,dvsfci1,dtsfci1,dqsfci1 ! Initialize CCPP error handling variables errmsg = '' diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..108bc6a23 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -130,41 +130,33 @@ SUBROUTINE mynnsfc_wrapper_run( & & iz0tlnd = 0, & !control: 0 & isfflx = 1 + integer, intent(in) :: im, levs + integer, intent(in) :: iter, itimestep, lsm, lsm_ruc + logical, intent(in) :: flag_init,flag_restart,lprnt integer, intent(in) :: ivegsrc integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) + real(kind=kind_phys), intent(in) :: delt !Input data - integer, dimension(im), intent(in) :: vegtype - real(kind=kind_phys), dimension(im), intent(in) :: & + integer, dimension(:), intent(in) :: vegtype + real(kind=kind_phys), dimension(:), intent(in) :: & & sigmaf,shdmax,z0pert,ztpert -!MYNN-1D - REAL :: delt - INTEGER :: im, levs - INTEGER :: iter, k, i, itimestep, lsm, lsm_ruc - LOGICAL :: flag_init,flag_restart,lprnt - INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & - & IMS,IME,JMS,JME,KMS,KME, & - & ITS,ITE,JTS,JTE,KTS,KTE - - real(kind=kind_phys), dimension(im,levs+1), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: phii - real(kind=kind_phys), dimension(im,levs), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: exner, PRSL, & & u, v, t3d, qvsh, qc - real(kind=kind_phys), dimension(im,levs) :: & - & pattern_spp_pbl, dz, th, qv - - logical, dimension(im), intent(in) :: wet, dry, icy + logical, dimension(:), intent(in) :: wet, dry, icy - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tskin_ocn, tskin_lnd, tskin_ice, & & tsurf_ocn, tsurf_lnd, tsurf_ice, & & snowh_ocn, snowh_lnd, snowh_ice - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & znt_ocn, znt_lnd, znt_ice, & & ust_ocn, ust_lnd, ust_ice, & & cm_ocn, cm_lnd, cm_ice, & @@ -184,7 +176,7 @@ SUBROUTINE mynnsfc_wrapper_run( & & dx, pblh, slmsk, ps, & & qsfc_lnd_ruc, qsfc_ice_ruc - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & ustm, hflx, qflx, wspd, qsfc, & & FLHC, FLQC, U10, V10, TH2, T2, Q2, & & CHS2, CQS2, rmol, zol, mol, ch, & @@ -195,6 +187,15 @@ SUBROUTINE mynnsfc_wrapper_run( & & chs, ck, cd, mavail, xland, GZ1OZ0, & & cpm, qgh, qfx, qsfc_ruc + real(kind=kind_phys), dimension(im,levs) :: & + & pattern_spp_pbl, dz, th, qv + +!MYNN-1D + INTEGER :: k, i + INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & + & IMS,IME,JMS,JME,KMS,KME, & + & ITS,ITE,JTS,JTE,KTS,KTE + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 diff --git a/physics/moninedmf.f b/physics/moninedmf.f index d5cb2ded3..d38841c44 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -83,40 +83,40 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & ! logical, intent(in) :: lprnt, hurr_pbl, lssav, ldiag3d, qdiag3d logical, intent(in) :: flag_for_pbl_generic_tend - integer, intent(in) :: ipr, islimsk(im) - integer, intent(in) :: im, km, ntrac, ntcw, kinver(im), ntoz - integer, intent(out) :: kpbl(im) + integer, intent(in) :: ipr, islimsk(:) + integer, intent(in) :: im, km, ntrac, ntcw, kinver(:), ntoz + integer, intent(out) :: kpbl(:) ! real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac, var_ric, & & coef_ric_l, coef_ric_s - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tau(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tau(:,:), rtg(:,:,:) ! Only allocated if ldiag3d or qdiag3d are true real(kind=kind_phys), intent(inout), dimension(:,:) :: & & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), psk(im), & - & rbsoil(im), zorl(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & tsea(im), & - & heat(im), evap(im), & - & stress(im), spd1(im) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), psk(:), & + & rbsoil(:), zorl(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & tsea(:), & + & heat(:), evap(:), & + & stress(:), spd1(:) real(kind=kind_phys), intent(in) :: & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im), dkt(im,km-1) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:), dkt(:,:) real(kind=kind_phys), intent(inout) :: & - & hgamt(im), hgamq(im) + & hgamt(:), hgamq(:) ! logical, intent(in) :: dspheat ! flag for tke dissipative heating diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b14dbd2fc..9d365e141 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -538,6 +538,8 @@ dimensions = () type = real kind = kind_phys + intent = in + optional = F [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics diff --git a/physics/mp_fer_hires.meta b/physics/mp_fer_hires.meta index 20412d8a6..fa09f66db 100644 --- a/physics/mp_fer_hires.meta +++ b/physics/mp_fer_hires.meta @@ -153,6 +153,7 @@ type = integer intent = out optional = F + ######################################################################## [ccpp-arg-table] name = mp_fer_hires_run diff --git a/physics/ozne_def.meta b/physics/ozne_def.meta index 27698eec6..0daf42410 100644 --- a/physics/ozne_def.meta +++ b/physics/ozne_def.meta @@ -26,4 +26,3 @@ dimensions = (vertical_dimension_of_ozone_forcing_data) type = real kind = kind_phys - active = (index_for_ozone>0) diff --git a/physics/ozphys_2015.f b/physics/ozphys_2015.f index 1791bca6e..af8be0702 100644 --- a/physics/ozphys_2015.f +++ b/physics/ozphys_2015.f @@ -62,6 +62,7 @@ subroutine ozphys_2015_run ( & real(kind=kind_phys),intent(in) :: con_g real :: gravi integer, intent(in) :: im, levs, ko3, pl_coeff,me + logical, intent(in) :: ldiag3d, qdiag3d real(kind=kind_phys), intent(in) :: po3(:), & & prsl(:,:), tin(:,:), & & delp(:,:), & @@ -76,7 +77,7 @@ subroutine ozphys_2015_run ( & integer, intent(out) :: errflg integer k,kmax,kmin,l,i,j - logical ldiag3d, flg(im), qdiag3d + logical flg(im) real(kind=kind_phys) pmax, pmin, tem, temp real(kind=kind_phys) wk1(im), wk2(im), wk3(im),prod(im,pl_coeff), & & ozib(im), colo3(im,levs+1), coloz(im,levs+1),& diff --git a/physics/rascnv.F90 b/physics/rascnv.F90 index e78570f34..24553490f 100644 --- a/physics/rascnv.F90 +++ b/physics/rascnv.F90 @@ -324,41 +324,41 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! ! Implicit none -! - LOGICAL FLIPV ! ! input +! + logical, intent(in) :: flipv ! integer, intent(in) :: im, k, ntr, me, nrcm, ntk, kdt & &, mp_phys, mp_phys_mg - integer, dimension(im) :: kbot, ktop, kcnv, kpbl -! - real(kind=kind_phys), intent(in) :: dxmin, dxinv, ccwf(2) & - &, psauras(2), prauras(2) & - &, wminras(2), dlqf(2) -! - real(kind=kind_phys), dimension(im,k+1) :: prsi, prsik, phii - - real(kind=kind_phys), dimension(im,k) :: tin, qin, uin, vin & - &, prsl, prslk, phil & - - &, ud_mf, dd_mf, dt_mf & - &, rhc, qlcn, qicn, w_upi & - &, cnv_mfd & - &, cnv_dqldt, clcn & - &, cnv_fice, cnv_ndrop & - &, cnv_nice, cf_upi - real(kind=kind_phys), dimension(im) :: area, cdrag & - &, rainc, ddvel - real(kind=kind_phys), dimension(im,nrcm):: rannum - real(kind=kind_phys) ccin(im,k,ntr+2) - real(kind=kind_phys) trcmin(ntr+2) - - real(kind=kind_phys) DT, dtf + integer, dimension(:), intent(out) :: kbot, ktop + integer, dimension(:), intent(inout) :: kcnv + integer, dimension(:), intent(in) :: kpbl +! + real(kind=kind_phys), intent(in) :: dxmin, dxinv, ccwf(:) & + &, psauras(:), prauras(:) & + &, wminras(:), dlqf(:) +! + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, prsik, phii + + real(kind=kind_phys), dimension(:,:), intent(inout) :: tin, qin, uin, vin + real(kind=kind_phys), dimension(:,:), intent(in) :: prsl, prslk, phil & + &, rhc + real(kind=kind_phys), dimension(:,:), intent(out) :: ud_mf, dd_mf, dt_mf + real(kind=kind_phys), dimension(:,:), intent(inout) :: qlcn, qicn, w_upi & + &, cnv_mfd & + &, cnv_dqldt, clcn & + &, cnv_fice, cnv_ndrop & + &, cnv_nice, cf_upi + real(kind=kind_phys), dimension(:) , intent(in) :: area, cdrag + real(kind=kind_phys), dimension(:) , intent(out) :: rainc, ddvel + real(kind=kind_phys), dimension(:,:), intent(in) :: rannum + real(kind=kind_phys), intent(inout) :: ccin(:,:,:) + real(kind=kind_phys), intent(in) :: dt, dtf ! ! Added for aerosol scavenging for GOCART ! - real(kind=kind_phys), intent(in) :: fscav(ntr) + real(kind=kind_phys), intent(in) :: fscav(:) ! &, ctei_r(im), ctei_rm character(len=*), intent(out) :: errmsg @@ -366,6 +366,7 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! ! locals ! + real(kind=kind_phys) :: trcmin(ntr+2) real(kind=kind_phys), dimension(k) :: toi, qoi, tcu, qcu & &, pcu, clw, cli, qii, qli& &, phi_l, prsm,psjm & diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 index bb49a9884..2ea7de3d6 100644 --- a/physics/rrtmg_sw_pre.F90 +++ b/physics/rrtmg_sw_pre.F90 @@ -47,7 +47,7 @@ subroutine rrtmg_sw_pre_run (im, lndp_type, n_var_lndp, lsswr, lndp_var_list, ln integer, intent(out) :: errflg ! Local variables integer :: i - real(kind=kind_phys), dimension(:,:) :: sfcalb + real(kind=kind_phys), dimension(im,NF_ALBD) :: sfcalb real(kind=kind_phys) :: lndp_alb diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index c9dc5cee4..f537da3c5 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -109,7 +109,7 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & & qlcn, qicn, w_upi, cnv_mfd, cnv_dqldt, clcn & &, cnv_fice, cnv_ndrop, cnv_nice, cf_upi ! *GJF - integer :: mp_phys, mp_phys_mg + integer, intent(in) :: mp_phys, mp_phys_mg real(kind=kind_phys), intent(in) :: clam, c0s, c1, & & betal, betas, asolfac, & diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index a57ce3839..82922da50 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -660,7 +660,7 @@ units = flag dimensions = () type = logical - intent = inout + intent = in optional = F [qdiag3d] standard_name = flag_tracer_diagnostics_3D @@ -668,7 +668,7 @@ units = flag dimensions = () type = logical - intent = inout + intent = in optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/sfc_noahmp_drv.F90 b/physics/sfc_noahmp_drv.F90 index e7ee1940a..a1f65f26a 100644 --- a/physics/sfc_noahmp_drv.F90 +++ b/physics/sfc_noahmp_drv.F90 @@ -92,11 +92,11 @@ end subroutine noahmpdrv_finalize !! - If a "guess" run, restore the land-related prognostic fields. ! ! !----------------------------------- - subroutine noahmpdrv_run & + subroutine noahmpdrv_run & !................................... ! --- inputs: - ( im, km, itime, ps, u1, v1, t1, q1, soiltyp, vegtype, & - sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & + ( im, km, lsnowl, itime, ps, u1, v1, t1, q1, soiltyp, & + vegtype, sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & prsl1, prslki, zf, dry, wind, slopetyp, & shdmin, shdmax, snoalb, sfalb, flag_iter, flag_guess, & idveg, iopt_crs, iopt_btr, iopt_run, iopt_sfc, iopt_frz, & @@ -155,7 +155,7 @@ subroutine noahmpdrv_run & integer , intent(in) :: im ! horiz dimension and num of used pts integer , intent(in) :: km ! vertical soil layer dimension - integer, , intent(in) :: lsnowl ! lower bound for snow level arrays + integer , intent(in) :: lsnowl ! lower bound for snow level arrays integer , intent(in) :: itime ! NOT USED real(kind=kind_phys), dimension(:) , intent(in) :: ps ! surface pressure [Pa] real(kind=kind_phys), dimension(:) , intent(in) :: u1 ! u-component of wind [m/s] @@ -196,8 +196,8 @@ subroutine noahmpdrv_run & integer , intent(in) :: iopt_snf ! option for partitioning precipitation into rainfall & snowfall integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) - real(kind=kind_phys), dimension(;) , intent(in) :: xlatin ! latitude - real(kind=kind_phys), dimension(;) , intent(in) :: xcoszin ! cosine of zenith angle + real(kind=kind_phys), dimension(:) , intent(in) :: xlatin ! latitude + real(kind=kind_phys), dimension(:) , intent(in) :: xcoszin ! cosine of zenith angle integer , intent(in) :: iyrlen ! year length [days] real(kind=kind_phys) , intent(in) :: julian ! julian day of year real(kind=kind_phys), dimension(:) , intent(in) :: rainn_mp ! microphysics non-convective precipitation [mm] diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 2c32ca106..3f5c0a9c5 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -96,19 +96,19 @@ kind = kind_phys intent = in optional = F -[sbc] - standard_name = stefan_boltzmann_constant - long_name = Stefan-Boltzmann constant - units = W m-2 K-4 +[pi] + standard_name = pi + long_name = ratio of a circle's circumference to its diameter + units = none dimensions = () type = real kind = kind_phys intent = in optional = F -[pi] - standard_name = pi - long_name = ratio of a circle's circumference to its diameter - units = none +[sbc] + standard_name = stefan_boltzmann_constant + long_name = Stefan-Boltzmann constant + units = W m-2 K-4 dimensions = () type = real kind = kind_phys diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f index a61f19d16..e739e724c 100644 --- a/physics/sfc_sice.f +++ b/physics/sfc_sice.f @@ -41,16 +41,16 @@ end subroutine sfc_sice_finalize !! !> @{ subroutine sfc_sice_run & - ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: - t0c, rd, ps, t1, q1, delt, & - sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & - cm, ch, prsl1, prslki, prsik1, prslk1, wind, & - flag_iter, lprnt, ipr, & - hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: - snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! - frac_grid, icy, islmsk_cice, & - min_lakeice, min_seaice, oceanfrac, & - errmsg, errflg ) + & ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: + & t0c, rd, ps, t1, q1, delt, & + & sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & + & cm, ch, prsl1, prslki, prsik1, prslk1, wind, & + & flag_iter, lprnt, ipr, & + & hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: + & snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! + & frac_grid, icy, islmsk_cice, & + & min_lakeice, min_seaice, oceanfrac, & + & errmsg, errflg ) ! ===================================================================== ! ! description: ! diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 index 14fc6b49d..e93ad3245 100644 --- a/physics/shinhongvdif.F90 +++ b/physics/shinhongvdif.F90 @@ -1326,7 +1326,7 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & ! !---- find the mixing length ! - call mixlen(lmh,uxk,vxk,txk,thxk,qx(i,kts,1),qx(i,kts,ntcw) & + call mixlen(lmh,uxk,vxk,txk,thxk,qx(i,kts:kte,1),qx(i,kts:kte,ntcw) & ,q2xk,zqk,ust(i),corf,epshol(i) & ,s2,gh,rig,el & ,hpbl(i),kpbl(i),lmxl,ct(i) & diff --git a/physics/shinhongvdif.meta b/physics/shinhongvdif.meta index 8c850ff37..6783fd800 100644 --- a/physics/shinhongvdif.meta +++ b/physics/shinhongvdif.meta @@ -86,18 +86,18 @@ kind = kind_phys intent = in optional = F -[vtnp] - standard_name = tendency_of_y_wind_due_to_model_physics - long_name = updated tendency of the y wind +[utnp] + standard_name = tendency_of_x_wind_due_to_model_physics + long_name = updated tendency of the x wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[utnp] - standard_name = tendency_of_x_wind_due_to_model_physics - long_name = updated tendency of the x wind +[vtnp] + standard_name = tendency_of_y_wind_due_to_model_physics + long_name = updated tendency of the y wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real diff --git a/physics/ugwpv1_gsldrag_post.F90 b/physics/ugwpv1_gsldrag_post.F90 index 1d8813f65..e9bdafa4e 100644 --- a/physics/ugwpv1_gsldrag_post.F90 +++ b/physics/ugwpv1_gsldrag_post.F90 @@ -10,14 +10,9 @@ module ugwpv1_gsldrag_post subroutine ugwpv1_gsldrag_post_init () end subroutine ugwpv1_gsldrag_post_init -!>@brief The subroutine initializes the unified UGWP - !> \section arg_table_ugwpv1_gsldrag_post_run Argument Table !! \htmlinclude ugwpv1_gsldrag_post_run.html !! - - - subroutine ugwpv1_gsldrag_post_run ( im, levs, & ldiag_ugwp, dtf, & dudt_gw, dvdt_gw, dtdt_gw, du_ofdcol, du_oblcol, tau_ogw, & @@ -36,16 +31,16 @@ subroutine ugwpv1_gsldrag_post_run ( im, levs, & real(kind=kind_phys), intent(in) :: dtf logical, intent(in) :: ldiag_ugwp !< flag for CIRES UGWP Diagnostics - real(kind=kind_phys), intent(in), dimension(im) :: zobl, zlwb, zogw - real(kind=kind_phys), intent(in), dimension(im) :: du_ofdcol, tau_ogw, du_oblcol, tau_ngw - real(kind=kind_phys), intent(inout), dimension(im) :: tot_mtb, tot_ogw, tot_tofd, tot_ngw - real(kind=kind_phys), intent(inout), dimension(im) :: tot_zmtb, tot_zlwb, tot_zogw + real(kind=kind_phys), intent(in), dimension(:) :: zobl, zlwb, zogw + real(kind=kind_phys), intent(in), dimension(:) :: du_ofdcol, tau_ogw, du_oblcol, tau_ngw + real(kind=kind_phys), intent(inout), dimension(:) :: tot_mtb, tot_ogw, tot_tofd, tot_ngw + real(kind=kind_phys), intent(inout), dimension(:) :: tot_zmtb, tot_zlwb, tot_zogw - real(kind=kind_phys), intent(in), dimension(im,levs) :: dtdt_gw, dudt_gw, dvdt_gw - real(kind=kind_phys), intent(in), dimension(im,levs) :: dudt_obl, dudt_ogw, dudt_ofd - real(kind=kind_phys), intent(inout), dimension(im,levs) :: du3dt_mtb, du3dt_ogw, du3dt_tms, du3dt_ngw, dv3dt_ngw + real(kind=kind_phys), intent(in), dimension(:,:) :: dtdt_gw, dudt_gw, dvdt_gw + real(kind=kind_phys), intent(in), dimension(:,:) :: dudt_obl, dudt_ogw, dudt_ofd + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms, du3dt_ngw, dv3dt_ngw - real(kind=kind_phys), intent(inout), dimension(im,levs) :: dtdt, dudt, dvdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dtdt, dudt, dvdt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/ugwpv1_gsldrag_post.meta b/physics/ugwpv1_gsldrag_post.meta index 45fa4ea99..fdf32cbf4 100644 --- a/physics/ugwpv1_gsldrag_post.meta +++ b/physics/ugwpv1_gsldrag_post.meta @@ -3,11 +3,6 @@ type = scheme dependencies = machine.F -######################################################################## -[ccpp-arg-table] - name = ugwpv1_gsldrag_post_init - type = scheme - ######################################################################## [ccpp-arg-table] name = ugwpv1_gsldrag_post_run @@ -72,24 +67,24 @@ kind = kind_phys intent = in optional = F -[du_oblcol] - standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag - long_name = integrated x momentum flux from blocking drag +[du_ofdcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag + long_name = integrated x momentum flux from form drag units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in - optional = F -[du_ofdcol] - standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag - long_name = integrated x momentum flux from form drag + optional = F +[du_oblcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag + long_name = integrated x momentum flux from blocking drag units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in - optional = F + optional = F [tau_ogw] standard_name = instantaneous_momentum_flux_due_to_orographic_gravity_wave_drag long_name = momentum flux or stress due to orographic gravity wave drag @@ -313,9 +308,3 @@ type = integer intent = out optional = F - -######################################################################## -[ccpp-arg-table] - name = ugwpv1_gsldrag_post_finalize - type = scheme - diff --git a/physics/unified_ugwp.F90 b/physics/unified_ugwp.F90 index 64b923021..288227c8c 100644 --- a/physics/unified_ugwp.F90 +++ b/physics/unified_ugwp.F90 @@ -203,7 +203,7 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, ugrs, vgrs, tgrs, q1, prsi, prsl, prslk, phii, phil, & del, kpbl, dusfcg, dvsfcg, gw_dudt, gw_dvdt, gw_dtdt, gw_kdis, & tau_tofd, tau_mtb, tau_ogw, tau_ngw, zmtb, zlwb, zogw, & - dudt_mtb, dudt_tms, du3dt_mtb, du3dt_ogw, du3dt_tms, & + dudt_mtb, dudt_tms, du3dt_mtb, du3dt_ogw, du3dt_tms, & dudt, dvdt, dtdt, rdxzb, con_g, con_omega, con_pi, con_cp, con_rd, con_rv, & con_rerth, con_fvirt, rain, ntke, q_tke, dqdt_tke, lprnt, ipr, & ldu3dt_ogw, ldv3dt_ogw, ldt3dt_ogw, ldu3dt_cgw, ldv3dt_cgw, ldt3dt_cgw, & @@ -265,9 +265,9 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, logical, intent(in) :: ldiag3d, lssav ! These arrays only allocated if ldiag_ugwp = .true. - real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - real(kind=kind_phys), intent(inout), dimension(:,:):: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dudt, dvdt, dtdt real(kind=kind_phys), intent(in) :: con_g, con_omega, con_pi, con_cp, con_rd, & con_rv, con_rerth, con_fvirt diff --git a/physics/ysuvdif.F90 b/physics/ysuvdif.F90 index 134cb72ea..e427eb0eb 100644 --- a/physics/ysuvdif.F90 +++ b/physics/ysuvdif.F90 @@ -86,16 +86,18 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & ! real(kind=kind_phys), dimension( :,: ) , & intent(inout) :: utnp,vtnp,ttnp - real(kind=kind_phys), dimension( :,:,: ) , & + real(kind=kind_phys), dimension( :,:,: ) , & intent(inout) :: qtnp - real(kind=kind_phys), dimension(:,:) , & + real(kind=kind_phys), dimension(:,:) , & intent(inout) :: du3dt_PBL, dv3dt_PBL, dt3dt_PBL, dq3dt_PBL, do3dt_PBL ! !--------------------------------------------------------------------------------- ! output variables integer, dimension( : ), intent(out ) :: kpbl1d - real(kind=kind_phys), dimension( : ), & + real(kind=kind_phys), dimension( : ), & intent(out) :: hpbl + real(kind=kind_phys), dimension( : ), & + intent(out) :: dusfc,dvsfc, dtsfc,dqsfc ! error messages character(len=*), intent(out) :: errmsg @@ -108,7 +110,7 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & real(kind=kind_phys), dimension( im ) :: hol real(kind=kind_phys), dimension( im, km+1 ) :: zq ! - real(kind=kind_phys), dimension( im, km ) :: & + real(kind=kind_phys), dimension( im, km ) :: & thx,thvx,thlix, & del, & dza, & @@ -117,7 +119,7 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & xkzoh, & za ! - real(kind=kind_phys), dimension( im ) :: & + real(kind=kind_phys), dimension( im ) :: & rhox, & govrth, & zl1,thermal, & @@ -125,8 +127,6 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & hgamt,hgamq, & brdn,brup, & phim,phih, & - dusfc,dvsfc, & - dtsfc,dqsfc, & prpbl, & wspd1,thermalli ! diff --git a/physics/ysuvdif.meta b/physics/ysuvdif.meta index 9ba31ed27..bf684dcbe 100644 --- a/physics/ysuvdif.meta +++ b/physics/ysuvdif.meta @@ -86,18 +86,18 @@ kind = kind_phys intent = in optional = F -[vtnp] - standard_name = tendency_of_y_wind_due_to_model_physics - long_name = updated tendency of the y wind +[utnp] + standard_name = tendency_of_x_wind_due_to_model_physics + long_name = updated tendency of the x wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[utnp] - standard_name = tendency_of_x_wind_due_to_model_physics - long_name = updated tendency of the x wind +[vtnp] + standard_name = tendency_of_y_wind_due_to_model_physics + long_name = updated tendency of the y wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real From e20ad2901e85dbd363c1232f9eaaec196fb2b0a5 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 15 Apr 2021 19:32:56 +0000 Subject: [PATCH 074/119] Corrected the orders of three parameters --- physics/sfc_nst.meta | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 6b4835da2..be466f132 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -96,15 +96,6 @@ kind = kind_phys intent = in optional = F -[sbc] - standard_name = stefan_boltzmann_constant - long_name = Stefan-Boltzmann constant - units = W m-2 K-4 - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F [pi] standard_name = pi long_name = ratio of a circle's circumference to its diameter @@ -123,6 +114,15 @@ kind = kind_phys intent = in optional = F +[sbc] + standard_name = stefan_boltzmann_constant + long_name = Stefan-Boltzmann constant + units = W m-2 K-4 + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [ps] standard_name = surface_air_pressure long_name = surface pressure From aa73104c1f7c52ce36506c6ea3ab5c5d6ebb9074 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 15 Apr 2021 20:28:15 +0000 Subject: [PATCH 075/119] Updated to head of upstream --- physics/GFS_surface_composites.F90 | 12 +-- physics/GFS_surface_composites.meta | 2 +- physics/module_nst_water_prop.f90 | 7 +- physics/sfc_nst.f | 54 +++++++------ physics/sfc_nst.meta | 114 +++++++++++++++++----------- physics/sfc_ocean.F | 8 +- physics/sfc_ocean.meta | 2 +- 7 files changed, 115 insertions(+), 84 deletions(-) diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index 75c25cccb..e1af66ad1 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -27,7 +27,7 @@ end subroutine GFS_surface_composites_pre_finalize !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & - landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, lake, ocean, wet, & + landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, use_flake, ocean, wet, & hice, cice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & @@ -44,7 +44,7 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx integer, intent(in ) :: im, lkm logical, intent(in ) :: frac_grid, cplflx, cplwav2atm logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet + logical, dimension(im), intent(inout) :: dry, icy, use_flake, ocean, wet real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland @@ -229,14 +229,14 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx ! to prepare to separate lake from ocean under water category do i = 1, im - if(lkm == 1) then + if(wet(i) .and. lkm == 1) then if(lakefrac(i) >= 0.15 .and. lakedepth(i) > one) then - lake(i) = .true. + use_flake(i) = .true. else - lake(i) = .false. + use_flake(i) = .false. endif else - lake(i) = .false. + use_flake(i) = .false. endif enddo diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index ff07c1de2..7603299c8 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -116,7 +116,7 @@ type = logical intent = inout optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index 39020526c..3ca7366bd 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,6 +682,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! +! use_flake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -697,7 +698,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet + logical, dimension(nx,ny), intent(in) :: wet, use_flake ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -713,7 +714,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) ) then + if ( wet(i,j) .and. .not. use_flake(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index c9048f20d..d8af2bb3c 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,8 +27,8 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & prsl1, prslki, prsik1, prslk1, wet,use_flake, xlon, sinlat,& & stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & @@ -47,7 +47,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, xlon, sinlat, stress, ! +! prsl1, prslki, wet, use_flake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,6 +94,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! +! use_flake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -194,7 +195,8 @@ subroutine sfc_nst_run & real (kind=kind_phys), intent(in) :: timestep real (kind=kind_phys), intent(in) :: solhr - logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet + logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet, & + & use_flake ! &, icy logical, intent(in) :: lprnt @@ -259,14 +261,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. use_flake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. use_flake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -582,7 +584,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -668,8 +670,9 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im,wet,tgice,tsfco,tsfc_wat,tsurf_wat,tseal,xt,xz,dt_cool, - & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) + & (im, wet, use_flake, tgice, tsfco, tsfc_wat, tsurf_wat, + & tseal, xt, xz, dt_cool, z_c, tref, cplflx, + & oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys use module_nst_water_prop, only: get_dtzm_2d @@ -680,10 +683,11 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet + logical, dimension(im), intent(in) :: wet, use_flake real (kind=kind_phys), intent(in) :: tgice real (kind=kind_phys), dimension(im), intent(in) :: - & tsfco, tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, + & tsfco logical, intent(in) :: cplflx ! --- input/outputs: @@ -701,14 +705,14 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 + real(kind=kind_phys), dimension(im) :: dtzm, z_c_0 ! Initialize CCPP error handling variables errmsg = '' errflg = 0 do i=1,im - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -724,13 +728,14 @@ subroutine sfc_nst_pre_run ! if (cplflx) then z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, & - & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, + & z_c, wet, use_flake, zero, omz1, im, 1, + & nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update + if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then +! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile +! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -775,7 +780,8 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & + & ( im, kdt, rlapse, tgice, wet, use_flake,icy, oro, oro_uf, & + & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) @@ -789,7 +795,7 @@ subroutine sfc_nst_post_run & ! --- inputs: integer, intent(in) :: im, kdt, nthreads - logical, dimension(im), intent(in) :: wet, icy + logical, dimension(im), intent(in) :: wet, icy, use_flake real (kind=kind_phys), intent(in) :: rlapse, tgice real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 @@ -830,12 +836,12 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, zsea1, zsea2, & - & im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, use_flake, & + & zsea1, zsea2, im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index ffd994096..be466f132 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -96,15 +96,6 @@ kind = kind_phys intent = in optional = F -[sbc] - standard_name = stefan_boltzmann_constant - long_name = Stefan-Boltzmann constant - units = W m-2 K-4 - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F [pi] standard_name = pi long_name = ratio of a circle's circumference to its diameter @@ -123,6 +114,15 @@ kind = kind_phys intent = in optional = F +[sbc] + standard_name = stefan_boltzmann_constant + long_name = Stefan-Boltzmann constant + units = W m-2 K-4 + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [ps] standard_name = surface_air_pressure long_name = surface pressure @@ -178,8 +178,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_water - long_name = surface exchange coeff for momentum over water + standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean + long_name = surface exchange coeff for momentum over ocean units = none dimensions = (horizontal_loop_extent) type = real @@ -187,8 +187,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water - long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean + long_name = surface exchange coeff heat & moisture over ocean units = none dimensions = (horizontal_loop_extent) type = real @@ -239,6 +239,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [xlon] standard_name = longitude long_name = longitude @@ -258,8 +266,8 @@ intent = in optional = F [stress] - standard_name = surface_wind_stress_over_water - long_name = surface wind stress over water + standard_name = surface_wind_stress_over_ocean + long_name = surface wind stress over ocean units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -267,8 +275,8 @@ intent = in optional = F [sfcemis] - standard_name = surface_longwave_emissivity_over_water_interstitial - long_name = surface lw emissivity in fraction over water (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_ocean_interstitial + long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -276,8 +284,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water - long_name = total sky surface downward longwave flux absorbed by the ground over water + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean + long_name = total sky surface downward longwave flux absorbed by the ground over ocean units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -294,8 +302,8 @@ intent = in optional = F [rain] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water - long_name = total precipitation amount in each time step over water + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean + long_name = total precipitation amount in each time step over ocean units = m dimensions = (horizontal_loop_extent) type = real @@ -412,8 +420,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_water - long_name = surface skin temperature after iteration over water + standard_name = surface_skin_temperature_after_iteration_over_ocean + long_name = surface skin temperature after iteration over ocean units = K dimensions = (horizontal_loop_extent) type = real @@ -574,8 +582,8 @@ intent = inout optional = F [qsurf] - standard_name = surface_specific_humidity_over_water - long_name = surface air saturation specific humidity over water + standard_name = surface_specific_humidity_over_ocean + long_name = surface air saturation specific humidity over ocean units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -583,8 +591,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_water - long_name = soil heat flux over water + standard_name = upward_heat_flux_in_soil_over_ocean + long_name = soil heat flux over ocean units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -592,8 +600,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water - long_name = momentum exchange coefficient over water + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean + long_name = momentum exchange coefficient over ocean units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -601,8 +609,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water - long_name = thermal exchange coefficient over water + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean + long_name = thermal exchange coefficient over ocean units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -610,8 +618,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_water - long_name = kinematic surface upward latent heat flux over water + standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean + long_name = kinematic surface upward latent heat flux over ocean units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -619,8 +627,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_water - long_name = kinematic surface upward sensible heat flux over water + standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean + long_name = kinematic surface upward sensible heat flux over ocean units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -628,8 +636,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_water - long_name = surface upward potential latent heat flux over water + standard_name = surface_upward_potential_latent_heat_flux_over_ocean + long_name = surface upward potential latent heat flux over ocean units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -680,6 +688,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater @@ -699,8 +715,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_water_interstitial - long_name = surface skin temperature over water (temporary use as interstitial) + standard_name = surface_skin_temperature_over_ocean_interstitial + long_name = surface skin temperature over ocean (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -708,8 +724,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_water - long_name = surface skin temperature after iteration over water + standard_name = surface_skin_temperature_after_iteration_over_ocean + long_name = surface skin temperature after iteration over ocean units = K dimensions = (horizontal_loop_extent) type = real @@ -865,6 +881,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [icy] standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction @@ -970,8 +994,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_water - long_name = surface skin temperature after iteration over water + standard_name = surface_skin_temperature_after_iteration_over_ocean + long_name = surface skin temperature after iteration over ocean units = K dimensions = (horizontal_loop_extent) type = real @@ -979,8 +1003,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_water_interstitial - long_name = surface skin temperature over water (temporary use as interstitial) + standard_name = surface_skin_temperature_over_ocean_interstitial + long_name = surface skin temperature over ocean (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F index 8da60bb01..736b45f92 100644 --- a/physics/sfc_ocean.F +++ b/physics/sfc_ocean.F @@ -27,7 +27,7 @@ subroutine sfc_ocean_run & !................................... ! --- inputs: & ( im, rd, eps, epsm1, rvrdm1, ps, t1, q1, & - & tskin, cm, ch, prsl1, prslki, wet, lake, wind, &, ! --- inputs + & tskin, cm, ch, prsl1, prslki, wet, use_flake, wind, &, ! --- inputs & flag_iter, & & qsurf, cmm, chh, gflux, evap, hflx, ep, & ! --- outputs & errmsg, errflg & @@ -42,7 +42,7 @@ subroutine sfc_ocean_run & ! inputs: ! ! ( im, ps, t1, q1, tskin, cm, ch, ! !! ( im, ps, u1, v1, t1, q1, tskin, cm, ch, ! -! prsl1, prslki, wet, lake, wind, flag_iter, ! +! prsl1, prslki, wet, use_flake, wind, flag_iter, ! ! outputs: ! ! qsurf, cmm, chh, gflux, evap, hflx, ep ) ! ! ! @@ -102,7 +102,7 @@ subroutine sfc_ocean_run & real (kind=kind_phys), dimension(im), intent(in) :: ps, & & t1, q1, tskin, cm, ch, prsl1, prslki, wind - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(im), intent(in) :: flag_iter, wet, use_flake ! --- outputs: real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & @@ -130,7 +130,7 @@ subroutine sfc_ocean_run & ! ps is in pascals, wind is wind speed, ! rho is density, qss is sat. hum. at surface - if (wet(i) .and. flag_iter(i) .and. .not. lake(i)) then + if (wet(i) .and. flag_iter(i) .and. .not. use_flake(i)) then q0 = max( q1(i), qmin ) rho = prsl1(i) / (rd*t1(i)*(one + rvrdm1*q0)) diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index 6fdfa0555..f27c2207d 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -131,7 +131,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag From 24ce7d67648fd1093a17a06dd7ad57e00bce2844 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 15 Apr 2021 14:49:35 -0600 Subject: [PATCH 076/119] scidoc fix --- physics/docs/pdftxt/GSD_adv_suite.txt | 12 ++++++++---- physics/docs/pdftxt/suite_input.nml.txt | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/physics/docs/pdftxt/GSD_adv_suite.txt b/physics/docs/pdftxt/GSD_adv_suite.txt index 24cabe61a..e71595eee 100644 --- a/physics/docs/pdftxt/GSD_adv_suite.txt +++ b/physics/docs/pdftxt/GSD_adv_suite.txt @@ -31,7 +31,7 @@ The GSD_v1 physics suite uses the parameterizations in the following order: \code - + @@ -44,14 +44,14 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -76,6 +76,9 @@ The GSD_v1 physics suite uses the parameterizations in the following order: sfc_nst sfc_nst_post lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 @@ -93,9 +96,9 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post @@ -110,6 +113,7 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics + phys_tend
diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 4cc5f7b15..360187bd7 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -269,14 +269,14 @@ show some variables in the namelist that must match the SDF. 0 bl_mynn_edmf_part mynnedmf_wrapper flag to partitioning the MF and ED areas 0 -bl_mynn_edmf_tkeadvect mynnedmf_wrapper activate computation of TKE advection (not yet in use for FV3) \n +bl_mynn_tkeadvect mynnedmf_wrapper activate computation of TKE advection (not yet in use for FV3) \n

  • false: deactivate TKE advection
  • true: activate TKE advection
.false. -bl_mynn_edmf_tkebudget mynnedmf_wrapper flag to activate TKE budget 0 -bl_mynn_edmf_cloudpdf mynnedmf_wrapper flag to determine which cloud PDF to use \n +bl_mynn_tkebudget mynnedmf_wrapper flag to activate TKE budget 0 +bl_mynn_cloudpdf mynnedmf_wrapper flag to determine which cloud PDF to use \n
  • 0: use Sommeria-Deardorff subgrid cloud PDF
  • 1: use Kuwano-Yoshida subgrid cloud PDF From 59ab0cd940090f68091974840868ae2024d1c7d0 Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Thu, 15 Apr 2021 20:55:32 +0000 Subject: [PATCH 077/119] Updated flake physics --- physics/module_nst_water_prop.f90 | 7 +++---- physics/sfc_nst.f | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index 3ca7366bd..7e592053c 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,7 +682,6 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! -! use_flake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -698,7 +697,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet, use_flake + logical, dimension(nx,ny), intent(in) :: wet ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -714,7 +713,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) .and. .not. use_flake(i,j)) then + if ( wet(i,j)) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index d8af2bb3c..520e8b802 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -728,9 +728,8 @@ subroutine sfc_nst_pre_run ! if (cplflx) then z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, - & z_c, wet, use_flake, zero, omz1, im, 1, - & nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & + & zero, omz1, im, 1, nthreads, dtzm) do i=1,im if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf @@ -836,7 +835,7 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, use_flake, & + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & & zsea1, zsea2, im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then From 8a276819fa224ab2613e1b31091f5130b704aa27 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 15 Apr 2021 16:57:57 -0600 Subject: [PATCH 078/119] change version # from 5 to 1 per agreement with NCAR colleagues --- physics/docs/pdftxt/CPT_adv_suite.txt | 5 +++-- physics/docs/pdftxt/GFSv15p2_suite.txt | 2 +- physics/docs/pdftxt/GFSv16beta_suite.txt | 2 +- physics/docs/pdftxt/GSD_adv_suite.txt | 2 +- physics/docs/pdftxt/RRFS_v1alpha_suite.txt | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/physics/docs/pdftxt/CPT_adv_suite.txt b/physics/docs/pdftxt/CPT_adv_suite.txt index 72afcefe7..bc34cc1e6 100644 --- a/physics/docs/pdftxt/CPT_adv_suite.txt +++ b/physics/docs/pdftxt/CPT_adv_suite.txt @@ -23,7 +23,7 @@ The csawmg physics suite uses the parameterizations in the following order: \code - + @@ -86,9 +86,9 @@ The csawmg physics suite uses the parameterizations in the following order: GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post @@ -105,6 +105,7 @@ The csawmg physics suite uses the parameterizations in the following order: cs_conv_aw_adj GFS_MP_generic_post maximum_hourly_diagnostics + phys_tend diff --git a/physics/docs/pdftxt/GFSv15p2_suite.txt b/physics/docs/pdftxt/GFSv15p2_suite.txt index 4b4f71181..168921993 100644 --- a/physics/docs/pdftxt/GFSv15p2_suite.txt +++ b/physics/docs/pdftxt/GFSv15p2_suite.txt @@ -26,7 +26,7 @@ The GFS_v15p2 physics suite uses the parameterizations in the following order: \code - + diff --git a/physics/docs/pdftxt/GFSv16beta_suite.txt b/physics/docs/pdftxt/GFSv16beta_suite.txt index 4ad277df7..85b5b890e 100644 --- a/physics/docs/pdftxt/GFSv16beta_suite.txt +++ b/physics/docs/pdftxt/GFSv16beta_suite.txt @@ -29,7 +29,7 @@ The GFS_v16beta physics suite uses the parameterizations in the following order: \code - + diff --git a/physics/docs/pdftxt/GSD_adv_suite.txt b/physics/docs/pdftxt/GSD_adv_suite.txt index e71595eee..4d986075b 100644 --- a/physics/docs/pdftxt/GSD_adv_suite.txt +++ b/physics/docs/pdftxt/GSD_adv_suite.txt @@ -31,7 +31,7 @@ The GSD_v1 physics suite uses the parameterizations in the following order: \code - + diff --git a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt index 9edbefdb0..32db8037a 100644 --- a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt +++ b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt @@ -24,7 +24,7 @@ The RRFS_v1alpha physics suite uses the parameterizations in the following order \code - + From 5f7315852e6fca915fd109a95441ad39c85c5fda Mon Sep 17 00:00:00 2001 From: George Gayno Date: Fri, 16 Apr 2021 14:32:34 +0000 Subject: [PATCH 079/119] Update error messaging in sfcsub.F to conform to NCEP/NCO standards. Fixes #625 --- physics/sfcsub.F | 193 +++++++++++++++++++++++++++-------------------- 1 file changed, 110 insertions(+), 83 deletions(-) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index a84e9aef9..3e0dfde0b 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -2684,8 +2684,8 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR: in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -2712,8 +2712,8 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & kpds0(4)=-1 kpds0(18)=-1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if (iret == 99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if (iret == 99) write(6,*) ' Field not found.' call abort endif ! @@ -2731,13 +2731,13 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & data8 = real(data4, kind=kind_io8) deallocate(data4) else - write(0,*)' Invalid w3kindreal --- aborting' + write(0,*)' FATAL ERROR: Invalid w3kindreal' call abort endif ! if(jret == 0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort @@ -2753,7 +2753,7 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & else if (me ==. 0) write(6,*) 'idim,jdim=',idim,jdim &, ' gaus=',gaus,' blno=',blno,' blto=',blto - write(6,*) ' error in getgb : jret=',jret + write(6,*) ' FATAL ERROR in getgb : jret=',jret write(6,*) ' kpds(13)=',kpds(13),' kpds(15)=',kpds(15) call abort endif @@ -2828,18 +2828,18 @@ subroutine getarea(kgds,dlat,dlon,rslat,rnlat,wlon,elon,ijordr,me) return ! elseif(kgds(1).eq.1) then ! mercator projection - write(6,*) 'mercator grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'mercator grid.' call abort ! elseif(kgds(1).eq.2) then ! gnomonic projection - write(6,*) 'gnomonic grid' - write(6,*) 'error!! gnomonic projection not coded' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'gnomonic grid.' call abort ! elseif(kgds(1).eq.3) then ! lambert conformal - write(6,*) 'lambert conformal' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'lambert conformal grid.' call abort elseif(kgds(1).eq.4) then ! gaussian grid ! @@ -2881,33 +2881,33 @@ subroutine getarea(kgds,dlat,dlon,rslat,rnlat,wlon,elon,ijordr,me) return ! elseif(kgds(1).eq.5) then ! polar strereographic - write(6,*) 'polar stereographic grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'polar stereographic grid.' call abort return ! elseif(kgds(1).eq.13) then ! oblique lambert conformal - write(6,*) 'oblique lambert conformal grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'oblique lambert conformal grid.' call abort ! elseif(kgds(1).eq.50) then ! spherical coefficient - write(6,*) 'spherical coefficient' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'spherical coefficient grid.' call abort return ! elseif(kgds(1).eq.90) then ! space view perspective ! (orthographic grid) - write(6,*) 'space view perspective grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'space view perspective grid.' call abort return ! else ! unknown projection. abort. - write(6,*) 'error!! unknown map projection' + write(6,*) 'FATAL ERROR: Unknown map projection.' write(6,*) 'kgds(1)=',kgds(1) - print *,'error!! unknown map projection' + print *,'FATAL ERROR: Unknown map projection.' print *,'kgds(1)=',kgds(1) call abort endif @@ -3428,9 +3428,11 @@ subroutine la2ga(regin,imxin,jmxin,rinlon,rinlat,rlon,rlat,inttyp,& i2 = iindx2(i) if(wrk(i) .eq. 0.0) then if(.not.lmask) then - if (num_threads == 1) - & write(6,*) ' la2ga called with lmask=.true. but bad', - & ' rslmsk or slmask given' + if (num_threads == 1) then + write(6,*) ' FATAL ERROR: la2ga called' + write(6,*) ' with lmask=true. But bad rslmsk' + write(6,*) ' or slmask given.' + endif call abort endif ifill(it) = ifill(it) + 1 @@ -3478,7 +3480,8 @@ subroutine la2ga(regin,imxin,jmxin,rinlon,rinlat,rlon,rlat,inttyp,& enddo ! if (num_threads == 1) then - write(6,*) ' error!!! no filling value found in la2ga' + write(6,*) ' FATAL ERROR: no filling value' + write(6,*) ' found in routine la2ga.' ! write(6,*) ' i ix jx slmask(i) rslmsk ', ! & i,ix,jx,slmask(i),rslmsk(ix,jx) endif @@ -3707,7 +3710,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irttsf = iret if(iret == 1) then - write(6,*) 't surface analysis read error' + write(6,*) 'FATAL ERROR: t surface analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3733,11 +3736,13 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) if(iret == 1) then - write(6,*) 't surface at ft=0 analysis read error' + write(6,*) 'FATAL ERROR: t surface at ft=0 analysis' + write(6,*) 'read error.' call abort elseif(iret == -1) then if (me == 0) then - write(6,*) 'could not find t surface analysis at ft=0' + write(6,*) 'FATAL ERROR: Could not find t surface' + write(6,*) 'analysis at ft=0.' endif call abort else @@ -3760,7 +3765,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtalb = iret if(iret == 1) then - write(6,*) 'albedo analysis read error' + write(6,*) 'FATAL ERROR: albedo analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3791,7 +3796,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtalf = iret if(iret == 1) then - write(6,*) 'albedo analysis read error' + write(6,*) 'FATAL ERROR: albedo analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3822,7 +3827,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtwet=iret if(iret.eq.1) then - write(6,*) 'bucket wetness analysis read error' + write(6,*) 'FATAL ERROR: bucket wetness analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3844,7 +3849,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsmc=iret if(iret.eq.1) then - write(6,*) 'layer soil wetness analysis read error' + write(6,*) 'FATAL ERROR: layer soil wetness analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3879,8 +3885,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & !cggg the grib parameter id number. call baopenr(lugb,fnsnoa,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fnsnoa) - print *,'error in opening file ',trim(fnsnoa) + write(6,*) 'FATAL ERROR: in opening file ',trim(fnsnoa) + print *,'FATAL ERROR: in opening file ',trim(fnsnoa) call abort endif lugi=0 @@ -3892,8 +3898,9 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & & lskip,kpds,kgds,iret) close(lugb) if (iret .ne. 0) then - write(6,*) ' error reading header of file: ',trim(fnsnoa) - print *,'error reading header of file: ',trim(fnsnoa) + write(6,*) ' FATAL ERROR: reading header' + write(6,*) ' of file: ',trim(fnsnoa) + print *,'FATAL ERROR: reading header of file: ',trim(fnsnoa) call abort endif if (kgds(1) == 4) then ! gaussian data is depth @@ -3912,7 +3919,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & !cggg snow mods end irtscv=iret if(iret.eq.1) then - write(6,*) 'snow depth analysis read error' + write(6,*) 'FATAL ERROR: snow depth analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3934,7 +3941,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsno=iret if(iret.eq.1) then - write(6,*) 'snow cover analysis read error' + write(6,*) 'FATAL ERROR: snow cover analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3963,7 +3970,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtacn=iret if(iret.eq.1) then - write(6,*) 'ice concentration analysis read error' + write(6,*) 'FATAL ERROR: ice concentration' + write(6,*) 'analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3982,7 +3990,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtais=iret if(iret.eq.1) then - write(6,*) 'ice mask analysis read error' + write(6,*) 'FATAL ERROR: ice mask analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4010,7 +4018,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtzor=iret if(iret.eq.1) then - write(6,*) 'roughness analysis read error' + write(6,*) 'FATAL ERROR: roughness analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4039,7 +4047,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irttg3=iret if(iret.eq.1) then - write(6,*) 'deep soil tmp analysis read error' + write(6,*) 'FATAL ERROR: deep soil tmp analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4062,7 +4070,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtstc=iret if(iret.eq.1) then - write(6,*) 'layer soil tmp analysis read error' + write(6,*) 'FATAL ERROR: layer soil tmp analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4091,7 +4099,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtveg=iret if(iret.eq.1) then - write(6,*) 'vegetation cover analysis read error' + write(6,*) 'FATAL ERROR: vegetation cover analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4120,7 +4129,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvet=iret if(iret.eq.1) then - write(6,*) 'vegetation type analysis read error' + write(6,*) 'FATAL ERROR: vegetation type analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4149,7 +4159,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsot=iret if(iret.eq.1) then - write(6,*) 'soil type analysis read error' + write(6,*) 'FATAL ERROR: soil type analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4180,7 +4190,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvmn=iret if(iret.eq.1) then - write(6,*) 'shdmin analysis read error' + write(6,*) 'FATAL ERROR: shdmin analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4210,7 +4220,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvmx=iret if(iret.eq.1) then - write(6,*) 'shdmax analysis read error' + write(6,*) 'FATAL ERROR: shdmax analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4240,7 +4250,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtslp=iret if(iret.eq.1) then - write(6,*) 'slope type analysis read error' + write(6,*) 'FATAL ERROR: slope type analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4270,7 +4280,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtabs=iret if(iret.eq.1) then - write(6,*) 'snoalb analysis read error' + write(6,*) 'FATAL ERROR: snoalb analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4451,7 +4461,8 @@ subroutine rof01(aisfld, len, op, crit) endif enddo else - write(6,*) ' illegal operator in rof01. op=',op + write(6,*) ' FATAL ERROR: illegal operator' + write(6,*) ' in rof01. op=',op call abort endif ! @@ -4507,7 +4518,8 @@ subroutine rof01_len(aisfld, len, op, lake, critl, crits) endif enddo else - write(6,*) ' illegal operator in rof01. op=',op + write(6,*) ' FATAL ERROR: illegal operator' + write(6,*) ' in rof01_len. op=',op call abort endif ! @@ -5071,7 +5083,7 @@ subroutine newice(slianl,slifcs,tsfanl,tsffcs,len,lsoil, & do i=1,len if(slifcs(i).ne.slianl(i)) then if(slifcs(i).eq.1..or.slianl(i).eq.1.) then - print *,'inconsistency in slifcs or slianl' + print *,'FATAL ERROR: inconsistency in slifcs or slianl.' print 910,rla(i),rlo(i),slifcs(i),slianl(i), & tsffcs(i),tsfanl(i) 910 format(2x,'at lat=',f5.1,' lon=',f5.1,' slifcs=',f4.1, @@ -5203,7 +5215,8 @@ subroutine qcsice(ais,glacir,amxice,aicice,aicsea,sllnd,slmask, & kount1 = 0 do i=1,len if(ais(i).ne.aicice.and.ais(i).ne.aicsea) then - print *,'sea ice mask not ',aicice,' or ',aicsea + print *,'FATAL ERROR: sea ice' + print *,'mask not ',aicice,' or ',aicsea print *,'ais(i),aicice,aicsea,rla(i),rlo(i,=', & ais(i),aicice,aicsea,rla(i),rlo(i) call abort @@ -6109,6 +6122,8 @@ subroutine setrmsk(kpds5,slmask,igaul,jgaul,wlon,rnlat, & rltout(j) = rnlat + (j-1) * dlat enddo else ! grib file on some other grid + write(6,*) ' FATAL ERROR: Mask data on' + write(6,*) ' unsupported grid.' call abort endif dlon = 360.0 / imax @@ -7069,7 +7084,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 10 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 10 continue wei1m = (dayhf(mon2)-rjday)/(dayhf(mon2)-dayhf(mon1)) @@ -7148,7 +7163,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 20 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 20 continue wei1m = (dayhf(mon2)-rjday)/(dayhf(mon2)-dayhf(mon1)) @@ -7172,7 +7187,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 30 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 30 continue wei1s = (dayhf(sea2)-rjday)/(dayhf(sea2)-dayhf(sea1)) @@ -7196,7 +7211,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 31 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 31 continue wei1y = (dayhf(hyr2)-rjday)/(dayhf(hyr2)-dayhf(hyr1)) @@ -7284,9 +7299,11 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & if (me .eq. 0) write(6,*) 'climatological vegetation', & ' type read in.' elseif(index(fnsmcc,'soilmgldas') /= 0) then ! new soil moisture climo - if (me .eq. 0) write(6,*) 'fatal error: must choose' - if (me .eq. 0) write(6,*) 'climatological veg type when' - if (me .eq. 0) write(6,*) 'using new gldas soil moisture.' + if (me .eq. 0) then + write(6,*) 'FATAL ERROR: must choose' + write(6,*) 'climatological veg type when' + write(6,*) 'using new gldas soil moisture.' + endif call abort endif ! @@ -7499,7 +7516,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & deallocate(slmask_noice) endif else - write(6,*) 'climatological soil wetness file not given' + write(6,*) 'FATAL ERROR: climatological soil wetness' + write(6,*) 'file not given.' call abort endif ! @@ -7532,7 +7550,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) else - write(6,*) 'climatological ice cover file not given' + write(6,*) 'FATAL ERROR: climatological ice cover' + write(6,*) 'file not given.' call abort endif ! @@ -7768,7 +7787,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & deallocate(slmask_noice) endif else - write(6,*) 'climatological soil wetness file not given' + write(6,*) 'FATAL ERROR: climatological soil wetness' + write(6,*) 'file not given.' call abort endif ! @@ -7786,7 +7806,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) else - write(6,*) 'climatological ice cover file not given' + write(6,*) 'FATAL ERROR: climatological ice cover' + write(6,*) 'file not given.' call abort endif ! @@ -7853,7 +7874,10 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & ! set to point at the proper vegetation type file. if (fnzorc(1:3) == 'sib') then if (fnvetc(1:4) == ' ') then - if (me==0) write(6,*) "must choose sib veg type climo file" + if (me==0) then + write(6,*) "FATAL ERROR: must choose sib" + write(6,*) "vegetation type climo file." + endif call abort endif zorclm = 0.0 @@ -7865,7 +7889,10 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & enddo elseif(fnzorc(1:4) == 'igbp') then if (fnvetc(1:4) == ' ') then - if (me == 0) write(6,*) "must choose igbp veg type climo file" + if (me == 0) then + write(6,*) "FATAL ERROR: must choose igbp" + write(6,*) "vegetation type climo file." + endif call abort endif zorclm = 0.0 @@ -8107,8 +8134,8 @@ subroutine fixrdc_tile(filename_raw, tile_num_ch, & case(256:257) error=nf90_inq_varid(ncid, 'vegetation_greenness', id_var) case default - print*,'fatal error in fixrdc_tile of sfcsub.F.' - print*,'unknown variable.' + print*,'FATAL ERROR in fixrdc_tile of sfcsub.F.' + print*,'Unknown variable.' call abort end select if (error /= nf90_noerr) call netcdf_err(error) @@ -8181,7 +8208,7 @@ subroutine netcdf_err(error) character(len=256) :: errmsg errmsg = nf90_strerror(error) - print*,'fatal error in sfcsub.F: ', trim(errmsg) + print*,'FATAL ERROR in sfcsub.F: ', trim(errmsg) call abort end subroutine netcdf_err @@ -8239,8 +8266,8 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR: in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -8267,8 +8294,8 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & kpds0(4) = -1 kpds0(18) = -1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if (iret==99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if (iret==99) write(6,*) ' Field not found.' call abort endif ! @@ -8294,7 +8321,7 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & & (kpds(i),i=8,11) if(jret.eq.0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort @@ -8311,7 +8338,7 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & enddo if (me .eq. 0) write(6,*) 'imax,jmax,ijmax=',imax,jmax,ijmax else - write(6,*) ' error in getgb - jret=', jret + write(6,*) ' FATAL ERROR: in getgb - jret=', jret call abort endif ! @@ -8470,8 +8497,8 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -8497,8 +8524,8 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & kpds0(4)=-1 kpds0(18)=-1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if(iret==99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if(iret==99) write(6,*) ' Field not found.' call abort endif ! @@ -8541,7 +8568,7 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & & (kpds(i),i=8,11) if(jret.eq.0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort From 046f58589c50089fcd21a0696c4067b92afc202c Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 16 Apr 2021 08:52:11 -0600 Subject: [PATCH 080/119] use new syntax in SDF files --- physics/docs/pdftxt/GFSv15p2_suite.txt | 2 +- physics/docs/pdftxt/GFSv16beta_suite.txt | 2 +- physics/docs/pdftxt/RRFS_v1alpha_suite.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/docs/pdftxt/GFSv15p2_suite.txt b/physics/docs/pdftxt/GFSv15p2_suite.txt index 168921993..d79cab076 100644 --- a/physics/docs/pdftxt/GFSv15p2_suite.txt +++ b/physics/docs/pdftxt/GFSv15p2_suite.txt @@ -26,7 +26,7 @@ The GFS_v15p2 physics suite uses the parameterizations in the following order: \code - + diff --git a/physics/docs/pdftxt/GFSv16beta_suite.txt b/physics/docs/pdftxt/GFSv16beta_suite.txt index 85b5b890e..eac420cd0 100644 --- a/physics/docs/pdftxt/GFSv16beta_suite.txt +++ b/physics/docs/pdftxt/GFSv16beta_suite.txt @@ -29,7 +29,7 @@ The GFS_v16beta physics suite uses the parameterizations in the following order: \code - + diff --git a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt index 32db8037a..a3051a88b 100644 --- a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt +++ b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt @@ -24,7 +24,7 @@ The RRFS_v1alpha physics suite uses the parameterizations in the following order \code - + From 8c4464375efc888b884a0fab7c5261941d252f7a Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Fri, 16 Apr 2021 09:26:59 -0500 Subject: [PATCH 081/119] *Rename dkudiagnostic into dku in moninedmf.f and satmedmfvdifq.F. *Add dkt as a diagnostic variable for satmedmfvdifq.F. Contributors: Andrew Hazelton, Chunxi Zhang, Bin Liu --- physics/moninedmf.f | 20 ++++++++------------ physics/moninedmf.meta | 18 +++++++++--------- physics/satmedmfvdifq.F | 14 ++++---------- physics/satmedmfvdifq.meta | 27 ++++++++++++++++++--------- 4 files changed, 39 insertions(+), 40 deletions(-) diff --git a/physics/moninedmf.f b/physics/moninedmf.f index 8b3b01e31..dfd1e7774 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -62,9 +62,9 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & psk,rbsoil,zorl,u10m,v10m,fm,fh, & & tsea,heat,evap,stress,spd1,kpbl, & & prsi,del,prsl,prslk,phii,phil,delt,dspheat, & - & dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt, & + & dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt,dku, & & kinver,xkzm_m,xkzm_h,xkzm_s,lprnt,ipr, & - & xkzminv,moninq_fac,hurr_pbl,islimsk,dkudiagnostic,var_ric, & + & xkzminv,moninq_fac,hurr_pbl,islimsk,var_ric, & & coef_ric_l,coef_ric_s,lssav,ldiag3d,qdiag3d,ntoz, & & du3dt_PBL,dv3dt_PBL,dt3dt_PBL,dq3dt_PBL,do3dt_PBL, & & flag_for_pbl_generic_tend,errmsg,errflg) @@ -114,7 +114,9 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & real(kind=kind_phys), intent(out) :: & & dusfc(im), dvsfc(im), & & dtsfc(im), dqsfc(im), & - & hpbl(im), dkt(im,km-1) + & hpbl(im) + real(kind=kind_phys), intent(out) :: & + & dkt(im,km-1), dku(im,km-1) real(kind=kind_phys), intent(inout) :: & & hgamt(im), hgamq(im) ! @@ -148,13 +150,13 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & zd(im), zdd(im), thlvx1(im) ! real(kind=kind_phys) rdzt(im,km-1),dktx(im,km-1), & - & zi(im,km+1), zl(im,km), xkzo(im,km-1), & - & dku(im,km-1), xkzmo(im,km-1), & + & zi(im,km+1), zl(im,km), & + & xkzo(im,km-1), xkzmo(im,km-1), & & cku(im,km-1), ckt(im,km-1), & & ti(im,km-1), shr2(im,km-1), & & al(im,km-1), ad(im,km), & & au(im,km-1), a1(im,km), & - & a2(im,km*ntrac), dkudiagnostic(im,km-1) + & a2(im,km*ntrac) ! real(kind=kind_phys) tcko(im,km), qcko(im,km,ntrac), & & ucko(im,km), vcko(im,km), xmf(im,km) @@ -1403,12 +1405,6 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & enddo enddo - do k = 1,km1 - do i=1,im - dkudiagnostic(i,k) = dku(i,k) - enddo - enddo - ! ! solve tridiagonal problem for momentum ! diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index 8bdc3c254..b94515931 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -428,6 +428,15 @@ kind = kind_phys intent = out optional = F +[dku] + standard_name = atmosphere_momentum_diffusivity + long_name = diffusivity for momentum + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + type = real + kind = kind_phys + intent = out + optional = F [kinver] standard_name = index_of_highest_temperature_inversion long_name = index of highest temperature inversion @@ -513,15 +522,6 @@ type = integer intent = in optional = F -[dkudiagnostic] - standard_name = atmosphere_momentum_diffusivity - long_name = diffusivity for momentum - units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) - type = real - kind = kind_phys - intent = out - optional = F [var_ric] standard_name = flag_variable_bulk_richardson_number long_name = flag for calculating variable bulk richardson number for hurricane PBL diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index c2a9a41d1..062c36b3e 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -63,9 +63,8 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & snwdph_lnd,psk,rbsoil,zorl,u10m,v10m,fm,fh, & & tsea,heat,evap,stress,spd1,kpbl, & & prsi,del,prsl,prslk,phii,phil,delt, & - & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl, & + & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl,dkt,dku, & & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr, & - & dkudiagnostic, & & ntoz,du3dt,dv3dt,dt3dt,dq3dt,do3dt,gen_tend,ldiag3d,qdiag3d, & & errmsg,errflg) ! @@ -110,6 +109,8 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & dusfc(im), dvsfc(im), & & dtsfc(im), dqsfc(im), & & hpbl(im) + real(kind=kind_phys), intent(out) :: & + & dkt(im,km-1), dku(im,km-1) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg @@ -131,9 +132,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & qlx(im,km), thetae(im,km),thlx(im,km), & slx(im,km), svx(im,km), qtx(im,km), & tvx(im,km), pix(im,km), radx(im,km-1), - & dku(im,km-1),dkt(im,km-1), dkq(im,km-1), - & cku(im,km-1),ckt(im,km-1), - & dkudiagnostic(im,km-1) + & dkq(im,km-1),cku(im,km-1), ckt(im,km-1) ! real(kind=kind_phys) plyr(im,km), rhly(im,km), cfly(im,km), & qstl(im,km) @@ -1541,11 +1540,6 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & enddo enddo - do k = 1,km1 - do i=1,im - dkudiagnostic(i,k) = dku(i,k) - enddo - enddo c !> - Call tridi2() to solve tridiagonal problem for momentum c diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 30bae3a8f..862290cb2 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -531,6 +531,24 @@ kind = kind_phys intent = out optional = F +[dkt] + standard_name = atmosphere_heat_diffusivity + long_name = diffusivity for heat + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + type = real + kind = kind_phys + intent = out + optional = F +[dku] + standard_name = atmosphere_momentum_diffusivity + long_name = diffusivity for momentum + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + type = real + kind = kind_phys + intent = out + optional = F [kinver] standard_name = index_of_highest_temperature_inversion long_name = index of highest temperature inversion @@ -593,15 +611,6 @@ kind = kind_phys intent = in optional = F -[dkudiagnostic] - standard_name = atmosphere_momentum_diffusivity - long_name = diffusivity for momentum - units = m2 s-1 - dimensions = (horizontal_dimension,vertical_dimension_minus_one) - type = real - kind = kind_phys - intent = out - optional = F [ntoz] standard_name = index_for_ozone long_name = tracer index for ozone mixing ratio From b53829d763acb3668fb08d065004d905d10e5bbc Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Fri, 16 Apr 2021 17:45:02 +0000 Subject: [PATCH 082/119] Updated flake physics --- physics/module_nst_water_prop.f90 | 7 +++---- physics/sfc_nst.f | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/physics/module_nst_water_prop.f90 b/physics/module_nst_water_prop.f90 index 3ca7366bd..39020526c 100644 --- a/physics/module_nst_water_prop.f90 +++ b/physics/module_nst_water_prop.f90 @@ -657,7 +657,7 @@ subroutine get_dtzm_point(xt,xz,dt_cool,zc,z1,z2,dtm) end subroutine get_dtzm_point !>\ingroup waterprop - subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) + subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,z1,z2,nx,ny,nth,dtm) !subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,icy,z1,z2,nx,ny,dtm) ! ===================================================================== ! ! ! @@ -682,7 +682,6 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) ! dt_cool - real, sub-layer cooling amount 1 ! ! zc - sub-layer cooling thickness 1 ! ! wet - logical, flag for wet point (ocean or lake) 1 ! -! use_flake - logical, flag for lake point only 1 ! ! icy - logical, flag for ice point (ocean or lake) 1 ! ! nx - integer, dimension in x-direction (zonal) 1 ! ! ny - integer, dimension in y-direction (meridional) 1 ! @@ -698,7 +697,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) integer, intent(in) :: nx,ny, nth real (kind=kind_phys), dimension(nx,ny), intent(in) :: xt,xz,dt_cool,zc - logical, dimension(nx,ny), intent(in) :: wet, use_flake + logical, dimension(nx,ny), intent(in) :: wet ! logical, dimension(nx,ny), intent(in) :: wet,icy real (kind=kind_phys), intent(in) :: z1,z2 real (kind=kind_phys), dimension(nx,ny), intent(out) :: dtm @@ -714,7 +713,7 @@ subroutine get_dtzm_2d(xt,xz,dt_cool,zc,wet,use_flake,z1,z2,nx,ny,nth,dtm) dtm(i,j) = zero ! initialize dtm - if ( wet(i,j) .and. .not. use_flake(i,j)) then + if ( wet(i,j) ) then ! ! get the mean warming in the range of z=z1 to z=z2 ! diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index d8af2bb3c..520e8b802 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -728,9 +728,8 @@ subroutine sfc_nst_pre_run ! if (cplflx) then z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, - & z_c, wet, use_flake, zero, omz1, im, 1, - & nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & + & zero, omz1, im, 1, nthreads, dtzm) do i=1,im if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf @@ -836,7 +835,7 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, use_flake, & + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & & zsea1, zsea2, im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then From 4c8463008dfac97f8aecb296fd9badca8adbeed5 Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Fri, 16 Apr 2021 13:12:25 -0500 Subject: [PATCH 083/119] Use unique standard_name for the new added dkt and dku diagnostic variables, so that they will not be conflicted with other similar variables in GFS_typedefs.meta. Contributors: Chunxi Zhang and Bin Liu --- physics/moninedmf.meta | 4 ++-- physics/satmedmfvdifq.meta | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b94515931..b8ca69ef2 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -420,7 +420,7 @@ intent = inout optional = F [dkt] - standard_name = atmosphere_heat_diffusivity + standard_name = atmosphere_heat_diffusivity_from_gfspbl long_name = diffusivity for heat units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) @@ -429,7 +429,7 @@ intent = out optional = F [dku] - standard_name = atmosphere_momentum_diffusivity + standard_name = atmosphere_momentum_diffusivity_from_gfspbl long_name = diffusivity for momentum units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 862290cb2..75cab497d 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -532,7 +532,7 @@ intent = out optional = F [dkt] - standard_name = atmosphere_heat_diffusivity + standard_name = atmosphere_heat_diffusivity_from_gfspbl long_name = diffusivity for heat units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) @@ -541,7 +541,7 @@ intent = out optional = F [dku] - standard_name = atmosphere_momentum_diffusivity + standard_name = atmosphere_momentum_diffusivity_from_gfspbl long_name = diffusivity for momentum units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) From 2d3b3c4816e7132bf6cd3ebdff72473341b99aca Mon Sep 17 00:00:00 2001 From: "Yihua.Wu" Date: Fri, 16 Apr 2021 19:23:22 +0000 Subject: [PATCH 084/119] Reserved a part of the code --- physics/sfc_nst.f | 2 +- physics/sfc_nst.meta | 88 ++++++++++++++++++-------------------------- 2 files changed, 37 insertions(+), 53 deletions(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 520e8b802..634709af4 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -728,7 +728,7 @@ subroutine sfc_nst_pre_run ! if (cplflx) then z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & + call get_dtzm_2d (xt, xz, dt_cool, z_c_0, wet, & & zero, omz1, im, 1, nthreads, dtzm) do i=1,im if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index be466f132..9c4221080 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -178,8 +178,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -187,8 +187,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -266,8 +266,8 @@ intent = in optional = F [stress] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -275,8 +275,8 @@ intent = in optional = F [sfcemis] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -284,8 +284,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -302,8 +302,8 @@ intent = in optional = F [rain] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -420,8 +420,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -582,8 +582,8 @@ intent = inout optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -591,8 +591,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -600,8 +600,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -609,8 +609,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -618,8 +618,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -627,8 +627,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -636,8 +636,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -688,14 +688,6 @@ type = logical intent = in optional = F -[use_flake] - standard_name = flag_nonzero_lake_surface_fraction - long_name = flag indicating presence of some lake surface area fraction - units = flag - dimensions = (horizontal_loop_extent) - type = logical - intent = in - optional = F [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater @@ -715,8 +707,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -724,8 +716,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -881,14 +873,6 @@ type = logical intent = in optional = F -[use_flake] - standard_name = flag_nonzero_lake_surface_fraction - long_name = flag indicating presence of some lake surface area fraction - units = flag - dimensions = (horizontal_loop_extent) - type = logical - intent = in - optional = F [icy] standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction @@ -994,8 +978,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -1003,8 +987,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real From b80f88fb75384c21c46f6a7924417f3dfb0aff1b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 16 Apr 2021 13:45:07 -0600 Subject: [PATCH 085/119] Fix formatting/revert unnecessary formatting changes --- physics/flake_driver.F90 | 3 +-- physics/sfc_nst.f | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index 62c431a59..535d2b9f2 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -51,7 +51,7 @@ SUBROUTINE flake_driver_run ( & ! ---- Inputs im, ps, t1, q1, wind, & dlwflx, dswsfc, weasd, lakedepth, & - use_flake, xlat, delt, zlvl, elev, & + use_flake, xlat, delt, zlvl, elev, & wet, flag_iter, yearlen, julian, imon, & ! ---- in/outs snwdph, hice, tsurf, fice, T_sfc, hflx, evap, & @@ -409,4 +409,3 @@ END SUBROUTINE flake_driver_run !--------------------------------- end module flake_driver - \ No newline at end of file diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 634709af4..c2bd8b2dc 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,9 +27,9 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet,use_flake, xlon, sinlat,& - & stress, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & prsl1, prslki, prsik1, prslk1, wet, use_flake, xlon, & + & sinlat, stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & & nstf_name5, lprnt, ipr, & @@ -705,7 +705,7 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm, z_c_0 + real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 ! Initialize CCPP error handling variables errmsg = '' @@ -728,13 +728,13 @@ subroutine sfc_nst_pre_run ! if (cplflx) then z_c_0 = 0.0 - call get_dtzm_2d (xt, xz, dt_cool, z_c_0, wet, & - & zero, omz1, im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, & + & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) do i=1,im - if (wet(i).and.oceanfrac(i)>zero.and..not.use_flake(i)) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update + if (wet(i) .and. oceanfrac(i)>zero .and. .not.use_flake(i)) then +! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile +! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -779,7 +779,7 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, kdt, rlapse, tgice, wet, use_flake,icy, oro, oro_uf, & + & ( im, kdt, rlapse, tgice, wet, use_flake, icy, oro, oro_uf, & & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & @@ -835,8 +835,8 @@ subroutine sfc_nst_post_run & if (nstf_name1 > 1) then zsea1 = 0.001_kp*real(nstf_name4) zsea2 = 0.001_kp*real(nstf_name5) - call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, & - & zsea1, zsea2, im, 1, nthreads, dtzm) + call get_dtzm_2d (xt, xz, dt_cool, z_c, wet, zsea1, zsea2, & + & im, 1, nthreads, dtzm) do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then From 67ddd4f0834339fe12307f87e1d3204baa227f7b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 16 Apr 2021 14:38:49 -0600 Subject: [PATCH 086/119] Fix compile errors in sfc_nst.f and sfc_nst.meta --- physics/sfc_nst.f | 2 +- physics/sfc_nst.meta | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index c2bd8b2dc..517aa7ff0 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -731,7 +731,7 @@ subroutine sfc_nst_pre_run call get_dtzm_2d (xt, xz, dt_cool, & & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i)>zero .and. .not.use_flake(i)) then + if (wet(i) .and. oceanfrac(i)>zero .and..not.use_flake(i)) then ! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile ! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 9c4221080..a29f10f90 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -688,6 +688,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [tgice] standard_name = freezing_point_temperature_of_seawater long_name = freezing point temperature of seawater @@ -873,6 +881,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [icy] standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction From 7fa34d54be0b4ed0d185c259b21019cc65c3f575 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 19 Apr 2021 14:09:19 -0600 Subject: [PATCH 087/119] physics/mp_thompson.F90: move 'max' checks where they belong --- physics/mp_thompson.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index 23533fbd6..634920408 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -610,11 +610,11 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & !> - Convert rainfall deltas from mm to m (on physics timestep); add to inout variables ! "rain" in Thompson MP refers to precipitation (total of liquid rainfall+snow+graupel+ice) - prcp = max(0.0, prcp + delta_rain_mp/1000.0_kind_phys) - graupel = max(0.0, graupel + delta_graupel_mp/1000.0_kind_phys) - ice = max(0.0, ice + delta_ice_mp/1000.0_kind_phys) - snow = max(0.0, snow + delta_snow_mp/1000.0_kind_phys) - rain = max(0.0, rain + (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) + prcp = prcp + max(0.0, delta_rain_mp/1000.0_kind_phys) + graupel = graupel + max(0.0, delta_graupel_mp/1000.0_kind_phys) + ice = ice + max(0.0, delta_ice_mp/1000.0_kind_phys) + snow = snow + max(0.0, delta_snow_mp/1000.0_kind_phys) + rain = rain + max(0.0, (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) end subroutine mp_thompson_run !>@} From c9bdbb8d8481df8ebe9f47dd9135eb9b115817e1 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 19 Apr 2021 14:20:35 -0600 Subject: [PATCH 088/119] Revert assumed-size array changes in physics/gfdl_fv_sat_adj.F90, fix order of arguments in physics/sfc_nst.meta --- physics/gfdl_fv_sat_adj.F90 | 69 ++++++++++++++++++------------------- physics/gfdl_sfc_layer.meta | 6 ++-- physics/sfc_nst.meta | 16 ++++----- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/physics/gfdl_fv_sat_adj.F90 b/physics/gfdl_fv_sat_adj.F90 index 6140fa680..816488f7a 100644 --- a/physics/gfdl_fv_sat_adj.F90 +++ b/physics/gfdl_fv_sat_adj.F90 @@ -128,8 +128,8 @@ subroutine fv_sat_adj_init(do_sat_adj, kmp, nwat, ngas, rilist, cpilist, & integer, intent(in ) :: kmp integer, intent(in ) :: nwat integer, intent(in ) :: ngas - real(kind_dyn), intent(in ) :: rilist(:) - real(kind_dyn), intent(in ) :: cpilist(:) + real(kind_dyn), intent(in ) :: rilist(0:ngas) + real(kind_dyn), intent(in ) :: cpilist(0:ngas) integer, intent(in ) :: mpirank integer, intent(in ) :: mpiroot character(len=*), intent( out) :: errmsg @@ -255,46 +255,46 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, integer, intent(in) :: ng logical, intent(in) :: hydrostatic logical, intent(in) :: fast_mp_consv - real(kind=kind_dyn), intent(inout) :: te0_2d(:,:) - real(kind=kind_dyn), intent( out) :: te0(:,:,:) + real(kind=kind_dyn), intent(inout) :: te0_2d(is:ie, js:je) + real(kind=kind_dyn), intent( out) :: te0(isd:ied, jsd:jed, 1:km) ! If multi-gases physics are not used, ngas is one and qvi identical to qv integer, intent(in) :: ngas - real(kind=kind_dyn), intent(inout) :: qvi(:,:,:,:) - real(kind=kind_dyn), intent(inout) :: qv(:,:,:) - real(kind=kind_dyn), intent(inout) :: ql(:,:,:) - real(kind=kind_dyn), intent(inout) :: qi(:,:,:) - real(kind=kind_dyn), intent(inout) :: qr(:,:,:) - real(kind=kind_dyn), intent(inout) :: qs(:,:,:) - real(kind=kind_dyn), intent(inout) :: qg(:,:,:) - real(kind=kind_dyn), intent(in) :: hs(:,:) - real(kind=kind_dyn), intent(in) :: peln(:,:,:) - ! For hydrostatic build, delz's third dimension is 1:kmdelz=1:1, otherwise 1:km (see fv_arrays.F90) - real(kind=kind_dyn), intent(in) :: delz(:,:,:) - real(kind=kind_dyn), intent(in) :: delp(:,:,:) - real(kind=kind_dyn), intent(inout) :: pt(:,:,:) - real(kind=kind_dyn), intent(inout) :: pkz(:,:,:) + real(kind=kind_dyn), intent(inout) :: qvi(isd:ied, jsd:jed, 1:km, 1:ngas) + real(kind=kind_dyn), intent(inout) :: qv(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: ql(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qi(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qr(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qs(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: qg(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(in) :: hs(isd:ied, jsd:jed) + real(kind=kind_dyn), intent(in) :: peln(is:ie, 1:km+1, js:je) + ! For hydrostatic build, kmdelz=1, otherwise kmdelz=km (see fv_arrays.F90) + real(kind=kind_dyn), intent(in) :: delz(is:ie, js:je, 1:kmdelz) + real(kind=kind_dyn), intent(in) :: delp(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: pt(isd:ied, jsd:jed, 1:km) + real(kind=kind_dyn), intent(inout) :: pkz(is:ie, js:je, 1:km) #ifdef USE_COND - real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) + real(kind=kind_dyn), intent(inout) :: q_con(isd:ied, jsd:jed, 1:km) #else - real(kind=kind_dyn), intent(inout) :: q_con(:,:,:) + real(kind=kind_dyn), intent(inout) :: q_con(isd:isd, jsd:jsd, 1) #endif real(kind=kind_dyn), intent(in) :: akap #ifdef MOIST_CAPPA - real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) + real(kind=kind_dyn), intent(inout) :: cappa(isd:ied, jsd:jed, 1:km) #else - real(kind=kind_dyn), intent(inout) :: cappa(:,:,:) + real(kind=kind_dyn), intent(inout) :: cappa(isd:ied, jsd:jed, 1) #endif ! DH* WARNING, allocation in fv_arrays.F90 is area(isd_2d:ied_2d, jsd_2d:jed_2d), ! where normally isd_2d = isd etc, but for memory optimization, these can be set ! to isd_2d=0, ied_2d=-1 etc. I don't believe this optimization is actually used, ! as it would break a whole lot of code (including the one below)! ! Assume thus that isd_2d = isd etc. - real(kind_grid), intent(in) :: area(:,:) - real(kind=kind_dyn), intent(inout) :: dtdt(:,:,:) + real(kind_grid), intent(in) :: area(isd:ied, jsd:jed) + real(kind=kind_dyn), intent(inout) :: dtdt(is:ie, js:je, 1:km) logical, intent(in) :: out_dt logical, intent(in) :: last_step logical, intent(in) :: do_qa - real(kind=kind_dyn), intent( out) :: qa(:,:,:) + real(kind=kind_dyn), intent( out) :: qa(isd:ied, jsd:jed, 1:km) integer, intent(in) :: nthreads character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg @@ -333,19 +333,18 @@ subroutine fv_sat_adj_run(mdt, zvir, is, ie, isd, ied, kmp, km, kmdelz, js, je, else kdelz = k end if - call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & - te0(isd:ied,jsd:jed,k), & + call fv_sat_adj_work(abs(mdt), zvir, is, ie, js, je, ng, hydrostatic, fast_mp_consv, & + te0(isd,jsd,k), & #ifdef MULTI_GASES - qvi(isd:ied,jsd:jed,k,1:ngas), & + qvi(isd,jsd,k,1:ngas), & #else - qv(isd:ied,jsd:jed,k), & + qv(isd,jsd,k), & #endif - ql(isd:ied,jsd:jed,k), qi(isd:ied,jsd:jed,k), & - qr(isd:ied,jsd:jed,k), qs(isd:ied,jsd:jed,k), qg(isd:ied,jsd:jed,k), & - hs, dpln, delz(is:ie,js:je,kdelz), pt(isd:ied,jsd:jed,k), & - delp(isd:ied,jsd:jed,k), q_con(isd:ied,jsd:jed,k), & - cappa(isd:ied,jsd:jed,k), area, dtdt(is:ie,js:je,k), & - out_dt, last_step, do_qa, qa(isd:ied,jsd:jed,k)) + ql(isd,jsd,k), qi(isd,jsd,k), & + qr(isd,jsd,k), qs(isd,jsd,k), qg(isd,jsd,k), & + hs, dpln, delz(is:,js:,kdelz), pt(isd,jsd,k), delp(isd,jsd,k),& + q_con(isd:,jsd:,k), cappa(isd:,jsd:,k), area, dtdt(is,js,k), & + out_dt, last_step, do_qa, qa(isd,jsd,k)) if ( .not. hydrostatic ) then do j=js,je do i=is,ie diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index a1978e820..c8cbaf294 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -783,7 +783,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [qss_lnd] standard_name = surface_specific_humidity_over_land @@ -792,7 +792,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [qss_ice] standard_name = surface_specific_humidity_over_ice @@ -801,7 +801,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index f4fc1cb4f..c127ffb3d 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -105,19 +105,19 @@ kind = kind_phys intent = in optional = F -[sbc] - standard_name = stefan_boltzmann_constant - long_name = Stefan-Boltzmann constant - units = W m-2 K-4 +[tgice] + standard_name = freezing_point_temperature_of_seawater + long_name = freezing point temperature of seawater + units = K dimensions = () type = real kind = kind_phys intent = in optional = F -[tgice] - standard_name = freezing_point_temperature_of_seawater - long_name = freezing point temperature of seawater - units = K +[sbc] + standard_name = stefan_boltzmann_constant + long_name = Stefan-Boltzmann constant + units = W m-2 K-4 dimensions = () type = real kind = kind_phys From c0712410195dfb347882e5f579bef03ece7f87c8 Mon Sep 17 00:00:00 2001 From: Michael Toy Date: Mon, 19 Apr 2021 22:24:55 +0000 Subject: [PATCH 089/119] ugwpv1_gsldrag bug fixes, and GFS_typdefs updates associated with diag flags for ugwpv1_gsldrag and GFS_DCNV_generic.F90 --- physics/GFS_DCNV_generic.F90 | 8 ++++---- physics/ugwpv1_gsldrag.F90 | 40 +++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/physics/GFS_DCNV_generic.F90 b/physics/GFS_DCNV_generic.F90 index cbab52377..14b728631 100644 --- a/physics/GFS_DCNV_generic.F90 +++ b/physics/GFS_DCNV_generic.F90 @@ -169,16 +169,16 @@ subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, qdiag3d, ras, cs dt3dt(i,k) = dt3dt(i,k) + (gt0(i,k)-save_t(i,k)) * frain du3dt(i,k) = du3dt(i,k) + (gu0(i,k)-save_u(i,k)) * frain dv3dt(i,k) = dv3dt(i,k) + (gv0(i,k)-save_v(i,k)) * frain - ! convective mass fluxes - upd_mf(i,k) = upd_mf(i,k) + ud_mf(i,k) * (con_g*frain) - dwn_mf(i,k) = dwn_mf(i,k) + dd_mf(i,k) * (con_g*frain) - det_mf(i,k) = det_mf(i,k) + dt_mf(i,k) * (con_g*frain) enddo enddo if(qdiag3d) then do k=1,levs do i=1,im dq3dt(i,k) = dq3dt(i,k) + (gq0_water_vapor(i,k)-save_qv(i,k)) * frain + ! convective mass fluxes + upd_mf(i,k) = upd_mf(i,k) + ud_mf(i,k) * (con_g*frain) + dwn_mf(i,k) = dwn_mf(i,k) + dd_mf(i,k) * (con_g*frain) + det_mf(i,k) = det_mf(i,k) + dt_mf(i,k) * (con_g*frain) enddo enddo endif diff --git a/physics/ugwpv1_gsldrag.F90 b/physics/ugwpv1_gsldrag.F90 index 649d994a8..2bfb2948d 100644 --- a/physics/ugwpv1_gsldrag.F90 +++ b/physics/ugwpv1_gsldrag.F90 @@ -496,16 +496,21 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd !=============================================================== ! ORO-diag - dudt_ogw(:,:) = 0. ; dvdt_ogw(:,:)=0. ; dudt_obl(:,:)=0. ; dvdt_obl(:,:)=0. - dudt_oss(:,:) = 0. ; dvdt_oss(:,:)=0. ; dudt_ofd(:,:)=0. ; dvdt_ofd(:,:)=0. + if (do_ugwp_v1 .or. gwd_opt==33 .or. gwd_opt==22) then + dudt_ogw(:,:)= 0.; dvdt_ogw(:,:)=0.; dudt_obl(:,:)=0.; dvdt_obl(:,:)=0. + dudt_oss(:,:)= 0.; dvdt_oss(:,:)=0.; dudt_ofd(:,:)=0.; dvdt_ofd(:,:)=0. + du_ogwcol(:)=0. ; dv_ogwcol(:)=0. ; du_oblcol(:)=0. ; dv_oblcol(:)=0. + du_osscol(:)=0. ; dv_osscol(:)=0. ;du_ofdcol(:)=0. ; dv_ofdcol(:)=0. + else + dudt_ogw(:,:) = 0. + end if - dusfcg (:) = 0. ; dvsfcg(:) =0. - - du_ogwcol(:)=0. ; dv_ogwcol(:)=0. ; du_oblcol(:)=0. ; dv_oblcol(:)=0. - du_osscol(:)=0. ; dv_osscol(:)=0. ;du_ofdcol(:)=0. ; dv_ofdcol(:)=0. + dusfcg (:) = 0. ; dvsfcg(:) =0. ! - dudt_ngw(:,:)=0. ; dvdt_ngw(:,:)=0. ; dtdt_ngw(:,:)=0. ; kdis_ngw(:,:)=0. + if (do_ugwp_v1) then + dudt_ngw(:,:)=0.; dvdt_ngw(:,:)=0.; dtdt_ngw(:,:)=0.; kdis_ngw(:,:)=0. + end if ! ngw+ogw - diag @@ -703,16 +708,23 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ! ! get total sso-OGW + NGW ! - dudt_gw = Pdudt +dudt_ngw - dvdt_gw = Pdvdt +dvdt_ngw - dtdt_gw = Pdtdt +dtdt_ngw - kdis_gw = Pkdis +kdis_ngw + if (do_ugwp_v1) then + dudt_gw = Pdudt + dudt_ngw + dvdt_gw = Pdvdt + dvdt_ngw + dtdt_gw = Pdtdt + dtdt_ngw + kdis_gw = Pkdis + kdis_ngw + else + dudt_gw = Pdudt + dvdt_gw = Pdvdt + dtdt_gw = Pdtdt + kdis_gw = Pkdis + end if ! ! accumulate "tendencies" as in the GFS-ipd (pbl + ugwp + zero-RF) ! - dudt = dudt + dudt_ngw - dvdt = dvdt + dvdt_ngw - dtdt = dtdt + dtdt_ngw + dudt = dudt + dudt_gw + dvdt = dvdt + dvdt_gw + dtdt = dtdt + dtdt_gw end subroutine ugwpv1_gsldrag_run !! @} From eed0761727f763068d40f5ccbb9801279424057e Mon Sep 17 00:00:00 2001 From: Matus Martini Date: Mon, 19 Apr 2021 19:06:43 -0700 Subject: [PATCH 090/119] Fix array-out-of-bounds errors when extra top layer is used for pressure, temperature, and specific humidity for Thompson MP. Use extended arrays plyr, tlyr, and qlyr respectively. --- physics/GFS_rrtmg_pre.F90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 0c9eaf3f0..e3ae929ba 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -204,7 +204,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & real(kind=kind_phys), dimension(im,lm+LTP,NF_VGAS) :: gasvmr real(kind=kind_phys), dimension(im,lm+LTP,NBDSW,NF_AESW) :: faersw real(kind=kind_phys), dimension(im,lm+LTP,NBDLW,NF_AELW) :: faerlw - + ! for stochastic cloud perturbations real(kind=kind_phys), dimension(im) :: cldp1d real (kind=kind_phys) :: alpha0,beta0,m,s,cldtmp,tmp_wt,cdfz @@ -352,7 +352,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & if ( plvl(i,lla) <= prsmin ) plvl(i,lla) = 2.0*prsmin plyr(i,lyb) = 0.5 * plvl(i,lla) tlyr(i,lyb) = tlyr(i,lya) - prslk1(i,lyb) = (plyr(i,lyb)*0.001) ** rocp ! plyr in Pa + prslk1(i,lyb) = (plyr(i,lyb)*0.001) ** rocp ! plyr in hPa rhly(i,lyb) = rhly(i,lya) qstl(i,lyb) = qstl(i,lya) enddo @@ -638,12 +638,12 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & enddo enddo ! for Thompson MP - prepare variables for calc_effr - if (imp_physics == imp_physics_thompson .and. ltaerosol) then + if_thompson: if (imp_physics == imp_physics_thompson .and. ltaerosol) then do k=1,LMK do i=1,IM - qvs = qgrs(i,k,ntqv) + qvs = qlyr(i,k) qv_mp (i,k) = qvs/(1.-qvs) - rho (i,k) = con_eps*prsl(i,k)/(con_rd*tgrs(i,k)*(qv_mp(i,k)+con_eps)) + rho (i,k) = con_eps*plyr(i,k)*100./(con_rd*tlyr(i,k)*(qv_mp(i,k)+con_eps)) orho (i,k) = 1.0/rho(i,k) qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) @@ -656,9 +656,9 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & elseif (imp_physics == imp_physics_thompson) then do k=1,LMK do i=1,IM - qvs = qgrs(i,k,ntqv) + qvs = qlyr(i,k) qv_mp (i,k) = qvs/(1.-qvs) - rho (i,k) = con_eps*prsl(i,k)/(con_rd*tgrs(i,k)*(qv_mp(i,k)+con_eps)) + rho (i,k) = con_eps*plyr(i,k)*100./(con_rd*tlyr(i,k)*(qv_mp(i,k)+con_eps)) orho (i,k) = 1.0/rho(i,k) qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) @@ -667,7 +667,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & ni_mp (i,k) = tracer1(i,k,ntinc)/(1.-qvs) enddo enddo - endif + endif if_thompson endif do n=1,ncndl do k=1,LMK @@ -903,8 +903,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & do i =1, im do k =1, lmk - qc_save(i,k) = ccnd(i,k,1) - qi_save(i,k) = ccnd(i,k,2) + qc_save(i,k) = ccnd(i,k,1) + qi_save(i,k) = ccnd(i,k,2) qs_save(i,k) = ccnd(i,k,4) enddo enddo From 28c815adabea00d3c4d11e0341e8bead7ce993c2 Mon Sep 17 00:00:00 2001 From: "Bin.Liu" Date: Mon, 19 Apr 2021 21:11:24 -0500 Subject: [PATCH 091/119] Unify the usage of Diag%dkt and Interstitial%dkt and change the standard_names for dkt/dku back to atmosphere_heat/momentum_diffusivity. --- physics/GFS_debug.F90 | 3 ++- physics/moninedmf.meta | 4 ++-- physics/satmedmfvdifq.meta | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index d46dc6752..2d7f5616f 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -657,6 +657,8 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, if(Model%lradar) then call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%refl_10cm ', Diag%refl_10cm) end if + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%dkt ', Diag%dkt) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%dku ', Diag%dku) ! CCPP/MYNNPBL only if (Model%do_mynnedmf) then if (Model%bl_mynn_output .ne. 0) then @@ -1068,7 +1070,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%del ', Interstitial%del ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%del_gz ', Interstitial%del_gz ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%delr ', Interstitial%delr ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dkt ', Interstitial%dkt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dlength ', Interstitial%dlength ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqdt ', Interstitial%dqdt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqsfc1 ', Interstitial%dqsfc1 ) diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b8ca69ef2..b94515931 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -420,7 +420,7 @@ intent = inout optional = F [dkt] - standard_name = atmosphere_heat_diffusivity_from_gfspbl + standard_name = atmosphere_heat_diffusivity long_name = diffusivity for heat units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) @@ -429,7 +429,7 @@ intent = out optional = F [dku] - standard_name = atmosphere_momentum_diffusivity_from_gfspbl + standard_name = atmosphere_momentum_diffusivity long_name = diffusivity for momentum units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 75cab497d..862290cb2 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -532,7 +532,7 @@ intent = out optional = F [dkt] - standard_name = atmosphere_heat_diffusivity_from_gfspbl + standard_name = atmosphere_heat_diffusivity long_name = diffusivity for heat units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) @@ -541,7 +541,7 @@ intent = out optional = F [dku] - standard_name = atmosphere_momentum_diffusivity_from_gfspbl + standard_name = atmosphere_momentum_diffusivity long_name = diffusivity for momentum units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) From 0beed6eae506b7242abc637e1a229f5595d62e87 Mon Sep 17 00:00:00 2001 From: Laurie Carson Date: Tue, 20 Apr 2021 09:42:08 -0600 Subject: [PATCH 092/119] bug fix for doxygen --- physics/sfcsub.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 2d2b3cbc3..93e2bb11e 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -3,7 +3,7 @@ !>\defgroup mod_sfcsub GFS sfcsub Module -!!\ingroup Noah_LSM +!!\ingroup mod_GFS_phys_time_vary !> @{ !! This module contains grib code for each parameter-used in subroutines sfccycle() !! and setrmsk(). From d194af6472ac2be8d7007b73ce69c81412c406e6 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 22 Apr 2021 15:16:38 -0600 Subject: [PATCH 093/119] Bugfix in physics/mp_thompson.F90: need to call mp_gt_driver with or without effective radii --- physics/mp_thompson.F90 | 116 +++++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 38 deletions(-) diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index 634920408..1ad4b2d4b 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -547,45 +547,85 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & !> - Call mp_gt_driver() with or without aerosols if (is_aerosol_aware) then - call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & - nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & - tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & - rainnc=rain_mp, rainncv=delta_rain_mp, & - snownc=snow_mp, snowncv=delta_snow_mp, & - icenc=ice_mp, icencv=delta_ice_mp, & - graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & - refl_10cm=refl_10cm, & - diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & - re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & - has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & - rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & - ! DH* 2020-06-05 not passing this optional argument, see - ! comment in module_mp_thompson.F90 / mp_gt_driver - !rand_pert=rand_pert, & - ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & - ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & - its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & - errmsg=errmsg, errflg=errflg, reset=reset) - + if (do_effective_radii) then + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + else + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + end if else - call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & - tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & - rainnc=rain_mp, rainncv=delta_rain_mp, & - snownc=snow_mp, snowncv=delta_snow_mp, & - icenc=ice_mp, icencv=delta_ice_mp, & - graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & - refl_10cm=refl_10cm, & - diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & - re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & - has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & - rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & - ! DH* 2020-06-05 not passing this optional argument, see - ! comment in module_mp_thompson.F90 / mp_gt_driver - !rand_pert=rand_pert, & - ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & - ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & - its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & - errmsg=errmsg, errflg=errflg, reset=reset) + if (do_effective_radii) then + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + else + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + end if end if if (errflg/=0) return From 1d0e6edc39e9547f36ec7c54f30666f9beaf1eb1 Mon Sep 17 00:00:00 2001 From: Laurie Carson Date: Thu, 22 Apr 2021 16:45:48 -0600 Subject: [PATCH 094/119] fix merge-error --- physics/module_MYNNPBL_wrapper.F90 | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index c79491d80..4ea29b1f5 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -288,10 +288,7 @@ SUBROUTINE mynnedmf_wrapper_run( & !MYNN-2D real(kind=kind_phys), dimension(im), intent(in) :: & & dx,zorl,slmsk,tsurf,qsfc,ps, & - & hflx,qflx,ust,wspd,rb - - real(kind=kind_phys), dimension(:), intent(in) :: & - & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice,recmol + & hflx,qflx,ust,wspd,rb,recmol real(kind=kind_phys), dimension(im), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & From b35cf894b4573f91afd85ba0c48c1a662b6f26f0 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 22 Apr 2021 16:57:12 -0600 Subject: [PATCH 095/119] Fix formattting in physics/mp_thompson_post.F90 --- physics/mp_thompson_post.F90 | 10 +++++----- physics/ozne_def.meta | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/physics/mp_thompson_post.F90 b/physics/mp_thompson_post.F90 index 36e309387..c53f61b0c 100644 --- a/physics/mp_thompson_post.F90 +++ b/physics/mp_thompson_post.F90 @@ -57,14 +57,14 @@ subroutine mp_thompson_post_run(ncol, nlev, tgrs_save, tgrs, prslk, dtp, ttendli implicit none ! Interface variables - integer, intent(in) :: ncol - integer, intent(in) :: nlev + integer, intent(in) :: ncol + integer, intent(in) :: nlev real(kind_phys), dimension(:,:), intent(in) :: tgrs_save real(kind_phys), dimension(:,:), intent(inout) :: tgrs real(kind_phys), dimension(:,:), intent(in) :: prslk - real(kind_phys), intent(in) :: dtp - real(kind_phys), intent(in) :: ttendlim - integer, intent(in) :: kdt + real(kind_phys), intent(in) :: dtp + real(kind_phys), intent(in) :: ttendlim + integer, intent(in) :: kdt ! MPI information integer, intent(in ) :: mpicomm integer, intent(in ) :: mpirank diff --git a/physics/ozne_def.meta b/physics/ozne_def.meta index 0daf42410..27698eec6 100644 --- a/physics/ozne_def.meta +++ b/physics/ozne_def.meta @@ -26,3 +26,4 @@ dimensions = (vertical_dimension_of_ozone_forcing_data) type = real kind = kind_phys + active = (index_for_ozone>0) From 8c4e01069b476e179d6cce697abd7d30e0465488 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 23 Apr 2021 10:31:25 -0600 Subject: [PATCH 096/119] Change vertical dimension of arrays atmosphere_heat_diffusivity (aka dkt) and atmosphere_momentum_diffusivity (aka dku), update long names --- physics/GFS_PBL_generic.F90 | 3 +-- physics/GFS_PBL_generic.meta | 4 ++-- physics/module_MYJPBL_wrapper.F90 | 2 +- physics/module_MYJPBL_wrapper.meta | 4 ++-- physics/moninedmf.f | 2 +- physics/moninedmf.meta | 8 ++++---- physics/moninshoc.f | 2 +- physics/moninshoc.meta | 4 ++-- physics/satmedmfvdifq.F | 2 +- physics/satmedmfvdifq.meta | 8 ++++---- 10 files changed, 19 insertions(+), 20 deletions(-) diff --git a/physics/GFS_PBL_generic.F90 b/physics/GFS_PBL_generic.F90 index 026e91416..cd13e2721 100644 --- a/physics/GFS_PBL_generic.F90 +++ b/physics/GFS_PBL_generic.F90 @@ -538,8 +538,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, tem = prsl(i,1) / (rd*t1(i)*(one+fvirt*max(q1(i), qmin))) ushfsfci(i) = -cp * tem * hflx(i) ! upward sensible heat flux enddo - ! dkt_cpl has dimensions (1:im,1:levs), but dkt has (1:im,1:levs-1) - dkt_cpl(1:im,1:levs-1) = dkt(1:im,1:levs-1) + dkt_cpl(1:im,1:levs) = dkt(1:im,1:levs) endif diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index 8f4bc90fc..3cf93d54e 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -1327,9 +1327,9 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in diff --git a/physics/module_MYJPBL_wrapper.F90 b/physics/module_MYJPBL_wrapper.F90 index 5924de96f..240dfdc3c 100644 --- a/physics/module_MYJPBL_wrapper.F90 +++ b/physics/module_MYJPBL_wrapper.F90 @@ -111,7 +111,7 @@ SUBROUTINE myjpbl_wrapper_run( & ! dudt, dvdt, dtdt, dkt real(kind=kind_phys),dimension(im,levs),intent(inout) :: & dudt, dvdt, dtdt - real(kind=kind_phys),dimension(im,levs-1),intent(out) :: & + real(kind=kind_phys),dimension(im,levs),intent(out) :: & dkt real(kind=kind_phys),dimension(:,:),intent(inout) :: & du3dt_PBL, dv3dt_PBL, dt3dt_PBL, dq3dt_PBL diff --git a/physics/module_MYJPBL_wrapper.meta b/physics/module_MYJPBL_wrapper.meta index 758dfb77b..877301cc4 100644 --- a/physics/module_MYJPBL_wrapper.meta +++ b/physics/module_MYJPBL_wrapper.meta @@ -535,9 +535,9 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out diff --git a/physics/moninedmf.f b/physics/moninedmf.f index dfd1e7774..1344eab56 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -116,7 +116,7 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & dtsfc(im), dqsfc(im), & & hpbl(im) real(kind=kind_phys), intent(out) :: & - & dkt(im,km-1), dku(im,km-1) + & dkt(im,km), dku(im,km) real(kind=kind_phys), intent(inout) :: & & hgamt(im), hgamq(im) ! diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b94515931..7cda18a5c 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -421,18 +421,18 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out optional = F [dku] standard_name = atmosphere_momentum_diffusivity - long_name = diffusivity for momentum + long_name = atmospheric momentum diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out diff --git a/physics/moninshoc.f b/physics/moninshoc.f index eb9a5d963..2c18887d9 100644 --- a/physics/moninshoc.f +++ b/physics/moninshoc.f @@ -71,7 +71,7 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, real(kind=kind_phys), dimension(im), intent(out) :: dusfc, & dvsfc, dtsfc, dqsfc, hpbl real(kind=kind_phys), dimension(im,km), intent(out) :: prnum - real(kind=kind_phys), dimension(im,km-1), intent(out) :: dkt + real(kind=kind_phys), dimension(im,km), intent(out) :: dkt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/moninshoc.meta b/physics/moninshoc.meta index f550c5b59..5cff902d7 100644 --- a/physics/moninshoc.meta +++ b/physics/moninshoc.meta @@ -362,9 +362,9 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index 062c36b3e..d6de1a065 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -110,7 +110,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & dtsfc(im), dqsfc(im), & & hpbl(im) real(kind=kind_phys), intent(out) :: & - & dkt(im,km-1), dku(im,km-1) + & dkt(im,km), dku(im,km) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 862290cb2..5ea52a5a3 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -533,18 +533,18 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out optional = F [dku] standard_name = atmosphere_momentum_diffusivity - long_name = diffusivity for momentum + long_name = atmospheric momentum diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out From 330f9713343b902d62b7b6b76c9a06f6eba6abe5 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 23 Apr 2021 16:47:14 +0000 Subject: [PATCH 097/119] Added default values in RRTMGP sw gas-optics initialization routine. Avoids error when k-distribution file does not contain these fields. --- physics/rrtmgp_sw_gas_optics.F90 | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index a315e12ae..ca8c597ae 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -12,6 +12,10 @@ module rrtmgp_sw_gas_optics #endif implicit none + real(kind_phys),parameter :: & + tsi_default = 1360.85767381726, & + mg_default = 0.1567652, & + sb_default = 902.7126 ! RRTMGP k-distribution LUTs. type(ty_gas_optics_rrtmgp) :: sw_gas_props @@ -299,11 +303,23 @@ subroutine rrtmgp_sw_gas_optics_init(nCol, nLev, nThreads, rrtmgp_root_dir, status = nf90_inq_varid(ncid, 'absorption_coefficient_ref_T', varID) status = nf90_get_var( ncid, varID, temp_ref_tSW) status = nf90_inq_varid(ncid, 'tsi_default', varID) - status = nf90_get_var( ncid, varID, tsi_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, tsi_defaultSW) + else + tsi_defaultSW = tsi_default + endif status = nf90_inq_varid(ncid, 'mg_default', varID) - status = nf90_get_var( ncid, varID, mg_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, mg_defaultSW) + else + mg_defaultSW = mg_default + endif status = nf90_inq_varid(ncid, 'sb_default', varID) - status = nf90_get_var( ncid, varID, sb_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, sb_defaultSW) + else + sb_defaultSW = sb_default + endif status = nf90_inq_varid(ncid, 'press_ref_trop', varID) status = nf90_get_var( ncid, varID, press_ref_tropSW) status = nf90_inq_varid(ncid, 'kminor_lower', varID) From 0cdc94b8003c43924fc639ea6dd27f5bfe4c8152 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 23 Apr 2021 16:48:57 +0000 Subject: [PATCH 098/119] Some housekeeping in GP-ThompsonMP interface. --- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 40 ++++++++++++++++---------- physics/GFS_rrtmgp_thompsonmp_pre.meta | 8 ------ 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index 325648086..20cb47a5a 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -41,7 +41,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do i_cldliq, i_cldice, i_cldrain, i_cldsnow, i_cldgrpl, i_cldtot, i_cldliq_nc, & i_cldice_nc, i_twa, effr_in, p_lev, p_lay, tv_lay, t_lay, effrin_cldliq, & effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, con_g, con_rd, & - con_eps, lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, imfdeepcnv_gf, & + con_eps, lmfshal, ltaerosol, do_mynnedmf, imfdeepcnv, imfdeepcnv_gf, & doGP_cldoptics_PADE, doGP_cldoptics_LUT, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & cld_rerain, precip_frac, errmsg, errflg) @@ -68,7 +68,6 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do doLWrad, & ! Call LW radiation effr_in, & ! Use cloud effective radii provided by model? lmfshal, & ! Flag for mass-flux shallow convection scheme used by Xu-Randall - lmfdeep2, & ! Flag for some scale-aware mass-flux convection scheme active ltaerosol, & ! Flag for aerosol option do_mynnedmf, & ! Flag to activate MYNN-EDMF doGP_cldoptics_LUT,& ! Flag to do GP cloud-optics (LUTs) @@ -185,30 +184,41 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do re_cloud(iCol,iLay) = MAX(re_qc_min, MIN(re_cloud(iCol,iLay), re_qc_max)) re_ice(iCol,iLay) = MAX(re_qi_min, MIN(re_ice(iCol,iLay), re_qi_max)) re_snow(iCol,iLay) = MAX(re_qs_min, MIN(re_snow(iCol,iLay), re_qs_max)) - end do + enddo enddo ! Scale Thompson's effective radii from meter to micron - effrin_cldliq(1:nCol,1:nLev) = re_cloud(1:nCol,1:nLev)*1.e6 - effrin_cldice(1:nCol,1:nLev) = re_ice(1:nCol,1:nLev)*1.e6 - effrin_cldsnow(1:nCol,1:nLev) = re_snow(1:nCol,1:nLev)*1.e6 + do iLay = 1, nLev + do iCol = 1, nCol + effrin_cldliq(iCol,iLay) = re_cloud(iCol,iLay)*1.e6 + effrin_cldice(iCol,iLay) = re_ice(iCol,iLay)*1.e6 + effrin_cldsnow(iCol,iLay) = re_snow(iCol,iLay)*1.e6 + enddo + enddo ! Bound effective radii for RRTMGP, LUT's for cloud-optics go from ! 2.5 - 21.5 microns for liquid clouds, ! 10 - 180 microns for ice-clouds if (doGP_cldoptics_PADE .or. doGP_cldoptics_LUT) then - where(effrin_cldliq .lt. radliq_lwr) effrin_cldliq = radliq_lwr - where(effrin_cldliq .gt. radliq_upr) effrin_cldliq = radliq_upr - where(effrin_cldice .lt. radice_lwr) effrin_cldice = radice_lwr - where(effrin_cldice .gt. radice_upr) effrin_cldice = radice_upr + do iLay = 1, nLev + do iCol = 1, nCol + if (effrin_cldliq(iCol,iLay) .lt. radliq_lwr) effrin_cldliq(iCol,iLay) = radliq_lwr + if (effrin_cldliq(iCol,iLay) .gt. radliq_upr) effrin_cldliq(iCol,iLay) = radliq_upr + if (effrin_cldice(iCol,iLay) .lt. radice_lwr) effrin_cldice(iCol,iLay) = radice_lwr + if (effrin_cldice(iCol,iLay) .gt. radice_upr) effrin_cldice(iCol,iLay) = radice_upr + enddo + enddo endif ! Update global effective radii arrays. - cld_reliq(1:nCol,1:nLev) = effrin_cldliq(1:nCol,1:nLev) - cld_reice(1:nCol,1:nLev) = effrin_cldice(1:nCol,1:nLev) - cld_resnow(1:nCol,1:nLev) = effrin_cldsnow(1:nCol,1:nLev) - cld_rerain(1:nCol,1:nLev) = rerain_def - + do iLay = 1, nLev + do iCol = 1, nCol + cld_reliq(iCol,iLay) = effrin_cldliq(iCol,iLay) + cld_reice(iCol,iLay) = effrin_cldice(iCol,iLay) + cld_resnow(iCol,iLay) = effrin_cldsnow(iCol,iLay) + cld_rerain(iCol,iLay) = rerain_def + enddo + enddo ! Compute cloud-fraction. Else, use value provided if(.not. do_mynnedmf .and. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv ! Cloud-fraction diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 449a299c9..6eb15a438 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -71,14 +71,6 @@ type = logical intent = in optional = F -[lmfdeep2] - standard_name = flag_for_scale_aware_mass_flux_convection - long_name = flag for some scale-aware mass-flux convection scheme active - units = flag - dimensions = () - type = logical - intent = in - optional = F [ltaerosol] standard_name = flag_for_aerosol_physics long_name = flag for aerosol physics From ff590a72d09b99dcd9c73a2df8004f9bd01fdc31 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 23 Apr 2021 17:21:22 +0000 Subject: [PATCH 099/119] Added call to compute_optimal_angle call before rte_lw(). New field passed into rte_lw(). --- physics/rrtmgp_lw_rte.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index f72308c48..92e5daade 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -75,6 +75,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, logical :: & top_at_1 integer :: iSFC, iTOA + real(kind_phys), dimension(nCol,lw_gas_props%get_ngpt()) :: lw_Ds ! Initialize CCPP error handling variables errmsg = '' @@ -106,13 +107,14 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! Call RTE solver if (doLWclrsky) then + call check_error_msg('rrtmgp_lw_rte_run_opt_angle',lw_gas_props%compute_optimal_angles(lw_optical_props_clrsky,lw_Ds)) call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clrsky, & ! IN - optical-properties top_at_1, & ! IN - veritcal ordering flag sources, & ! IN - source function sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_clrsky, & ! OUT - Fluxes - n_gauss_angles = nGauss_angles)) ! IN - Number of angles in Gaussian quadrature + lw_Ds = lw_Ds)) ! Store fluxes fluxlwUP_clrsky = sum(flux_clrsky%bnd_flux_up,dim=3) From 75cd6ebf5560cd6daa294a92734590f950ae60e3 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 23 Apr 2021 17:31:38 +0000 Subject: [PATCH 100/119] Added ngauss_angles back into rte_lw() clear-sky calculation. --- physics/rrtmgp_lw_rte.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 92e5daade..05e283a13 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -114,6 +114,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sources, & ! IN - source function sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_clrsky, & ! OUT - Fluxes + n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature lw_Ds = lw_Ds)) ! Store fluxes From a91a5cf7308e08076a9ba5aed63b756fbe0e89bc Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Fri, 23 Apr 2021 17:40:45 +0000 Subject: [PATCH 101/119] Updated rte-rrtmgp submodule. --- physics/rte-rrtmgp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/rte-rrtmgp b/physics/rte-rrtmgp index baee74ef1..3be5c3437 160000 --- a/physics/rte-rrtmgp +++ b/physics/rte-rrtmgp @@ -1 +1 @@ -Subproject commit baee74ef1d1c9cac838bf5f8867e7d2721c0ee7a +Subproject commit 3be5c3437da541575a293e74b0049721642a6975 From dd9b7b5fb87dd9bb680b26f225506eac6e92c655 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Tue, 27 Apr 2021 15:49:42 +0000 Subject: [PATCH 102/119] Cleanup from PR. --- physics/dcyc2.f | 6 +++--- physics/rrtmgp_lw_rte.F90 | 25 +++++++++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 4e39112f0..520bcc00b 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -15,10 +15,10 @@ module dcyc2t3 public :: dcyc2t3_init, dcyc2t3_run, dcyc2t3_finalize contains - + subroutine dcyc2t3_init() end subroutine dcyc2t3_init - + subroutine dcyc2t3_finalize() end subroutine dcyc2t3_finalize @@ -322,7 +322,7 @@ subroutine dcyc2t3_run & else !! - adjust \a sfc downward LW flux to account for t changes in the lowest model layer. !! compute 4th power of the ratio of \c tf in the lowest model layer over the mean value \c tsflw. - if (dry(i)) then + if (dry(i)) then tem2 = tsfc_lnd(i) * tsfc_lnd(i) adjsfculw_lnd(i) = sfcemis_lnd(i) * con_sbc * tem2 * tem2 & + (one - sfcemis_lnd(i)) * adjsfcdlw(i) diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 05e283a13..7f486288f 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -108,14 +108,23 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! Call RTE solver if (doLWclrsky) then call check_error_msg('rrtmgp_lw_rte_run_opt_angle',lw_gas_props%compute_optimal_angles(lw_optical_props_clrsky,lw_Ds)) - call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & - lw_optical_props_clrsky, & ! IN - optical-properties - top_at_1, & ! IN - veritcal ordering flag - sources, & ! IN - source function - sfc_emiss_byband, & ! IN - surface emissivity in each LW band - flux_clrsky, & ! OUT - Fluxes - n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - lw_Ds = lw_Ds)) + if (nGauss_angles .gt. 1) then + call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & + lw_optical_props_clrsky, & ! IN - optical-properties + top_at_1, & ! IN - veritcal ordering flag + sources, & ! IN - source function + sfc_emiss_byband, & ! IN - surface emissivity in each LW band + flux_clrsky, & ! OUT - Fluxes + n_gauss_angles = nGauss_angles)) ! IN - Number of angles in Gaussian quadrature + else + call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & + lw_optical_props_clrsky, & ! IN - optical-properties + top_at_1, & ! IN - veritcal ordering flag + sources, & ! IN - source function + sfc_emiss_byband, & ! IN - surface emissivity in each LW band + flux_clrsky, & ! OUT - Fluxes + lw_Ds = lw_Ds)) + endif ! Store fluxes fluxlwUP_clrsky = sum(flux_clrsky%bnd_flux_up,dim=3) From e39824a871638aed7affe9fc881b87a63fa09c52 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Tue, 27 Apr 2021 16:54:45 +0000 Subject: [PATCH 103/119] Removed call to compute_heating_rate. Compute in-line. --- physics/dcyc2.f | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 520bcc00b..566090d25 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -194,8 +194,7 @@ subroutine dcyc2t3_run & & ) ! use machine, only : kind_phys - use physcons, only : con_pi, con_sbc - use mo_heating_rates,only : compute_heating_rate + use physcons, only : con_pi, con_sbc, con_cp, con_g use rrtmgp_aux, only : cmp_tlev implicit none ! @@ -389,8 +388,13 @@ subroutine dcyc2t3_run & ! ! Compute new heating rate (within each layer). ! - errmsg = compute_heating_rate(flxlwup_adj, flux2D_lwDOWN, & - & p_lev, htrlw) + do k = 1, levs + htrlw(1:im,k) = & + & (flxlwup_adj(1:im,k+1) - flxlwup_adj(1:im,k) - & + & flux2D_lwDOWN(1:im,k+1) + flux2D_lwDOWN(1:im,k)) * & + & con_g / (con_cp * (p_lev(1:im,k+1) - p_lev(1:im,k))) + enddo + ! ! Add radiative heating rates to physics heating rate ! From 64b6fae2a7a918f6c7a88ced574d2cb0e776708a Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 28 Apr 2021 14:30:18 +0000 Subject: [PATCH 104/119] Changes from code review --- physics/dcyc2.meta | 2 +- physics/rrtmgp_lw_gas_optics.F90 | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e483c1cb7..fe743c813 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = dcyc2t3 type = scheme - dependencies = machine.F,physcons.F90,rrtmgp_aux.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 + dependencies = machine.F,physcons.F90,rrtmgp_aux.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index 7c455bee8..626031b06 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -497,12 +497,6 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ errflg = 0 if (.not. doLWrad) return - !print*,'lw_optical_props_clrsky%gpt2band: ',lw_optical_props_clrsky%gpt2band - !print*,'lw_optical_props_clrsky%band_lims_wvn: ',lw_optical_props_clrsky%band_lims_wvn - !print*,'lw_optical_props_clrsky%gpt2band: ',lw_optical_props_clrsky%gpt2band - !print*,'sources%gpt2band: ',sources%gpt2band - !print*,'sources%band_lims_wvn: ',sources%band_lims_wvn - !print*,'sources%gpt2band: ',sources%gpt2band ! Copy spectral information into GP DDTs. lw_optical_props_clrsky%band2gpt = lw_gas_props%get_band_lims_gpoint() From d52656bda72647e18ea107edc66d7e3259b063cb Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 28 Apr 2021 15:03:12 +0000 Subject: [PATCH 105/119] Renamed rrtmgp_aux.F90 --- physics/GFS_rrtmgp_cloud_overlap_pre.F90 | 2 +- physics/GFS_rrtmgp_cloud_overlap_pre.meta | 2 +- physics/GFS_rrtmgp_gfdlmp_pre.F90 | 2 +- physics/GFS_rrtmgp_gfdlmp_pre.meta | 2 +- physics/GFS_rrtmgp_lw_post.F90 | 2 +- physics/GFS_rrtmgp_lw_post.meta | 2 +- physics/GFS_rrtmgp_pre.F90 | 2 +- physics/GFS_rrtmgp_pre.meta | 2 +- physics/GFS_rrtmgp_sw_post.F90 | 2 +- physics/GFS_rrtmgp_sw_post.meta | 2 +- physics/GFS_rrtmgp_thompsonmp_pre.F90 | 2 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 2 +- physics/GFS_rrtmgp_zhaocarr_pre.F90 | 2 +- physics/GFS_rrtmgp_zhaocarr_pre.meta | 2 +- physics/dcyc2.f | 2 +- physics/dcyc2.meta | 2 +- physics/{rrtmgp_aux.F90 => radiation_tools.F90} | 7 ++----- physics/rrtmgp_lw_aerosol_optics.F90 | 2 +- physics/rrtmgp_lw_aerosol_optics.meta | 2 +- physics/rrtmgp_lw_cloud_optics.F90 | 2 +- physics/rrtmgp_lw_cloud_optics.meta | 2 +- physics/rrtmgp_lw_cloud_sampling.F90 | 2 +- physics/rrtmgp_lw_cloud_sampling.meta | 2 +- physics/rrtmgp_lw_gas_optics.F90 | 2 +- physics/rrtmgp_lw_gas_optics.meta | 2 +- physics/rrtmgp_lw_rte.F90 | 2 +- physics/rrtmgp_lw_rte.meta | 2 +- physics/rrtmgp_sw_aerosol_optics.F90 | 2 +- physics/rrtmgp_sw_aerosol_optics.meta | 2 +- physics/rrtmgp_sw_cloud_optics.F90 | 2 +- physics/rrtmgp_sw_cloud_optics.meta | 2 +- physics/rrtmgp_sw_cloud_sampling.F90 | 2 +- physics/rrtmgp_sw_cloud_sampling.meta | 2 +- physics/rrtmgp_sw_gas_optics.F90 | 2 +- physics/rrtmgp_sw_gas_optics.meta | 2 +- physics/rrtmgp_sw_rte.F90 | 2 +- physics/rrtmgp_sw_rte.meta | 2 +- 37 files changed, 38 insertions(+), 41 deletions(-) rename physics/{rrtmgp_aux.F90 => radiation_tools.F90} (98%) diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 index 05b8ee79e..031a50b9e 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 @@ -3,7 +3,7 @@ ! ######################################################################################## module GFS_rrtmgp_cloud_overlap_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use module_radiation_cloud_overlap, only: cmp_dcorr_lgth, get_alpha_exp public GFS_rrtmgp_cloud_overlap_pre_init, GFS_rrtmgp_cloud_overlap_pre_run, GFS_rrtmgp_cloud_overlap_pre_finalize diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.meta b/physics/GFS_rrtmgp_cloud_overlap_pre.meta index 273832362..b8e5c9b70 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.meta +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_cloud_overlap_pre type = scheme - dependencies = rrtmgp_aux.F90, radiation_cloud_overlap.F90 + dependencies = radiation_tools.F90, radiation_cloud_overlap.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 index dfb807fde..c6d6673c3 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 +++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 @@ -4,7 +4,7 @@ ! ######################################################################################## module GFS_rrtmgp_gfdlmp_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use module_radiation_cloud_overlap, only: cmp_dcorr_lgth, get_alpha_exp use rrtmgp_lw_cloud_optics, only: radliq_lwr => radliq_lwrLW, radliq_upr => radliq_uprLW,& radice_lwr => radice_lwrLW, radice_upr => radice_uprLW diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.meta b/physics/GFS_rrtmgp_gfdlmp_pre.meta index 19d09cd79..77a6f5d94 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.meta +++ b/physics/GFS_rrtmgp_gfdlmp_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_gfdlmp_pre type = scheme - dependencies = rrtmgp_aux.F90, radiation_cloud_overlap.F90, rrtmgp_lw_cloud_optics.F90 + dependencies = radiation_tools.F90, radiation_cloud_overlap.F90, rrtmgp_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_lw_post.F90 b/physics/GFS_rrtmgp_lw_post.F90 index e2dbd17fa..ff0346fe4 100644 --- a/physics/GFS_rrtmgp_lw_post.F90 +++ b/physics/GFS_rrtmgp_lw_post.F90 @@ -6,7 +6,7 @@ module GFS_rrtmgp_lw_post use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_fluxes_byband, only: ty_fluxes_byband use mo_heating_rates, only: compute_heating_rate - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg implicit none public GFS_rrtmgp_lw_post_init,GFS_rrtmgp_lw_post_run,GFS_rrtmgp_lw_post_finalize diff --git a/physics/GFS_rrtmgp_lw_post.meta b/physics/GFS_rrtmgp_lw_post.meta index 72a82421e..75ff993c2 100644 --- a/physics/GFS_rrtmgp_lw_post.meta +++ b/physics/GFS_rrtmgp_lw_post.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_lw_post type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radlw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90,rrtmgp_aux.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radlw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90,radiation_tools.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 61b5e2e92..88e534595 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -9,7 +9,7 @@ module GFS_rrtmgp_pre getozn ! Routine to setup ozone ! RRTMGP types use mo_gas_concentrations, only: ty_gas_concs - use rrtmgp_aux, only: check_error_msg,cmp_tlev + use radiation_tools, only: check_error_msg,cmp_tlev real(kind_phys), parameter :: & amd = 28.9644_kind_phys, & ! Molecular weight of dry-air (g/mol) diff --git a/physics/GFS_rrtmgp_pre.meta b/physics/GFS_rrtmgp_pre.meta index 698008fd1..8096aef2a 100644 --- a/physics/GFS_rrtmgp_pre.meta +++ b/physics/GFS_rrtmgp_pre.meta @@ -2,7 +2,7 @@ name = GFS_rrtmgp_pre type = scheme dependencies = funcphys.f90,iounitdef.f,machine.F,module_bfmicrophysics.f,physcons.F90,physparam.f,radcons.f90,radiation_aerosols.f - dependencies = radiation_astronomy.f,radiation_clouds.f,module_mp_thompson.F90,radiation_gases.f,radiation_surface.f,rrtmgp_aux.F90,rrtmg_lw_cloud_optics.F90 + dependencies = radiation_astronomy.f,radiation_clouds.f,module_mp_thompson.F90,radiation_gases.f,radiation_surface.f,radiation_tools.F90,rrtmg_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 index 1f195b397..23a681826 100644 --- a/physics/GFS_rrtmgp_sw_post.F90 +++ b/physics/GFS_rrtmgp_sw_post.F90 @@ -5,7 +5,7 @@ module GFS_rrtmgp_sw_post use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_fluxes_byband, only: ty_fluxes_byband use mo_heating_rates, only: compute_heating_rate - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props implicit none diff --git a/physics/GFS_rrtmgp_sw_post.meta b/physics/GFS_rrtmgp_sw_post.meta index eb7f1600d..f0b21493e 100644 --- a/physics/GFS_rrtmgp_sw_post.meta +++ b/physics/GFS_rrtmgp_sw_post.meta @@ -2,7 +2,7 @@ name = GFS_rrtmgp_sw_post type = scheme dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radsw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90,rrtmgp_aux.F90 + dependencies = rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index 20cb47a5a..72884b168 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -5,7 +5,7 @@ module GFS_rrtmgp_thompsonmp_pre use machine, only: & kind_phys - use rrtmgp_aux, only: & + use radiation_tools, only: & check_error_msg use module_mp_thompson, only: & calc_effectRad, Nt_c, & diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 6eb15a438..938430413 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_thompsonmp_pre type = scheme - dependencies = rrtmgp_aux.F90, module_mp_thompson_make_number_concentrations.F90, module_mp_thompson.F90, rrtmgp_lw_cloud_optics.F90 + dependencies = radiation_tools.F90, module_mp_thompson_make_number_concentrations.F90, module_mp_thompson.F90, rrtmgp_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 index 35b404b45..fa1a1bf8c 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 +++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 @@ -4,7 +4,7 @@ ! ######################################################################################## module GFS_rrtmgp_zhaocarr_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use funcphys, only: fpvs use module_radiation_clouds, only: get_alpha_dcorr diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.meta b/physics/GFS_rrtmgp_zhaocarr_pre.meta index 0cc454d2e..576520e61 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.meta +++ b/physics/GFS_rrtmgp_zhaocarr_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_zhaocarr_pre type = scheme - dependencies = rrtmgp_aux.F90 + dependencies = radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/dcyc2.f b/physics/dcyc2.f index 566090d25..04e7e0317 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -195,7 +195,7 @@ subroutine dcyc2t3_run & ! use machine, only : kind_phys use physcons, only : con_pi, con_sbc, con_cp, con_g - use rrtmgp_aux, only : cmp_tlev + use radiation_tools, only : cmp_tlev implicit none ! ! --- constant parameters: diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index fe743c813..76a467f79 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = dcyc2t3 type = scheme - dependencies = machine.F,physcons.F90,rrtmgp_aux.F90 + dependencies = machine.F,physcons.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_aux.F90 b/physics/radiation_tools.F90 similarity index 98% rename from physics/rrtmgp_aux.F90 rename to physics/radiation_tools.F90 index 8dc331d59..c6524aab6 100644 --- a/physics/rrtmgp_aux.F90 +++ b/physics/radiation_tools.F90 @@ -1,4 +1,4 @@ -module rrtmgp_aux +module radiation_tools use machine, only: & kind_phys ! Working type implicit none @@ -94,7 +94,4 @@ subroutine check_error_msg(routine_name, error_msg) end if end subroutine check_error_msg - - - -end module rrtmgp_aux +end module radiation_tools diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index a3f453556..515a38fe3 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -2,7 +2,7 @@ module rrtmgp_lw_aerosol_optics use machine, only: kind_phys use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_1scl - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use rrtmgp_lw_gas_optics, only: lw_gas_props use module_radiation_aerosols, only: & diff --git a/physics/rrtmgp_lw_aerosol_optics.meta b/physics/rrtmgp_lw_aerosol_optics.meta index ff535b4da..ad68fd546 100644 --- a/physics/rrtmgp_lw_aerosol_optics.meta +++ b/physics/rrtmgp_lw_aerosol_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_aerosol_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index 77aff0ecf..7be8f7865 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -5,7 +5,7 @@ module rrtmgp_lw_cloud_optics use mo_optical_props, only: ty_optical_props_1scl, ty_optical_props_2str use mo_rrtmg_lw_cloud_optics, only: rrtmg_lw_cloud_optics use rrtmgp_lw_gas_optics, only: lw_gas_props - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use netcdf #ifdef MPI use mpi diff --git a/physics/rrtmgp_lw_cloud_optics.meta b/physics/rrtmgp_lw_cloud_optics.meta index cb33f83ef..acdb8e8c8 100644 --- a/physics/rrtmgp_lw_cloud_optics.meta +++ b/physics/rrtmgp_lw_cloud_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_cloud_optics type = scheme - dependencies = machine.F,rrtmg_lw_cloud_optics.F90,rrtmgp_aux.F90 + dependencies = machine.F,rrtmg_lw_cloud_optics.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 index 11263243e..0f4459487 100644 --- a/physics/rrtmgp_lw_cloud_sampling.F90 +++ b/physics/rrtmgp_lw_cloud_sampling.F90 @@ -4,7 +4,7 @@ module rrtmgp_lw_cloud_sampling use mo_optical_props, only: ty_optical_props_2str use rrtmgp_sampling, only: sampled_mask, draw_samples use mersenne_twister, only: random_setseed, random_number, random_stat - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_lw_gas_optics, only: lw_gas_props use netcdf diff --git a/physics/rrtmgp_lw_cloud_sampling.meta b/physics/rrtmgp_lw_cloud_sampling.meta index 24d31bec0..aa7ef17f6 100644 --- a/physics/rrtmgp_lw_cloud_sampling.meta +++ b/physics/rrtmgp_lw_cloud_sampling.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_cloud_sampling type = scheme - dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,rrtmgp_aux.F90 + dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index 626031b06..a116ad772 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -5,7 +5,7 @@ module rrtmgp_lw_gas_optics use mo_gas_concentrations, only: ty_gas_concs use mo_source_functions, only: ty_source_func_lw use mo_optical_props, only: ty_optical_props_1scl - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use GFS_rrtmgp_pre, only: active_gases_array use netcdf #ifdef MPI diff --git a/physics/rrtmgp_lw_gas_optics.meta b/physics/rrtmgp_lw_gas_optics.meta index 41ef28469..c92567e14 100644 --- a/physics/rrtmgp_lw_gas_optics.meta +++ b/physics/rrtmgp_lw_gas_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_gas_optics type = scheme - dependencies = machine.F,rrtmgp_aux.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90,rte-rrtmgp/rte/mo_source_functions.F90 + dependencies = machine.F,radiation_tools.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90,rte-rrtmgp/rte/mo_source_functions.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 7f486288f..ea50653ac 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -9,7 +9,7 @@ module rrtmgp_lw_rte use mo_rte_lw, only: rte_lw use mo_fluxes_byband, only: ty_fluxes_byband use mo_source_functions, only: ty_source_func_lw - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_lw_gas_optics, only: lw_gas_props implicit none diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index 2e8a558ab..31554fe60 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_rte type = scheme - dependencies = machine.F,rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,radiation_tools.F90 dependencies = rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 ######################################################################## diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 index af6a4e46e..4cbbae019 100644 --- a/physics/rrtmgp_sw_aerosol_optics.F90 +++ b/physics/rrtmgp_sw_aerosol_optics.F90 @@ -2,7 +2,7 @@ module rrtmgp_sw_aerosol_optics use machine, only: kind_phys use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_2str - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use rrtmgp_lw_gas_optics, only: lw_gas_props use module_radiation_aerosols, only: & diff --git a/physics/rrtmgp_sw_aerosol_optics.meta b/physics/rrtmgp_sw_aerosol_optics.meta index a8405d2a7..f4909c794 100644 --- a/physics/rrtmgp_sw_aerosol_optics.meta +++ b/physics/rrtmgp_sw_aerosol_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_aerosol_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 index 44b5e0510..0ab0c3361 100644 --- a/physics/rrtmgp_sw_cloud_optics.F90 +++ b/physics/rrtmgp_sw_cloud_optics.F90 @@ -5,7 +5,7 @@ module rrtmgp_sw_cloud_optics use mo_optical_props, only: ty_optical_props_2str use mo_rrtmg_sw_cloud_optics, only: rrtmg_sw_cloud_optics use rrtmgp_sw_gas_optics, only: sw_gas_props - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use netcdf #ifdef MPI use mpi diff --git a/physics/rrtmgp_sw_cloud_optics.meta b/physics/rrtmgp_sw_cloud_optics.meta index e50d44bc8..6f3012760 100644 --- a/physics/rrtmgp_sw_cloud_optics.meta +++ b/physics/rrtmgp_sw_cloud_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_cloud_optics type = scheme - dependencies = machine.F,physparam.f,rrtmg_sw_cloud_optics.F90,rrtmgp_aux.F90 + dependencies = machine.F,physparam.f,rrtmg_sw_cloud_optics.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_cloud_sampling.F90 b/physics/rrtmgp_sw_cloud_sampling.F90 index 40a6bf6e0..043949fa5 100644 --- a/physics/rrtmgp_sw_cloud_sampling.F90 +++ b/physics/rrtmgp_sw_cloud_sampling.F90 @@ -4,7 +4,7 @@ module rrtmgp_sw_cloud_sampling use mo_optical_props, only: ty_optical_props_2str use rrtmgp_sampling, only: sampled_mask, draw_samples use mersenne_twister, only: random_setseed, random_number, random_stat - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use netcdf diff --git a/physics/rrtmgp_sw_cloud_sampling.meta b/physics/rrtmgp_sw_cloud_sampling.meta index cda2aaa60..4634648f0 100644 --- a/physics/rrtmgp_sw_cloud_sampling.meta +++ b/physics/rrtmgp_sw_cloud_sampling.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_cloud_sampling type = scheme - dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,rrtmgp_aux.F90 + dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index ca8c597ae..bd0ac1169 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -3,7 +3,7 @@ module rrtmgp_sw_gas_optics use mo_rte_kind, only: wl use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_gas_concentrations, only: ty_gas_concs - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use mo_optical_props, only: ty_optical_props_2str use GFS_rrtmgp_pre, only: active_gases_array use netcdf diff --git a/physics/rrtmgp_sw_gas_optics.meta b/physics/rrtmgp_sw_gas_optics.meta index 9c50cd781..32eeee4a9 100644 --- a/physics/rrtmgp_sw_gas_optics.meta +++ b/physics/rrtmgp_sw_gas_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_gas_optics type = scheme - dependencies = machine.F,rrtmgp_aux.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90 + dependencies = machine.F,radiation_tools.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 index 4ea4c36d8..f28e94b0f 100644 --- a/physics/rrtmgp_sw_rte.F90 +++ b/physics/rrtmgp_sw_rte.F90 @@ -8,7 +8,7 @@ module rrtmgp_sw_rte use mo_gas_concentrations, only: ty_gas_concs use mo_fluxes_byband, only: ty_fluxes_byband use module_radsw_parameters, only: cmpfsw_type - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props implicit none diff --git a/physics/rrtmgp_sw_rte.meta b/physics/rrtmgp_sw_rte.meta index 0558819f1..a84eb373c 100644 --- a/physics/rrtmgp_sw_rte.meta +++ b/physics/rrtmgp_sw_rte.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_rte type = scheme - dependencies = machine.F,radsw_param.f,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,radsw_param.f,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,radiation_tools.F90 dependencies = rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 ######################################################################## From d2a16dc8226a5d86e3d257166d4562228624369b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 28 Apr 2021 09:59:37 -0600 Subject: [PATCH 106/119] Initialize intent(out) atmosphere_heat_diffusivity / atmosphere_momentum_diffusivity --- physics/module_MYJPBL_wrapper.F90 | 12 ++++-------- physics/moninedmf.f | 6 +++++- physics/moninshoc.f | 5 ++++- physics/satmedmfvdifq.F | 6 +++++- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/physics/module_MYJPBL_wrapper.F90 b/physics/module_MYJPBL_wrapper.F90 index 086309897..9e509a29d 100644 --- a/physics/module_MYJPBL_wrapper.F90 +++ b/physics/module_MYJPBL_wrapper.F90 @@ -157,7 +157,6 @@ SUBROUTINE myjpbl_wrapper_run( & & ,rho,qfc1,gdx,xkzm_hx,xkzm_mx,tx1, tx2 ! real(kind=kind_phys), dimension(im,levs,ntrac) :: & ! & qgrs_myj - real(kind=kind_phys),dimension(im,levs) :: dkt2 ! Initialize CCPP error handling variables errmsg = '' @@ -553,12 +552,12 @@ SUBROUTINE myjpbl_wrapper_run( & ! end do end do - dkt2=0. + dkt=0. do k=1,levs k1=levs-k+1 do i=1,im -! dkt2(i,k)=max(xcofh(i,k1),xkzo(i,k)) - dkt2(i,k)=xcofh(i,k1) +! dkt(i,k)=max(xcofh(i,k1),xkzo(i,k)) + dkt(i,k)=xcofh(i,k1) end do end do if(ntke.gt.0)then @@ -662,7 +661,7 @@ SUBROUTINE myjpbl_wrapper_run( & q2(i,k) end do do k=1,levs - print*,'xcofh,el_myj,dkt2=',k,xcofh(i,k),el_myj(i,k),dkt2(i,k) + print*,'xcofh,el_myj,dkt=',k,xcofh(i,k),el_myj(i,k),dkt(i,k) end do end if @@ -805,9 +804,6 @@ SUBROUTINE myjpbl_wrapper_run( & ! print* ! endif - ! External dkt has dimensions (1:im,1:levs-1) - dkt(1:im,1:levs-1) = dkt2(1:im,1:levs-1) - END SUBROUTINE myjpbl_wrapper_run !###================================================================= diff --git a/physics/moninedmf.f b/physics/moninedmf.f index 09f25ef55..2abd2226c 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -381,10 +381,14 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & enddo enddo !> - Initialize diffusion coefficients to 0 and calculate the total radiative heating rate (dku, dkt, radx) - do k = 1,km1 + do k = 1,km do i = 1,im dku(i,k) = 0. dkt(i,k) = 0. + enddo + enddo + do k = 1,km1 + do i = 1,im dktx(i,k) = 0. cku(i,k) = 0. ckt(i,k) = 0. diff --git a/physics/moninshoc.f b/physics/moninshoc.f index eb80c5b93..66022f657 100644 --- a/physics/moninshoc.f +++ b/physics/moninshoc.f @@ -70,7 +70,7 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, real(kind=kind_phys), dimension(:), intent(out) :: dusfc, & dvsfc, dtsfc, dqsfc, hpbl real(kind=kind_phys), dimension(:,:), intent(out) :: prnum - real(kind=kind_phys), dimension(:,:), intent(out) :: dkt + real(kind=kind_phys), dimension(:,:), intent(out) :: dkt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -120,6 +120,9 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, errmsg = '' errflg = 0 ! +! Set intent(out) variables + dkt = zero +! !----------------------------------------------------------------------- ! ! compute preliminary variables diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index b575315cd..106c89377 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -497,10 +497,14 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !> - Initialize diffusion coefficients to 0 and calculate the total !! radiative heating rate (dku, dkt, radx) - do k=1,km1 + do k=1,km do i=1,im dku(i,k) = 0. dkt(i,k) = 0. + enddo + enddo + do k=1,km1 + do i=1,im dkq(i,k) = 0. cku(i,k) = 0. ckt(i,k) = 0. From 033e6b1f7b3735df7686a511ccea43a1b7ef216a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 28 Apr 2021 13:41:46 -0600 Subject: [PATCH 107/119] Fix bug in physics/GFS_MP_generic.F90 from recent merge --- physics/GFS_MP_generic.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index ce828254f..04450b612 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -135,7 +135,7 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv - real(kind=kind_phys), intent(in) :: dt + real(kind=kind_phys), intent(in) :: dtp ! CCPP error handling character(len=*), intent(out) :: errmsg From 6a9de17151f695f1127d93a47e0b3d47db733000 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 28 Apr 2021 14:04:47 -0600 Subject: [PATCH 108/119] Fix bug in scm_sfc_flux_spec.F90 from recent merge --- physics/scm_sfc_flux_spec.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/scm_sfc_flux_spec.F90 b/physics/scm_sfc_flux_spec.F90 index f5267e9c1..398bff5d6 100644 --- a/physics/scm_sfc_flux_spec.F90 +++ b/physics/scm_sfc_flux_spec.F90 @@ -16,10 +16,10 @@ module scm_sfc_flux_spec !******************************************************************************************* !! -!! \section arg_table_gmtb_scm_sfc_flux_spec_init Argument Table -!! \htmlinclude gmtb_scm_sfc_flux_spec_init.html +!! \section arg_table_scm_sfc_flux_spec_init Argument Table +!! \htmlinclude scm_sfc_flux_spec_init.html !! - subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) + subroutine scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) logical, intent(in) :: lheatstrg From f3ef95327d5640535d72c5817ecd08555a4498dd Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 28 Apr 2021 20:41:26 +0000 Subject: [PATCH 109/119] Reverted deprecated code. --- physics/GFS_rad_time_vary.fv3.F90 | 11 +++++------ physics/GFS_rad_time_vary.fv3.meta | 16 ---------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/physics/GFS_rad_time_vary.fv3.F90 b/physics/GFS_rad_time_vary.fv3.F90 index 4c66f28ae..8dd070b12 100644 --- a/physics/GFS_rad_time_vary.fv3.F90 +++ b/physics/GFS_rad_time_vary.fv3.F90 @@ -16,10 +16,9 @@ module GFS_rad_time_vary !! \htmlinclude GFS_rad_time_vary_timestep_init.html !! subroutine GFS_rad_time_vary_timestep_init ( & - lslwr, lsswr, do_RRTMGP, use_LW_jacobian, isubc_lw, isubc_sw, icsdsw, & - icsdlw, cnx, cny, isc, jsc, imap, jmap, sec, kdt, imp_physics, & - imp_physics_zhao_carr, ps_2delt, ps_1delt, t_2delt, t_1delt, qv_2delt, & - qv_1delt, t, qv, ps, errmsg, errflg) + lslwr, lsswr, isubc_lw, isubc_sw, icsdsw, icsdlw, cnx, cny, isc, jsc, & + imap, jmap, sec, kdt, imp_physics, imp_physics_zhao_carr, ps_2delt, & + ps_1delt, t_2delt, t_1delt, qv_2delt, qv_1delt, t, qv, ps, errmsg, errflg) use physparam, only: ipsd0, ipsdlim, iaerflg use mersenne_twister, only: random_setseed, random_index, random_stat @@ -31,7 +30,7 @@ subroutine GFS_rad_time_vary_timestep_init ( ! Interface variables integer, intent(in) :: isubc_lw, isubc_sw, cnx, cny, isc, jsc, kdt integer, intent(in) :: imp_physics, imp_physics_zhao_carr - logical, intent(in) :: lslwr, lsswr, do_RRTMGP, use_LW_jacobian + logical, intent(in) :: lslwr, lsswr integer, intent(inout) :: icsdsw(:), icsdlw(:) integer, intent(in) :: imap(:), jmap(:) real(kind_phys), intent(in) :: sec @@ -74,7 +73,7 @@ subroutine GFS_rad_time_vary_timestep_init ( endif ! isubc_lw and isubc_sw - if (imp_physics == imp_physics_zhao_carr .or. (do_RRTMGP .and. use_LW_jacobian)) then + if (imp_physics == imp_physics_zhao_carr) then if (kdt == 1) then t_2delt = t t_1delt = t diff --git a/physics/GFS_rad_time_vary.fv3.meta b/physics/GFS_rad_time_vary.fv3.meta index efed2c114..ffe33810c 100644 --- a/physics/GFS_rad_time_vary.fv3.meta +++ b/physics/GFS_rad_time_vary.fv3.meta @@ -23,22 +23,6 @@ type = logical intent = in optional = F -[do_RRTMGP] - standard_name = flag_for_rrtmgp_radiation_scheme - long_name = flag for RRTMGP scheme - units = flag - dimensions = () - type = logical - intent = in - optional = F -[use_LW_jacobian] - standard_name = flag_to_calc_RRTMGP_LW_jacobian - long_name = logical flag to control RRTMGP LW calculation - units = flag - dimensions = () - type = logical - intent = in - optional = F [isubc_lw] standard_name = flag_for_lw_clouds_sub_grid_approximation long_name = flag for lw clouds sub-grid approximation From 2ff5d1c13ba83ffc8e5cebeca3da49b57834bce4 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 29 Apr 2021 10:52:26 -0600 Subject: [PATCH 110/119] Update CMakeLists.txt so that local compiler flag modifications also work when symlinks are in the path --- CMakeLists.txt | 194 ++++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 106 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 923c373e7..e5c756d15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,109 +108,91 @@ set(SCHEMES_SFX_PREC "") # Create a duplicate of the SCHEMES list for handling floating point precision flags set(SCHEMES2 ${SCHEMES}) +# Schemes and caps from the CCPP code generator use full paths with symlinks +# resolved, we need to do the same here for the below logic to work +get_filename_component(FULL_PATH_TO_CMAKELISTS CMakeLists.txt REALPATH BASE_DIR ${LOCAL_CURRENT_SOURCE_DIR}) +get_filename_component(LOCAL_CURRENT_SOURCE_DIR ${FULL_PATH_TO_CMAKELISTS} DIRECTORY) + # List of files that need to be compiled without OpenMP -set(SCHEMES_OPENMP_OFF ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_constants.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_reorder.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels-openacc/mo_gas_optics_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_string.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_rrtmgp_util_reorder_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/mo_testing_io.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/clear_sky_regression.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_rrtmgp_clr_all_sky.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/solar_variability/mo_solar_variability.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_heating_rates.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_bygpoint.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_compute_bc.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_sampling.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_load_coefficients.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_sw.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/mo_rfmip_io.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_lw.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_simple_netcdf.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/rrtmgp_allsky.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_load_cloud_coefficients.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_garand_atmos_io.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_config.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_source_functions.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_sw.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_fluxes.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_lw.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_rte_solver_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_optical_props_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_util_array.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_optical_props_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_kind.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_optical_props.F90) +set(SCHEMES_OPENMP_OFF ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_constants.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_reorder.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels-openacc/mo_gas_optics_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_string.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_rrtmgp_util_reorder_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/mo_testing_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/clear_sky_regression.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_rrtmgp_clr_all_sky.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/solar_variability/mo_solar_variability.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_heating_rates.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_bygpoint.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_compute_bc.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_sampling.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_load_coefficients.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_sw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/mo_rfmip_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_lw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_simple_netcdf.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/rrtmgp_allsky.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_load_cloud_coefficients.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_garand_atmos_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_config.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_source_functions.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_sw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_fluxes.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_lw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_rte_solver_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_optical_props_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_util_array.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_optical_props_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_kind.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_optical_props.F90) #------------------------------------------------------------------------------ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fno-range-check") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - #SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - # ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - # PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sflx.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diff.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diag.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/wv_saturation.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8 ${OpenMP_Fortran_FLAGS}") if (PROJECT STREQUAL "CCPP-FV3") # Set 32-bit floating point precision flags for certain files # that are executed in the dynamics (fast physics part) if (DYN32) - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) # Reduce floating point precision from 64-bit to 32-bit, if necessary set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) string(REPLACE "-fdefault-real-8" "" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") string(REPLACE "-fdefault-double-8" "" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 + SET_PROPERTY(SOURCE ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) + list(APPEND SCHEMES_SFX_PREC ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() @@ -241,14 +223,14 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") # Adjust settings for bit-for-bit reproducibility of NEMSfv3gfs if (PROJECT STREQUAL "CCPP-FV3") - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 IN_LIST SCHEMES) # Reduce optimization for module_sf_mynn.F90 (to avoid an apparent compiler bug with Intel 18 on Hera) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS_OPT} -O1") - list(APPEND SCHEMES_SFX_OPT ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90) + list(APPEND SCHEMES_SFX_OPT ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90) endif() - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f IN_LIST SCHEMES) # Replace -xHost or -xCORE-AVX2 with -xCORE-AVX-I for certain files set(CMAKE_Fortran_FLAGS_LOPT1 ${CMAKE_Fortran_FLAGS_OPT}) string(REPLACE "-xHOST" "-xCORE-AVX-I" @@ -260,10 +242,10 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") string(REPLACE "-axSSE4.2,CORE-AVX2" "-axSSE4.2,CORE-AVX-I" CMAKE_Fortran_FLAGS_LOPT1 "${CMAKE_Fortran_FLAGS_LOPT1}") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS_LOPT1}") # Add all of the above files to the list of schemes with special compiler flags - list(APPEND SCHEMES_SFX_OPT ${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f) + list(APPEND SCHEMES_SFX_OPT ${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f) endif() # Remove files with special compiler flags from list of files with standard compiler flags @@ -277,15 +259,15 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") # Set 32-bit floating point precision flags for certain files # that are executed in the dynamics (fast physics part) if (DYN32) - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) # Reduce floating point precision from 64-bit to 32-bit, if necessary set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) string(REPLACE "-real-size 64" "-real-size 32" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 + SET_PROPERTY(SOURCE ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) + list(APPEND SCHEMES_SFX_PREC ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() @@ -309,27 +291,27 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ${OpenMP_Fortran_FLAGS} ") else (PROJECT STREQUAL "CCPP-FV3") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sflx.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diff.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diag.f PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 PROPERTIES COMPILE_FLAGS "-r8 -free ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f PROPERTIES COMPILE_FLAGS "-r8 -ftz ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/wv_saturation.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") endif (PROJECT STREQUAL "CCPP-FV3") From 1cc81113f75da05660ee2e23258233ad4f25d411 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 29 Apr 2021 13:15:23 -0600 Subject: [PATCH 111/119] update GFS_phys_time_vary.scm.F90 to match FV3 changes --- physics/GFS_phys_time_vary.scm.F90 | 72 +++++++++++++++++++---------- physics/GFS_phys_time_vary.scm.meta | 8 ++++ 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/physics/GFS_phys_time_vary.scm.F90 b/physics/GFS_phys_time_vary.scm.F90 index fb46de2bd..9fa4e2de3 100644 --- a/physics/GFS_phys_time_vary.scm.F90 +++ b/physics/GFS_phys_time_vary.scm.F90 @@ -18,7 +18,7 @@ module GFS_phys_time_vary use h2ointerp, only : read_h2odata, setindxh2o, h2ointerpol use aerclm_def, only : aerin, aer_pres, ntrcaer, ntrcaerm - use aerinterp, only : read_aerdata, setindxaer, aerinterpol + use aerinterp, only : read_aerdata, setindxaer, aerinterpol, read_aerdataf use iccn_def, only : ciplin, ccnin, ci_pres use iccninterp, only : read_cidata, setindxci, ciinterpol @@ -160,7 +160,7 @@ subroutine GFS_phys_time_vary_init ( integer, intent(out) :: errflg ! Local variables - integer :: i, j, ix, vegtyp + integer :: i, j, ix, vegtyp, iamin, iamax, jamin, jamax real(kind_phys) :: rsnow !--- Noah MP @@ -176,7 +176,11 @@ subroutine GFS_phys_time_vary_init ( errflg = 0 if (is_initialized) return - + iamin=999 + iamax=-999 + jamin=999 + jamax=-999 + !> - Call read_o3data() to read ozone data call read_o3data (ntoz, me, master) @@ -270,6 +274,10 @@ subroutine GFS_phys_time_vary_init ( jindx2_aer, ddy_aer, xlon_d, & iindx1_aer, iindx2_aer, ddx_aer, & me, master) + iamin=min(minval(iindx1_aer), iamin) + iamax=max(maxval(iindx2_aer), iamax) + jamin=min(minval(jindx1_aer), jamin) + jamax=max(maxval(jindx2_aer), jamax) endif !> - Call setindxci() to initialize IN and CCN data @@ -322,6 +330,14 @@ subroutine GFS_phys_time_vary_init ( sncovr_ice(:) = sncovr(:) endif endif + + if (errflg/=0) return + + if (iaerclm) then + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) + if (errflg/=0) return + end if if (lsm == lsm_noahmp) then if (all(tvxy <= zero)) then @@ -371,16 +387,20 @@ subroutine GFS_phys_time_vary_init ( tsnoxy (:,:) = missing_value smoiseq(:,:) = missing_value zsnsoxy(:,:) = missing_value - + + imn = idate(2) + do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) tgxy(ix) = tsfcl(ix) tahxy(ix) = tsfcl(ix) - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tvxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tgxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tahxy(ix) = con_t0c + if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then + tvxy(ix) = con_t0c + tgxy(ix) = con_t0c + tahxy(ix) = con_t0c + end if canicexy(ix) = 0.0_kind_phys canliqxy(ix) = canopy(ix) @@ -404,14 +424,12 @@ subroutine GFS_phys_time_vary_init ( albinir(ix) = 0.2_kind_phys emiss(ix) = 0.95_kind_phys - waxy(ix) = 4900.0_kind_phys wtxy(ix) = waxy(ix) zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys vegtyp = vtype(ix) if (vegtyp == 0) vegtyp = 7 - imn = idate(2) if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then @@ -491,9 +509,8 @@ subroutine GFS_phys_time_vary_init ( dzsno(-1) = 0.20_kind_phys dzsno(0) = snd - 0.05_kind_phys - 0.20_kind_phys else - errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' + errmsg = 'Error in GFS_phys_time_vary.scm.F90: Problem with the logic assigning snow layers in Noah MP initialization' errflg = 1 - return endif ! Now we have the snowxy field @@ -570,6 +587,8 @@ subroutine GFS_phys_time_vary_init ( enddo ! ix + if (errflg/=0) return + deallocate(dzsno) deallocate(dzsnso) @@ -619,7 +638,7 @@ subroutine GFS_phys_time_vary_timestep_init ( jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, & jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, & imap, jmap, prsl, seed0, rann, do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau,& - tau_amf, errmsg, errflg) + tau_amf, nthrds, errmsg, errflg) implicit none @@ -648,6 +667,7 @@ subroutine GFS_phys_time_vary_timestep_init ( integer, intent(in) :: jindx1_tau(:), jindx2_tau(:) real(kind_phys), intent(in) :: ddy_j1tau(:), ddy_j2tau(:) real(kind_phys), intent(inout) :: tau_amf(:) + integer, intent(in) :: nthrds character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -724,21 +744,12 @@ subroutine GFS_phys_time_vary_timestep_init ( h2opl, ddy_h) endif -!> - Call aerinterpol() to make aerosol interpolation - if (iaerclm) then - call aerinterpol (me, master, im, idate, fhour, & - jindx1_aer, jindx2_aer, & - ddy_aer, iindx1_aer, & - iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) - endif - !> - Call ciinterpol() to make IN and CCN data interpolation if (iccn == 1) then - call ciinterpol (me, im, idate, fhour, & - jindx1_ci, jindx2_ci, & - ddy_ci, iindx1_ci, & - iindx2_ci, ddx_ci, & + call ciinterpol (me, im, idate, fhour, & + jindx1_ci, jindx2_ci, & + ddy_ci, iindx1_ci, & + iindx2_ci, ddx_ci, & levs, prsl, in_nm, ccn_nm) endif @@ -749,6 +760,17 @@ subroutine GFS_phys_time_vary_timestep_init ( ddy_j1tau, ddy_j2tau, tau_amf) endif +!> - Call aerinterpol() to make aerosol interpolation + if (iaerclm) then + ! aerinterpol is using threading inside, don't + ! move into OpenMP parallel section above + call aerinterpol (me, master, nthrds, im, idate, & + fhour, jindx1_aer, jindx2_aer,& + ddy_aer, iindx1_aer, & + iindx2_aer, ddx_aer, & + levs, prsl, aer_nm) + endif + ! Not needed for SCM: !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs !if (nscyc > 0) then diff --git a/physics/GFS_phys_time_vary.scm.meta b/physics/GFS_phys_time_vary.scm.meta index 1edaa32c8..74408d533 100644 --- a/physics/GFS_phys_time_vary.scm.meta +++ b/physics/GFS_phys_time_vary.scm.meta @@ -1462,6 +1462,14 @@ kind = kind_phys intent = inout optional = F +[nthrds] + standard_name = omp_threads + long_name = number of OpenMP threads available for physics schemes + units = count + dimensions = () + type = integer + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 41d34d07c0659e909ab6c177e39eeed325fc2ae0 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 29 Apr 2021 17:54:20 -0600 Subject: [PATCH 112/119] Bugfix in physics/m_micro.F90: correct calculation of flipped vertical index --- physics/m_micro.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 index 4a6baf287..7624d7e3e 100644 --- a/physics/m_micro.F90 +++ b/physics/m_micro.F90 @@ -442,7 +442,7 @@ subroutine m_micro_run( im, lm, flipv, dt_i & END DO END DO DO K=0, LM - ll = lm-k + ll = lm-k+1 DO I = 1,IM PLE(i,k) = prsi_i(i,ll) * 0.01_kp ! interface pressure in hPa zet(i,k+1) = phii(i,ll) * onebg From 1ed27c125a5113fbf15095175701d6850101dba9 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 29 Apr 2021 18:17:49 -0600 Subject: [PATCH 113/119] Fix metadata --- physics/dcyc2.f | 4 +- physics/dcyc2.meta | 173 ++++++++++++++++++++------------------------- 2 files changed, 80 insertions(+), 97 deletions(-) diff --git a/physics/dcyc2.f b/physics/dcyc2.f index f2ea43e5b..ad9365851 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -172,14 +172,14 @@ end subroutine dcyc2t3_finalize subroutine dcyc2t3_run & ! --- inputs: & ( solhr,slag,sdec,cdec,sinlat,coslat, & - & xlon,coszen,tsfc_lnd,tsfc_ice,tsfc_wat,tf,tsflw, & + & xlon,coszen,tsfc_lnd,tsfc_ice,tsfc_wat,tf,tsflw,tsfc, & & sfcemis_lnd, sfcemis_ice, sfcemis_wat, & & sfcdsw,sfcnsw,sfcdlw,swh,swhc,hlw,hlwc, & & sfcnirbmu,sfcnirdfu,sfcvisbmu,sfcvisdfu, & & sfcnirbmd,sfcnirdfd,sfcvisbmd,sfcvisdfd, & & im, levs, deltim, fhswr, & & dry, icy, wet, & - & minGPpres, tsfc, use_LW_jacobian, sfculw, fluxlwUP_jac, & + & minGPpres, use_LW_jacobian, sfculw, fluxlwUP_jac, & & t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, flux2D_lwDOWN, & & pert_radtend, do_sppt,ca_global, & ! & dry, icy, wet, lprnt, ipr, & diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index aad0a3127..a460db7ab 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -353,6 +353,15 @@ type = logical intent = in optional = F +[minGPpres] + standard_name = minimum_pressure_in_RRTMGP + long_name = minimum pressure allowed in RRTMGP + units = Pa + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [use_LW_jacobian] standard_name = flag_to_calc_RRTMGP_LW_jacobian long_name = logical flag to control RRTMGP LW calculation @@ -360,7 +369,7 @@ dimensions = () type = logical intent = in - optional = F + optional = F [sfculw] standard_name = surface_upwelling_longwave_flux_on_radiation_time_step long_name = total sky sfc upward lw flux @@ -370,15 +379,69 @@ kind = kind_phys intent = in optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface +[fluxlwUP_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward + long_name = RRTMGP Jacobian upward longwave flux profile units = W m-2 K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[t_lay] + standard_name = air_temperature_updated_by_physics + long_name = model layer mean temperature updated by physics + units = K + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[t_lev] + standard_name = air_temperature_at_interface_for_RRTMGP + long_name = air temperature at vertical interface for radiation calculation + units = K + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[p_lay] + standard_name = air_pressure + long_name = mean layer pressure + units = Pa + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F +[p_lev] + standard_name = air_pressure_at_interface + long_name = air pressure at model layer interfaces + units = Pa + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwUP] + standard_name = RRTMGP_lw_flux_profile_upward_allsky + long_name = RRTMGP upward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwDOWN] + standard_name = RRTMGP_lw_flux_profile_downward_allsky + long_name = RRTMGP downward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F [pert_radtend] standard_name = flag_for_stochastic_radiative_heating_perturbations long_name = flag for stochastic radiative heating perturbations @@ -421,6 +484,15 @@ kind = kind_phys intent = inout optional = F +[htrlw] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [adjsfcdsw] standard_name = surface_downwelling_shortwave_flux long_name = surface downwelling shortwave flux at current time @@ -574,95 +646,6 @@ kind = kind_phys intent = out optional = F -[minGPpres] - standard_name = minimum_pressure_in_RRTMGP - long_name = minimum pressure allowed in RRTMGP - units = Pa - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F -[use_LW_jacobian] - standard_name = flag_to_calc_RRTMGP_LW_jacobian - long_name = logical flag to control RRTMGP LW calculation - units = flag - dimensions = () - type = logical - intent = in - optional = F -[fluxlwUP_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward - long_name = RRTMGP Jacobian upward longwave flux profile - units = W m-2 K-1 - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[htrlw] - standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step - long_name = total sky longwave heating rate on physics time step - units = K s-1 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = out - optional = F -[t_lev] - standard_name = air_temperature_at_interface_for_RRTMGP - long_name = air temperature at vertical interface for radiation calculation - units = K - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[t_lay] - standard_name = air_temperature_updated_by_physics - long_name = model layer mean temperature updated by physics - units = K - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[p_lay] - standard_name = air_pressure - long_name = mean layer pressure - units = Pa - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[p_lev] - standard_name = air_pressure_at_interface - long_name = air pressure at model layer interfaces - units = Pa - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[flux2D_lwUP] - standard_name = RRTMGP_lw_flux_profile_upward_allsky - long_name = RRTMGP upward longwave all-sky flux profile - units = W m-2 - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[flux2D_lwDOWN] - standard_name = RRTMGP_lw_flux_profile_downward_allsky - long_name = RRTMGP downward longwave all-sky flux profile - units = W m-2 - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 0ab9cd9bdb637661b94b5ff75009e5252d6d2fba Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Mon, 3 May 2021 14:32:44 -0600 Subject: [PATCH 114/119] Add templates for pull requests and issues. --- .github/ISSUE_TEMPLATE/bug_report.md | 33 +++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 21 ++++++++++++ .../pull_request_template.md | 15 +++++++++ 3 files changed, 69 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..4f9092ff9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +# Description + +Provide a clear and concise description of the bug and what behavior you are expecting. + +## Steps to Reproduce + +Please provide detailed steps for reproducing the issue. + +1. step 1 +2. step 2 +3. see the bug... + +## Additional Context + +Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. + +* Machine +* Compiler +* Suite Definition File or Scheme +* Reference other issues or PRs in other repositories that this is related to, and how they are related. + +## Output + +Please include any relevant log files, screenshots or other output here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..d8617ae2f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ + +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +## Description +Provide a clear and concise description of the problem to be solved. + +## Solution +Add a clear and concise description of the proposed solution. + +## Alternatives (optional) +If applicable, add a description of any alternative solutions or features you've considered. + +## Related to (optional) +Directly reference any issues or PRs in this or other repositories that this is related to, and describe how they are related. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 000000000..47bfac6ba --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,15 @@ +## Description of Changes: +One or more paragraphs describing the problem, solution, and required changes. + +## Tests Conducted: +Explicitly state what tests were run on these changes, or if any are still pending (for README or other text-only changes, just put "None required". Make note of the compilers used, the platform/machine, and other relevant details as necessary. For more complicated changes, or those resulting in scientific changes, please be explicit! + +## Documentation: +Does this PR add new capabilities that need to be documented or require modifications to the existing documentation? If so, brief supporting material can be provided here. Contact the CODEOWNERS if your PR requires extensive updates to the documentation. See https://github.com/NCAR/ccpp-doc for Technical Documentation or https://dtcenter.org/community-code/common-community-physics-package-ccpp/documentation for the latest Scientific Documentation. + +## Issue (optional): +If this PR is resolving or referencing one or more issues, in this repository or elewhere, list them here. For example, "Fixes issue mentioned in #123" or "Related to bug in https://github.com/NCAR/other_repository/pull/63" + +## Contributors (optional): +If others have contributed to this work aside from the PR author, list them here + From fdb29b4e8ed66fb3bb0b1ce93dd8ffb141aaec54 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Mon, 3 May 2021 14:37:07 -0600 Subject: [PATCH 115/119] Fix table format. --- .github/ISSUE_TEMPLATE/feature_request.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index d8617ae2f..c5f7619d8 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,4 +1,3 @@ - --- name: Feature request about: Suggest an idea for this project From adf39b8b0f5921f65b60acbe32a30b94b3d0c4fb Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 7 May 2021 10:32:55 -0600 Subject: [PATCH 116/119] change variable to assumed-shape since it is conditionally allocated to avoid seg faults with GNU/release in SCM --- physics/GFS_suite_interstitial.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index fab26b494..5554f9393 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -178,7 +178,8 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_ real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, work1, work2 real(kind=kind_phys), intent(in ), dimension(:) :: ulwsfc_cice real(kind=kind_phys), intent(in ), dimension(im) :: cice - real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, htrlwu, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(:,:) :: htrlwu real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd integer, intent(inout), dimension(im) :: kinver From 75c2c622dd388e3ec150976314d955364d6977d2 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Mon, 10 May 2021 09:37:17 -0600 Subject: [PATCH 117/119] Modify content to allow developers to add links to PRs for testing and dependencies. --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index 47bfac6ba..ed9ebb0f0 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -2,7 +2,13 @@ One or more paragraphs describing the problem, solution, and required changes. ## Tests Conducted: -Explicitly state what tests were run on these changes, or if any are still pending (for README or other text-only changes, just put "None required". Make note of the compilers used, the platform/machine, and other relevant details as necessary. For more complicated changes, or those resulting in scientific changes, please be explicit! +Add any links to tests conducted. For example, "See ufs-community/ufs-weather-model/pull/" + +## Dependencies: +Add any links to parent PRs. For example: +- NCAR/ccpp-framework/pull/ +- NOAA-EMC/fv3atm/pull/ +- ufs-community/ufs-weather-model/pull/ ## Documentation: Does this PR add new capabilities that need to be documented or require modifications to the existing documentation? If so, brief supporting material can be provided here. Contact the CODEOWNERS if your PR requires extensive updates to the documentation. See https://github.com/NCAR/ccpp-doc for Technical Documentation or https://dtcenter.org/community-code/common-community-physics-package-ccpp/documentation for the latest Scientific Documentation. From 7e0e2a09c114acbd282494001a859fa47487b588 Mon Sep 17 00:00:00 2001 From: Julie Schramm Date: Mon, 10 May 2021 11:16:12 -0600 Subject: [PATCH 118/119] Address Dom's comments, hopefully. --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index ed9ebb0f0..5968702e5 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -2,10 +2,11 @@ One or more paragraphs describing the problem, solution, and required changes. ## Tests Conducted: -Add any links to tests conducted. For example, "See ufs-community/ufs-weather-model/pull/" +Explicitly state what tests were run on these changes, or if any are still pending (for README or other text-only changes, just put "None required". Make note of the compilers used, the platform/machine, and other relevant details as necessary. For more complicated changes, or those resulting in scientific changes, please be explicit! +**OR** Add any links to tests conducted. For example, "See ufs-community/ufs-weather-model/pull/" ## Dependencies: -Add any links to parent PRs. For example: +Add any links to parent PRs (e.g. SCM and/or UFS PRs) or submodules (e.g. rte-rrtmgp). For example: - NCAR/ccpp-framework/pull/ - NOAA-EMC/fv3atm/pull/ - ufs-community/ufs-weather-model/pull/ From 3c168472c1ff96aa7026145eb3b07e9e7589fe71 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 10 May 2021 13:33:51 -0600 Subject: [PATCH 119/119] change all arrays to assumed-shape in GFS_suite_interstitial.F90 (plus argument style changes) --- physics/GFS_suite_interstitial.F90 | 205 ++++++++++++++--------------- 1 file changed, 102 insertions(+), 103 deletions(-) diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index 5554f9393..962959327 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -59,9 +59,9 @@ subroutine GFS_suite_interstitial_phys_reset_run (Interstitial, Model, errmsg, e ! interface variables type(GFS_interstitial_type), intent(inout) :: Interstitial - type(GFS_control_type), intent(in) :: Model - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + type(GFS_control_type), intent(in ) :: Model + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg errmsg = '' errflg = 0 @@ -94,19 +94,20 @@ subroutine GFS_suite_interstitial_1_run (im, levs, ntrac, dtf, dtp, slmsk, area, implicit none ! interface variables - integer, intent(in) :: im, levs, ntrac - real(kind=kind_phys), intent(in) :: dtf, dtp, dxmin, dxinv - real(kind=kind_phys), intent(in), dimension(im) :: slmsk, area, pgr - - integer, intent(out), dimension(im) :: islmsk - real(kind=kind_phys), intent(out), dimension(im) :: work1, work2, psurf - real(kind=kind_phys), intent(out), dimension(im,levs) :: dudt, dvdt, dtdt - real(kind=kind_phys), intent(out), dimension(im,levs,ntrac) :: dqdt - real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + integer, intent(in ) :: im, levs, ntrac + real(kind=kind_phys), intent(in ) :: dtf, dtp, dxmin, dxinv + real(kind=kind_phys), intent(in ), dimension(:) :: slmsk, area, pgr + + integer, intent(out), dimension(:) :: islmsk + real(kind=kind_phys), intent(out), dimension(:) :: work1, work2, psurf + real(kind=kind_phys), intent(out), dimension(:,:) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(out), dimension(:,:,:) :: dqdt + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! local variables + real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys integer :: i, k, n ! Initialize CCPP error handling variables @@ -168,34 +169,33 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_ implicit none ! interface variables - integer, intent(in ) :: im, levs, imfshalcnv - logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv - logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian - real(kind=kind_phys), intent(in ) :: dtf, cp, hvap - - logical, intent(in ), dimension(im) :: flag_cice - real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm - real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, work1, work2 - real(kind=kind_phys), intent(in ), dimension(:) :: ulwsfc_cice - real(kind=kind_phys), intent(in ), dimension(im) :: cice - real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk - real(kind=kind_phys), intent(in ), dimension(:,:) :: htrlwu - real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi - real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd - integer, intent(inout), dimension(im) :: kinver - real(kind=kind_phys), intent(inout), dimension(im) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r - real(kind=kind_phys), intent(in ), dimension(im) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat - real(kind=kind_phys), intent(inout), dimension(im) :: adjsfculw + integer, intent(in ) :: im, levs, imfshalcnv + logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv + logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian + real(kind=kind_phys), intent(in ) :: dtf, cp, hvap + + logical, intent(in ), dimension(:) :: flag_cice + real(kind=kind_phys), intent(in ), dimension(:) :: ctei_rm + real(kind=kind_phys), intent(in ), dimension(:) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, work1, work2 + real(kind=kind_phys), intent(in ), dimension(:) :: ulwsfc_cice + real(kind=kind_phys), intent(in ), dimension(:) :: cice + real(kind=kind_phys), intent(in ), dimension(:,:) :: htrsw, htrlw, htrlwu, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsi + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: lwhd + integer, intent(inout), dimension(:) :: kinver + real(kind=kind_phys), intent(inout), dimension(:) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r + real(kind=kind_phys), intent(in ), dimension(:) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat + real(kind=kind_phys), intent(inout), dimension(:) :: adjsfculw ! These arrays are only allocated if ldiag3d is .true. - real(kind=kind_phys), intent(inout), dimension(:,:) :: dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp + real(kind=kind_phys), intent(inout), dimension(:,:) :: dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp - logical, intent(in ), dimension(im) :: dry, icy, wet - real(kind=kind_phys), intent(in ), dimension(im) :: frland - real(kind=kind_phys), intent(in ) :: huge + logical, intent(in ), dimension(:) :: dry, icy, wet + real(kind=kind_phys), intent(in ), dimension(:) :: frland + real(kind=kind_phys), intent(in ) :: huge - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables real(kind=kind_phys), parameter :: czmin = 0.0001_kind_phys ! cos(89.994) @@ -378,16 +378,16 @@ subroutine GFS_suite_stateout_reset_run (im, levs, ntrac, & implicit none ! interface variables - integer, intent(in) :: im - integer, intent(in) :: levs - integer, intent(in) :: ntrac - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 + integer, intent(in ) :: im + integer, intent(in ) :: levs + integer, intent(in ) :: ntrac + real(kind=kind_phys), intent(in ), dimension(:,:) :: tgrs, ugrs, vgrs + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: qgrs + real(kind=kind_phys), intent(out), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(out), dimension(:,:,:) :: gq0 - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! Initialize CCPP error handling variables errmsg = '' @@ -426,22 +426,22 @@ subroutine GFS_suite_stateout_update_run (im, levs, ntrac, dtp, & implicit none ! Interface variables - integer, intent(in) :: im - integer, intent(in) :: levs - integer, intent(in) :: ntrac - integer, intent(in) :: imp_physics,imp_physics_fer_hires - integer, intent(in) :: ntiw, nqrimef - real(kind=kind_phys), intent(in) :: dtp, epsq - - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(in) :: dudt, dvdt, dtdt - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: dqdt - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + integer, intent(in ) :: im + integer, intent(in ) :: levs + integer, intent(in ) :: ntrac + integer, intent(in ) :: imp_physics,imp_physics_fer_hires + integer, intent(in ) :: ntiw, nqrimef + real(kind=kind_phys), intent(in ) :: dtp, epsq + + real(kind=kind_phys), intent(in ), dimension(:,:) :: tgrs, ugrs, vgrs + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: qgrs + real(kind=kind_phys), intent(in ), dimension(:,:) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: dqdt + real(kind=kind_phys), intent(out), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(out), dimension(:,:,:) :: gq0 + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg integer :: i, k ! Initialize CCPP error handling variables @@ -499,28 +499,28 @@ subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & implicit none ! interface variables - integer, intent(in) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, & - ntsw, ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & + integer, intent(in ) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, ntsw,& + ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6,imp_physics_fer_hires, me - integer, dimension(im), intent(in) :: islmsk, kpbl, kinver - logical, intent(in) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras - - real(kind=kind_phys), intent(in) :: rhcbot, rhcmax, rhcpbl, rhctop - real(kind=kind_phys), dimension(im), intent(in) :: work1, work2 - real(kind=kind_phys), dimension(im, levs), intent(in) :: prsl, prslk - real(kind=kind_phys), dimension(im, levs+1), intent(in) :: prsi - real(kind=kind_phys), dimension(im), intent(in) :: xlon, xlat - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 - - real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc + integer, intent(in ), dimension(:) :: islmsk, kpbl, kinver + logical, intent(in ) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras + + real(kind=kind_phys), intent(in ) :: rhcbot, rhcmax, rhcpbl, rhctop + real(kind=kind_phys), intent(in ), dimension(:) :: work1, work2 + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsl, prslk + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsi + real(kind=kind_phys), intent(in ), dimension(:) :: xlon, xlat + real(kind=kind_phys), intent(in ), dimension(:,:) :: gt0 + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: gq0 + + real(kind=kind_phys), intent(inout), dimension(:,:) :: rhc, save_qc ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp - real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw + real(kind=kind_phys), intent(inout), dimension(:,:) :: save_qi + real(kind=kind_phys), intent(inout), dimension(:,:) :: save_tcp + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: clw - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables integer :: i,k,n,tracers,kk @@ -665,33 +665,32 @@ subroutine GFS_suite_interstitial_4_run (im, levs, ltaerosol, cplchm, tracers_to ! interface variables - integer, intent(in) :: im, levs, tracers_total, ntrac, ntcw, ntiw, ntclamt, ntrw, & + integer, intent(in ) :: im, levs, tracers_total, ntrac, ntcw, ntiw, ntclamt, ntrw, & ntsw, ntrnc, ntsnc, ntgl, ntgnc, ntlnc, ntinc, nn, imp_physics, imp_physics_gfdl, imp_physics_thompson, & imp_physics_zhao_carr, imp_physics_zhao_carr_pdf - logical, intent(in) :: ltaerosol, cplchm, convert_dry_rho + logical, intent(in ) :: ltaerosol, cplchm, convert_dry_rho - real(kind=kind_phys), intent(in) :: con_pi, dtf - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_qc + real(kind=kind_phys), intent(in ) :: con_pi, dtf + real(kind=kind_phys), intent(in ), dimension(:,:) :: save_qc ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(in) :: save_qi + real(kind=kind_phys), intent(in ), dimension(:,:) :: save_qi - real(kind=kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 - real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw - real(kind=kind_phys), dimension(im,levs), intent(in) :: prsl - real(kind=kind_phys), intent(in) :: con_rd, con_eps - real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp - real(kind=kind_phys), dimension(im,levs), intent(in) :: spechum + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: gq0 + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: clw + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsl + real(kind=kind_phys), intent(in ) :: con_rd, con_eps + real(kind=kind_phys), intent(in ), dimension(:,:) :: nwfa, save_tcp + real(kind=kind_phys), intent(in ), dimension(:,:) :: spechum ! dqdti may not be allocated - real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti - - real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys + real(kind=kind_phys), intent(inout), dimension(:,:) :: dqdti - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables + real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys integer :: i,k,n,tracers real(kind=kind_phys) :: rho, orho @@ -842,14 +841,14 @@ subroutine GFS_suite_interstitial_5_run (im, levs, ntrac, ntcw, ntiw, nn, gq0, c implicit none ! interface variables - integer, intent(in) :: im, levs, ntrac, ntcw, ntiw, nn + integer, intent(in ) :: im, levs, ntrac, ntcw, ntiw, nn - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: gq0 - real(kind=kind_phys), dimension(im, levs, nn), intent(out) :: clw + real(kind=kind_phys), intent(out), dimension(:,:,:) :: clw - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! local variables integer :: i,k