1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
!**********************************************************************
! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010 *
! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa, *
! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann *
! *
! This file is part of FLEXPART. *
! *
! FLEXPART 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. *
! *
! FLEXPART 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 FLEXPART. If not, see <http://www.gnu.org/licenses/>. *
!**********************************************************************
subroutine readpartpositions
!*****************************************************************************
! *
! This routine opens the particle dump file and reads all the particle *
! positions from a previous run to initialize the current run. *
! *
! *
! Author: A. Stohl *
! *
! 24 March 2000 *
! *
!*****************************************************************************
! *
! Variables: *
! *
!*****************************************************************************
use par_mod
use com_mod
implicit none
integer :: ibdatein,ibtimein,nspecin,itimein,numpointin,i,j,ix
integer :: id1,id2,it1,it2
real :: xlonin,ylatin,ran1,topo,hmixi,pvi,qvi,rhoi,tri,tti
character :: specin*7
real(kind=dp) :: julin,julpartin,juldate
integer :: idummy = -8
numparticlecount=0
! Open header file of dumped particle data
!*****************************************
open(unitpartin,file=path(2)(1:length(2))//'header', &
form='unformatted',err=998)
read(unitpartin) ibdatein,ibtimein
read(unitpartin)
read(unitpartin)
read(unitpartin)
read(unitpartin)
read(unitpartin) nspecin
nspecin=nspecin/3
if ((ldirect.eq.1).and.(nspec.ne.nspecin)) goto 997
do i=1,nspecin
read(unitpartin)
read(unitpartin)
read(unitpartin) j,specin
if ((ldirect.eq.1).and.(species(i)(1:7).ne.specin)) goto 996
end do
read(unitpartin) numpointin
if (numpointin.ne.numpoint) goto 995
do i=1,numpointin
read(unitpartin)
read(unitpartin)
read(unitpartin)
read(unitpartin)
do j=1,nspec
read(unitpartin)
read(unitpartin)
read(unitpartin)
end do
end do
read(unitpartin)
read(unitpartin)
do ix=0,numxgrid-1
read(unitpartin)
end do
! Open data file of dumped particle data
!***************************************
close(unitpartin)
open(unitpartin,file=path(2)(1:length(2))//'partposit_end', &
form='unformatted',err=998)
100 read(unitpartin,end=99) itimein
i=0
200 i=i+1
read(unitpartin) npoint(i),xlonin,ylatin,ztra1(i),itramem(i), &
topo,pvi,qvi,rhoi,hmixi,tri,tti,(xmass1(i,j),j=1,nspec)
if (xlonin.eq.-9999.9) goto 100
xtra1(i)=(xlonin-xlon0)/dx
ytra1(i)=(ylatin-ylat0)/dy
numparticlecount=max(numparticlecount,npoint(i))
goto 200
99 numpart=i-1
close(unitpartin)
julin=juldate(ibdatein,ibtimein)+real(itimein,kind=dp)/86400._dp
if (abs(julin-bdate).gt.1.e-5) goto 994
do i=1,numpart
julpartin=juldate(ibdatein,ibtimein)+ &
real(itramem(i),kind=dp)/86400._dp
nclass(i)=min(int(ran1(idummy)*real(nclassunc))+1, &
nclassunc)
idt(i)=mintime
itra1(i)=0
itramem(i)=nint((julpartin-bdate)*86400.)
itrasplit(i)=ldirect*itsplit
end do
return
994 write(*,*) ' #### FLEXPART MODEL ERROR IN READPARTPOSITIONS#### '
write(*,*) ' #### ENDING TIME OF PREVIOUS MODEL RUN DOES #### '
write(*,*) ' #### NOT AGREE WITH STARTING TIME OF THIS RUN.#### '
call caldate(julin,id1,it1)
call caldate(bdate,id2,it2)
write(*,*) 'julin: ',julin,id1,it1
write(*,*) 'bdate: ',bdate,id2,it2
stop
995 write(*,*) ' #### FLEXPART MODEL ERROR IN READPARTPOSITIONS#### '
write(*,*) ' #### NUMBER OF RELEASE LOCATIONS DOES NOT #### '
write(*,*) ' #### AGREE WITH CURRENT SETTINGS! #### '
stop
996 write(*,*) ' #### FLEXPART MODEL ERROR IN READPARTPOSITIONS#### '
write(*,*) ' #### SPECIES NAMES TO BE READ IN DO NOT #### '
write(*,*) ' #### AGREE WITH CURRENT SETTINGS! #### '
stop
997 write(*,*) ' #### FLEXPART MODEL ERROR IN READPARTPOSITIONS#### '
write(*,*) ' #### THE NUMBER OF SPECIES TO BE READ IN DOES #### '
write(*,*) ' #### NOT AGREE WITH CURRENT SETTINGS! #### '
stop
998 write(*,*) ' #### FLEXPART MODEL ERROR! THE FILE #### '
write(*,*) ' #### '//path(2)(1:length(2))//'grid'//' #### '
write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### '
write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### '
write(*,*) ' #### THE PROGRAM AGAIN. #### '
stop
end subroutine readpartpositions
|