*IF DEF,FLUXPROC FPRDLMHD.2
C ******************************COPYRIGHT****************************** FPRDLMHD.3
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. FPRDLMHD.4
C FPRDLMHD.5
C Use, duplication or disclosure of this code is subject to the FPRDLMHD.6
C restrictions as set forth in the contract. FPRDLMHD.7
C FPRDLMHD.8
C Meteorological Office FPRDLMHD.9
C London Road FPRDLMHD.10
C BRACKNELL FPRDLMHD.11
C Berkshire UK FPRDLMHD.12
C RG12 2SZ FPRDLMHD.13
C FPRDLMHD.14
C If no contract has been raised with this copy of the code, the use, FPRDLMHD.15
C duplication or disclosure of it is strictly prohibited. Permission FPRDLMHD.16
C to do so must first be obtained in writing from the Head of Numerical FPRDLMHD.17
C Modelling at the above address. FPRDLMHD.18
C ******************************COPYRIGHT****************************** FPRDLMHD.19
C FPRDLMHD.20
C Programming standard: Unified Model Documentation Paper No 3 FPRDLMHD.21
C Version No 1 15/1/90 FPRDLMHD.22
C History: FPRDLMHD.23
C version date change FPRDLMHD.24
C 4.5 03/09/98 New code FPRDLMHD.25
C FPRDLMHD.26
! Author: M. J. Bell FPRDLMHD.27
!---------------------------------------------------------------------- FPRDLMHD.28
! contains routines: read_lsm_headers FPRDLMHD.29
! FPRDLMHD.30
! Purpose: Flux processing routine. FPRDLMHD.31
! Opens and reads lookup tables for land sea masks used by FPRDLMHD.32
! FOAM_Flux_Process. Also sets LCyclic = T if atmosphere FPRDLMHD.33
! grid has wrap-round points FPRDLMHD.34
!---------------------------------------------------------------------- FPRDLMHD.35
subroutine read_lsm_headers ( 1,8FPRDLMHD.36
*CALL AFLDDIMS
FPRDLMHD.37
# ppxRecs,icode) FPRDLMHD.38
FPRDLMHD.39
implicit none FPRDLMHD.40
FPRDLMHD.41
! declaration of argument list FPRDLMHD.42
! dimensions of ocean and atmosphere fields FPRDLMHD.43
*CALL CFLDDIMS
FPRDLMHD.44
integer icode ! IN/OUT error code ; > 0 => fatal error detected FPRDLMHD.45
FPRDLMHD.46
! declaration of parameters FPRDLMHD.47
*CALL CSUBMODL
FPRDLMHD.48
*CALL CPPXREF
FPRDLMHD.49
*CALL PPXLOOK
FPRDLMHD.50
*CALL PLOOKUPS
FPRDLMHD.51
*CALL CLOOKADD
FPRDLMHD.52
FPRDLMHD.53
! declaration of globals used FPRDLMHD.54
*CALL CUNITNOS
FPRDLMHD.55
*CALL CMESS
FPRDLMHD.56
*CALL CLOOKUPS
FPRDLMHD.57
FPRDLMHD.58
! no local arrays FPRDLMHD.59
FPRDLMHD.60
! declaration of local scalars FPRDLMHD.61
integer Len2_Lookup_lsm ! max 2nd dimension for lsms FPRDLMHD.62
integer Len2_Lookup_Actual ! actual 2nd dimension for lsms FPRDLMHD.63
integer IROW_NUMBER FPRDLMHD.64
character*80 cmessage FPRDLMHD.65
FPRDLMHD.66
external read_one_header, set_lookup_lsmu FPRDLMHD.67
!---------------------------------------------------------------------- FPRDLMHD.68
! 0. Preliminaries FPRDLMHD.69
CSub = 'read_lsm_headers'! subroutine name for error messages FPRDLMHD.70
Len2_Lookup_lsm = 1 ! all lsm ancillary files contain 1 field FPRDLMHD.71
FPRDLMHD.72
! 0.1 Read StashMaster files FPRDLMHD.73
IROW_NUMBER=0 FPRDLMHD.74
CALL GETPPX
(22,2,'STASHmaster_A',IROW_NUMBER, FPRDLMHD.75
*CALL ARGPPX
FPRDLMHD.76
& ICODE,CMESSAGE) FPRDLMHD.77
CALL GETPPX
(22,2,'STASHmaster_O',IROW_NUMBER, FPRDLMHD.78
*CALL ARGPPX
FPRDLMHD.79
& ICODE,CMESSAGE) FPRDLMHD.80
CALL GETPPX
(22,2,'STASHmaster_S',IROW_NUMBER, FPRDLMHD.81
*CALL ARGPPX
FPRDLMHD.82
& ICODE,CMESSAGE) FPRDLMHD.83
CALL GETPPX
(22,2,'STASHmaster_W',IROW_NUMBER, FPRDLMHD.84
*CALL ARGPPX
FPRDLMHD.85
& ICODE,CMESSAGE) FPRDLMHD.86
FPRDLMHD.87
FPRDLMHD.88
! 1. read atmosphere tracer land / sea mask fixed header and lookup FPRDLMHD.89
! table from an an ancillary file FPRDLMHD.90
call read_one_header
(UnitNWPlsmt, icode, FPRDLMHD.91
# Len_FixHd, Len1_Lookup, Len2_Lookup_lsm, FPRDLMHD.92
# Len2_Lookup_Actual, FixHdlsmt, FPRDLMHD.93
*CALL ARGPPX
FPRDLMHD.94
# Lookuplsmt) FPRDLMHD.95
FPRDLMHD.96
if ( icode .gt. 0 ) then FPRDLMHD.97
write(UnErr,*)CErr,CSub, FPRDLMHD.98
# ' step 1. unable to read NWP tracer land sea mask headers' FPRDLMHD.99
go to 9999 FPRDLMHD.100
end if FPRDLMHD.101
FPRDLMHD.102
! 1.1 extract the number of rows and columns from the lookup table FPRDLMHD.103
ncols = Lookuplsmt(LBNPT) FPRDLMHD.104
nrowst = Lookuplsmt(LBROW) FPRDLMHD.105
FPRDLMHD.106
! 2. set atmosphere velocity land/sea mask lookup table from the tracer FPRDLMHD.107
! land / sea mask (calculations assume B grid) ! FPRDLMHD.108
call set_lookup_lsmu
( Len1_Lookup, Lookuplsmt, Lookuplsmu ) FPRDLMHD.109
FPRDLMHD.110
! 2.1 extract the number of rows from the lookup table FPRDLMHD.111
nrowsu = Lookuplsmu(LBROW) FPRDLMHD.112
FPRDLMHD.113
! 3. Set LCyclic (T if atmosphere grid has wrap points) FPRDLMHD.114
! if fixhd(4) FPRDLMHD.115
if ( MOD ( FixHdlsmt (4) , 100 ) .ne. 3 ) then FPRDLMHD.116
LCyclic = .True. FPRDLMHD.117
else FPRDLMHD.118
LCyclic = .False. FPRDLMHD.119
end if FPRDLMHD.120
FPRDLMHD.121
! 4. read ocean tracer land / sea mask lookup table FPRDLMHD.122
call read_one_header
(UnitFOAMlsmt, icode, FPRDLMHD.123
# Len_FixHd, Len1_Lookup, Len2_Lookup_lsm, FPRDLMHD.124
# Len2_Lookup_Actual, FixHdlsmtO, FPRDLMHD.125
*CALL ARGPPX
FPRDLMHD.126
# LookuplsmtO) FPRDLMHD.127
FPRDLMHD.128
FPRDLMHD.129
if ( icode .gt. 0 ) then FPRDLMHD.130
write(UnErr,*)CErr,CSub, FPRDLMHD.131
# ' step 4. unable to read ocean tracer land sea mask ' FPRDLMHD.132
go to 9999 FPRDLMHD.133
end if FPRDLMHD.134
FPRDLMHD.135
! 4.1 extract the number of rows and columns from the lookup table FPRDLMHD.136
ncolsO = LookuplsmtO(LBNPT) FPRDLMHD.137
nrowstO = LookuplsmtO(LBROW) FPRDLMHD.138
FPRDLMHD.139
! 5. read ocean velocity land / sea mask lookup table FPRDLMHD.140
call read_one_header
(UnitFOAMlsmu, icode, FPRDLMHD.141
# Len_FixHd, Len1_Lookup, Len2_Lookup_lsm, FPRDLMHD.142
# Len2_Lookup_Actual, FixHdlsmuO, FPRDLMHD.143
*CALL ARGPPX
FPRDLMHD.144
# LookuplsmuO) FPRDLMHD.145
FPRDLMHD.146
if ( icode .gt. 0 ) then FPRDLMHD.147
write(UnErr,*)CErr,CSub, FPRDLMHD.148
# ' step 5. unable to read ocean velocity land sea mask ' FPRDLMHD.149
go to 9999 FPRDLMHD.150
end if FPRDLMHD.151
FPRDLMHD.152
! 5.1 extract the number of rows and columns from the lookup table FPRDLMHD.153
nrowsuO = LookuplsmuO(LBROW) FPRDLMHD.154
FPRDLMHD.155
9999 continue FPRDLMHD.156
return FPRDLMHD.157
end FPRDLMHD.158
!---------------------------------------------------------------------- FPRDLMHD.159
*ENDIF FPRDLMHD.160