module MO_SETRXT CONTAINS subroutine SETRXT( rate, temp, m ) use MO_GRID, only : plonl, plev use CHEM_MODS, only : rxntot use MO_JPL, only : JPL implicit none !------------------------------------------------------- ! ... Dummy arguments !------------------------------------------------------- real, intent(in) :: temp(plonl,plev), m(plonl,plev) real, intent(inout) :: rate(plonl,plev,rxntot) !------------------------------------------------------- ! ... Local variables !------------------------------------------------------- real :: itemp(plonl,plev) real, dimension(plonl,plev) :: ko, kinf rate(:plonl,:,38) = 2.2e-10 rate(:plonl,:,39) = 6.7e-11 rate(:plonl,:,40) = 4.9e-11 rate(:plonl,:,48) = 0. rate(:plonl,:,56) = 1.5e-10 rate(:plonl,:,63) = 1e-11 rate(:plonl,:,65) = 1.1e-10 rate(:plonl,:,87) = 1e-12 rate(:plonl,:,94) = 2.e-13 rate(:plonl,:,95) = 6.8e-14 rate(:plonl,:,99) = 1.e-14 rate(:plonl,:,105) = 2.4e-12 rate(:plonl,:,108) = 1.4e-11 rate(:plonl,:,115) = 2.4e-12 rate(:plonl,:,118) = 1.4e-11 rate(:plonl,:,121) = 5.e-12 rate(:plonl,:,144) = 6.8e-13 rate(:plonl,:,147) = 2.4e-12 rate(:plonl,:,151) = 1.5e-11 rate(:plonl,:,155) = 2.4e-12 rate(:plonl,:,165) = 4.e-14 rate(:plonl,:,166) = 3.e-12 rate(:plonl,:,167) = 1.e-11 rate(:plonl,:,168) = 2.1e-6 itemp(:plonl,:) = 1. / temp(:plonl,:) rate(:plonl,:,35) = 8e-12 * EXP( -2060. * itemp(:plonl,:) ) rate(:plonl,:,36) = 1.8e-11 * EXP( 110. * itemp(:plonl,:) ) rate(:plonl,:,37) = 3.2e-11 * EXP( 70. * itemp(:plonl,:) ) rate(:plonl,:,41) = 3.5e-12 * EXP( 250. * itemp(:plonl,:) ) rate(:plonl,:,42) = 3e-12 * EXP( -1500. * itemp(:plonl,:) ) rate(:plonl,:,43) = 5.6e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,44) = 1.2e-13 * EXP( -2450. * itemp(:plonl,:) ) rate(:plonl,:,45) = 2.3e-12 * EXP( 170. * itemp(:plonl,:) ) rate(:plonl,:,51) = 1.5e-11 * EXP( 170. * itemp(:plonl,:) ) rate(:plonl,:,53) = 1.3e-12 * EXP( 380. * itemp(:plonl,:) ) rate(:plonl,:,55) = 2.45e-12 * EXP( -1775. * itemp(:plonl,:) ) rate(:plonl,:,57) = 3.e-12 * EXP( 280. * itemp(:plonl,:) ) rate(:plonl,:,58) = 5.e-13 * EXP( -424. * itemp(:plonl,:) ) rate(:plonl,:,59) = 1.9e-14 * EXP( 706. * itemp(:plonl,:) ) rate(:plonl,:,60) = 3.8e-13 * EXP( 800. * itemp(:plonl,:) ) rate(:plonl,:,61) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,62) = 6.0e-13 * EXP( -2058. * itemp(:plonl,:) ) rate(:plonl,:,66) = 2.2e-11 * EXP( 120. * itemp(:plonl,:) ) rate(:plonl,:,67) = 3e-11 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,68) = 1.5e-12 * EXP( -880. * itemp(:plonl,:) ) rate(:plonl,:,69) = 2e-14 * EXP( -680. * itemp(:plonl,:) ) rate(:plonl,:,71) = 2.9e-12 * EXP( -160. * itemp(:plonl,:) ) rate(:plonl,:,72) = 4.8e-11 * EXP( 250. * itemp(:plonl,:) ) rate(:plonl,:,73) = 4.2e-12 * EXP( -240. * itemp(:plonl,:) ) rate(:plonl,:,74) = 5.5e-12 * EXP( -2000. * itemp(:plonl,:) ) rate(:plonl,:,76) = 6.5e-15 * EXP( -1900. * itemp(:plonl,:) ) rate(:plonl,:,77) = 4.6e-13 * EXP( -1156. * itemp(:plonl,:) ) rate(:plonl,:,78) = 4.2e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,79) = 7.5e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,80) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,81) = 5.6e-12 * EXP( 270. * itemp(:plonl,:) ) rate(:plonl,:,82) = 1.4e-12 * EXP( -1900. * itemp(:plonl,:) ) rate(:plonl,:,83) = 8.1e-12 * EXP( 270. * itemp(:plonl,:) ) rate(:plonl,:,85) = 4.3e-13 * EXP( 1040. * itemp(:plonl,:) ) rate(:plonl,:,86) = 1.3e-12 * EXP( 640. * itemp(:plonl,:) ) rate(:plonl,:,89) = 2.5e-12 * EXP( 500. * itemp(:plonl,:) ) rate(:plonl,:,90) = 1.05e-14 * EXP( -2000. * itemp(:plonl,:) ) rate(:plonl,:,91) = 8.7e-12 * EXP( -1070. * itemp(:plonl,:) ) rate(:plonl,:,92) = 2.6e-12 * EXP( 365. * itemp(:plonl,:) ) rate(:plonl,:,93) = 7.5e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,96) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,98) = 4.2e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,100) = 1.6e11 * EXP( -4150. * itemp(:plonl,:) ) rate(:plonl,:,101) = 1.2e-14 * EXP( -2630. * itemp(:plonl,:) ) rate(:plonl,:,102) = 2.54e-11 * EXP( 410. * itemp(:plonl,:) ) rate(:plonl,:,103) = 1.55e-11 * EXP( -540. * itemp(:plonl,:) ) rate(:plonl,:,104) = 2.2e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,106) = 8.e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,107) = 5.e-13 * EXP( 400. * itemp(:plonl,:) ) rate(:plonl,:,109) = 4.13e-12 * EXP( 452. * itemp(:plonl,:) ) rate(:plonl,:,110) = 7.52e-16 * EXP( -1521. * itemp(:plonl,:) ) rate(:plonl,:,111) = 1.86e-11 * EXP( 175. * itemp(:plonl,:) ) rate(:plonl,:,112) = 4.4e-15 * EXP( -2500. * itemp(:plonl,:) ) rate(:plonl,:,113) = 2.7e-12 * EXP( 360. * itemp(:plonl,:) ) rate(:plonl,:,114) = 1.3e-13 * EXP( 360. * itemp(:plonl,:) ) rate(:plonl,:,116) = 8.e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,117) = 5.e-13 * EXP( 400. * itemp(:plonl,:) ) rate(:plonl,:,119) = 2.3e-11 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,120) = 5.3e-12 * EXP( 360. * itemp(:plonl,:) ) rate(:plonl,:,122) = 4.30e-13 * EXP( 1040. * itemp(:plonl,:) ) rate(:plonl,:,123) = 1.3e-12 * EXP( 640. * itemp(:plonl,:) ) rate(:plonl,:,124) = 4.6e-12 * EXP( 530. * itemp(:plonl,:) ) rate(:plonl,:,125) = 2.3e-12 * EXP( 530. * itemp(:plonl,:) ) rate(:plonl,:,128) = 1.2e-11 * EXP( 444. * itemp(:plonl,:) ) rate(:plonl,:,129) = 9.9e-15 * EXP( -730. * itemp(:plonl,:) ) rate(:plonl,:,130) = 5.6e-11 * EXP( -650. * itemp(:plonl,:) ) rate(:plonl,:,133) = 1.5e-11 * EXP( -3600. * itemp(:plonl,:) ) rate(:plonl,:,134) = 2.1e-11 * EXP( 100. * itemp(:plonl,:) ) rate(:plonl,:,135) = 1.0e-11 * EXP( -660. * itemp(:plonl,:) ) rate(:plonl,:,136) = 4.2e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,137) = 7.5e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,138) = 3.75e-13 * EXP( -40. * itemp(:plonl,:) ) rate(:plonl,:,139) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,141) = 4.2e-12 * EXP( 180. * itemp(:plonl,:) ) rate(:plonl,:,142) = 7.5e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,143) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,145) = 3.03e-12 * EXP( -446. * itemp(:plonl,:) ) rate(:plonl,:,146) = 2.7e-12 * EXP( 360. * itemp(:plonl,:) ) rate(:plonl,:,148) = 8.e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,149) = 8.4e-13 * EXP( 830. * itemp(:plonl,:) ) rate(:plonl,:,150) = 1.4e-12 * EXP( -1860. * itemp(:plonl,:) ) rate(:plonl,:,152) = 1.4e-12 * EXP( -1860. * itemp(:plonl,:) ) rate(:plonl,:,153) = 1.86e-11 * EXP( 175. * itemp(:plonl,:) ) rate(:plonl,:,154) = 2.7e-12 * EXP( 360. * itemp(:plonl,:) ) rate(:plonl,:,156) = 8.e-13 * EXP( 700. * itemp(:plonl,:) ) rate(:plonl,:,157) = 5.e-13 * EXP( 400. * itemp(:plonl,:) ) rate(:plonl,:,158) = 1.3e-12 * EXP( 640. * itemp(:plonl,:) ) rate(:plonl,:,159) = 1.90e-12 * EXP( 190. * itemp(:plonl,:) ) rate(:plonl,:,161) = 3.8e-12 * EXP( 200. * itemp(:plonl,:) ) rate(:plonl,:,162) = 6.7e-12 * EXP( -600. * itemp(:plonl,:) ) rate(:plonl,:,163) = 7.e-12 * EXP( -235. * itemp(:plonl,:) ) itemp(:,:) = 300. * itemp(:,:) ko(:,:) = 2.e-30 * itemp(:,:)**4.4 kinf(:,:) = 1.4e-12 * itemp(:,:)**.7 call JPL( rate(1,1,46), m, .6, ko, kinf ) ko(:,:) = 2.4e-30 * itemp(:,:)**3.1 kinf(:,:) = 1.7e-11 * itemp(:,:)**2.1 call JPL( rate(1,1,49), m, .6, ko, kinf ) ko(:,:) = 1.8e-31 * itemp(:,:)**3.2 kinf(:,:) = 4.7e-12 * itemp(:,:)**1.4 call JPL( rate(1,1,52), m, .6, ko, kinf ) ko(:,:) = 8.e-27 * itemp(:,:)**3.5 kinf(:,:) = 3.e-11 call JPL( rate(1,1,75), m, .5, ko, kinf ) ko(:,:) = 8.5e-29 * itemp(:,:)**6.5 kinf(:,:) = 1.1e-11 * itemp(:,:) call JPL( rate(1,1,84), m, .6, ko, kinf ) ko(:,:) = 1.e-28 * itemp(:,:)**.8 kinf(:,:) = 8.8e-12 call JPL( rate(1,1,97), m, .6, ko, kinf ) ko(:,:) = 8.e-27 * itemp(:,:)**3.5 kinf(:,:) = 3.e-11 call JPL( rate(1,1,164), m, .5, ko, kinf ) end subroutine SETRXT end module MO_SETRXT module MO_ADJRXT CONTAINS subroutine ADJRXT( rate, inv, m ) use MO_GRID, only : plnplv use CHEM_MODS, only : nfs, rxntot implicit none !-------------------------------------------------------------------- ! ... Dummy arguments !-------------------------------------------------------------------- real, intent(in) :: inv(plnplv,nfs) real, intent(in) :: m(plnplv) real, intent(inout) :: rate(plnplv,rxntot) !-------------------------------------------------------------------- ! ... Local variables !-------------------------------------------------------------------- real :: im(plnplv) rate(:, 36) = rate(:, 36) * inv(:, 2) rate(:, 37) = rate(:, 37) * inv(:, 3) rate(:, 38) = rate(:, 38) * inv(:, 4) rate(:, 46) = rate(:, 46) * inv(:, 1) rate(:, 47) = rate(:, 47) * inv(:, 1) rate(:, 48) = rate(:, 48) * inv(:, 4) rate(:, 49) = rate(:, 49) * inv(:, 1) rate(:, 52) = rate(:, 52) * inv(:, 1) rate(:, 54) = rate(:, 54) * inv(:, 1) rate(:, 75) = rate(:, 75) * inv(:, 1) rate(:, 84) = rate(:, 84) * inv(:, 1) rate(:, 88) = rate(:, 88) * inv(:, 1) rate(:, 97) = rate(:, 97) * inv(:, 1) rate(:, 99) = rate(:, 99) * inv(:, 3) rate(:,126) = rate(:,126) * inv(:, 1) rate(:,127) = rate(:,127) * inv(:, 1) rate(:,133) = rate(:,133) * inv(:, 3) rate(:, 34) = rate(:, 34) * inv(:, 3) * inv(:, 1) rate(:, 35) = rate(:, 35) * m(:) rate(:, 39) = rate(:, 39) * m(:) rate(:, 40) = rate(:, 40) * m(:) rate(:, 41) = rate(:, 41) * m(:) rate(:, 42) = rate(:, 42) * m(:) rate(:, 43) = rate(:, 43) * m(:) rate(:, 44) = rate(:, 44) * m(:) rate(:, 45) = rate(:, 45) * m(:) rate(:, 46) = rate(:, 46) * m(:) rate(:, 49) = rate(:, 49) * m(:) rate(:, 50) = rate(:, 50) * m(:) rate(:, 51) = rate(:, 51) * m(:) rate(:, 52) = rate(:, 52) * m(:) rate(:, 53) = rate(:, 53) * m(:) rate(:, 55) = rate(:, 55) * m(:) rate(:, 56) = rate(:, 56) * m(:) rate(:, 57) = rate(:, 57) * m(:) rate(:, 58) = rate(:, 58) * m(:) rate(:, 59) = rate(:, 59) * m(:) rate(:, 60) = rate(:, 60) * m(:) rate(:, 61) = rate(:, 61) * m(:) rate(:, 62) = rate(:, 62) * m(:) rate(:, 63) = rate(:, 63) * m(:) rate(:, 64) = rate(:, 64) * m(:) rate(:, 65) = rate(:, 65) * m(:) rate(:, 66) = rate(:, 66) * m(:) rate(:, 67) = rate(:, 67) * m(:) rate(:, 68) = rate(:, 68) * m(:) rate(:, 69) = rate(:, 69) * m(:) rate(:, 70) = rate(:, 70) * m(:) rate(:, 71) = rate(:, 71) * m(:) rate(:, 72) = rate(:, 72) * m(:) rate(:, 73) = rate(:, 73) * m(:) rate(:, 74) = rate(:, 74) * m(:) rate(:, 75) = rate(:, 75) * m(:) rate(:, 76) = rate(:, 76) * m(:) rate(:, 77) = rate(:, 77) * m(:) rate(:, 78) = rate(:, 78) * m(:) rate(:, 79) = rate(:, 79) * m(:) rate(:, 80) = rate(:, 80) * m(:) rate(:, 81) = rate(:, 81) * m(:) rate(:, 82) = rate(:, 82) * m(:) rate(:, 83) = rate(:, 83) * m(:) rate(:, 84) = rate(:, 84) * m(:) rate(:, 85) = rate(:, 85) * m(:) rate(:, 86) = rate(:, 86) * m(:) rate(:, 87) = rate(:, 87) * m(:) rate(:, 89) = rate(:, 89) * m(:) rate(:, 90) = rate(:, 90) * m(:) rate(:, 91) = rate(:, 91) * m(:) rate(:, 92) = rate(:, 92) * m(:) rate(:, 93) = rate(:, 93) * m(:) rate(:, 94) = rate(:, 94) * m(:) rate(:, 95) = rate(:, 95) * m(:) rate(:, 96) = rate(:, 96) * m(:) rate(:, 97) = rate(:, 97) * m(:) rate(:, 98) = rate(:, 98) * m(:) rate(:,101) = rate(:,101) * m(:) rate(:,102) = rate(:,102) * m(:) rate(:,103) = rate(:,103) * m(:) rate(:,104) = rate(:,104) * m(:) rate(:,105) = rate(:,105) * m(:) rate(:,106) = rate(:,106) * m(:) rate(:,107) = rate(:,107) * m(:) rate(:,108) = rate(:,108) * m(:) rate(:,109) = rate(:,109) * m(:) rate(:,110) = rate(:,110) * m(:) rate(:,111) = rate(:,111) * m(:) rate(:,112) = rate(:,112) * m(:) rate(:,113) = rate(:,113) * m(:) rate(:,114) = rate(:,114) * m(:) rate(:,115) = rate(:,115) * m(:) rate(:,116) = rate(:,116) * m(:) rate(:,117) = rate(:,117) * m(:) rate(:,118) = rate(:,118) * m(:) rate(:,119) = rate(:,119) * m(:) rate(:,120) = rate(:,120) * m(:) rate(:,121) = rate(:,121) * m(:) rate(:,122) = rate(:,122) * m(:) rate(:,123) = rate(:,123) * m(:) rate(:,124) = rate(:,124) * m(:) rate(:,125) = rate(:,125) * m(:) rate(:,126) = rate(:,126) * m(:) rate(:,128) = rate(:,128) * m(:) rate(:,129) = rate(:,129) * m(:) rate(:,130) = rate(:,130) * m(:) rate(:,134) = rate(:,134) * m(:) rate(:,135) = rate(:,135) * m(:) rate(:,136) = rate(:,136) * m(:) rate(:,137) = rate(:,137) * m(:) rate(:,138) = rate(:,138) * m(:) rate(:,139) = rate(:,139) * m(:) rate(:,140) = rate(:,140) * m(:) rate(:,141) = rate(:,141) * m(:) rate(:,142) = rate(:,142) * m(:) rate(:,143) = rate(:,143) * m(:) rate(:,144) = rate(:,144) * m(:) rate(:,145) = rate(:,145) * m(:) rate(:,146) = rate(:,146) * m(:) rate(:,147) = rate(:,147) * m(:) rate(:,148) = rate(:,148) * m(:) rate(:,149) = rate(:,149) * m(:) rate(:,150) = rate(:,150) * m(:) rate(:,151) = rate(:,151) * m(:) rate(:,152) = rate(:,152) * m(:) rate(:,153) = rate(:,153) * m(:) rate(:,154) = rate(:,154) * m(:) rate(:,155) = rate(:,155) * m(:) rate(:,156) = rate(:,156) * m(:) rate(:,157) = rate(:,157) * m(:) rate(:,158) = rate(:,158) * m(:) rate(:,159) = rate(:,159) * m(:) rate(:,160) = rate(:,160) * m(:) rate(:,161) = rate(:,161) * m(:) rate(:,162) = rate(:,162) * m(:) rate(:,163) = rate(:,163) * m(:) rate(:,164) = rate(:,164) * m(:) rate(:,165) = rate(:,165) * m(:) rate(:,166) = rate(:,166) * m(:) rate(:,167) = rate(:,167) * m(:) end subroutine ADJRXT end module MO_ADJRXT module MO_PHTADJ CONTAINS subroutine PHTADJ( p_rate, inv, m ) use MO_GRID, only : plnplv use CHEM_MODS, only : nfs, phtcnt implicit none !-------------------------------------------------------------------- ! ... Dummy arguments !-------------------------------------------------------------------- real, intent(in) :: inv(plnplv,nfs) real, intent(in) :: m(plnplv) real, intent(inout) :: p_rate(plnplv,phtcnt) !-------------------------------------------------------------------- ! ... Local variables !-------------------------------------------------------------------- real :: im(plnplv) im(:) = 1. / m(:) p_rate(:, 1) = p_rate(:, 1) * inv(:, 3) * im(:) p_rate(:, 14) = p_rate(:, 14) * inv(:, 4) * im(:) end subroutine PHTADJ end module MO_PHTADJ module MO_RXT_MOD CONTAINS subroutine RXT_MOD( rate, het_rates, grp_ratios ) use MO_GRID, only : plnplv use CHEM_MODS, only : rxntot, hetcnt, grpcnt implicit none !--------------------------------------------------------------------------- ! ... Dummy arguments !--------------------------------------------------------------------------- real, intent(inout) :: rate(plnplv,rxntot) real, intent(inout) :: het_rates(plnplv,hetcnt) real, intent(in) :: grp_ratios(plnplv,grpcnt) rate(:, 35) = rate(:, 35) * grp_ratios(:, 3) & * grp_ratios(:, 1) rate(:, 38) = rate(:, 38) * grp_ratios(:, 2) rate(:, 39) = rate(:, 39) * grp_ratios(:, 2) rate(:, 40) = rate(:, 40) * grp_ratios(:, 2) rate(:, 42) = rate(:, 42) * grp_ratios(:, 1) rate(:, 43) = rate(:, 43) * grp_ratios(:, 3) rate(:, 44) = rate(:, 44) * grp_ratios(:, 1) rate(:, 56) = rate(:, 56) * grp_ratios(:, 2) rate(:, 65) = rate(:, 65) * grp_ratios(:, 2) rate(:, 66) = rate(:, 66) * grp_ratios(:, 3) rate(:, 67) = rate(:, 67) * grp_ratios(:, 3) rate(:, 68) = rate(:, 68) * grp_ratios(:, 1) rate(:, 69) = rate(:, 69) * grp_ratios(:, 1) rate(:, 76) = rate(:, 76) * grp_ratios(:, 1) rate(:, 90) = rate(:, 90) * grp_ratios(:, 1) rate(:,101) = rate(:,101) * grp_ratios(:, 1) rate(:,110) = rate(:,110) * grp_ratios(:, 1) rate(:,112) = rate(:,112) * grp_ratios(:, 1) rate(:,129) = rate(:,129) * grp_ratios(:, 1) end subroutine RXT_MOD end module MO_RXT_MOD module MO_MAKE_GRP_VMR CONTAINS subroutine MAK_GRP_VMR( vmr, group_ratios, group_vmrs ) use MO_GRID, only : plonl, plev, pcnstm1 use CHEM_MODS, only : grpcnt implicit none !---------------------------------------------------------------------------- ! ... Dummy arguments !---------------------------------------------------------------------------- real, intent(in) :: vmr(plonl,plev,pcnstm1) real, intent(in) :: group_ratios(plonl,plev,grpcnt) real, intent(out) :: group_vmrs(plonl,plev,grpcnt) !---------------------------------------------------------------------------- ! ... Local variables !---------------------------------------------------------------------------- integer :: k do k = 1,plev group_vmrs(:,k, 1) = group_ratios(:,k, 1) * vmr(:,k, 1) group_vmrs(:,k, 2) = group_ratios(:,k, 2) * vmr(:,k, 1) group_vmrs(:,k, 3) = group_ratios(:,k, 3) * vmr(:,k, 1) end do end subroutine MAK_GRP_VMR end module MO_MAKE_GRP_VMR