prep_outgrid.f90 6.58 KiB
!---------------------------------------------------------------------------------------
! PREP_FLEXPART: prep_outgrid
!---------------------------------------------------------------------------------------
! FLEXINVERT is free software: you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation, either version 3 of the License, or
! (at your option) any later version.
!
! FLEXINVERT is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; 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 General Public License
! along with FLEXINVERT. If not, see <http://www.gnu.org/licenses/>.
!
! Copyright 2017, Rona Thompson
!---------------------------------------------------------------------------------------
!
!> prep_outgrid
!!
!! Purpose: Prepares the options file OUTGRID
!!
!! Interface:
!!
!! Inputs
!! settings - settings data structure
!! jd - julian day for start of month
!! nr - index to the receptors list
!!
!! Externals
!! caldate
!! skiplines
!!
!---------------------------------------------------------------------------------------
subroutine prep_outgrid(settings, jd, nr)
use mod_var
use mod_settings
use mod_dates
use mod_tools
implicit none
type (settings_t), intent(in) :: settings
real(kind=8), intent(in) :: jd
integer, intent(in) :: nr
character(len=max_path_len) :: filename
character(len=6) :: adate
integer :: jjjjmm, jjjjmmdd, hhmiss
integer :: datei, datef, eomday
integer :: ierr, n
real :: outlon0, outlat0, outlon0n, outlat0n
integer :: numxgrid, numygrid, numxgridn, numygridn
real :: dxout, dyout, dxoutn, dyoutn
real, dimension(settings%numzgrid) :: outheights
namelist /outgrid/ &
outlon0, &
outlat0, &
numxgrid, &
numygrid, &
dxout, &
dyout, &
outheights
namelist /outgridn/ &
outlon0n, &
outlat0n, &
numxgridn, &
numygridn, &
dxoutn, &
dyoutn
! write OUTGRID
! preset namelist variables
outlon0 = settings%outlonleft
! correction for FLEXPART windfields
if ( settings%outlonleft.le.-180. ) then
if ( settings%windfield.eq.'oper' ) then
outlon0 = -179.
else if ( settings%windfield.eq.'era5' ) then
outlon0 = -179.5
else
write(*,*) 'ERROR: prep_outgrid: unknown windfield type'
stop
endif
endif
outlat0 = settings%outlatlower
numxgrid = settings%numxgrid
numygrid = settings%numygrid
dxout = settings%dxout
dyout = settings%dyout
do n = 1, settings%numzgrid
outheights(n) = settings%zlevel(n)
end do
call caldate(jd, jjjjmmdd, hhmiss)
write(adate,fmt='(I6.6)') jjjjmmdd/100
filename = trim(settings%path_options)//trim(recname(nr))//'/'//adate//'/options/OUTGRID'
open(100,file=trim(filename),status='replace',action='write',iostat=ierr)
if( settings%lnamelist.eq.1 ) then
! use namelist file format
write(100,nml=outgrid)
else
! use old file format
write(100,fmt='(A)') '********************************************************************************'
write(100,fmt='(A)') '* *'
write(100,fmt='(A)') '* Input file for the Lagrangian particle dispersion model FLEXPART *'
write(100,fmt='(A)') '* Please specify your output grid *'
write(100,fmt='(A)') '* *'
write(100,fmt='(A)') '********************************************************************************'
call skiplines(100,2)
write(100,fmt='(4X,F11.4)') settings%outlonleft
call skiplines(100,3)
write(100,fmt='(4X,F11.4)') settings%outlatlower
call skiplines(100,3)
write(100,fmt='(4X,I5)') settings%numxgrid
call skiplines(100,3)
write(100,fmt='(4X,I5)') settings%numygrid
call skiplines(100,3)
write(100,fmt='(4X,F12.5)') settings%dxout
call skiplines(100,3)
write(100,fmt='(4X,F12.5)') settings%dyout
call skiplines(100,3)
do n = 1, settings%numzgrid
write(100,fmt='(4X,F7.1)') settings%zlevel(n)
call skiplines(100,3)
end do
endif
close(100)
! write OUTGRID_NEST
if( settings%lnested.eq.1 ) then
! preset namelist variables
outlon0n = settings%outlonnest
outlat0n = settings%outlatnest
numxgridn = settings%numxnest
numygridn = settings%numynest
dxoutn = settings%dxoutnest
dyoutn = settings%dyoutnest
call caldate(jd, jjjjmmdd, hhmiss)
write(adate,fmt='(I6.6)') jjjjmmdd/100
filename = trim(settings%path_options)//trim(recname(nr))//'/'//adate//'/options/OUTGRID_NEST'
open(100,file=trim(filename),status='replace',action='write',iostat=ierr)
if( settings%lnamelist.eq.1 ) then
! use namelist file format
write(100,nml=outgridn)
else
! use old file format
write(100,*) '********************************************************************************'
write(100,*) '* *'
write(100,*) '* Input file for the Lagrangian particle dispersion model FLEXPART *'
write(100,*) '* Please specify your output grid *'
write(100,*) '* *'
write(100,*) '********************************************************************************'
call skiplines(100,2)
write(100,fmt='(F11.4)') settings%outlonnest
call skiplines(100,3)
write(100,fmt='(F11.4)') settings%outlatnest
call skiplines(100,3)
write(100,fmt='(I5)') settings%numxnest
call skiplines(100,3)
write(100,fmt='(I5)') settings%numynest
call skiplines(100,3)
write(100,fmt='(F10.3)') settings%dxoutnest
call skiplines(100,3)
write(100,fmt='(F10.3)') settings%dyoutnest
call skiplines(100,3)
do n = 1, settings%numzgrid
write(100,fmt='(F7.1)') settings%zlevel(n)
call skiplines(100,3)
end do
close(100)
endif
endif
end subroutine prep_outgrid