Changeset 9ca6e38 in flexpart.git for src/calcmatrix.f90
- Timestamp:
- Mar 15, 2021, 9:48:30 AM (3 years ago)
- Branches:
- GFS_025, dev
- Children:
- aa939a9
- Parents:
- 467460a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/calcmatrix.f90
r467460a r9ca6e38 67 67 68 68 phconv(1) = psconv 69 70 do kuvz = 2,nuvz71 k = kuvz-172 if (metdata_format.eq.GRIBFILE_CENTRE_ECMWF) then69 ! Emanuel subroutine needs pressure in hPa, therefore convert all pressures 70 if (metdata_format.eq.GRIBFILE_CENTRE_ECMWF) then 71 do kuvz = 2,nuvz 72 k = kuvz-1 73 73 pconv(k) = (akz(kuvz) + bkz(kuvz)*psconv) 74 74 phconv(kuvz) = (akm(kuvz) + bkm(kuvz)*psconv) 75 else 76 phconv(kuvz) = 0.5*(pconv(kuvz)+pconv(k)) 77 endif 78 dpr(k) = phconv(k) - phconv(kuvz) 79 qsconv(k) = f_qvsat( pconv(k), tconv(k) ) 75 dpr(k) = phconv(k) - phconv(kuvz) 76 qsconv(k) = f_qvsat( pconv(k), tconv(k) ) 77 end do 78 else 79 ! JMA / SH Bugfix phconv was set in loop with access to undefined pconv(nuvz) 80 phconv(2:nuvz-1) = 0.5*(pconv(2:nuvz-1)+pconv(1:nuvz-2)) 81 phconv(nuvz) = pconv(nuvz-1) 82 dpr(1:nuvz-1) = phconv(1:nuvz-1)-phconv(2:nuvz) 80 83 81 ! initialize mass fractions 82 do kk=1,nconvlev 83 fmassfrac(k,kk)=0. 84 do k = 1,nuvz-1 85 qsconv(k) = f_qvsat( pconv(k), tconv(k) ) 84 86 end do 85 end do 86 87 end if 88 89 ! initialize mass fractions 90 fmassfrac(1:nuvz-1,1:nconvlev)=0.0 87 91 88 92 !note that Emanuel says it is important … … 93 97 !****************** 94 98 95 96 97 99 cbmfold = cbmf 100 ! Convert pressures to hPa, as required by Emanuel scheme 101 !******************************************************** 98 102 !!$ do k=1,nconvlev !old 99 do k=1,nconvlev+1 !bugfix 100 pconv_hpa(k)=pconv(k)/100. 101 phconv_hpa(k)=phconv(k)/100. 103 do k=1,nconvlev+1 !bugfix 104 pconv_hpa(k)=pconv(k)/100. 105 phconv_hpa(k)=phconv(k)/100. 106 end do 107 phconv_hpa(nconvlev+1)=phconv(nconvlev+1)/100. 108 call convect(nconvlevmax, nconvlev, delt, iflag, & 109 precip, wd, tprime, qprime, cbmf) 110 111 ! do not update fmassfrac and cloudbase massflux 112 ! if no convection takes place or 113 ! if a CFL criterion is violated in convect43c.f 114 if (iflag .ne. 1 .and. iflag .ne. 4) then 115 cbmf=cbmfold 116 goto 200 117 endif 118 119 ! do not update fmassfrac and cloudbase massflux 120 ! if the old and the new cloud base mass 121 ! fluxes are zero 122 if (cbmf.le.0..and.cbmfold.le.0.) then 123 cbmf=cbmfold 124 goto 200 125 endif 126 127 ! Update fmassfrac 128 ! account for mass displaced from level k to level k 129 130 lconv = .true. 131 do k=1,nconvtop 132 rlevmass = dpr(k)/ga 133 summe = 0. 134 do kk=1,nconvtop 135 fmassfrac(k,kk) = delt*fmass(k,kk) 136 summe = summe + fmassfrac(k,kk) 102 137 end do 103 phconv_hpa(nconvlev+1)=phconv(nconvlev+1)/100. 104 call convect(nconvlevmax, nconvlev, delt, iflag, & 105 precip, wd, tprime, qprime, cbmf) 138 fmassfrac(k,k)=fmassfrac(k,k) + rlevmass - summe 139 end do 106 140 107 ! do not update fmassfrac and cloudbase massflux 108 ! if no convection takes place or 109 ! if a CFL criterion is violated in convect43c.f 110 if (iflag .ne. 1 .and. iflag .ne. 4) then 111 cbmf=cbmfold 112 goto 200 113 endif 114 115 ! do not update fmassfrac and cloudbase massflux 116 ! if the old and the new cloud base mass 117 ! fluxes are zero 118 if (cbmf.le.0..and.cbmfold.le.0.) then 119 cbmf=cbmfold 120 goto 200 121 endif 122 123 ! Update fmassfrac 124 ! account for mass displaced from level k to level k 125 126 lconv = .true. 127 do k=1,nconvtop 128 rlevmass = dpr(k)/ga 129 summe = 0. 130 do kk=1,nconvtop 131 fmassfrac(k,kk) = delt*fmass(k,kk) 132 summe = summe + fmassfrac(k,kk) 133 end do 134 fmassfrac(k,k)=fmassfrac(k,k) + rlevmass - summe 135 end do 136 137 200 continue 141 200 continue 138 142 139 143 end subroutine calcmatrix
Note: See TracChangeset
for help on using the changeset viewer.