*IF DEF,FLUXPROC FPRDCNT1.2
C ******************************COPYRIGHT****************************** FPRDCNT1.3
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. FPRDCNT1.4
C FPRDCNT1.5
C Use, duplication or disclosure of this code is subject to the FPRDCNT1.6
C restrictions as set forth in the contract. FPRDCNT1.7
C FPRDCNT1.8
C Meteorological Office FPRDCNT1.9
C London Road FPRDCNT1.10
C BRACKNELL FPRDCNT1.11
C Berkshire UK FPRDCNT1.12
C RG12 2SZ FPRDCNT1.13
C FPRDCNT1.14
C If no contract has been raised with this copy of the code, the use, FPRDCNT1.15
C duplication or disclosure of it is strictly prohibited. Permission FPRDCNT1.16
C to do so must first be obtained in writing from the Head of Numerical FPRDCNT1.17
C Modelling at the above address. FPRDCNT1.18
C ******************************COPYRIGHT****************************** FPRDCNT1.19
C FPRDCNT1.20
C Programming standard: Unified Model Documentation Paper No 3 FPRDCNT1.21
C Version No 1 15/1/90 FPRDCNT1.22
C History: FPRDCNT1.23
C version date change FPRDCNT1.24
C 4.5 03/09/98 New code FPRDCNT1.25
C FPRDCNT1.26
! Author: M. J. Bell FPRDCNT1.27
!---------------------------------------------------------------------- FPRDCNT1.28
! contains routines: read_control_files FPRDCNT1.29
! FPRDCNT1.30
! Purpose: Flux processing routine. FPRDCNT1.31
! Reads all control files used by FOAM_Flux_Process FPRDCNT1.32
! Units added for pressure and windspeed (S. Spall) FPRDCNT1.33
!---------------------------------------------------------------------- FPRDCNT1.34
subroutine read_control_files (icode) 1,4FPRDCNT1.35
FPRDCNT1.36
implicit none FPRDCNT1.37
FPRDCNT1.38
! declaration of argument list FPRDCNT1.39
integer icode ! IN/OUT error code ; > 0 => fatal error detected FPRDCNT1.40
FPRDCNT1.41
! declaration of globals used FPRDCNT1.42
*CALL CUNITNOS
FPRDCNT1.43
*CALL CMESS
FPRDCNT1.44
FPRDCNT1.45
*CALL CREFTIM
FPRDCNT1.46
*CALL CVALOFF
FPRDCNT1.47
FPRDCNT1.48
*CALL C_MDI
FPRDCNT1.49
FPRDCNT1.50
! declaration of local arrays FPRDCNT1.51
integer iunit_base(7) ! main unit numbers for output files FPRDCNT1.52
FPRDCNT1.53
! declaration of local scalars FPRDCNT1.54
integer ivt ! loop index over validity times FPRDCNT1.55
integer iunit ! loop index over unit numbers FPRDCNT1.56
integer IAdd ! value to add to basic unit number FPRDCNT1.57
integer IUnitOpen ! unit number to open FPRDCNT1.58
FPRDCNT1.59
! namelist declaration FPRDCNT1.60
NAMELIST / NamFluxSelect / FPRDCNT1.61
# ValidityPeriod, FPRDCNT1.62
# NoValidTimes, IValidOffHr, IOutUnitOff, FPRDCNT1.63
# NoAddTimesPreferred, ISrchOffHrPreferred, INewOffHrPreferred, FPRDCNT1.64
# NoAddTimesPrevious, ISrchOffHrPrevious, INewOffHrPrevious, FPRDCNT1.65
# NoAddTimesClimate, ISrchOffHrClimate, INewOffHrClimate, FPRDCNT1.66
# output_land_value FPRDCNT1.67
FPRDCNT1.68
! declaration of external subroutines and functions FPRDCNT1.69
external readhk, read_debug_cntl, open_file FPRDCNT1.70
FPRDCNT1.71
!---------------------------------------------------------------------- FPRDCNT1.72
! 0. Preliminaries FPRDCNT1.73
CSub = 'read_control_files' ! subroutine name for error messages FPRDCNT1.74
FPRDCNT1.75
! 1. Read house keeping file to set reference date FPRDCNT1.76
RefSec = 0 FPRDCNT1.77
RefMin = 0 FPRDCNT1.78
call readhk
(UnitHK, RefHour, RefDay, RefMonth, RefYear,icode) FPRDCNT1.79
FPRDCNT1.80
if ( icode .ne. 0 ) then FPRDCNT1.81
write (UnErr,*)CErr,CSub, FPRDCNT1.82
# '1. Failed to read housekeeping file' FPRDCNT1.83
goto 9999 FPRDCNT1.84
endif FPRDCNT1.85
write(UnStd,*) CStd,CSub,'reference time from housekeeping file:' FPRDCNT1.86
# , ' RefYear, RefMonth, RefDay, RefHour, RefMin, RefSec = ', FPRDCNT1.87
# RefYear, RefMonth, RefDay, RefHour, RefMin, RefSec FPRDCNT1.88
FPRDCNT1.89
! 2. Read debug control file and open debug ouput file FPRDCNT1.90
call read_debug_cntl
( icode ) FPRDCNT1.91
if ( icode .gt. 0 ) then FPRDCNT1.92
write(UnErr,*)CErr,CSub, FPRDCNT1.93
# ' step 2. Failed to read debug control file' FPRDCNT1.94
go to 9999 FPRDCNT1.95
end if FPRDCNT1.96
FPRDCNT1.97
! 2.1 Read select control file FPRDCNT1.98
call read_select_cntl
( icode ) FPRDCNT1.99
if ( icode .gt. 0 ) then FPRDCNT1.100
write(UnErr,*)CErr,CSub, FPRDCNT1.101
# ' step 2.1 Failed to read select control file' FPRDCNT1.102
go to 9999 FPRDCNT1.103
end if FPRDCNT1.104
FPRDCNT1.105
! 3. Read validity times control file FPRDCNT1.106
FPRDCNT1.107
! 3.0 Set defaults FPRDCNT1.108
NoAddTimesPreferred = 0 FPRDCNT1.109
NoAddTimesPrevious = 0 FPRDCNT1.110
NoAddTimesClimate = 0 FPRDCNT1.111
FPRDCNT1.112
do ivt = 1, MaxTimes FPRDCNT1.113
IValidOffHr(ivt) = 0 FPRDCNT1.114
IOutUnitOff(ivt) = 0 FPRDCNT1.115
ISrchOffHrPreferred(ivt) = 0 FPRDCNT1.116
INewOffHrPreferred(ivt) = 0 FPRDCNT1.117
ISrchOffHrPrevious(ivt) = 0 FPRDCNT1.118
INewOffHrPrevious(ivt) = 0 FPRDCNT1.119
ISrchOffHrClimate(ivt) = 0 FPRDCNT1.120
INewOffHrClimate(ivt) = 0 FPRDCNT1.121
end do FPRDCNT1.122
FPRDCNT1.123
output_land_value = rmdi FPRDCNT1.124
FPRDCNT1.125
! 3.1 read namelist FPRDCNT1.126
FPRDCNT1.127
read (UnitVT, NamFluxSelect, iostat = icode) FPRDCNT1.128
if ( icode .gt. 0) then FPRDCNT1.129
write(UnErr,*)CErr,CSub, FPRDCNT1.130
# ' step 3.1 Failed to read validity times control file' FPRDCNT1.131
icode = 10 FPRDCNT1.132
go to 9999 FPRDCNT1.133
end if FPRDCNT1.134
FPRDCNT1.135
write(UnStd, NamFluxSelect) FPRDCNT1.136
FPRDCNT1.137
! 4. set which units to open for output flux files FPRDCNT1.138
FPRDCNT1.139
do iunit = IUnOutLow, IUnOutHi FPRDCNT1.140
LUnOutOpen(iunit) = .False. FPRDCNT1.141
end do FPRDCNT1.142
FPRDCNT1.143
iunit_base(1) = UnitWindsOut FPRDCNT1.144
iunit_base(2) = UnitHeatOut FPRDCNT1.145
iunit_base(3) = UnitMoistureOut FPRDCNT1.146
iunit_base(4) = UnitSeaIceOut FPRDCNT1.147
iunit_base(5) = UnitReferencesOut FPRDCNT1.148
iunit_base(6) = UnitPressureOut FPRDCNT1.149
iunit_base(7) = UnitWindspdOut FPRDCNT1.150
FPRDCNT1.151
do ivt = 1, NoValidTimes FPRDCNT1.152
IAdd = IOutUnitOff(ivt) FPRDCNT1.153
do iunit = 1, 7 FPRDCNT1.154
IUnitOpen = iunit_base(iunit) + IAdd FPRDCNT1.155
if ( IUnitOpen .lt. IUnOutLow .or. FPRDCNT1.156
# IUnitOpen .gt. IUnOutHi ) then FPRDCNT1.157
icode = 11 FPRDCNT1.158
write(UnErr,*)CErr,CSub,' step 4. Unit number chosen' FPRDCNT1.159
# ,' incorrectly; ivt,iunit =',ivt,iunit FPRDCNT1.160
go to 9999 FPRDCNT1.161
else FPRDCNT1.162
LUnOutOpen(IUnitOpen) = .True. FPRDCNT1.163
end if FPRDCNT1.164
end do ! iunit FPRDCNT1.165
end do ! ivt FPRDCNT1.166
FPRDCNT1.167
! 5. open output flux files FPRDCNT1.168
do iunit = IUnOutLow, IUnOutHi FPRDCNT1.169
if ( LUnOutOpen(iunit) ) then FPRDCNT1.170
FPRDCNT1.171
call open_file
( iunit, 'unformatted', 'unknown', icode ) FPRDCNT1.172
write(UnStd,*)CStd,CSub, ' step 5. Opening file ', iunit FPRDCNT1.173
FPRDCNT1.174
if ( icode .gt. 0) then FPRDCNT1.175
write(UnErr,*)CErr,CSub, FPRDCNT1.176
# ' step 5. Failed to open output flux file ', iunit FPRDCNT1.177
icode = 12 FPRDCNT1.178
go to 9999 FPRDCNT1.179
end if ! icode FPRDCNT1.180
FPRDCNT1.181
end if ! LUnOutOpen(iunit) FPRDCNT1.182
end do ! iunit FPRDCNT1.183
FPRDCNT1.184
9999 continue FPRDCNT1.185
return FPRDCNT1.186
end FPRDCNT1.187
!---------------------------------------------------------------------- FPRDCNT1.188
*ENDIF FPRDCNT1.189