Console Output
+ diff --exclude=.git --exclude=version_clubb_core.txt --exclude=version_silhs.txt -r clubb clubb_release
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/jenkins_tests/clubb_generalized_vertical_grid_test/Jenkinsfile clubb_release/jenkins_tests/clubb_generalized_vertical_grid_test/Jenkinsfile
35c35
< python3 run_scripts/run_clubb_w_varying_flags.py -f run_scripts/run_bindiff_w_flags_config_core_flags.json'''
---
> python3 run_scripts/run_clubb_w_varying_flags.py -f run_scripts/run_bindiff_w_flags_config_example.json'''
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/run_scripts/run_bindiff_w_flags_config_core_flags.json clubb_release/run_scripts/run_bindiff_w_flags_config_core_flags.json
25d24
< "l_min_xp2_from_corr_wx": false,
46c45,46
< "l_use_C11_Richardson": true
---
> "l_use_C11_Richardson": true,
> "l_min_xp2_from_corr_wx": false
76a77
> "l_mono_flux_lim_thlm": false,
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/advance_clubb_core_module.F90 clubb_release/src/CLUBB_core/advance_clubb_core_module.F90
341a342,344
> use interpolation, only: &
> pvertinterp
>
2239c2242
< call pvertinterp( nzt, ngrdcol, gr, & ! intent(in)
---
> call pvertinterp( nzt, ngrdcol, & ! intent(in)
2243c2246
< call pvertinterp( nzt, ngrdcol, gr, & ! intent(in)
---
> call pvertinterp( nzt, ngrdcol, & ! intent(in)
3757c3760
< p_in_Pa_zm(i,gr%k_lb_zm) = p_sfc(i)
---
> p_in_Pa_zm(i,1) = p_sfc(i)
3760,3761c3763
< p_in_Pa_zm(i,gr%k_ub_zm) &
< = max( p_in_Pa_zm(i,gr%k_ub_zm), 0.5_core_rknd * p_in_Pa(i,gr%k_ub_zt) )
---
> p_in_Pa_zm(i,nzm) = max( p_in_Pa_zm(i,nzm), 0.5_core_rknd*p_in_Pa(i,nzt) )
4972,4976c4974
< use constants_clubb, only: &
< one_half
<
< use grid_class, only: &
< grid
---
> use grid_class, only: grid
4979c4977
< core_rknd ! Variable(s)
---
> core_rknd ! Variable(s)
5019,5026c5017,5020
< = one_half &
< * ( variable_zm(i,k_zmp1) + variable_zt(i,k) ) &
< * ( gr%zm(i,k_zmp1) - gr%zt(i,k) ) &
< * gr%grid_dir * gr%invrs_dzt(i,k) &
< + one_half &
< * ( variable_zt(i,k) + variable_zm(i,k_zm) ) &
< * ( gr%zt(i,k) - gr%zm(i,k_zm) ) &
< * gr%grid_dir * gr%invrs_dzt(i,k)
---
> = 0.5_core_rknd * ( variable_zm(i,k_zmp1) + variable_zt(i,k) ) &
> * ( gr%zm(i,k_zmp1) - gr%zt(i,k) ) * gr%invrs_dzt(i,k) &
> + 0.5_core_rknd * ( variable_zt(i,k) + variable_zm(i,k_zm) ) &
> * ( gr%zt(i,k) - gr%zm(i,k_zm) ) * gr%invrs_dzt(i,k)
5048,5052c5042
< use constants_clubb, only: &
< one_half
<
< use grid_class, only: &
< grid
---
> use grid_class, only: grid
5098,5105c5088,5091
< = one_half &
< * ( variable_zt(i,k_zt) + variable_zm(i,k) ) &
< * ( gr%zt(i,k_zt) - gr%zm(i,k) ) &
< * gr%grid_dir * gr%invrs_dzm(i,k) &
< + one_half &
< * ( variable_zm(i,k) + variable_zt(i,k_ztm1) ) &
< * ( gr%zm(i,k) - gr%zt(i,k_ztm1) ) &
< * gr%grid_dir * gr%invrs_dzm(i,k)
---
> = 0.5_core_rknd * ( variable_zt(i,k_zt) + variable_zm(i,k) ) &
> * ( gr%zt(i,k_zt) - gr%zm(i,k) ) * gr%invrs_dzm(i,k) &
> + 0.5_core_rknd * ( variable_zm(i,k) + variable_zt(i,k_ztm1) ) &
> * ( gr%zm(i,k) - gr%zt(i,k_ztm1) ) * gr%invrs_dzm(i,k)
5488,5586c5474
< !-------------------------------------------------------------------------------
< subroutine pvertinterp( nzt, ngrdcol, gr, &
< p_mid, p_out, input_var, &
< interp_var )
<
< use grid_class, only: &
< grid ! Type(s)
<
< use clubb_precision, only: &
< core_rknd
<
< implicit none
<
< !------------------------ Input Variables ------------------------
< integer , intent(in) :: &
< nzt, &
< ngrdcol
<
< type( grid ), intent(in) :: &
< gr
<
< real( kind = core_rknd ), dimension(ngrdcol,nzt), intent(in) :: &
< p_mid, & ! input level pressure levels
< input_var ! input array
<
< real( kind = core_rknd ), intent(in) :: &
< p_out ! output pressure level
<
< !------------------------ Output Variables ------------------------
< real( kind = core_rknd ), dimension(ngrdcol), intent(out) :: &
< interp_var ! output array (interpolated)
<
< !------------------------ Local Variables ------------------------
< integer :: &
< i, k, & ! Loop indices
< k_upper ! Level indices for interpolation
<
< real( kind = core_rknd ) :: &
< dpu, & ! upper level pressure difference
< dpl ! lower level pressure difference
<
< logical :: &
< l_found, & ! true if input levels found
< l_error ! true if error
<
< !------------------------ Begin Code ------------------------
<
< ! Initialize index array and logical flags
< l_error = .false.
<
< ! If we've fallen through the k=1,nz-1 loop, we cannot interpolate and
< ! must extrapolate from the bottom or top data level for at least some
< ! of the longitude points.
< !$acc parallel loop gang vector default(present)
< do i = 1, ngrdcol
<
< if ( p_out >= p_mid(i,gr%k_lb_zt) ) then
<
< interp_var(i) = input_var(i,gr%k_lb_zt)
<
< elseif ( p_out <= p_mid(i,gr%k_ub_zt) ) then
<
< interp_var(i) = input_var(i,gr%k_ub_zt)
<
< else
<
< l_found = .false.
< k_upper = 1
<
< ! Store level indices for interpolation.
< ! If all indices for this level have been found,
< ! do the interpolation
< do k = gr%k_lb_zt, gr%k_ub_zt-gr%grid_dir_indx, gr%grid_dir_indx
< if ( p_mid(i,k) > p_out .and. p_out >= p_mid(i,k+gr%grid_dir_indx) ) then
< l_found = .true.
< k_upper = k
< exit
< end if
< end do
<
< if ( .not. l_found ) then
< l_error = .true.
< end if
<
< dpu = p_mid(i,k_upper) - p_out
< dpl = p_out - p_mid(i,k_upper+gr%grid_dir_indx)
< interp_var(i) = ( input_var(i,k_upper)*dpl &
< + input_var(i,k_upper+gr%grid_dir_indx)*dpu ) &
< / ( dpl + dpu )
< end if
<
< end do
< !$acc end parallel loop
<
< return
<
< end subroutine pvertinterp
<
< !=============================================================================
---
> !===============================================================================
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/advance_windm_edsclrm_module.F90 clubb_release/src/CLUBB_core/advance_windm_edsclrm_module.F90
1917,1919c1917
< ! Lower boundary conditions
< k = gr%k_lb_zt
< kp1 = k+gr%grid_dir_indx
---
> do k = 1, nzt-1, 1
1921,1942c1919,1920
< ! xm mean advection
< ! xm term ma is completely implicit; call stat_update_var_pt.
< call stat_update_var_pt( ixm_ma, k, & ! intent(in)
< - lhs_ma_zt(2,k) * xm(k) &
< - lhs_ma_zt(2-gr%grid_dir_indx,k) * xm(kp1), & ! intent(in)
< stats_zt ) ! intent(inout)
<
< ! xm turbulent transport (implicit component)
< ! xm term ta has both implicit and explicit components;
< ! call stat_end_update_pt.
< call stat_end_update_pt( ixm_ta, k, & ! intent(in)
< + ( - 0.5_core_rknd * lhs_diff(2,k) &
< + imp_sfc_flux(k) ) * xm(k) &
< - 0.5_core_rknd * lhs_diff(2-gr%grid_dir_indx,k) * xm(kp1), & ! intent(in)
< stats_zt ) ! intent(inout)
<
<
< ! Interior domain
< do k = 2, nzt-1, 1
<
< km1 = k-gr%grid_dir_indx
< kp1 = k+gr%grid_dir_indx
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzt )
1947c1925
< - lhs_ma_zt(2+gr%grid_dir_indx,k) * xm(km1) &
---
> - lhs_ma_zt(3,k) * xm(km1) &
1949c1927
< - lhs_ma_zt(2-gr%grid_dir_indx,k) * xm(kp1), & ! intent(in)
---
> - lhs_ma_zt(1,k) * xm(kp1), & ! intent(in)
1956c1934
< - 0.5_core_rknd * lhs_diff(2+gr%grid_dir_indx,k) * xm(km1) &
---
> - 0.5_core_rknd * lhs_diff(3,k) * xm(km1) &
1959c1937
< - 0.5_core_rknd * lhs_diff(2-gr%grid_dir_indx,k) * xm(kp1), & ! intent(in)
---
> - 0.5_core_rknd * lhs_diff(1,k) * xm(kp1), & ! intent(in)
1966,1967c1944,1945
< k = gr%k_ub_zt
< km1 = k-gr%grid_dir_indx
---
> k = nzt
> km1 = max( k-1, 1 )
1972c1950
< - lhs_ma_zt(2+gr%grid_dir_indx,k) * xm(km1) &
---
> - lhs_ma_zt(3,k) * xm(km1) &
1980c1958
< - 0.5_core_rknd * lhs_diff(2+gr%grid_dir_indx,k) * xm(km1) &
---
> - 0.5_core_rknd * lhs_diff(3,k) * xm(km1) &
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/advance_wp2_wp3_module.F90 clubb_release/src/CLUBB_core/advance_wp2_wp3_module.F90
477,480c477,485
<
< C11_Skw_fnc = zm2zt_api( nzm, nzt, ngrdcol, gr, Cx_fnc_Richardson, &
< zero_threshold )
<
---
> ! Note: C11_Skw_fnc is a thermodynamic-level variable, but
> ! Cx_fnc_Richardson is a momentum-level variable.
> !$acc parallel loop gang vector collapse(2) default(present)
> do k = 1, nzt
> do i = 1, ngrdcol
> C11_Skw_fnc(i,k) = Cx_fnc_Richardson(i,k+1)
> end do
> end do
> !$acc end parallel loop
1643,1644c1648,1649
< km1 = max( k-gr%grid_dir_indx, 1 )
< kp1 = min( k+gr%grid_dir_indx, nzm )
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzm )
1662c1667
< - lhs_diff_zm(2+gr%grid_dir_indx,i,k) * wp2(i,km1) &
---
> - lhs_diff_zm(3,i,k) * wp2(i,km1) &
1664c1669
< - lhs_diff_zm(2-gr%grid_dir_indx,i,k) * wp2(i,kp1), & ! intent(in)
---
> - lhs_diff_zm(1,i,k) * wp2(i,kp1), & ! intent(in)
1668c1673
< - lhs_diff_zm(2+gr%grid_dir_indx,i,k) * wp2(i,km1) &
---
> - lhs_diff_zm(3,i,k) * wp2(i,km1) &
1670c1675
< - lhs_diff_zm(2-gr%grid_dir_indx,i,k) * wp2(i,kp1), & ! intent(in)
---
> - lhs_diff_zm(1,i,k) * wp2(i,kp1), & ! intent(in)
1676c1681
< (- lhs_ta_wp2(2,i,k)) * wp3(i,k-1) &
---
> (- lhs_ta_wp2(2,i,k)) * wp3(i,km1) &
1682c1687
< - lhs_ma_zm(2+gr%grid_dir_indx,i,k) * wp2(i,km1) &
---
> - lhs_ma_zm(3,i,k) * wp2(i,km1) &
1684c1689
< - lhs_ma_zm(2-gr%grid_dir_indx,i,k) * wp2(i,kp1), & ! intent(in)
---
> - lhs_ma_zm(1,i,k) * wp2(i,kp1), & ! intent(in)
1717,1718c1722,1723
< km1 = max( k-gr%grid_dir_indx, 1 )
< kp1 = min( k+gr%grid_dir_indx, nzt )
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzt )
1736c1741
< - lhs_diff_zt(2+gr%grid_dir_indx,i,k) * wp3(i,km1) &
---
> - lhs_diff_zt(3,i,k) * wp3(i,km1) &
1738c1743
< - lhs_diff_zt(2-gr%grid_dir_indx,i,k) * wp3(i,kp1), & ! intent(in)
---
> - lhs_diff_zt(1,i,k) * wp3(i,kp1), & ! intent(in)
1742c1747
< - lhs_diff_zt(2+gr%grid_dir_indx,i,k) * wp3(i,km1) &
---
> - lhs_diff_zt(3,i,k) * wp3(i,km1) &
1744c1749
< - lhs_diff_zt(2-gr%grid_dir_indx,i,k) * wp3(i,kp1), & ! intent(in)
---
> - lhs_diff_zt(1,i,k) * wp3(i,kp1), & ! intent(in)
1751c1756
< - gamma_over_implicit_ts * wp3_term_ta_lhs_result(5,i,k) * wp3(i,k-1) &
---
> - gamma_over_implicit_ts * wp3_term_ta_lhs_result(5,i,k) * wp3(i,km1) &
1754,1755c1759,1760
< - gamma_over_implicit_ts * wp3_term_ta_lhs_result(2,i,k) * wp2(i,k+1) &
< - gamma_over_implicit_ts * wp3_term_ta_lhs_result(1,i,k) * wp3(i,k+1), & ! intent(in)
---
> - gamma_over_implicit_ts * wp3_term_ta_lhs_result(2,i,k) * wp2(i,kp1) &
> - gamma_over_implicit_ts * wp3_term_ta_lhs_result(1,i,k) * wp3(i,kp1), & ! intent(in)
1765c1770
< - gamma_over_implicit_ts * lhs_adv_tp_wp3(1,i,k) * wp2(i,k+1), & ! intent(in)
---
> - gamma_over_implicit_ts * lhs_adv_tp_wp3(1,i,k) * wp2(i,kp1), & ! intent(in)
1771c1776
< - gamma_over_implicit_ts * lhs_pr_tp_wp3(1,i,k) * wp2(i,k+1), & ! intent(in)
---
> - gamma_over_implicit_ts * lhs_pr_tp_wp3(1,i,k) * wp2(i,kp1), & ! intent(in)
1777c1782
< - wp3_pr3_lhs(5,i,k) * wp3(i,k-1) &
---
> - wp3_pr3_lhs(5,i,k) * wp3(i,km1) &
1780,1781c1785,1786
< - wp3_pr3_lhs(2,i,k) * wp2(i,k+1) &
< - wp3_pr3_lhs(1,i,k) * wp3(i,k+1), & ! intent(in)
---
> - wp3_pr3_lhs(2,i,k) * wp2(i,kp1) &
> - wp3_pr3_lhs(1,i,k) * wp3(i,kp1), & ! intent(in)
1786c1791
< - lhs_ma_zt(2+gr%grid_dir_indx,i,k) * wp3(i,km1) &
---
> - lhs_ma_zt(3,i,k) * wp3(i,km1) &
1788c1793
< - lhs_ma_zt(2-gr%grid_dir_indx,i,k) * wp3(i,kp1), & ! intent(in)
---
> - lhs_ma_zt(1,i,k) * wp3(i,kp1), & ! intent(in)
2543,2547c2548,2551
< rhs(i,k_wp2) &
< = rhs(i,k_wp2) &
< - lhs_diff_zm_crank(2+gr%grid_dir_indx,i,k) * wp2(i,k-gr%grid_dir_indx) &
< - lhs_diff_zm_crank(2,i,k) * wp2(i,k) &
< - lhs_diff_zm_crank(2-gr%grid_dir_indx,i,k) * wp2(i,k+gr%grid_dir_indx)
---
> rhs(i,k_wp2) = rhs(i,k_wp2) &
> - lhs_diff_zm_crank(3,i,k) * wp2(i,k-1) &
> - lhs_diff_zm_crank(2,i,k) * wp2(i,k) &
> - lhs_diff_zm_crank(1,i,k) * wp2(i,k+1)
2556,2560c2560,2563
< rhs(i,k_wp3) &
< = rhs(i,k_wp3) &
< - lhs_diff_zt_crank(2+gr%grid_dir_indx,i,k) * wp3(i,k-gr%grid_dir_indx) &
< - lhs_diff_zt_crank(2,i,k) * wp3(i,k) &
< - lhs_diff_zt_crank(2-gr%grid_dir_indx,i,k) * wp3(i,k+gr%grid_dir_indx)
---
> rhs(i,k_wp3) = rhs(i,k_wp3) &
> - lhs_diff_zt_crank(3,i,k) * wp3(i,k-1) &
> - lhs_diff_zt_crank(2,i,k) * wp3(i,k) &
> - lhs_diff_zt_crank(1,i,k) * wp3(i,k+1)
2581,2587c2584,2587
< rhs(i,k_wp2) &
< = rhs(i,k_wp2) &
< - lhs_diff_zm(2+gr%grid_dir_indx,i,k) &
< * ( up2(i,k-gr%grid_dir_indx) + vp2(i,k-gr%grid_dir_indx) ) &
< - lhs_diff_zm(2,i,k) * ( up2(i,k) + vp2(i,k) ) &
< - lhs_diff_zm(2-gr%grid_dir_indx,i,k) &
< * ( up2(i,k+gr%grid_dir_indx) + vp2(i,k+gr%grid_dir_indx) )
---
> rhs(i,k_wp2) = rhs(i,k_wp2) &
> - lhs_diff_zm(3,i,k) * ( up2(i,k-1) + vp2(i,k-1) ) &
> - lhs_diff_zm(2,i,k) * ( up2(i,k) + vp2(i,k) ) &
> - lhs_diff_zm(1,i,k) * ( up2(i,k+1) + vp2(i,k+1) )
2596,2602c2596,2599
< rhs(i,k_wp3) &
< = rhs(i,k_wp3) &
< - lhs_diff_zt(2+gr%grid_dir_indx,i,k) &
< * ( wpup2(i,k-gr%grid_dir_indx) + wpvp2(i,k-gr%grid_dir_indx) ) &
< - lhs_diff_zt(2,i,k) * ( wpup2(i,k) + wpvp2(i,k) ) &
< - lhs_diff_zt(2+gr%grid_dir_indx,i,k) &
< * ( wpup2(i,k+gr%grid_dir_indx) + wpvp2(i,k+gr%grid_dir_indx) )
---
> rhs(i,k_wp3) = rhs(i,k_wp3) &
> - lhs_diff_zt(3,i,k) * ( wpup2(i,k-1) + wpvp2(i,k-1) ) &
> - lhs_diff_zt(2,i,k) * ( wpup2(i,k) + wpvp2(i,k) ) &
> - lhs_diff_zt(1,i,k) * ( wpup2(i,k+1) + wpvp2(i,k+1) )
2875c2872
< lhs_diff_zm_crank(2+gr%grid_dir_indx,i,k) * wp2(i,k-gr%grid_dir_indx) &
---
> lhs_diff_zm_crank(3,i,k) * wp2(i,k-1) &
2877,2878c2874,2875
< + lhs_diff_zm_crank(2-gr%grid_dir_indx,i,k) * wp2(i,k+gr%grid_dir_indx), & ! intent(in)
< stats_zm(i) ) ! intent(out)
---
> + lhs_diff_zm_crank(1,i,k) * wp2(i,k+1), & ! intent(in)
> stats_zm(i) ) ! intent(out)
2886,2891c2883,2886
< + lhs_diff_zm(2+gr%grid_dir_indx,i,k) &
< * ( up2(i,k-gr%grid_dir_indx) + vp2(i,k-gr%grid_dir_indx) ) &
< + lhs_diff_zm(2,i,k) * ( up2(i,k) + vp2(i,k) ) &
< + lhs_diff_zm(2-gr%grid_dir_indx,i,k) &
< * ( up2(i,k+gr%grid_dir_indx) + vp2(i,k+gr%grid_dir_indx) ), &
< stats_zm(i) )
---
> + lhs_diff_zm(3,i,k) * ( up2(i,k-1) + vp2(i,k-1) ) &
> + lhs_diff_zm(2,i,k) * ( up2(i,k) + vp2(i,k) ) &
> + lhs_diff_zm(1,i,k) * ( up2(i,k+1) + vp2(i,k+1) ), &
> stats_zm(i) )
3089,3091c3084,3086
< lhs_diff_zt(2+gr%grid_dir_indx,i,k) * wp3(i,k-gr%grid_dir_indx) &
< + lhs_diff_zt(2,i,k) * wp3(i,k) &
< + lhs_diff_zt(2-gr%grid_dir_indx,i,k) * wp3(i,k+gr%grid_dir_indx), & ! intent(in)
---
> lhs_diff_zt(3,i,k) * wp3(i,k-1) &
> + lhs_diff_zt(2,i,k) * wp3(i,k) &
> + lhs_diff_zt(1,i,k) * wp3(i,k+1), & ! intent(in)
3100,3105c3095,3098
< + lhs_diff_zt(2+gr%grid_dir_indx,i,k) &
< * ( wpup2(i,k-gr%grid_dir_indx) + wpvp2(i,k-gr%grid_dir_indx) ) &
< + lhs_diff_zt(2,i,k) * ( wpup2(i,k) + wpvp2(i,k) ) &
< + lhs_diff_zt(2-gr%grid_dir_indx,i,k) &
< * ( wpup2(i,k+gr%grid_dir_indx) + wpvp2(i,k+gr%grid_dir_indx) ), &
< stats_zt(i) )
---
> + lhs_diff_zt(3,i,k) * ( wpup2(i,k-1) + wpvp2(i,k-1) ) &
> + lhs_diff_zt(2,i,k) * ( wpup2(i,k) + wpvp2(i,k) ) &
> + lhs_diff_zt(1,i,k) * ( wpup2(i,k+1) + wpvp2(i,k+1) ), &
> stats_zt(i) )
4495,4497c4488
< * gr%grid_dir &
< * min( gr%grid_dir * a1_coef(i,k+1) * wp3_on_wp2(i,k+1), &
< zero )
---
> * min( a1_coef(i,k+1) * wp3_on_wp2(i,k+1), zero )
4508,4512c4499,4500
< * gr%grid_dir &
< * ( max( gr%grid_dir * a1_coef(i,k+1) * wp3_on_wp2(i,k+1), &
< zero ) &
< - min( gr%grid_dir * a1_coef(i,k) * wp3_on_wp2(i,k), &
< zero ) )
---
> * ( max( a1_coef(i,k+1) * wp3_on_wp2(i,k+1), zero ) &
> - min( a1_coef(i,k) * wp3_on_wp2(i,k), zero ) )
4523,4525c4511
< * gr%grid_dir &
< * max( gr%grid_dir * a1_coef(i,k) * wp3_on_wp2(i,k), &
< zero )
---
> * max( a1_coef(i,k) * wp3_on_wp2(i,k), zero )
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/advance_xm_wpxp_module.F90 clubb_release/src/CLUBB_core/advance_xm_wpxp_module.F90
1984,1987c1984,1987
< + ( one - gamma_over_implicit_ts ) &
< * ( - lhs_ta_wpxp(2-gr%grid_dir_indx,i,k) * wpxp(i,k+gr%grid_dir_indx) &
< - lhs_ta_wpxp(2,i,k) * wpxp(i,k) &
< - lhs_ta_wpxp(2+gr%grid_dir_indx,i,k) * wpxp(i,k-gr%grid_dir_indx) ), &
---
> + ( one - gamma_over_implicit_ts ) &
> * ( - lhs_ta_wpxp(1,i,k) * wpxp(i,k+1) &
> - lhs_ta_wpxp(2,i,k) * wpxp(i,k) &
> - lhs_ta_wpxp(3,i,k) * wpxp(i,k-1) ), & ! intent(in)
4858,4859c4858,4859
< km1 = max( k-gr%grid_dir_indx, 1 )
< kp1 = min( k+gr%grid_dir_indx, nzt )
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzt )
4864c4864
< (-lhs_ma_zt(2+gr%grid_dir_indx,i,k)) * xm(i,km1) &
---
> (-lhs_ma_zt(3,i,k)) * xm(i,km1) &
4866c4866
< + (-lhs_ma_zt(2-gr%grid_dir_indx,i,k)) * xm(i,kp1), & ! intent(in)
---
> + (-lhs_ma_zt(1,i,k)) * xm(i,kp1), & ! intent(in)
4875c4875
< + (-lhs_ta_xm(1,i,k)) * wpxp(i,k+1), & ! intent(in)
---
> + (-lhs_ta_xm(1,i,k)) * wpxp(i,kp1), & ! intent(in)
4886,4887c4886,4887
< km1 = max( k-gr%grid_dir_indx, 1 )
< kp1 = min( k+gr%grid_dir_indx, nzm )
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzm )
4893c4893
< (-lhs_ma_zm(2+gr%grid_dir_indx,i,k)) * wpxp(i,km1) &
---
> (-lhs_ma_zm(3,i,k)) * wpxp(i,km1) &
4895c4895
< + (-lhs_ma_zm(2-gr%grid_dir_indx,i,k)) * wpxp(i,kp1), & ! intent(in)
---
> + (-lhs_ma_zm(1,i,k)) * wpxp(i,kp1), & ! intent(in)
4900c4900
< (-gamma_over_implicit_ts*lhs_ta_wpxp(2+gr%grid_dir_indx,i,k)) * wpxp(i,km1) &
---
> (-gamma_over_implicit_ts*lhs_ta_wpxp(3,i,k)) * wpxp(i,km1) &
4902c4902
< + (-gamma_over_implicit_ts*lhs_ta_wpxp(2-gr%grid_dir_indx,i,k)) * wpxp(i,kp1), &
---
> + (-gamma_over_implicit_ts*lhs_ta_wpxp(1,i,k)) * wpxp(i,kp1), & ! intent(in)
4907c4907
< (-lhs_tp(2,i,k)) * xm(i,k-1) &
---
> (-lhs_tp(2,i,k)) * xm(i,km1) &
4934c4934
< (-lhs_diff_zm(2+gr%grid_dir_indx,i,k)) * wpxp(i,km1) &
---
> (-lhs_diff_zm(3,i,k)) * wpxp(i,km1) &
4936c4936
< + (-lhs_diff_zm(2-gr%grid_dir_indx,i,k)) * wpxp(i,kp1), & ! intent(in)
---
> + (-lhs_diff_zm(1,i,k)) * wpxp(i,kp1), & ! intent(in)
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/advance_xp2_xpyp_module.F90 clubb_release/src/CLUBB_core/advance_xp2_xpyp_module.F90
757c757
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_up2, gr, up2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_up2, up2(i,:), & !intent(in)
800c800
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_vp2, gr, vp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_vp2, vp2(i,:), & !intent(in)
878c878
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_up2, gr, up2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_up2, up2(i,:), & !intent(in)
884c884
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_vp2, gr, vp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_vp2, vp2(i,:), & !intent(in)
1848c1848
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtp2, gr, rtp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtp2, rtp2(i,:), & !intent(in)
1853c1853
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_thlp2, gr, thlp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_thlp2, thlp2(i,:), & !intent(in)
1858c1858
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtpthlp, gr, rtpthlp(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtpthlp, rtpthlp(i,:), & !intent(in)
2133c2133
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtp2, gr, rtp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtp2, rtp2(i,:), & !intent(in)
2200c2200
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_thlp2, gr, thlp2(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_thlp2, thlp2(i,:), & !intent(in)
2267c2267
< call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtpthlp, gr, rtpthlp(i,:), & !intent(in)
---
> call xp2_xpyp_implicit_stats( nzm, xp2_xpyp_rtpthlp, rtpthlp(i,:), & !intent(in)
2918c2918
< subroutine xp2_xpyp_implicit_stats( nzm, solve_type, gr, xapxbp, & !intent(in)
---
> subroutine xp2_xpyp_implicit_stats( nzm, solve_type, xapxbp, & !intent(in)
2932,2934d2931
< use grid_class, only: &
< grid
<
2960,2962d2956
< type( grid ), intent(in) :: &
< gr
<
3044,3045c3038,3039
< km1 = max( k-gr%grid_dir_indx, 1 )
< kp1 = min( k+gr%grid_dir_indx, nzm )
---
> km1 = max( k-1, 1 )
> kp1 = min( k+1, nzm )
3055,3057c3049,3051
< (-lhs_diff(2+gr%grid_dir_indx,k)) * xapxbp(km1) & ! Intent(in)
< + (-lhs_diff(2,k)) * xapxbp(k) &
< + (-lhs_diff(2-gr%grid_dir_indx,k)) * xapxbp(kp1), &
---
> (-lhs_diff(3,k)) * xapxbp(km1) & ! Intent(in)
> + (-lhs_diff(2,k)) * xapxbp(k) &
> + (-lhs_diff(1,k)) * xapxbp(kp1), &
3063,3066c3057,3060
< (-gamma_over_implicit_ts * lhs_ta(2+gr%grid_dir_indx,k)) * xapxbp(km1) & ! Intent(in)
< + (-gamma_over_implicit_ts * lhs_ta(2,k)) * xapxbp(k) &
< + (-gamma_over_implicit_ts * lhs_ta(2-gr%grid_dir_indx,k)) * xapxbp(kp1), &
< stats_zm ) ! Intent(inout)
---
> (-gamma_over_implicit_ts * lhs_ta(3,k)) * xapxbp(km1) & ! Intent(in)
> + (-gamma_over_implicit_ts * lhs_ta(2,k)) * xapxbp(k) &
> + (-gamma_over_implicit_ts * lhs_ta(1,k)) * xapxbp(kp1), &
> stats_zm ) ! Intent(inout)
3070,3072c3064,3066
< (-lhs_ma(2+gr%grid_dir_indx,k)) * xapxbp(km1) & ! Intent(in)
< + (-lhs_ma(2,k)) * xapxbp(k) &
< + (-lhs_ma(2-gr%grid_dir_indx,k)) * xapxbp(kp1), &
---
> (-lhs_ma(3,k)) * xapxbp(km1) & ! Intent(in)
> + (-lhs_ma(2,k)) * xapxbp(k) &
> + (-lhs_ma(1,k)) * xapxbp(kp1), &
3297,3302c3291,3294
< rhs(i,k) &
< = rhs(i,k) &
< + ( one - gamma_over_implicit_ts ) &
< * ( - lhs_ta(2-gr%grid_dir_indx,i,k) * xap2(i,k+gr%grid_dir_indx) &
< - lhs_ta(2,i,k) * xap2(i,k) &
< - lhs_ta(2+gr%grid_dir_indx,i,k) * xap2(i,k-gr%grid_dir_indx) )
---
> rhs(i,k) = rhs(i,k) + ( one - gamma_over_implicit_ts ) &
> * ( - lhs_ta(1,i,k) * xap2(i,k+1) &
> - lhs_ta(2,i,k) * xap2(i,k) &
> - lhs_ta(3,i,k) * xap2(i,k-1) )
3369,3372c3361,3364
< + ( one - gamma_over_implicit_ts ) & ! Intent(in)
< * ( - lhs_ta(2-gr%grid_dir_indx,i,k) * xap2(i,k+gr%grid_dir_indx) &
< - lhs_ta(2,i,k) * xap2(i,k) &
< - lhs_ta(2+gr%grid_dir_indx,i,k) * xap2(i,k-gr%grid_dir_indx) ), &
---
> + ( one - gamma_over_implicit_ts ) & ! Intent(in)
> * ( - lhs_ta(1,i,k) * xap2(i,k+1) &
> - lhs_ta(2,i,k) * xap2(i,k) &
> - lhs_ta(3,i,k) * xap2(i,k-1) ), &
3647,3652c3639,3642
< rhs(i,k) &
< = rhs_ta(i,k) &
< + ( one - gamma_over_implicit_ts ) &
< * ( - lhs_ta(2-gr%grid_dir_indx,i,k) * xapxbp(i,k+gr%grid_dir_indx) &
< - lhs_ta(2,i,k) * xapxbp(i,k) &
< - lhs_ta(2+gr%grid_dir_indx,i,k) * xapxbp(i,k-gr%grid_dir_indx) )
---
> rhs(i,k) = rhs_ta(i,k) + ( one - gamma_over_implicit_ts ) &
> * ( - lhs_ta(1,i,k) * xapxbp(i,k+1) &
> - lhs_ta(2,i,k) * xapxbp(i,k) &
> - lhs_ta(3,i,k) * xapxbp(i,k-1) )
3755,3758c3745,3748
< + ( one - gamma_over_implicit_ts ) & ! Intent(in)
< * ( - lhs_ta(2-gr%grid_dir_indx,i,k) * xapxbp(i,k+gr%grid_dir_indx) &
< - lhs_ta(2,i,k) * xapxbp(i,k) &
< - lhs_ta(2+gr%grid_dir_indx,i,k) * xapxbp(i,k-gr%grid_dir_indx) ), &
---
> + ( one - gamma_over_implicit_ts ) & ! Intent(in)
> * ( - lhs_ta(1,i,k) * xapxbp(i,k+1) &
> - lhs_ta(2,i,k) * xapxbp(i,k) &
> - lhs_ta(3,i,k) * xapxbp(i,k-1) ), &
5051c5041
< + term_wprtp2_explicit_zm(:,:) ) * rtp2(:,:))
---
> + term_wprtpthlp_explicit_zm(:,:) ) * rtp2(:,:))
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/CLUBB_core/interpolation.F90 clubb_release/src/CLUBB_core/interpolation.F90
15c15
< lin_interp_between_grids
---
> pvertinterp, lin_interp_between_grids
502a503,590
>
> !-------------------------------------------------------------------------------
> subroutine pvertinterp( nz, ngrdcol, &
> p_mid, p_out, input_var, &
> interp_var )
>
> implicit none
>
> !------------------------ Input Variables ------------------------
> integer , intent(in) :: &
> nz, &
> ngrdcol
>
> real( kind = core_rknd ), dimension(ngrdcol,nz), intent(in) :: &
> p_mid, & ! input level pressure levels
> input_var ! input array
>
> real( kind = core_rknd ), intent(in) :: &
> p_out ! output pressure level
>
> !------------------------ Output Variables ------------------------
> real( kind = core_rknd ), dimension(ngrdcol), intent(out) :: &
> interp_var ! output array (interpolated)
>
> !------------------------ Local Variables ------------------------
> integer :: &
> i, k, & ! Loop indices
> k_upper ! Level indices for interpolation
>
> real( kind = core_rknd ) :: &
> dpu, & ! upper level pressure difference
> dpl ! lower level pressure difference
>
> logical :: &
> l_found, & ! true if input levels found
> l_error ! true if error
>
> !------------------------ Begin Code ------------------------
>
> ! Initialize index array and logical flags
> l_error = .false.
>
> ! If we've fallen through the k=1,nz-1 loop, we cannot interpolate and
> ! must extrapolate from the bottom or top data level for at least some
> ! of the longitude points.
> !$acc parallel loop gang vector default(present)
> do i = 1, ngrdcol
>
> if ( p_out >= p_mid(i,1) ) then
>
> interp_var(i) = input_var(i,1)
>
> elseif ( p_out <= p_mid(i,nz) ) then
>
> interp_var(i) = input_var(i,nz)
>
> else
>
> l_found = .false.
> k_upper = 1
>
> ! Store level indices for interpolation.
> ! If all indices for this level have been found,
> ! do the interpolation
> do k = 1, nz-1
> if ( p_mid(i,k) > p_out .and. p_out >= p_mid(i,k+1) ) then
> l_found = .true.
> k_upper = k
> exit
> end if
> end do
>
> if ( .not. l_found ) then
> l_error = .true.
> end if
>
> dpu = p_mid(i,k_upper) - p_out
> dpl = p_out - p_mid(i,k_upper+1)
> interp_var(i) = ( input_var(i,k_upper)*dpl + input_var(i,k_upper+1)*dpu ) &
> / ( dpl + dpu )
> end if
>
> end do
> !$acc end parallel loop
>
> return
>
> end subroutine pvertinterp
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/clubb_driver.F90 clubb_release/src/clubb_driver.F90
2209c2209
< Ncm, Nc_in_cloud, Nccnm, err_code, & ! Intent(inout)
---
> Ncm, Nc_in_cloud, Nccnm, & ! Intent(inout)
3243,3250d3242
< if ( clubb_at_least_debug_level( 0 ) ) then
< if ( err_code == clubb_fatal_error ) then
< write(fstderr, *) "Fatal error in radiation, " &
< // "check your parameter values and timestep"
< exit mainloop
< end if
< end if
<
3638c3630
< Ncm, Nc_in_cloud, Nccnm, err_code, &
---
> Ncm, Nc_in_cloud, Nccnm, &
3722,3724d3713
< use error_code, only: &
< clubb_fatal_error
<
3818,3820d3806
<
< integer, intent(inout) :: &
< err_code
4040,4042c4026
< err_code = clubb_fatal_error
< write(fstderr,*) 'For this case l_add_dycore_grid must be set to .false..'
< return
---
> error stop 'For this case l_add_dycore_grid must be set to .false..'
7059c7043
< return
---
> error stop
7429c7413
< return
---
> error stop
diff '--exclude=.git' '--exclude=version_clubb_core.txt' '--exclude=version_silhs.txt' -r clubb/src/generalized_grid_test.F90 clubb_release/src/generalized_grid_test.F90
728c728
< ! pdf_implicit_coefs_terms
---
> ! pdf_implicit_coefs_term
769c769
< pdf_implicit_coefs_terms_flip%coef_wp2sclrp_implicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%coef_wp2sclrp_implicit(i,:,sclr) &
771c771
< pdf_implicit_coefs_terms_flip%term_wp2sclrp_explicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%term_wp2sclrp_explicit(i,:,sclr) &
773c773
< pdf_implicit_coefs_terms_flip%coef_wpsclrp2_implicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%coef_wpsclrp2_implicit(i,:,sclr) &
775c775
< pdf_implicit_coefs_terms_flip%term_wpsclrp2_explicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%term_wpsclrp2_explicit(i,:,sclr) &
777c777
< pdf_implicit_coefs_terms_flip%coef_wprtpsclrp_implicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%coef_wprtpsclrp_implicit(i,:,sclr) &
779c779
< pdf_implicit_coefs_terms_flip%term_wprtpsclrp_explicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%term_wprtpsclrp_explicit(i,:,sclr) &
781c781
< pdf_implicit_coefs_terms_flip%coef_wpthlpsclrp_implicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%coef_wpthlpsclrp_implicit(i,:,sclr) &
783c783
< pdf_implicit_coefs_terms_flip%term_wpthlpsclrp_explicit(i,:,sclr) &
---
> pdf_implicit_coefs_terms%term_wpthlpsclrp_explicit(i,:,sclr) &