!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE INITPARA ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE initpara(nx,ny,nz,nstyps) 9,278
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Initialize the model control parameters. Most of them are read in
! from an input file.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! 3/17/1991.
!
! MODIFICATION HISTORY:
!
! 5/02/92 (M. Xue)
! Added full documentation.
!
! 5/25/92 (M. Xue)
! Reworked to provide a friendly user interface for control
! parameter input, and write out a log file.
!
! 6/04/92 (M. Xue)
! Further facelift.
!
! 8/03/92 (M. Xue)
! The grid scale in the formula of divergecne damping coefficient
! is changed from (dx*dy*dz)**(2/3) to min(dx,dy,dz)**2.
! This will affect the results as compared with previous runs.
! Added output control parameter input etc.
!
! 4/16/93 (M. Xue and H. Jin)
! Added parameter inputs that are related to terrain.
!
! 9/20/93 (A. Sathye and M. Xue)
! Changed to the NAMELIST input format.
!
! 9/27/93 (M. Xue)
! For non-stretched case, dzmin is set to dz. For 2-d mode,
! appropriate LBC's are automatially set to periodic B.C.
!
! 12/3/93 (M. Xue)
! Added parameters for automatical grid translation.
!
! 2/12/94 (Yuhe Liu)
! Added parameters for surface energy budget model.
!
! 10/26/94 (Y. Liu)
! Add lbcopt to namelist &boundary_condition_options for the
! lateral boundary condition option.
!
! 12/12/94 (Y. Liu)
! Changed default values of variables in namelists to the same as
! in User's Guide and corrected the log file output.
!
! 12/22/94 (Y. Liu)
! Added more parameters into the namelist blocks, including
! ubar0 and vbar0 in initialization, and strhtune in grid.
!
! 01/28/95 (G. Bassett)
! Added new parameter, buoyopt, to input namelist &initialization.
!
! 08/24/95 (K. Brewster)
! Changed informative opening message to tell user about namelist.
!
! 2/2/96 (Donghai Wang & yuhe Liu)
! Added parameters for map projection factor.
!
! 3/26/96 (Yuhe Liu)
! Added a namelist, &radiation, and parameters for radiation.
!
! 4/2/96 (Donghai Wang, X. Song and M. Xue)
! Added parameters for implicit treatment of vertical mixing.
!
! 5/7/96 (Donghai Wang and M. Xue)
! Added a parameter for Rayleigh damping.
!
! 7/31/96 (Ming Xue and Yuhe Liu)
! Added the isotropic option for divergence damping. Parameter
! divdmpnd changed to divdmpndh for horizontal and divdmpndv for
! vertical.
!
! 3/23/97 (Ming Xue)
! Parameter scmixfctr added to namelist block computational_mixing.
!
! 3/23/97 (Ming Xue)
! Modifications made so that the program will complete reading in
! input parameters and check their validity even when error is
! encountered before it stops at the end of this subroutine.
!
! 7/27/97 (Dan Weber)
! Added fftopt to the list of specified parameters.
!
! 10/21/97 (Donghai Wang)
! Added two parameters,buoy2nd and rhofctopt.
!
! 04/15/98 (Donghai Wang)
! Added a new fraction factor for Kain-Fritsch scheme.
!
! 08/31/98 (K. Brewster)
! Added nudging NAMELIST to version 4.4.
!
! 1999/10/21 (Gene Bassett)
! Separated the reading in from the computation of derived variables
! (since some values were not being set when reading was aborted due
! to namelist read errors).
!
! 2000/04/13 (Gene Bassett)
! Added dumping options for HDF formats.
!
! 2000/04/24 (Gene Bassett)
! Update message passing version and added grid_dims &
! message_passing namelist blocks.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx Number of grid points in the x-direction
! ny Number of grid points in the y-direction
! nz Number of grid points in the z-direction
!
! OUTPUT:
!
! Control parameters defined in include files.
!
!-----------------------------------------------------------------------
!
! Variable Declarations. (Local Variables)
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! The number of grid points in 3 dimensions.
INTEGER :: nstyps ! Maximum number of soil types per grid point.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
REAL :: wrmax ! Maximun value of canopy moisture
INTEGER :: i
INTEGER :: lenstr ! Length of a string
LOGICAL :: iexist ! Flag set by inquire statement for file
! existence
REAL :: temr
REAL :: dtsml0,dtsfc0 ! Temporary variable
CHARACTER (LEN=19) :: initime ! Real time in form of 'year-mo-dy:hr:mn:ss'
INTEGER :: unum ! unit number for reading in namelist
PARAMETER (unum=5)
CHARACTER (LEN=80) :: inputfile
INTEGER :: lenfil
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Global constants and parameters, most of them specify the
! model run options.
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'soilcst.inc'
INCLUDE 'nudging.inc'
INCLUDE 'radcst.inc'
!
!-----------------------------------------------------------------------
!
! Grid and map parameters.
!
!-----------------------------------------------------------------------
!
INCLUDE 'grid.inc'
!
!-----------------------------------------------------------------------
!
! Control parameters defining the boundary condition types.
!
!-----------------------------------------------------------------------
!
INCLUDE 'bndry.inc'
!
!-----------------------------------------------------------------------
!
! Universal physical constants such as gas constants.
!
!-----------------------------------------------------------------------
!
INCLUDE 'phycst.inc'
!
!-----------------------------------------------------------------------
!
! External boundary parameters and variables.
!
!-----------------------------------------------------------------------
!
INCLUDE 'exbc.inc'
!
!-----------------------------------------------------------------------
!
! Message passing parameters.
!
!-----------------------------------------------------------------------
!
INCLUDE 'mp.inc'
!
!-----------------------------------------------------------------------
!
! namelist Declarations:
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Define the namelist, &arpsagr, for ARPS AGR. Not used by other programs
! except for ARPSagr. Included here to avoid problem on e.g., Cray's
! when reading arps.input.
!
!-----------------------------------------------------------------------
!
NAMELIST /grid_dims/ nx,ny,nz
NAMELIST /message_passing/ nproc_x,nproc_y,max_fopen
INCLUDE 'agricst.inc'
INCLUDE 'nodal.inc'
NAMELIST /arpsagr/ runold, rstime, &
levfix, intrat, intratt, &
intrpodr, kcheck, &
verbose1, verbose2, verbose3, &
verbose4, verbose5, verbose6, &
rstart,rstdump,grdsrt, &
nfinelv, ngrdnew, &
ixc,jyc,ixln,jyln,gangle
NAMELIST /comment_lines/ nocmnt, cmnt
NAMELIST /jobname/ runname
NAMELIST /model_configuration/ runmod
NAMELIST /initialization/ initime,initopt,inibasopt,viniopt,ubar0, &
vbar0,pt0opt,ptpert0,pt0radx,pt0rady,pt0radz,pt0ctrx, &
pt0ctry,pt0ctrz,rstinf,inifmt,inifile,inigbf,sndfile, &
soilinitopt,soiltintv,timeopt
NAMELIST /nudging/ nudgopt,ndstart,ndstop,ndintvl,ndgain,incrfnam, &
nudgu,nudgv,nudgw,nudgp,nudgpt,nudgqv, &
nudgqc,nudgqr,nudgqi,nudgqs,nudgqh,incrfmt
NAMELIST /equation_formulation/ buoyopt,buoy2nd,rhofctopt,bsnesq, &
peqopt
NAMELIST /terrain/ ternopt,mntopt,hmount,mntwidx,mntwidy, &
mntctrx,mntctry,terndta,ternfmt
NAMELIST /grid/ dx,dy,dz,strhopt,dzmin,zrefsfc,dlayer1,dlayer2, &
strhtune,zflat,ctrlat,ctrlon
NAMELIST /projection/ mapproj, trulat1,trulat2,trulon, sclfct, &
mpfctopt,mptrmopt,maptest
NAMELIST /timestep/ dtbig,tstart,tstop
NAMELIST /acoustic_wave/csopt,csfactr,csound,dtsml,vimplct, &
ptsmlstp,tacoef
NAMELIST /numerics/ madvopt, sadvopt,fctorderopt,fctadvptprt
NAMELIST /boundary_condition_options/ lbcopt, wbc,ebc,sbc,nbc, &
tbc,fftopt,bbc, rbcopt,c_phase,rlxlbc,pdetrnd
NAMELIST /exbcpara/exbcname,tinitebd,tintvebd, &
ngbrz,brlxhw,cbcdmp,cbcmix,exbcfmt
NAMELIST /coriolis_force/ coriopt,coriotrm
NAMELIST /turbulence/tmixopt,trbisotp,tkeopt,trbvimp,tmixvert, &
alfcoef,tmixcst, prantl, kmlimit
NAMELIST /computational_mixing/ &
cmix2nd,cfcm2h,cfcm2v,cmix4th,cfcm4h,cfcm4v,scmixfctr, &
cmix_opt
NAMELIST /divergence_damping/ divdmp,divdmpndh, divdmpndv
NAMELIST /rayleigh_damping/ raydmp,cfrdmp,zbrdmp
NAMELIST /asselin_time_filter/ flteps
NAMELIST /microphysics/ mphyopt,moist,cnvctopt, &
kffbfct,kfsubsattrig,wcldbs,confrq,qpfgfrq,idownd, &
subsatopt,rhsat,rhsatmin,dx_rhsatmin,dx_rhsat100
NAMELIST /radiation/ radopt, radstgr, rlwopt, dtrad, raddiag
NAMELIST /surface_physics/ sfcphy,landwtr,cdhwtropt, &
cdmlnd,cdmwtr,cdhlnd,cdhwtr,cdqlnd,cdqwtr, &
pbldopt,pbldpth0,lsclpbl0,tqflxdis,dtqflxdis, &
smthflx,numsmth,sfcdiag
NAMELIST /soil_ebm/ sfcdat,soilinit,dtsfc, &
styp,vtyp,lai0,roufns0,veg0,ptslnd0,ptswtr0, &
tsoil0,wetsfc0,wetdp0,wetcanp0,snowdpth0, &
tsprt,t2prt,wgrat,w2rat, &
sfcdtfl,soilinfl,sfcfmt,soilfmt,nstyp, &
tsoil_offset, tsoil_offset_amplitude
NAMELIST /grdtrans/cltkopt,grdtrns,umove,vmove,chkdpth, &
twindow,tceltrk,tcrestr
NAMELIST /history_dump/ hdmpopt,hdmpfmt,grbpkbit,thisdmp, &
tstrtdmp,numhdmp,hdmptim,istager,hdfcompr
NAMELIST /output/ dirname,tfmtprt,exbcdmp,extdadmp, &
grdout,basout,varout,mstout,rainout,prcout, &
iceout,tkeout, trbout,sfcout,landout,totout, &
radout,flxout, &
qcexout,qrexout,qiexout,qsexout,qhexout, &
trstout,tmaxmin,tenergy,imgopt, &
timgdmp,pltopt,tplots,filcmprs,readyfl, &
sfcdmp,soildmp,terndmp
NAMELIST /debug/ lvldbg
REAL :: dh
INTEGER :: err_no
DATA err_no /0/
INTEGER :: ip
INTEGER ebcsv,wbcsv,nbcsv,sbcsv
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!-----------------------------------------------------------------------
!
! Set the ARPS version number, which will be printed in the log
! file in the comment line. The string can be up to 20 character long.
!
!-----------------------------------------------------------------------
arpsversion = 'ARPS 5.0'
!
!-----------------------------------------------------------------------
!
! Now we begin to read in the values of parameters:
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Set up the default values for all the variables to be read in
! using the namelist method. In case the user does not specify a
! particular value, this value will be used.
!
!-----------------------------------------------------------------------
!
nx = 67
ny = 67
nz = 35
nproc_x = 1
nproc_y = 1
max_fopen = 1
nocmnt = 10
cmnt(1) = ' '
cmnt(2) = 'A zero perturbation run '
cmnt(3) = ' '
cmnt(4) = ' '
cmnt(5) = ' '
cmnt(6) = ' '
cmnt(7) = ' '
cmnt(8) = ' '
cmnt(9) = ' '
cmnt(10) =' '
runname = 'may20'
runmod = 1
initime = '1977-05-20.21:00:00'
timeopt = 0
initopt = 1
inibasopt = 1
viniopt = 1
pt0opt = 1
ubar0 = 0.0
vbar0 = 0.0
ptpert0 = 4.0
pt0radx = 10000.0
pt0rady = 10000.0
pt0radz = 1500.0
pt0ctrx = 32000.0
pt0ctry = 32000.0
pt0ctrz = 1500.0
rstinf = 'may20.rst003600'
inifmt = 1
inifile = 'may20.bin003600'
inigbf = 'may20.bingrdbas'
sndfile = 'may20.snd'
soilinitopt = 0
soiltintv = 0.0
nudgopt = 0
ndstart = 0.
ndstop = 0.
ndintvl = 600.
ndgain = 1.9
incrfnam = 'nudge.spam'
incrfmt = 0
nudgu = 1
nudgv = 1
nudgw = 1
nudgp = 1
nudgpt = 1
nudgqv = 1
nudgqc = 0
nudgqr = 0
nudgqi = 0
nudgqs = 0
nudgqh = 0
ternopt = 0
mntopt = 1
hmount = 0.0
mntwidx = 1.0E4
mntwidy = 1.0E4
mntctrx = 1.0E4
mntctry = 1.0E4
terndta ='arpstern.data'
ternfmt = 0
dx = 1000.0
dy = 1000.0
dz = 500.0
strhopt = 0
dzmin = 500.0
zrefsfc = 0.0
dlayer1 = 0.0
dlayer2 = 1.0E5
strhtune = 1.0
zflat = 1.0E5
ctrlat = 35.0
ctrlon = -100.0
mapproj = 0
trulat1 = 30.0
trulat2 = 60.0
trulon = -100.0
sclfct = 1.0
mpfctopt = 1
mptrmopt = 1
maptest = 0
dtbig = 6.0
tstart= 0.0
tstop = 3600.0
vimplct = 1
ptsmlstp = 0
csopt = 1
csfactr = 0.5
csound = 150.0
tacoef = 0.6
dtsml = 1.0
buoyopt = 1
buoy2nd = 1
rhofctopt = 1
bsnesq = 0
peqopt = 1
madvopt = 1
sadvopt = 1
fctorderopt=1
fctadvptprt=1
lbcopt = 1
wbc = 4
ebc = 4
sbc = 4
nbc = 4
tbc = 1
fftopt = 2
bbc = 1
rbcopt = 1
c_phase = 30.0
rlxlbc = 0.0
pdetrnd = 0
radopt = 0
radstgr = 1
rlwopt = 1
dtrad = 600.0
raddiag = 1
moist = 0
mphyopt = 0
cnvctopt = 0
subsatopt = 0
kffbfct = 0.0
kfsubsattrig = 0
ice = 0
wcldbs = 0.005
confrq = 600.0
qpfgfrq = 120.0
idownd = 1
rhsat = 0.80
rhsatmin = 0.80
dx_rhsatmin = 50000.
dx_rhsat100 = 5000.
sfcphy = 0
landwtr = 1
cdhwtropt= 0
cdmlnd = 3.0E-3
cdmwtr = 1.0E-3
cdhlnd = 3.0E-3
cdhwtr = 1.0E-3
cdqlnd = 2.1E-3
cdqwtr = 0.7E-3
pbldopt = 0
pbldpth0 = 1400.0
lsclpbl0 = 0.15
sflxdis = 0
tqflxdis = 0
dtqflxdis= 200.0
smthflx = 0
numsmth = 1
sfcdiag = 0
sfcdat = 1
nstyp = 4
styp = 3
vtyp = 10
lai0 = 0.31
roufns0 = 0.1
veg0 = 0.0
sfcdtfl = 'arpssfc.data'
sfcfmt = 0
soilinit = 1
ptslnd0 = 300.16
ptswtr0 = 288.16
tsoil0 = 297.16
wetsfc0 = 0.0
wetdp0 = 0.0
wetcanp0 = 0.0
snowdpth0 = 0
soilinfl = 'may20.soilinit'
soilfmt = 0
dtsfc = 10.0
coriopt = 0
coriotrm= 0
tmixopt = 2
trbisotp = 1
tkeopt = 1
trbvimp = 0
tmixvert = 1
alfcoef = 0.25
prantl = 1.0
tmixcst = 0.0
kmlimit = 0.5
cmix2nd = 1
cfcm2h = 0.0
cfcm2v = 1.0E-3
cmix4th = 1
cfcm4h = 1.0E-3
cfcm4v = 0.0
scmixfctr = 1.0
cmix_opt = 0
divdmp = 1
divdmpndh = 0.05
divdmpndv = 0.05
tmaxmin = 60.0
tenergy = 360000.0
imgopt = 0
timgdmp = 60.0
pltopt = 0
tplots = 1800.0
filcmprs = 1
readyfl = 0
raydmp = 0
cfrdmp = 1./300.
zbrdmp = 10000.0
flteps = 0.10
cltkopt = 0
grdtrns = 0
umove = 0.0
vmove = 0.0
chkdpth = 2500.0
twindow = 33333
tceltrk = 120.0
tcrestr = 1800.0
lvldbg = 0
hdmpopt = 1
hdmpfmt = 10
grbpkbit = 16
hdfcompr = 0
thisdmp = 3600.0
tstrtdmp = 0.0
numhdmp = 1
DO i=1,numhdmp
hdmptim(i) = 0.
END DO
istager = 0
dirname = ' '
tfmtprt = 3600.0
exbcdmp = 0
extdadmp = 0
grdout = 0
basout = 0
varout = 1
mstout = 1
rainout = 0
prcout = 0
iceout = 0
totout = 1
tkeout = 0
trbout = 0
sfcout = 0
snowout = 0
landout = 0
radout = 0
flxout = 0
qcexout = 0
qrexout = 0
qiexout = 0
qsexout = 0
qhexout = 0
sfcdmp = 0
soildmp = 0
terndmp = 0
trstout = 3600.0
exbcname = 'arpsexbc'
tinitebd = '1977-05-20.15:00:00'
tintvebd = 10800
ngbrz = 5
brlxhw = 2.3
cbcdmp = 0.0033333333
cbcmix = 1.0E-3
exbcfmt = 0
mgrid = 1
!
!-----------------------------------------------------------------------
!
! Initialize message passing processors.
!
!-----------------------------------------------------------------------
!
! Non-MPI defaults:
mp_opt = 0
myproc = 0
loc_x = 1
loc_y = 1
!
!-----------------------------------------------------------------------
!
! Initialize the processors for an MPI job.
!
!-----------------------------------------------------------------------
!
CALL mpinit_proc
IF (myproc == 0)THEN
WRITE(6,'(/ 16(/5x,a)//)') &
'###############################################################', &
'###############################################################', &
'##### #####', &
'##### Welcome to #####', &
'##### #####', &
'##### The Advanced Regional Prediction System (ARPS) #####', &
'##### #####', &
'##### Version 5.0 #####', &
'##### #####', &
'##### Developed by #####', &
'##### Center for Analysis and Prediction of Storms #####', &
'##### University of Oklahoma #####', &
'##### #####', &
'###############################################################', &
'###############################################################'
WRITE(6,'(5(/5x,a),/6(/5x,a)/)') &
'The model begins by reading a number of control parameters,', &
'which are specified in namelist format through the standard', &
'input stream (unit 5). See the ARPS Users Guide and the', &
'sample input file, arps.input, for guidance on specifying', &
'these parameters', &
'At the end of all parameter input, a log file is produced', &
'which can be directly used as the input file when you want', &
'to replicate the same job. This file is named runnam.log.nn', &
'where runnam is a standard prefix for all output files that', &
'are produced by this job and nn is a number appended to the', &
'file name when file runnam.log.nn-1 already exists.'
END IF
!
!-----------------------------------------------------------------------
!
! Read in grid dimensions.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,grid_dims, END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block grid_dims sucessfully read.'
END IF
CALL mpupdatei
(nx,1)
CALL mpupdatei
(ny,1)
CALL mpupdatei
(nz,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i5)') "nx =",nx
WRITE(6,'(5x,a,i5)') "ny =",ny
WRITE(6,'(5x,a,i5)') "nz =",nz
END IF
!
!-----------------------------------------------------------------------
!
! Read in message passing options.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,message_passing, END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block message_passing sucessfully read.'
END IF
CALL mpupdatei
(nproc_x,1)
CALL mpupdatei
(nproc_y,1)
CALL mpupdatei
(max_fopen,1)
nproc_x_in = nproc_x
nproc_y_in = nproc_y
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
"Number of processors in the x-direction is:",nproc_x
WRITE(6,'(5x,a,i4)') &
"Number of processors in the y-direction is:",nproc_y
WRITE(6,'(5x,a,i4)') &
"Maximum number of files open:",max_fopen
END IF
! Note that for MP version nx & ny here are global values. They will
! be reassigned to their per-processor value below.
IF (mp_opt > 0) THEN
IF (nx /= nproc_x*int((nx-3)/nproc_x)+3) THEN
nx = nproc_x*int((nx-3)/nproc_x+0.9999999999999) + 3
IF (myproc == 0) THEN
WRITE (6,*) "WARNING: adjusting nx to fit on ",nproc_x," processors:"
WRITE(6,'(5x,a,i5)') " new nx =",nx
ENDIF
ENDIF
IF (ny /= nproc_y*int((ny-3)/nproc_y)+3) THEN
ny = nproc_y*int((ny-3)/nproc_y+0.9999999999999) + 3
IF (myproc == 0) THEN
WRITE (6,*) "WARNING: adjusting ny to fit on ",nproc_y," processors:"
WRITE(6,'(5x,a,i5)') " new ny =",ny
ENDIF
ENDIF
ELSE
nproc_x = 1
nproc_y = 1
nprocs = 1
max_fopen = 1
ENDIF
!
!-----------------------------------------------------------------------
!
! Initialize message passing variables.
!
!-----------------------------------------------------------------------
!
CALL mpinit_var
!-----------------------------------------------------------------------
! Read in agri name list block - not used by single grid arps run
!-----------------------------------------------------------------------
IF (myproc == 0) READ (unum,arpsagr, END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block arpsagr sucessfully read.'
END IF
!
!-----------------------------------------------------------------------
!
! Read in some comment lines on this job and the name of
! this run designated by a string at least 6 character long.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,comment_lines, END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block comment_lines sucessfully read.'
END IF
CALL mpupdatei
(nocmnt,1)
CALL mpupdatec
(cmnt,80*nocmnt)
IF (myproc == 0) READ (unum,jobname,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block jobname sucessfully read.'
END IF
CALL mpupdatec
(runname,80)
IF (myproc == 0)THEN
WRITE(6,'(/5x,a,a)') 'The name of this run is: ', runname
END IF
!
!-----------------------------------------------------------------------
!
! Find out the number of characters to be used to construct file
! names.
!
!-----------------------------------------------------------------------
!
CALL gtlfnkey
( runname, lfnkey )
!
!-----------------------------------------------------------------------
!
! Read in the parameter that controls the model run mode:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,model_configuration,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block model_configuration sucessfully read.'
END IF
CALL mpupdatei
(runmod,1)
IF (myproc == 0)THEN
WRITE (6,'(/5x,a,i4)') 'The run mode is: ', runmod
END IF
!
!-----------------------------------------------------------------------
!
! Read in control parameter INITOPT for model initialization
!
! INITOPT = 1, Self initialization (e.g. specify perturbation using
! analytical functions),
! = 2, Restart run, initialize the model using previous
! model output,
! = 3, Initialize the model using external input data file.
!
! For options 2 and 3, the names of input files need to be provided.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,initialization,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block initialization sucessfully read.'
END IF
CALL mpupdatec
(initime,19)
CALL mpupdatei
(initopt,1)
CALL mpupdatei
(inibasopt,1)
CALL mpupdatei
(viniopt,1)
CALL mpupdater
(ubar0,1)
CALL mpupdater
(vbar0,1)
CALL mpupdatei
(pt0opt,1)
CALL mpupdater
(ptpert0,1)
CALL mpupdater
(pt0radx,1)
CALL mpupdater
(pt0rady,1)
CALL mpupdater
(pt0radz,1)
CALL mpupdater
(pt0ctrx,1)
CALL mpupdater
(pt0ctry,1)
CALL mpupdater
(pt0ctrz,1)
CALL mpupdatec
(rstinf,128)
CALL mpupdatei
(inifmt,1)
CALL mpupdatec
(inifile,128)
CALL mpupdatec
(inigbf,128)
CALL mpupdatec
(sndfile,128)
CALL mpupdatei
(soilinitopt,1)
CALL mpupdater
(soiltintv,1)
CALL mpupdatei
(timeopt,1)
READ (initime, '(i4.4,1x,i2.2,1x,i2.2,1x,i2.2,1x,i2.2,1x,i2.2)' ) &
year,month,day,hour,minute,second
IF (myproc == 0)THEN
WRITE(6,'(a,a,i4.4,a,i2.2,a,i2.2,a,i2.2,a,i2.2,a,i2.2)') &
' The initial local time for this run is ', &
' year-mo-dy:hr:mn:ss = ', &
year,'-',month,'-',day,'.',hour,':',minute,':',second
WRITE(6,'(5x,a,i4/)') 'Perturbation option was ', pt0opt
WRITE(6,'(5x,a,f10.3,a)') &
'The magnitude of the initial perturbation is ', ptpert0,' K.'
WRITE(6,'(5x,a,3e10.3,a,/5x,a,a,/5x,a,e10.3,a,e10.3,a,e10.3,a)') &
'The input radii of the thermal bubble are ', &
pt0radx, pt0rady, pt0radz,' (m)', &
'in x, y and z direction recpectively, and the center is ', &
'located at','x=',pt0ctrx,' y=',pt0ctry,' z=',pt0ctrz, &
' (m).'
END IF
!
!-----------------------------------------------------------------------
!
! Input data files for initialization:
!
!-----------------------------------------------------------------------
!
lenstr = 80
CALL strlnth
( rstinf, lenstr)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'The two time level restart data to be read in is ', &
rstinf(1:lenstr)
WRITE(6,'(5x,a,i4)') &
'The history dump type restart data format was ',inifmt
END IF
lenstr = 80
CALL strlnth
( inifile, lenstr)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'The t-depedent history dump format restart data to be read is ', &
inifile(1:lenstr)
END IF
lenstr = 80
CALL strlnth
( inigbf, lenstr)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a,a)') &
'The base state/grid history dump ', &
'format restart data to be read is ', inigbf(1:lenstr)
END IF
!
!-----------------------------------------------------------------------
!
! Input the environmental sounding.
!
!-----------------------------------------------------------------------
!
lenstr = 80
CALL strlnth
( sndfile, lenstr )
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'Sounding file to be used is ', sndfile(1:lenstr)
END IF
!
!-----------------------------------------------------------------------
!
! Read the nudging options.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,nudging,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block nudging sucessfully read.'
END IF
CALL mpupdatei
(nudgopt,1)
CALL mpupdater
(ndstart,1)
CALL mpupdater
(ndstop,1)
CALL mpupdater
(ndintvl,1)
CALL mpupdater
(ndgain,1)
CALL mpupdatec
(incrfnam,132)
CALL mpupdatei
(nudgu,1)
CALL mpupdatei
(nudgv,1)
CALL mpupdatei
(nudgw,1)
CALL mpupdatei
(nudgp,1)
CALL mpupdatei
(nudgpt,1)
CALL mpupdatei
(nudgqv,1)
CALL mpupdatei
(nudgqc,1)
CALL mpupdatei
(nudgqr,1)
CALL mpupdatei
(nudgqi,1)
CALL mpupdatei
(nudgqs,1)
CALL mpupdatei
(nudgqh,1)
CALL mpupdatei
(incrfmt,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The nudging assimilation option was ',nudgopt
WRITE(6,'(5x,a,f9.2)') 'Nudging assimilation start: ',ndstart
WRITE(6,'(5x,a,f9.2)') 'Nudging assimilation stop: ',ndstop
WRITE(6,'(5x,a,f9.2)') 'Nudging assimilation interval: ',ndintvl
WRITE(6,'(5x,a,f9.2)') 'Nudging assimilation gain: ',ndgain
END IF
lenstr = 80
CALL strlnth
( incrfnam, lenstr)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'The nudging increment file is ',incrfnam(1:lenstr)
END IF
!
!-----------------------------------------------------------------------
!
! Specify the types of terrain option:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,terrain,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block terrain sucessfully read.'
END IF
CALL mpupdatei
(ternopt,1)
CALL mpupdatei
(mntopt,1)
CALL mpupdater
(hmount,1)
CALL mpupdater
(mntwidx,1)
CALL mpupdater
(mntwidy,1)
CALL mpupdater
(mntctrx,1)
CALL mpupdater
(mntctry,1)
CALL mpupdatec
(terndta,128)
CALL mpupdatei
(ternfmt,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'The mountain type option was ', mntopt
WRITE(6,'(5x,a,f10.3,a)') &
'The height of mountain is ', hmount,' (m).'
WRITE(6,'(5x,a,2e10.3,a,/5x,a,a,/5x,a,e10.3,a,e10.3,a)') &
'The input half-width of bell-shaped mountain are ', &
mntwidx, mntwidy, ' (m)', &
'in x and y direction recpectively, and the center is ', &
'located at','x=',mntctrx,' y=',mntctry,' (m).'
WRITE(6,'(5x,a,i4)') 'The terrain option was ', ternopt
END IF
lenstr = 80
CALL strlnth
( terndta, lenstr)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'The terrain data file is ',terndta(1:lenstr)
WRITE(6,'(5x,a,i4)') 'The terrain data file format is ', ternfmt
END IF
!
!-----------------------------------------------------------------------
!
! Input horizontal grid size
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,grid,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block grid sucessfully read.'
END IF
CALL mpupdater
(dx,1)
CALL mpupdater
(dy,1)
CALL mpupdater
(dz,1)
CALL mpupdatei
(strhopt,1)
CALL mpupdater
(dzmin,1)
CALL mpupdater
(zrefsfc,1)
CALL mpupdater
(dlayer1,1)
CALL mpupdater
(dlayer2,1)
CALL mpupdater
(strhtune,1)
CALL mpupdater
(zflat,1)
CALL mpupdater
(ctrlat,1)
CALL mpupdater
(ctrlon,1)
IF( strhopt == 0.AND.dzmin /= dz ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'For non-stretched case, dzmin was reset to dz.'
END IF
dzmin = dz
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.3,a)') &
'Input dx was',dx,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'Input dy was ',dy,' meters'
WRITE(6,'(5x,a,i4)') 'The stretch option was ', strhopt
WRITE(6,'(5x,a,f10.3,a)') &
'Input dz was ',dz,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'Input ctrlat was ',ctrlat,' degree North'
WRITE(6,'(5x,a,f10.3,a)') &
'Input ctrlon was ',ctrlon,' degree East'
WRITE(6,'(5x,a,f10.3,a)') &
'dzmin is ',dzmin,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'zrefsfc is ',zrefsfc ,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'dlayer1 is ',dlayer1 ,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'dlayer2 is ',dlayer2 ,' meters'
WRITE(6,'(5x,a,f10.3,a)') &
'zflat is ',zflat ,' meters'
END IF
!
!-----------------------------------------------------------------------
!
! Input map projection parameters
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,projection,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block projection sucessfully read.'
END IF
CALL mpupdatei
(mapproj,1)
CALL mpupdater
(trulat1,1)
CALL mpupdater
(trulat2,1)
CALL mpupdater
(trulon,1)
CALL mpupdater
(sclfct,1)
CALL mpupdatei
(mpfctopt,1)
CALL mpupdatei
(mptrmopt,1)
CALL mpupdatei
(maptest,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'Input mapproj was ',mapproj
WRITE(6,'(5x,a,f10.3,a)') &
'Input trulat1 was ',trulat1,' degree North'
WRITE(6,'(5x,a,f10.3,a)') &
'Input trulat2 was ',trulat2,' degree North'
WRITE(6,'(5x,a,f10.3)') &
'The latitude of the center of the model domain was ',ctrlat
WRITE(6,'(5x,a,f10.3)') &
'The longitude of the center of the model domain was ',ctrlon
WRITE(6,'(5x,a,f10.3,a)') &
'Input trulon was ',trulon,' degree East'
WRITE(6,'(5x,a,e15.5)') &
'Input sclfct was ',sclfct
WRITE(6,'(5x,a,i5)') &
'The option for map factor was ', mpfctopt
WRITE(6,'(5x,a,i5)') &
'The option for map factor term in u and v advection was ', &
mptrmopt
END IF
IF (myproc == 0) READ (unum,timestep,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block timestep sucessfully read.'
END IF
CALL mpupdater
(dtbig,1)
CALL mpupdater
(tstart,1)
CALL mpupdater
(tstop,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.3,a)') &
'The big timestep was ',dtbig,' seconds.'
WRITE(6,'(5x,a,f10.3,a)') &
'The model startup time was ',tstart, ' seconds.'
WRITE(6,'(5x,a,f10.3,a)') &
'The termination time was ',tstop, ' seconds.'
END IF
IF (myproc == 0) READ (unum,acoustic_wave,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block acoustic_wave sucessfully read.'
END IF
CALL mpupdatei
(csopt,1)
CALL mpupdater
(csfactr,1)
CALL mpupdater
(csound,1)
CALL mpupdater
(dtsml,1)
CALL mpupdatei
(vimplct,1)
CALL mpupdatei
(ptsmlstp,1)
CALL mpupdater
(tacoef,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'The sound speed option was ',csopt
WRITE(6,'(5x,a,f10.3)') &
'The reduction factr for sound speed was ', csfactr
WRITE(6,'(5x,a,f10.3,a)') &
'The constant sound speed was ', csound,' m/s.'
WRITE(6,'(5x,a,a,i5)') &
'The vertical implicit integration option for ', &
'w and p equations was ', vimplct
WRITE(6,'(5x,a,a,i5)') &
'The option for potential temperature equation integration', &
'was ', ptsmlstp
WRITE(6,'(5x,a,a,f10.3)') &
'The time average coefficient for vertically ', &
'implicit solver was ', tacoef
WRITE(6,'(5x,a,f10.3,a)') &
'The input small timestep was ',dtsml,' seconds.'
WRITE(6,'(5x,a,f10.3,a)') &
'The actual small time step size to be used is ', &
dtsml,' seconds.'
END IF
!
!-----------------------------------------------------------------------
!
! Read in parameters related to equation formaulation
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,equation_formulation,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block equation_formulation sucessfully read.'
END IF
CALL mpupdatei
(buoyopt,1)
CALL mpupdatei
(buoy2nd,1)
CALL mpupdatei
(rhofctopt,1)
CALL mpupdatei
(bsnesq,1)
CALL mpupdatei
(peqopt,1)
IF ( buoyopt == 0 ) THEN
IF (myproc == 0)THEN
WRITE(6,*) 'WARNING: buoyancy terms turned off by', &
'selecting buoyopt=0.'
END IF
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a,i5)') &
'The option for pressure equation formulation', &
'was ',peqopt
END IF
!
!-----------------------------------------------------------------------
!
! Read in parameters related to numerical schemes
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,numerics,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block numerics sucessfully read.'
END IF
CALL mpupdatei
(madvopt,1)
CALL mpupdatei
(sadvopt,1)
CALL mpupdatei
(fctorderopt,1)
CALL mpupdatei
(fctadvptprt,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i5)') &
'The option for momentum advection was ', madvopt
IF( madvopt < 1 .OR. madvopt > 3 ) THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'Input value of madvopt= ', madvopt,' was invalid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
WRITE(6,'(5x,a,i5)') &
'The option for scalar advection was ', sadvopt
IF( sadvopt < 1 .OR. sadvopt > 5 ) THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'Input value of sadvopt= ', sadvopt,' was invalid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF( fctorderopt /= 1 .AND. fctorderopt /= 2 ) THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'Input value of fctorderopt= ', fctorderopt,' was invalid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF( fctadvptprt < 0 .OR. fctadvptprt > 2 ) THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'Input value of fctadvptprt= ', fctadvptprt,' was invalid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF(sadvopt == 4.AND.ptsmlstp == 1.AND.fctadvptprt /= 1) THEN
WRITE(6,'(2(/5x,a))') &
'When sadvopt=4, and ptsmlstp=1, fctadvptprt has to be 1', &
'fctadvptprt reset to 1'
fctadvptprt = 1
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input boundary condition control parameters:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,boundary_condition_options,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block boundary_condition_options sucessfully read.'
END IF
CALL mpupdatei
(lbcopt,1)
CALL mpupdatei
(wbc,1)
CALL mpupdatei
(ebc,1)
CALL mpupdatei
(sbc,1)
CALL mpupdatei
(nbc,1)
CALL mpupdatei
(tbc,1)
CALL mpupdatei
(fftopt,1)
CALL mpupdatei
(bbc,1)
CALL mpupdatei
(rbcopt,1)
CALL mpupdater
(c_phase,1)
CALL mpupdater
(rlxlbc,1)
CALL mpupdatei
(pdetrnd,1)
!
!-----------------------------------------------------------------------
!
! For 2-D or 1-D runs, appropriate boundary conditions are
! automatically set to periodic.
!
!-----------------------------------------------------------------------
!
IF( runmod == 2 .OR. runmod == 4 ) THEN
IF( nbc /= 2 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i2)') 'nbc reset to 2 for runmod=',runmod
END IF
nbc = 2
END IF
IF( sbc /= 2 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i2)') 'sbc reset to 2 for runmod=',runmod
END IF
sbc = 2
END IF
END IF
IF( runmod == 3 .OR. runmod == 4 ) THEN
IF( wbc /= 2 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i2)') 'wbc reset to 2 for runmod=',runmod
END IF
wbc = 2
END IF
IF( ebc /= 2 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i2)') 'ebc reset to 2 for runmod=',runmod
END IF
ebc = 2
END IF
END IF
IF ( lbcopt == 1 .AND. &
(wbc == 5 .OR. ebc == 5 .OR. sbc == 5 .OR. nbc == 5) ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a/5x,a,4(/5x,a,i2),2(/5x,a))') &
'The lateral boundary conditions was set to internal ', &
'determined, but one of them was set to external forced.', &
'wbc = ',wbc,' ebc = ',ebc,' sbc = ',sbc,' nbc = ',nbc, &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
ELSE IF ( lbcopt == 2 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a/5x,a)') &
'The lateral boundary conditions was set to external forced.', &
'All lateral boundary conditions will be reset to 5 accordingly.'
END IF
wbc = 5
ebc = 5
sbc = 5
nbc = 5
ELSE IF( lbcopt /= 1 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'Input value of lbcopt = ', lbcopt,' was invalid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( ebc == 3 .OR. wbc == 3 ) THEN
ebc = 3
wbc = 3
END IF
IF ( nbc == 3 .OR. sbc == 3 ) THEN
nbc = 3
sbc = 3
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a, 4(/5x,i3,a))') &
'The boundary options are:', &
wbc,' for west boundary,',ebc,' for east boundary,', &
sbc,' for south boundary,',nbc,' for north boundary.'
IF ( vimplct == 1 .AND. (tbc == 2 .OR. bbc == 2) ) THEN
WRITE(6,'(5x,a/5x,a,2(/5x,a,i2),2(/5x,a))') &
'The small time step integration scheme was set to implicit ', &
'which is not valid to periodic vertical boundary conditions.', &
'tbc = ',tbc,' bbc = ',bbc, &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
WRITE(6,'(5x,a, /2(5x,i3,a))') &
'The boundary options are:', &
tbc,' for top boundary,',bbc,' for bottom boundary.'
WRITE(6,'(5x,a, /2(5x,i3,a))') &
'The upper boundary fft transform option is: ', fftopt
IF( vimplct == 0.AND.tbc == 4)THEN
WRITE(6,'(5x,a,/5x,a,/5x,a,2(/5x,a))') &
'The upper radiation condition boundary option was chosen and', &
'is not compatible with the vertically explicit option', &
'reset tbc or vimplct', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF( tbc == 4.AND.inibasopt == 2)THEN
WRITE(6,'(5x,a,/5x,a,4(/5x,a))') &
'The upper radiation boundary condition option was chosen ', &
'with a neutral environment. This upper radiation ', &
'is not compatible with a neutral base state. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
!
!-----------------------------------------------------------------------
!
! Input radiation lateral boundary condition options:
!
!-----------------------------------------------------------------------
!
IF( rbcopt < 1.OR.rbcopt > 5 ) THEN
WRITE(6,'(1x,a,/1x,a,i3,a,2(5x,a))') &
'Only option rbcopt=1,2,3,4 is available in current version.', &
'The input was ',rbcopt,', Please reset rbcopt and rerun ARPS.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
WRITE(6,'(5x,a,i4)') &
'The radiation boundary condition option was',rbcopt
WRITE(6,'(5x,a,/5x,a,f13.6)') &
'The constant gravity phase speed used by radiation ', &
'lateral boundary condition option 2 was ',c_phase
WRITE(6,'(5x,a,f13.6)') &
'The relaxation coefficient used at the inflow boundaries is' &
,rlxlbc
! IF ( initopt.ne.1 .and. lbcopt.ne.1 ) THEN
! pdetrnd = 0
! ENDIF
WRITE(6,'(5x,a,i4)') &
'Option for pressure detrending was', pdetrnd
END IF
!
!-----------------------------------------------------------------------
!
! Input external boundary condition control parameters:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,exbcpara)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block exbcpara sucessfully read.'
END IF
CALL mpupdatec
(exbcname,80)
CALL mpupdatec
(tinitebd,19)
CALL mpupdatei
(tintvebd,1)
CALL mpupdatei
(ngbrz,1)
CALL mpupdatei
(brlxhw,1)
CALL mpupdatei
(cbcdmp,1)
CALL mpupdatei
(cbcmix,1)
CALL mpupdatei
(exbcfmt,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a9)') &
'The initial external boundary time string was ',tinitebd
WRITE(6,'(5x,a,i10)') &
'The time interval to update external boundary conditions was ', &
tintvebd
WRITE(6,'(5x,a,i10)') &
'The number of boundary relaxation zone grids was ', ngbrz
WRITE(6,'(5x,a,e15.8)') &
'The real grid number where BC relaxation is half weighted was ', &
brlxhw
WRITE(6,'(5x,a,e15.8)') &
'The magnitude of the boundary relaxation damping was ',cbcdmp
WRITE(6,'(5x,a,e15.8)') &
'The magnitude of the boundary computational mixing was ',cbcmix
WRITE(6,'(5x,a,i4)') &
'The external boundary file format was ', exbcfmt
END IF
!
!-----------------------------------------------------------------------
!
! Coriolis parameters:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,coriolis_force,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block coriolis_force sucessfully read.'
END IF
CALL mpupdatei
(coriopt,1)
CALL mpupdatei
(coriotrm,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') 'The Coriolis term option was ', coriopt
WRITE (6,'(5x,a,i4)') 'The flag for Coriolis formulation was', &
coriotrm
END IF
!
!-----------------------------------------------------------------------
!
! Input parameters for turbulent mixing.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,turbulence,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block turbulence sucessfully read.'
END IF
CALL mpupdatei
(tmixopt,1)
CALL mpupdatei
(trbisotp,1)
CALL mpupdatei
(tkeopt,1)
CALL mpupdatei
(trbvimp,1)
CALL mpupdatei
(tmixvert,1)
CALL mpupdater
(alfcoef,1)
CALL mpupdater
(tmixcst,1)
CALL mpupdater
(prantl,1)
CALL mpupdater
(kmlimit,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') 'The turbulence option was ', tmixopt
WRITE (6,'(5x,a,i4)') 'The isotropic turbulence option was ', &
trbisotp
WRITE (6,'(5x,a,i4)') 'The 1.5 order TKE option was ', tkeopt
WRITE (6,'(5x,a,i4)') &
'The implicit treatment of vertical mixing option was', &
trbvimp
WRITE (6,'(5x,a,f10.3)') &
'The parameter coeff was ', alfcoef
WRITE (6,'(5x,a,f10.3)') &
'The nondimensional turbulent prandtl number was ', prantl
WRITE (6,'(5x,a,f10.3)') &
'The constant mixing coeff was ', tmixcst
WRITE (6,'(5x,a,f10.3)') &
'The parameter used to limit km was ', kmlimit
END IF
IF (trbvimp == 0) alfcoef=1.0
IF (tmixopt == 4 .AND. (tkeopt <= 0 .OR. tkeopt >= 4) ) THEN
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i3,2(/5x,a))') &
'tkeopt should be 1, 2, or 3 for tmixopt=4, input was=',tkeopt, &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
!
!-----------------------------------------------------------------------
!
! Input control parameters for computational mixing
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,computational_mixing,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block computational_mixing sucessfully read.'
END IF
CALL mpupdatei
(cmix2nd,1)
CALL mpupdater
(cfcm2h,1)
CALL mpupdater
(cfcm2v,1)
CALL mpupdatei
(cmix4th,1)
CALL mpupdater
(cfcm4h,1)
CALL mpupdater
(cfcm4v,1)
CALL mpupdater
(scmixfctr,1)
CALL mpupdatei
(cmix_opt,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The second order computational mixing option was ',cmix2nd
WRITE(6,'(5x,a,e15.5)') &
'The coeff for second order horizontal mixing was ',cfcm2h
WRITE(6,'(5x,a,e15.5)') &
'The coeff for second order vertical mixing was ',cfcm2v
WRITE(6,'(5x,a,i4)') &
'The fourth order computational mixing option was ',cmix4th
WRITE(6,'(5x,a,e15.5)') &
'The coeff for fourth order horizontal mixing was ',cfcm4h
WRITE(6,'(5x,a,e15.5)') &
'The coeff for fourth order vertical mixing was ',cfcm4v
WRITE(6,'(5x,a,e15.5)') &
'The c-mixing reduction factor for scalars was ',scmixfctr
WRITE(6,'(5x,a,i4)') &
'The c-mix monotonic option was ',cmix_opt
IF( cmix2nd /= 0 .AND. cfcm2h > 0.125/dtbig ) THEN
WRITE(6,'(5x,a,a,2(/5x,a))') &
'Value of cfcm2h was too large. ', &
'It has to be less than 1/(8*dtbig).', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
CALL arpsstop
('arpsstop called from INITPARA with cdcm2h selection',1)
END IF
IF( cmix2nd /= 0 .AND. cfcm2v > 0.125/dtbig ) THEN
WRITE(6,'(5x,a,a,2(/5x,a))') &
'Value of cfcm2v was too large. ', &
'It has to be less than 1/(8*dtbig).', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF( cmix4th /= 0 .AND. cfcm4h > 0.125/dtbig ) THEN
WRITE(6,'(5x,a,a,2(/5x,a))') &
'Value of cfcm4h was too large. ', &
'It has to be less than 1/(8*dtbig).', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF( cmix4th /= 0 .AND. cfcm4v > 0.125/dtbig ) THEN
WRITE(6,'(5x,a,a,2(/5x,a))') &
'Value of cfcm4v was too large. ', &
'It has to be less than 1/(8*dtbig).', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input controls for divergence damping on acoustic waves
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,divergence_damping,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block divergence_damping sucessfully read.'
END IF
CALL mpupdatei
(divdmp,1)
CALL mpupdater
(divdmpndh,1)
CALL mpupdater
(divdmpndv,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') &
'The acoustic wave damping option was ', divdmp
WRITE (6,'(5x,a,f10.3,a,f10.3,a)') &
'The non-dimensional divergence damping coeff was ', &
divdmpndh, ' for horizontal and ', &
divdmpndv, ' for vertical'
END IF
!
!-----------------------------------------------------------------------
!
! Rayleigh damping parameters:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,rayleigh_damping,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block rayleigh_damping sucessfully read.'
END IF
CALL mpupdatei
(raydmp,1)
CALL mpupdater
(cfrdmp,1)
CALL mpupdater
(zbrdmp,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'The rayleigh damping option was ',raydmp
WRITE(6,'(5x,a,e15.5)') 'The rayleigh damping coeff was ',cfrdmp
WRITE(6,'(5x,a,e15.5)') &
'The altitude of base of rayleigh damping was ',zbrdmp
IF ( raydmp == 2 .AND. lbcopt /= 2 ) THEN
WRITE (6,'(5x,a,i3,/5x,a,a,2(/5x,a))') &
'You can use raydmp=2 only when lbcopt=2. lbcopt=', lbcopt, &
'had been chosen. Please reset raydmp or lbcopt in the', &
'input file.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
CALL arpsstop
('arpsstop called from INITPARA with raydmp/lbcopt &
& selection',1)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Robert-Asselin time filter coefficient:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,asselin_time_filter,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') &
'Namelist block asselin_time_filter sucessfully read.'
END IF
CALL mpupdater
(flteps,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,e15.5)') &
'The non-dimensional coeff of asselin time filter was ',flteps
END IF
!
!-----------------------------------------------------------------------
!
! Input the control parameters for microphysics parameterizations
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,microphysics,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block microphysics sucessfully read.'
END IF
CALL mpupdatei
(mphyopt,1)
CALL mpupdatei
(moist,1)
CALL mpupdatei
(cnvctopt,1)
CALL mpupdatei
(subsatopt,1)
CALL mpupdatei
(kfsubsattrig,1)
CALL mpupdater
(kffbfct,1)
CALL mpupdater
(wcldbs,1)
CALL mpupdater
(confrq,1)
CALL mpupdater
(qpfgfrq,1)
CALL mpupdatei
(idownd,1)
CALL mpupdater
(rhsat,1)
CALL mpupdater
(rhsatmin,1)
CALL mpupdater
(dx_rhsatmin,1)
CALL mpupdater
(dx_rhsat100,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') 'The microphysics option was ', mphyopt
WRITE (6,'(5x,a,i4)') 'The moist phyics option was ', moist
WRITE (6,'(5x,a,i4)') &
'The convective cumulus option was ',cnvctopt
WRITE (6,'(5x,a,i4)') &
'The sub-saturation option was ',subsatopt
WRITE (6,'(5x,a,f15.5)') &
'The K-F rainwater feedback option was ',kffbfct
WRITE (6,'(5x,a,i4)') &
'The K-F sub-saturation trigger was kfsubsattrig=', kfsubsattrig
WRITE (6,'(5x,a,f10.5)') 'The vertical motion was ', wcldbs
WRITE (6,'(5x,a,f10.5)') &
'The frequency of conv. para. updated in seconds was',confrq
WRITE (6,'(5x,a,f10.5)') &
'The frequency of grid para. updated in seconds was',qpfgfrq
WRITE (6,'(5x,a,i4)') 'The downdraft flag was ', idownd
WRITE (6,'(5x,a,f10.5)') &
'The threshold of RH for condensation to occur: rhsat = ', &
rhsat
WRITE (6,'(5x,a,f10.5)') &
'The threshold of RH for a grid size of dx_rhsatmin: rhsatmin = ',&
rhsatmin
WRITE (6,'(5x,a,f15.5)') &
'The grid size for condensation to occur (RH=rhsatmin): dx_rhsatmin = ', &
dx_rhsatmin
WRITE (6,'(5x,a,f15.5)') &
'The grid size for condensation to occur (RH=100%): dx_rhsat100 = ', &
dx_rhsat100
IF ( moist == 0 .AND. cnvctopt == 1 ) THEN
WRITE (6,'(5x,a/5x,a,a,2(/5x,a))') &
'Since cnvctopt = 1, ', &
'moist has to be set to 1 in order to use cumulus physics', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
CALL arpsstop
('arpsstop called from INITPARA with moist/cnvctopt &
& selection',1)
END IF
IF ( cnvctopt == 1 .AND. mphyopt /= 0 ) THEN
WRITE (6,'(5x,a/5x,a,a,2(/5x,a))') &
'Use cnvctopt=2 if you wish to use', &
'both cumulus parameterization and microphysics.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
END IF
IF ( mphyopt < 0 .OR. mphyopt > 4 ) THEN
IF (myproc == 0)THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'No option for mphyopt > 4.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
ELSE IF ( mphyopt == 2 .OR. mphyopt == 3 ) THEN
ice = 1
ELSE
ice = 0
END IF
IF (kfsubsattrig < 0 .OR. kfsubsattrig > 1) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'ERROR: No option for kfsubsattrig < 0 or > 1. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
IF ( subsatopt < 0 .OR. subsatopt > 2 ) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'ERROR: No option for subsatopt < 0 or > 2. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
ELSE IF (subsatopt == 0) THEN
rhsat = 1.0
ELSE IF (subsatopt == 1) THEN
IF (rhsat < 0.) THEN
WRITE (6,'(5x,a/5x,a/5x,a/5x,a)') &
'ERROR: The threshold of RH can not be less than 0. ', &
'But you have chosen rhsat < 0. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
ELSE IF (rhsat > 1.) THEN
WRITE (6,'(5x,a/5x,a)') &
'WARNING: The subsatopt is designed for RH less than 1. ', &
'But you have chosen rhsat > 1. It is now set to 1. '
END IF
rhsat = max(0., min(1.0, rhsat))
ELSE IF (subsatopt == 2) THEN
IF (rhsatmin < 0.) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'ERROR: The threshold of RH can not be less than 0. ', &
'But you have chosen rhsatmin < 0. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
ELSE IF (rhsatmin > 1.) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'WARNING: the subsatopt is designed for RH less than 1. ', &
'But you have chosen rhsatmin greater than 1. ', &
'It is now re-set to 1. '
rhsatmin = 1.
END IF
IF (dx_rhsatmin < 0. .OR. dx_rhsat100 < 0.) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'ERROR: dx_rhsatmin or dx_rhsat100 can not be less than 0. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
ELSE IF (dx_rhsatmin < dx_rhsat100) THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'ERROR: dx_rhsatmin can not be greater than dx_rhsat100. ', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
err_no = err_no + 1
END IF
rhsat = max(rhsatmin, &
min(1.0,1.0+(rhsatmin-1.0)*(dx-dx_rhsat100) &
/max(0.1,dx_rhsatmin-dx_rhsat100)))
ENDIF
WRITE (6,'(5x,a,f10.5)') &
'rhsat for model integration is re-adjusted to ', rhsat
!
!-----------------------------------------------------------------------
!
! Input the control parameters for radiation parameterizations
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,radiation,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block radiation sucessfully read.'
END IF
CALL mpupdatei
(radopt,1)
CALL mpupdatei
(radstgr,1)
CALL mpupdatei
(rlwopt,1)
CALL mpupdater
(dtrad,1)
CALL mpupdatei
(raddiag,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') &
'The radiation phyics option was ', radopt
WRITE (6,'(5x,a,i4)') &
'The radiation staggering option was ', radstgr
WRITE (6,'(5x,a,i4)') &
'The option for longwave schemes was ', rlwopt
WRITE (6,'(5x,a,f10.5)') &
'The Time interval to update the radiation forcing was ', dtrad
WRITE (6,'(5x,a,i4)') &
'The radiation diagnostic output option was ', raddiag
END IF
nradstp = nint( dtrad/dtbig )
IF( nradstp /= 0 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a)') &
'Radiation physics will be calculated every ', nradstp, &
' time steps'
END IF
dtrad = dtbig*nradstp
ELSE
nradstp = -1
radopt = 0
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Radiation physics is switched off.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input surface physics options
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,surface_physics,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)') 'Namelist block surface_physics sucessfully read.'
END IF
CALL mpupdatei
(sfcphy,1)
CALL mpupdatei
(landwtr,1)
CALL mpupdatei
(cdhwtropt,1)
CALL mpupdater
(cdmlnd,1)
CALL mpupdater
(cdmwtr,1)
CALL mpupdater
(cdhlnd,1)
CALL mpupdater
(cdhwtr,1)
CALL mpupdater
(cdqlnd,1)
CALL mpupdater
(cdqwtr,1)
CALL mpupdatei
(pbldopt,1)
CALL mpupdater
(pbldpth0,1)
CALL mpupdater
(lsclpbl0,1)
CALL mpupdatei
(tqflxdis,1)
CALL mpupdater
(dtqflxdis,1)
CALL mpupdatei
(smthflx,1)
CALL mpupdatei
(numsmth,1)
CALL mpupdatei
(sfcdiag,1)
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') 'The surface physics option was ', sfcphy
WRITE (6,'(5x,a,i4)') 'The land/water option was ', landwtr
WRITE (6,'(5x,a,i4)') &
'The constant water cdh option was ', cdhwtropt
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for momentun over land was ', &
cdmlnd
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for momentun over water was ', &
cdmwtr
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for heat over land was ', &
cdhlnd
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for heat over water was ', &
cdhwtr
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for moisture over land was ', &
cdqlnd
WRITE (6,'(5x,a,f10.3)') &
'The user specified drag coeff for moisture over water was ', &
cdqwtr
WRITE (6,'(5x,a,i3)') &
'The option for determining PBL depth was ', pbldopt
WRITE (6,'(5x,a,f10.3)') &
'The user specified PBL depth was ', pbldpth0
WRITE (6,'(5x,a,f10.3)') &
'The PBL length scale ', lsclpbl0
WRITE (6,'(5x,a,i4)') 'The flux distribution option was ', &
sflxdis
END IF
IF ( sfcphy == 0 ) THEN
sflxdis = 0
IF (myproc == 0)THEN
WRITE (6,'(5x,a/5x,a)') &
'When sfcphy=0, there is no surface flux to be distributed.', &
' Set sflxdis=0.'
END IF
ELSE IF ( sflxdis < 0 .OR. sflxdis > 3 ) THEN
IF (myproc == 0)THEN
WRITE (6,'(5x,a,/5x,a,/5x,a)') &
'The options for sflxdis must be between 0 and 3.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') &
'The heat and moisture distribution option was ',tqflxdis
END IF
IF ( sfcphy == 0 ) THEN
tqflxdis = 0
IF (myproc == 0)THEN
WRITE (6,'(5x,a/5x,a)') &
'When sfcphy=0, there is no surface flux to be distributed.', &
' Set tqflxdis=0.'
END IF
ELSE IF ( tqflxdis < 0 .OR. tqflxdis > 2 ) THEN
IF (myproc == 0)THEN
WRITE (6,'(5x,a,/5x,a,/5x,a))') &
'The options for tqflxdis must be 0, 1, or 2.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF( tqflxdis /= 0 .AND. sflxdis /= 0 ) THEN
IF (myproc == 0)THEN
WRITE (6,'(5x,a,/5x,a,/5x,a,/5x,a)') &
'Options tqflxdis and sflxdis should not be turned on at the', &
'same time. Please turn one of them off', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( smthflx >= 0 ) THEN
numsmth = MAX( 1, numsmth )
END IF
IF ( radopt == 0 .AND. (sfcphy == 3 .OR. sfcphy == 4) ) THEN
radopt = 1
IF (myproc == 0)THEN
WRITE (6,'(5x,a/5x,a/5x,a,i2)') &
'Since soil-vegetation process was switched on, we must', &
'compute the surface radiation flux for energy balance.', &
'radopt was reset to 1 in INITPARA.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input soil and vegetation parameters
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,soil_ebm,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block soil_ebm sucessfully read.'
END IF
CALL mpupdatei
(sfcdat,1)
CALL mpupdatei
(soilinit,1)
CALL mpupdater
(dtsfc,1)
CALL mpupdatei
(styp,1)
CALL mpupdatei
(vtyp,1)
CALL mpupdater
(lai0,1)
CALL mpupdater
(roufns0,1)
CALL mpupdater
(veg0,1)
CALL mpupdater
(ptslnd0,1)
CALL mpupdater
(ptswtr0,1)
CALL mpupdater
(tsoil0,1)
CALL mpupdater
(wetsfc0,1)
CALL mpupdater
(wetdp0,1)
CALL mpupdater
(wetcanp0,1)
CALL mpupdater
(snowdpth0,1)
CALL mpupdater
(tsprt,1)
CALL mpupdater
(t2prt,1)
CALL mpupdater
(wgrat,1)
CALL mpupdater
(w2rat,1)
CALL mpupdatec
(sfcdtfl,128)
CALL mpupdatec
(soilinfl,128)
CALL mpupdatei
(sfcfmt,1)
CALL mpupdatei
(soilfmt,1)
CALL mpupdatei
(nstyp,1)
CALL mpupdatei
(tsoil_offset, 1)
CALL mpupdater
(tsoil_offset_amplitude, 1)
nstyp = MAX(1,nstyp)
nstyps = nstyp
IF (myproc == 0)THEN
WRITE (6,'(5x,a,i4)') &
'The surface data input option was ',sfcdat
WRITE (6,'(5x,a,i4)') &
'The surface initial data input option was ',soilinit
END IF
IF ( sfcphy == 0 ) THEN
sfcdat = 1
soilinit = 1
landwtr = 0
sfcdiag = 0
IF (myproc == 0)THEN
WRITE (6,'(5x,a/5x,a/5x,a)') &
'Since sfcphy = 0, sfcdat and soilinit are set to 1 and', &
'landwtr to 0 to avoid reading the surface data.', &
'Diagnostics printing is turned off.'
END IF
END IF
IF (myproc == 0)THEN
WRITE (6,'(5x,a,f10.3)') &
'The time step for surface energy budget model was ',dtsfc
WRITE (6,'(5x,a,i4)') 'The surface soil type is ',styp
WRITE (6,'(5x,a,i4)') 'The surface vegtation type is ',vtyp
WRITE (6,'(5x,a,f10.3)') 'The leaf area index is ', lai0
WRITE (6,'(5x,a,f10.3)') &
'The user specified land surface roughness was ', roufns0
WRITE (6,'(5x,a,f10.3)') &
'The user specified vegetation fraction was ', veg0
WRITE (6,'(5x,a,a,f10.3)') &
'The initial ground level soil potential temperature ', &
'over land is ',ptslnd0
WRITE (6,'(5x,a,a,f10.3)') &
'The initial ground level soil potential temperature ', &
'over water is ',ptswtr0
WRITE (6,'(5x,a,f10.3)') &
'The initial deep ground temperature is ',tsoil0
WRITE (6,'(5x,a,f10.3)') 'The surface soil moisture is ',wetsfc0
WRITE (6,'(5x,a,f10.3)') 'The deep soil moisture is ',wetdp0
WRITE (6,'(5x,a,f10.3)') 'The canopy moisture is ',wetcanp0
WRITE (6,'(5x,a,f10.3)') 'The snow depth is ',snowdpth0
WRITE (6,'(5x,a,f10.3)') &
'The offset of tsfc from surface air temperature is ',tsprt
WRITE (6,'(5x,a,f10.3)') &
'The offset of tsoil from surface air temperature is ',t2prt
WRITE (6,'(5x,a,f10.3)') &
'The saturation ratio of surface soil moisture is ',wgrat
WRITE (6,'(5x,a,f10.3)') &
'The saturation ratio of deep soil moisture is ',w2rat
END IF
lenstr = 80
CALL strlnth
( sfcdtfl, lenstr )
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'Surface data file to be used is ', sfcdtfl(1:lenstr)
WRITE (6,'(5x,a,i4)') &
'The surface data file format was ',sfcfmt
END IF
lenstr = 80
CALL strlnth
( soilinfl, lenstr )
IF (myproc == 0)THEN
WRITE(6,'(5x,a,a)') &
'Soil data file to be used is ', soilinfl(1:lenstr)
WRITE (6,'(5x,a,i4)') &
'The soil data file format was ',soilfmt
END IF
IF ( sfcphy /= 0 ) THEN
dtsfc = MIN( dtsfc, dtbig )
dtsfc0 = dtsfc
nsfcst = nint(dtbig/dtsfc)
dtsfc = dtbig/nsfcst
IF ( dtsfc > dtsfc0 ) THEN
nsfcst = nsfcst + 1
dtsfc = dtbig/nsfcst
IF (myproc == 0)THEN
WRITE(6,'(/a,1x,f10.4,a)') &
' The actual surface model time step to be used is ', &
dtsfc, ' seconds'
END IF
END IF
IF (styp <= 0 .OR. styp >= 14) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'The input styp =',styp, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF (vtyp <= 0 .OR. vtyp >= 15) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i3,a,2(/5x,a))') &
'The input vtyp =',vtyp, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( lai0 < 0.0 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f6.2,a,2(/5x,a))') &
'The input lai0=',lai0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( roufns0 < 0.0 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f6.2,a,2(/5x,a))') &
'The input roufns0=',roufns0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( veg0 < 0.0 .OR. veg0 > 1.0 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f6.2,a,2(/5x,a))') &
'The input veg0=',veg0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( ptslnd0 < 173.13 .OR. ptslnd0 > 373.16 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input ptslnd0=',ptslnd0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( ptswtr0 < 173.13 .OR. ptswtr0 > 373.16 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input ptswtr0=',ptswtr0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( tsoil0 < 173.13 .OR. tsoil0 > 373.16 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input tsoil0=',tsoil0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
IF ( styp == 12 ) THEN
ptslnd0 = MIN( ptslnd0, 273.16 )
tsoil0 = MIN( tsoil0, 273.16 )
wetsfc0 = 0.
wetdp0 = 0.
wetcanp0 = 0.
IF (myproc == 0)THEN
WRITE(6,'(/a/a/a)') &
' The soil type is ice.', &
' The soil temperatures are set to ice point 273.16 K.', &
' And the moisture variables are set to 0.'
END IF
ELSE IF ( styp == 13 ) THEN
wetsfc0 = 1.
wetdp0 = 1.
wetcanp0 = 1.
IF (myproc == 0)THEN
WRITE(6,'(/a/a)') &
' The soil type is water.', &
' The moisture variables are set to 1.'
END IF
ELSE
IF (wetsfc0 < 0.0 .OR. wetsfc0 > 1.0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input wetsfc0=',wetsfc0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
ELSE IF ( wetsfc0 > wsat(styp) ) THEN
wetsfc0 = wsat(styp)
IF (myproc == 0)THEN
WRITE(6,'(/a/a,f10.4)') &
' The input wetsfc0 is greater than the saturated value', &
' and actually adjusted to the saturated value: ', &
wetsfc0
END IF
END IF
IF (wetdp0 < 0.0 .OR. wetdp0 > 1.0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input wetdp0=',wetdp0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
ELSE IF ( wetdp0 > wsat(styp) ) THEN
wetdp0 = wsat(styp)
IF (myproc == 0)THEN
WRITE(6,'(/a/a,f10.4)') &
' The input wetdp0 is greater than the saturated value ', &
' and actually adjusted to the saturated value: ',wetdp0
END IF
END IF
wgrat = MAX( 0.0, MIN(1.0,wgrat) )
w2rat = MAX( 0.0, MIN(1.0,w2rat) )
wrmax = .2*veg0*lai0
IF (wetcanp0 < 0.0 .OR. wetcanp0 > 1.0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.5,a,2(/5x,a))') &
'The input wetcanp0=',wetcanp0, 'not acceptable.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
ELSE IF ( wetcanp0 > wrmax ) THEN
wetcanp0 = wrmax
IF (myproc == 0)THEN
WRITE(6,'(/a/a,f10.4)') &
' The input wetcanp0 is greater than the maximun value ', &
' and actually adjusted to the maximun value: ',wetcanp0
END IF
END IF
END IF
END IF
nstyps = MAX(1,nstyps)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i5)') "nstyps =",nstyps
END IF
!
! soil_offset amplitude
!
SELECT CASE (tsoil_offset)
CASE (0:2)
IF (myproc == 0) &
WRITE(6, '(a/, a, I2)') &
' Option for including seasonal deep and skin'// &
' layer temperature offset in the two-layer soil model', &
' Your choice is ', tsoil_offset
CASE DEFAULT
err_no = err_no + 1
IF (myproc == 0) &
WRITE(6, '(a, I2, 3(a/))') &
' The input tsoil_offset =',tsoil_offset, 'not acceptable.', &
' Program will try to complete reading in input parameters,',&
' but will stop at the end of subroutine INITPARA.'
END SELECT
IF (myproc == 0) &
WRITE(6, '(a/, a, F5.3)') &
' The amplitude of the annual cycle of the difference (offset)', &
' in deep and skin layer soil seasonal-mean temperatures is ', &
tsoil_offset_amplitude
!
!-----------------------------------------------------------------------
!
! Read in parameters for automatic grid translation.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,grdtrans,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block grdtrans sucessfully read.'
END IF
CALL mpupdatei
(cltkopt,1)
CALL mpupdatei
(grdtrns,1)
CALL mpupdater
(umove,1)
CALL mpupdater
(vmove,1)
CALL mpupdater
(chkdpth,1)
CALL mpupdater
(twindow,1)
CALL mpupdater
(tceltrk,1)
CALL mpupdater
(tcrestr,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i10)') 'Cell tracking option was ',cltkopt
WRITE(6,'(5x,a,i10)') 'The grid translation option was ',grdtrns
END IF
IF( grdtrns == 2 .AND. cltkopt == 0 ) THEN
cltkopt = 1
IF (myproc == 0)THEN
WRITE(6,'((5x,a)/)') &
'Since grdtrns =2, cltkopt was reset to 1.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Ground-relative domain translation speed:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.3)') &
'The domain translation speed in x was ', umove
WRITE(6,'(5x,a,f10.3)') &
'The domain translation speed in y was ', vmove
WRITE(6,'(5x,a,f10.3)') &
'The depth of domain to check for grid translation was',chkdpth
WRITE(6,'(5x,a,f10.3)') &
'The time window for updating umove and vmove was ',twindow
WRITE(6,'(5x,a,f10.3)') 'Cell tracking interval was ', tceltrk
END IF
IF( tceltrk > 0.0 .AND. tceltrk < dtbig ) THEN
nceltrk = 1
ELSE
nceltrk = nint(tceltrk/dtbig)
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a)') &
'Cell-tracking routine will be called every', nceltrk, &
' time steps.'
WRITE(6,'(5x,a,f10.3)') 'Cell restore time was ', tcrestr
END IF
!
!-----------------------------------------------------------------------
!
! Read in namelist &history_dump
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,history_dump,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block history_dump sucessfully read.'
END IF
CALL mpupdatei
(hdmpopt,1)
CALL mpupdatei
(hdmpfmt,1)
CALL mpupdatei
(grbpkbit,1)
CALL mpupdater
(thisdmp,1)
CALL mpupdater
(tstrtdmp,1)
CALL mpupdatei
(numhdmp,1)
CALL mpupdater
(hdmptim,numhdmp)
CALL mpupdatei
(istager,1)
CALL mpupdatei
(hdfcompr,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'The history dump option was ',hdmpopt
WRITE(6,'(5x,a,i4)') 'The history dump format was ',hdmpfmt
END IF
IF( hdmpfmt < 0 .OR. hdmpfmt > 11) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4,a,2(/5x,a))') &
'The option hdmpfmt=', hdmpfmt, ' not valid.', &
'Program will try to complete reading in input parameters, ', &
'but will stop at the end of subroutine INITPARA.'
END IF
err_no = err_no + 1
END IF
! IF( hdmpfmt.eq.10 .and. nz.ge.256 ) THEN
! write(6,'(5x,a/5x,a)')
! : 'The GRIB format can only handle number of vertical levels',
! : 'less than 256 (8-bits). Reset hdmpfmt to 1 (binary format)'
! hdmpfmt = 1
! ENDIF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6)') &
'Number of bits in packing GRIB dump data was ',grbpkbit
WRITE(6,'(5x,a,i4)') &
'HDF4 compression option was ',hdfcompr
WRITE(6,'(5x,a,f10.3,a)') &
'The history dump time interval was ',thisdmp,' seconds '
WRITE(6,'(5x,a,f10.3,a)') &
'The history dump starting time was ',tstrtdmp,' seconds '
END IF
IF ( hdmpopt == 2 ) THEN
IF(numhdmp > 0) THEN
DO i=1,numhdmp
hdmpstp(i) = nint(hdmptim(i)/dtbig)
END DO
nhisdmp = 1
IF (myproc == 0)THEN
WRITE(6,'(5x,i3,a,a)') numhdmp, &
' history data dumps will be produced at', &
' the following time steps:'
WRITE(6,'(5x,10i6)') (hdmpstp(i),i=1,numhdmp)
END IF
ELSE
nhisdmp = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'History data dump is switched off.'
END IF
END IF
ELSE
hdmpopt = 1
nhisdmp = nint(thisdmp/dtbig)
nstrtdmp = nint(tstrtdmp/dtbig)
thisdmp = nhisdmp*dtbig
tstrtdmp = nstrtdmp*dtbig
IF(nhisdmp > 0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a,i6,a/5x,a,a)') &
'History data dumps will be produced every ', nhisdmp, &
' time steps after the first ',nstrtdmp,' time steps ', &
'where tttttt (if any) stands for the time of the data ', &
'in seconds.'
END IF
ELSE
nhisdmp = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'History data dump is switched off.'
END IF
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Read in namelist &output
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,output,END=100)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block output sucessfully read.'
END IF
CALL mpupdatec
(dirname,128)
CALL mpupdater
(tfmtprt,1)
CALL mpupdatei
(exbcdmp,1)
CALL mpupdatei
(extdadmp,1)
CALL mpupdatei
(grdout,1)
CALL mpupdatei
(basout,1)
CALL mpupdatei
(varout,1)
CALL mpupdatei
(mstout,1)
CALL mpupdatei
(rainout,1)
CALL mpupdatei
(prcout,1)
CALL mpupdatei
(iceout,1)
CALL mpupdatei
(tkeout,1)
CALL mpupdatei
(trbout,1)
CALL mpupdatei
(sfcout,1)
CALL mpupdatei
(landout,1)
CALL mpupdatei
(totout,1)
CALL mpupdatei
(radout,1)
CALL mpupdatei
(flxout,1)
CALL mpupdatei
(qcexout,1)
CALL mpupdatei
(qrexout,1)
CALL mpupdatei
(qiexout,1)
CALL mpupdatei
(qsexout,1)
CALL mpupdatei
(qhexout,1)
CALL mpupdatei
(trstout,1)
CALL mpupdater
(tmaxmin,1)
CALL mpupdater
(tenergy,1)
CALL mpupdatei
(imgopt,1)
CALL mpupdater
(timgdmp,1)
CALL mpupdatei
(pltopt,1)
CALL mpupdater
(tplots,1)
CALL mpupdatei
(filcmprs,1)
CALL mpupdatei
(readyfl,1)
CALL mpupdatei
(sfcdmp,1)
CALL mpupdatei
(soildmp,1)
CALL mpupdatei
(terndmp,1)
IF (myproc == 0)THEN
WRITE(6,'(/5x,a,f10.3,a)') &
'Formatted printout time interval was ',tfmtprt,' seconds.'
END IF
nfmtprt = nint(tfmtprt/dtbig)
IF( nfmtprt /= 0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a)') &
'Formatted printing is done every ', nfmtprt,' time steps.'
END IF
ELSE
nfmtprt = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Formatted printing is switched off.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input model output parameters:
!
! First, give the name of the directory into which output files
! will be written:
!
!-----------------------------------------------------------------------
!
ldirnam = 80
CALL strlnth
( dirname, ldirnam)
IF( ldirnam == 0 ) THEN
dirname = '.'
ldirnam=1
END IF
IF( dirname(1:ldirnam) /= ' ') THEN
!
!-----------------------------------------------------------------------
!
! Check if the specified output directory exists, if not,
! abort the job.
!
!-----------------------------------------------------------------------
!
INQUIRE(FILE=dirname(1:ldirnam),EXIST=iexist)
IF( .NOT.iexist ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,2(/5x,a))') &
'Specified output directory '//dirname(1:ldirnam)// &
' not found.', &
'It was created by the program.'
END IF
CALL unixcmd
( 'mkdir -p '//dirname(1:ldirnam) )
! write(6,'(5x,a,4(/5x,a))')
! : 'Specified output directory '//dirname(1:ldirnam)//
! : ' not found.',
! : 'Please create it before starting the model.',
! : 'Program will try to complete reading in input parameters, ',
! : 'but will stop at the end of subroutine INITPARA.'
! err_no = err_no + 1
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Output files will be in directory '//dirname(1:ldirnam)//'.'
END IF
ELSE
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Output files will be in the current work directory.'
END IF
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The flag to dump out ARPS array into EXBC fields was ',exbcdmp
END IF
IF ( lbcopt /= 2 ) THEN
extdadmp = 0
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The flag to dump out EXBC array into ARPS history file was ', &
extdadmp
END IF
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The flag to dump out ARPS surface data files was ',sfcdmp
WRITE(6,'(5x,a,i4)') &
'The flag to dump out ARPS soil data files was ',soildmp
WRITE(6,'(5x,a,i4)') &
'The flag to dump out an ARPS terrain data file was ',terndmp
END IF
!
!-----------------------------------------------------------------------
!
! Set the control parameters for the output of selected fields.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The input grid coordinate dump option was ', grdout
WRITE(6,'(5x,a,i4)') &
'The input base state array dump option was ', basout
WRITE(6,'(5x,a,i4)') &
'The input mass-velocity array dump option was ', varout
WRITE(6,'(5x,a,i4)') &
'The input non-ice water array dump option was ',mstout
WRITE(6,'(5x,a,i4)') &
'The input rain array dump option was ', rainout
END IF
rainout = rainout * mstout
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The input precipitation rates array dump option was ',prcout
END IF
prcout = prcout * mstout
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') &
'The input ice array dump option was ', iceout
WRITE(6,'(5x,a,i4)') &
'The input TKE dump option was ', tkeout
WRITE(6,'(5x,a,i4)') &
'The input eddy mixing coeff dump option was ', trbout
WRITE(6,'(5x,a,i4)') &
'The soil variable dump option was ', sfcout
WRITE(6,'(5x,a,i4)') &
'The surface property array dump option was ', landout
WRITE(6,'(5x,a,i4)') &
'The radiation arrays dump option was ', radout
WRITE(6,'(5x,a,i4)') &
'The surface fluxes dump option was ', flxout
WRITE(6,'(5x,a,i4)') &
'The qc EXBC dump option was ', qcexout
WRITE(6,'(5x,a,i4)') &
'The qr EXBC dump option was ', qrexout
WRITE(6,'(5x,a,i4)') &
'The qi EXBC dump option was ', qiexout
WRITE(6,'(5x,a,i4)') &
'The qs EXBC dump option was ', qsexout
WRITE(6,'(5x,a,i4)') &
'The qh EXBC dump option was ', qhexout
END IF
!
!-----------------------------------------------------------------------
!
! Input restart data dump time:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Specify the time interval between restart data dumps (s):'
WRITE(6,'(5x,a,f10.3,a)') &
'Time interval between restart dumps was ',trstout,' seconds '
END IF
nrstout = nint(trstout/dtbig)
IF( nrstout > 0) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,/5x,a,i6,a,/5x,a)') &
'Restart data files '//runname(1:lfnkey)//'.rsttttttt', &
'will be produced every ', nrstout,' time steps', &
'where tttttt stands for the time of the data in seconds.'
END IF
ELSE
nrstout = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Restart data dump is switched off.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input parameters for maximum and minimum statistics calculations:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.3,a)') &
'Interval between max/min calucations was ',tmaxmin,' seconds '
END IF
nmaxmin = nint(tmaxmin/dtbig)
IF( tmaxmin > 0.0 .AND. tmaxmin < dtbig ) THEN
nmaxmin = 1
ELSE
nmaxmin = nint(tmaxmin/dtbig)
END IF
IF(nmaxmin /= 0)THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a,/5x,a/)') &
'Max. min. statistics are calculated every ', nmaxmin, &
' time steps.', &
'and the results are written into file '//runname(1:lfnkey) &
//'.maxmin '
END IF
ELSE
nmaxmin = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Max. min. statistics calcualtions are switched off.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Input parameter for energy/ptprt variance statistics calculations:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a,f10.3)') &
'Interval between energy stats calculations was ',tenergy
END IF
nenergy = nint(tenergy/dtbig)
IF(nenergy /= 0)THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a,/5x,a)') &
'Energy statistics are calculated every',nenergy,' time steps.', &
'and the results are written into file '// &
runname(1:lfnkey)//'.eng '
END IF
ELSE
nenergy = -1
IF (myproc == 0)THEN
WRITE(6,'(5x,a)') &
'Energy statistics calculations are switched off.'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! More output control parameters, for HDF imgage generation, cell-
! tracking calls and graphic plotting.
!
!-----------------------------------------------------------------------
!
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'Image dump option was ',imgopt
WRITE(6,'(5x,a,f10.3)') 'Image dump interval was ',timgdmp
END IF
IF( timgdmp == 0.0) THEN
imgopt = 0
nimgdmp = 1
ELSE IF( timgdmp > 0.0 .AND. timgdmp < dtbig ) THEN
nimgdmp = 1
ELSE
nimgdmp = nint(timgdmp/dtbig)
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a)') &
'HDF images will be produced every ', nimgdmp,' time steps.'
WRITE(6,'(5x,a,i4)') 'Plotting option was ', pltopt
WRITE(6,'(5x,a,f10.3)') 'Plotting interval was ', tplots
END IF
nplots = nint(tplots /dtbig)
IF(nplots > 0)THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6,a)') &
'Plotting routine will be called every',nplots,' time steps.'
END IF
ELSE
nplots = -1
END IF
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i6)') &
'File compression option was ',filcmprs
END IF
!
!-----------------------------------------------------------------------
!
! Input debug information print controls:
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) READ (unum,debug)
IF (myproc == 0)THEN
WRITE(6,'(a)')'Namelist block debug sucessfully read.'
END IF
CALL mpupdatei
(lvldbg,1)
IF (myproc == 0)THEN
WRITE(6,'(5x,a,i4)') 'The debug printing level was ', lvldbg
END IF
GO TO 102
!
!-----------------------------------------------------------------------
!
! Print out the input parameters.
! Write out a log file of model parameters which can be used as
! the input file to re-run the model.
!
!-----------------------------------------------------------------------
!
100 CONTINUE
IF (myproc == 0)THEN
CALL wrtcomment
('Error reading NAMELIST file. Default values used',1)
END IF
102 CONTINUE
!
!-----------------------------------------------------------------------
!
! Compute derived variables.
!
!-----------------------------------------------------------------------
!
ebc_global = ebc
wbc_global = wbc
nbc_global = nbc
sbc_global = sbc
IF (mp_opt > 0) THEN ! Convert from global to processor specific values.
nx = (nx - 3)/nproc_x + 3
ny = (ny - 3)/nproc_y + 3
IF (myproc == 0) WRITE(6,'(5x,a,i5)') " Processor nx =",nx
IF (myproc == 0) WRITE(6,'(5x,a,i5)') " Processor ny =",ny
IF (loc_x /= 1) wbc = 0
IF (loc_x /= nproc_x) ebc = 0
IF (loc_y /= 1) sbc = 0
IF (loc_y /= nproc_y) nbc = 0
END IF
IF( initopt == 2 ) THEN
restrt = 1
ELSE
restrt = 0
END IF
CALL julday
( year, month, day, jday ) ! Get the Julian day
nudgstp=1
temr = ndintvl/dtbig
nudgstp=MAX(nint(temr),1)
ndintvl=dtbig*nudgstp
temr = (ndstop-ndstart)/ndintvl
ndscale=ndgain/MAX(nint(temr),1)
IF ( mapproj == 0 ) THEN
mpfctopt = 0
END IF
mptrmopt = mptrmopt * mpfctopt
latitud = ctrlat
longitud= ctrlon
IF ( mapproj == 0 ) THEN
trulat1 = ctrlat
trulat2 = ctrlat
trulon = ctrlon
END IF
dtsml0 = dtsml
nsmstp = MAX( 1, nint(2.0*dtbig/dtsml) )
dtsml = 2.0*dtbig/nsmstp
IF (dtsml > dtsml0) THEN
nsmstp = nsmstp + 1
dtsml = 2.0*dtbig/nsmstp
END IF
dxinv = 1.0/dx
dyinv = 1.0/dy
dzinv = 1.0/dz
xl = (nx-3)*dx
yl = (ny-3)*dy
zh = (nz-3)*dz
IF( ternopt /= 0 .OR. strhopt /= 0 ) THEN
crdtrns = 1
ELSE
crdtrns = 0
END IF
cbcmixh = cbcmix * dx*dy
IF( runmod == 2 ) THEN
dh = dx
ELSE IF( runmod == 3 ) THEN
dh = dy
ELSE
dh = SQRT(dx*dy)
END IF
cfcmh2 = cfcm2h * dh*dh
cfcmh4 = cfcm4h * dh**4
cfcmv2 = cfcm2v * dz*dz
cfcmv4 = cfcm4v * dz**4
IF ( divdmp == 1 ) THEN ! isotropic, cdvdmph=cdvdmpv
IF ( runmod == 1 ) THEN
temr = MIN(dx,dy,dzmin)
ELSE IF( runmod == 2 ) THEN
temr = MIN(dx,dzmin)
ELSE IF( runmod == 3 ) THEN
temr = MIN(dy,dzmin)
ELSE IF( runmod == 4 ) THEN
temr = dzmin
END IF
cdvdmph = divdmpndh * temr **2 / dtsml
cdvdmpv = cdvdmph
ELSE IF ( divdmp == 2 ) THEN
IF ( runmod == 1 ) THEN
temr = MIN( SQRT(dx*dy), 5000.0 )
ELSE IF( runmod == 2 ) THEN
temr = MIN( dx, 5000.0 )
ELSE IF( runmod == 3 ) THEN
temr = MIN( dy, 5000.0 )
ELSE IF( runmod == 4 ) THEN
temr = dzmin
END IF
cdvdmph = divdmpndh * temr**2 / dtsml
cdvdmpv = divdmpndv * dzmin **2 / dtsml
END IF
IF( err_no /= 0 ) THEN
IF (myproc == 0)THEN
WRITE(6,'(5x,i4,a,/5x,a,/5x,a,a)') &
err_no, ' fatal errors found with the input parameters.', &
'Please check the ARPS input parameters carefully.', &
'The values of parameters you have used can be found', &
' in the log file.'
END IF
CALL arpsstop
('arpsstop called from INITPARA with an option',1)
END IF
RETURN
END SUBROUTINE initpara
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PRTLOG ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE prtlog(nx,ny,nz,nunit) 6,6
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Print a log file compatible in the namelist format
!
!-----------------------------------------------------------------------
!
! AUTHOR: Adwait Sathye
! 9/15/93
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! The number of grid points in 3 directions
INTEGER :: nunit ! The I/O unit to be used for the log file output
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=80) :: logfn
INTEGER :: llogfn
INTEGER :: logfunt
INTEGER :: istat
INTEGER :: lenstr,i,j,ncmnt
!
!
!-----------------------------------------------------------------------
!
! Include files
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid parameters
INCLUDE 'bndry.inc'
INCLUDE 'phycst.inc'
INCLUDE 'exbc.inc'
INCLUDE 'nudging.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
INCLUDE 'agricst.inc'
INCLUDE 'nodal.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! Write out a log file in namelist format which can be used as
! the input file for replicating this run.
!
! First get a name for the log file:
!
!-----------------------------------------------------------------------
!
IF( nunit == 6 ) THEN
logfunt = 6
WRITE(logfunt,'(///2x,a,i3//)') &
'PRINT OUT OF MODEL PARAMETERS FOR GRID ',mgrid
ELSE
CALL gtlogfn
(runname(1:lfnkey), mgrid, nestgrd, logfn, llogfn)
CALL getunit
( logfunt )
OPEN (UNIT=logfunt, FILE=trim(logfn(1:llogfn)),STATUS='new', &
IOSTAT=istat)
IF(istat /= 0) THEN
WRITE(6,'(/3x,a)')'Error in opening log file ',logfn(1:llogfn)
WRITE(6,'(3x,a/)')'Job stopped in subroutine INITPARA.'
CALL arpsstop
('arpsstop called from PRTLOG with opening log file' &
,1)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Construct a namelist input file in the namelog file. default
! format used by the write function for namelist is to write all the
! data in a single line, as opposed to a single value per line.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(1x,a)') '&grid_dims'
WRITE (logfunt, '(3x,a,i4,a)') 'nx = ', nx, ','
WRITE (logfunt, '(3x,a,i4,a)') 'ny = ', ny, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nz = ', nz, ','
WRITE (logfunt, '(1x,a)') '/'
WRITE (logfunt, '(1x,a)') '&message_passing'
WRITE (logfunt, '(3x,a,i4,a)') 'nproc_x = ', nproc_x, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nproc_y = ', nproc_y, ','
WRITE (logfunt, '(3x,a,i4,a)') 'max_fopen = ', max_fopen, ','
WRITE (logfunt, '(1x,a)') '/'
nxc = nx ! Base grid dimensions in ARPS AGR
nyc = ny ! Base grid dimensions in ARPS AGR
nzc = nz ! Base grid dimensions in ARPS AGR
WRITE (logfunt, '(1x,a)') '&arpsagr'
WRITE (logfunt, '(3x,a,i4,a)') 'levfix = ', levfix, ','
WRITE (logfunt, '(3x,a,i4,a)') ' intrat = ', intrat, ','
WRITE (logfunt, '(3x,a,i4,a)') ' intratt= ', intratt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'intrpodr= ', intrpodr, ','
WRITE (logfunt, '(3x,a,i10,a)') 'kcheck = ', kcheck, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose1= ', verbose1, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose2= ', verbose2, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose3= ', verbose3, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose4= ', verbose4, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose5= ', verbose5, ','
WRITE (logfunt, '(3x,a,l7,a)') 'verbose6= ', verbose6, ','
WRITE (logfunt, '(3x,a,l7,a)') 'rstart = ', rstart , ','
WRITE (logfunt,'(3x,a,a,a)') 'runold = ''', trim(runold), ''','
WRITE (logfunt, '(3x,a,f16.4,a)') 'rstime = ',rstime, ','
WRITE (logfunt, '(3x,a,l7,a)') 'rstdump = ', rstdump , ','
WRITE (logfunt, '(3x,a,l7,a)') 'grdsrt = ', grdsrt , ','
WRITE (logfunt, '(3x,a,i4,a)') 'nfinelv = ', nfinelv, ','
DO i=1,nfinelv
WRITE (logfunt, '(5x,a,i3.3,a,i3,a)')'ngrdnew(',i,') =',ngrdnew(nfinelv),','
DO j=1,ngrdnew(nfinelv)
WRITE (logfunt,'(7x,a,i3.3,a,i3.3,a,f10.3,a)')'ixc(',j,',',i,') =',ixc(j,i),','
WRITE (logfunt,'(7x,a,i3.3,a,i3.3,a,f10.3,a)')'jyc(',j,',',i,') =',jyc(j,i),','
WRITE (logfunt,'(7x,a,i3.3,a,i3.3,a,f10.3,a)')'ixln(',j,',',i,') =',ixln(j,i),','
WRITE (logfunt,'(7x,a,i3.3,a,i3.3,a,f10.3,a)')'jyln(',j,',',i,') =',jyln(j,i),','
WRITE (logfunt,'(7x,a,i3.3,a,i3.3,a,f10.3,a)')'gangle(',j,',',i,') =',gangle(j,i),','
ENDDO
ENDDO
WRITE (logfunt, '(1x,a)') '/'
ncmnt = MAX( 1, MIN(9,nocmnt) )
WRITE (logfunt, '(1x,a)') '&comment_lines'
WRITE (logfunt, '(3x,a,i4,a)') 'nocmnt = ', ncmnt , ','
WRITE (cmnt(ncmnt),'(a,i4,a,i4,a,i4,a,a)') &
' nx =',nx,', ny =',ny,', nz =',nz, &
' ',arpsversion
DO i=1,ncmnt
WRITE (logfunt,'(3x,a,i2.2,a,a,a)') &
'cmnt(',i,') = ''', trim(cmnt(i)), ''','
END DO
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the jobname namelist values into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&jobname'
WRITE (logfunt,'(3x,a,a,a)') 'runname = ''', trim(runname), ''','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the model config namelist values into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&model_configuration'
WRITE (logfunt, '(3x,a,i4,a)') 'runmod = ', runmod, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the initialization namelist values into the namelist logfile
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&initialization'
WRITE (logfunt, '(3x,a,i4.4,a,i2.2,a,i2.2,a,i2.2,a,i2.2,a,i2.2,a)') &
'initime = ''', year,'-',month,'-',day,'.', &
hour,':',minute,':',second, ''','
WRITE (logfunt, '(3x,a,i4,a)') 'timeopt = ', timeopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'initopt = ', initopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'inibasopt = ', inibasopt,','
WRITE (logfunt, '(3x,a,i4,a)') 'viniopt = ', viniopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'soilinitopt = ',soilinitopt,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'soiltintv = ',soiltintv, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ubar0 = ', ubar0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'vbar0 = ', vbar0, ','
WRITE (logfunt, '(3x,a,i4,a)') 'pt0opt = ', pt0opt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ptpert0 = ', ptpert0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0radx = ', pt0radx, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0rady = ', pt0rady, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0radz = ', pt0radz, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0ctrx = ', pt0ctrx, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0ctry = ', pt0ctry, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pt0ctrz = ', pt0ctrz, ','
WRITE (logfunt, '(3x,a,a,a)') 'sndfile = ''', trim(sndfile), ''','
WRITE (logfunt,'(3x,a,a,a)') 'rstinf = ''', trim(rstinf), ''','
WRITE (logfunt, '(3x,a,i4,a)')'inifmt = ', inifmt, ','
WRITE (logfunt, '(3x,a,a,a)') 'inifile = ''', trim(inifile), ''','
WRITE (logfunt, '(3x,a,a,a)') 'inigbf = ''', trim(inigbf), ''','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the nudging namelist values into the namelist logfile
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&nudging'
WRITE (logfunt, '(3x,a,i4,a)') 'nudgopt = ', nudgopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ndstart = ', ndstart, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ndstop = ', ndstop, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ndintvl = ', ndintvl, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ndgain = ', ndgain, ','
WRITE (logfunt, '(3x,a,a,a)') 'incrfnam = ''', trim(incrfnam), ''','
WRITE (logfunt, '(3x,a,i4,a)') 'incrfmt = ', incrfmt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgu = ', nudgu, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgv = ', nudgv, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgw = ', nudgw, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgp = ', nudgp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgpt = ', nudgpt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqv = ', nudgqv, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqc = ', nudgqc, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqr = ', nudgqr, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqi = ', nudgqi, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqs = ', nudgqs, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nudgqh = ', nudgqh, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the terrain namelist values into the namelist logfile
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&terrain'
WRITE (logfunt, '(3x,a,i4,a)') 'ternopt = ', ternopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'mntopt = ', mntopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'hmount = ', hmount, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'mntwidx = ', mntwidx, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'mntwidy = ', mntwidy, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'mntctrx = ', mntctrx, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'mntctry = ', mntctry, ','
WRITE (logfunt, '(3x,a,i4,a)') 'ternfmt = ', ternfmt, ','
WRITE (logfunt, '(3x,a,a,a)') 'terndta = ''', trim(terndta), ''','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the grid namelist values into the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&grid'
WRITE (logfunt, '(3x,a,f16.4,a)') 'dx = ', dx, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dy = ', dy, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dz = ', dz, ','
WRITE (logfunt, '(3x,a,i4,a)') 'strhopt = ', strhopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dzmin = ', dzmin, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'zrefsfc = ', zrefsfc, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dlayer1 = ', dlayer1, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dlayer2 = ', dlayer2, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'strhtune = ', strhtune, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'zflat = ', zflat, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ctrlat = ', ctrlat, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ctrlon = ', ctrlon, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the map projection namelist values into the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&projection'
WRITE (logfunt, '(3x,a,i4,a)') 'mapproj = ',mapproj, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'trulat1 = ',trulat1, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'trulat2 = ',trulat2, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'trulon = ',trulon, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'sclfct = ',sclfct, ','
WRITE (logfunt, '(3x,a,i4,a)') 'mpfctopt = ',mpfctopt,','
WRITE (logfunt, '(3x,a,i4,a)') 'mptrmopt = ',mptrmopt,','
WRITE (logfunt, '(3x,a,i4,a)') 'maptest = ',maptest, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the timestep namelist values into the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '×tep'
WRITE (logfunt, '(3x,a,f16.4,a)') 'dtbig = ', dtbig, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tstart = ', tstart,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tstop = ', tstop, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the acoustic_wave namelist values into the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&acoustic_wave'
WRITE (logfunt, '(3x,a,i4,a)') 'vimplct = ', vimplct, ','
WRITE (logfunt, '(3x,a,i4,a)') 'ptsmlstp = ', ptsmlstp,','
WRITE (logfunt, '(3x,a,i4,a)') 'csopt = ', csopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'csfactr = ', csfactr, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'csound = ', csound, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tacoef = ', tacoef, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dtsml = ', dtsml, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write out equation formulation related parameters
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&equation_formulation'
WRITE (logfunt, '(3x,a,i4,a)') 'buoyopt = ', buoyopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'buoy2nd = ', buoy2nd, ','
WRITE (logfunt, '(3x,a,i4,a)') 'rhofctopt = ', rhofctopt,','
WRITE (logfunt, '(3x,a,i4,a)') 'bsnesq = ', bsnesq, ','
WRITE (logfunt, '(3x,a,i4,a)') 'peqopt = ', peqopt, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write out numerics related parameters
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&numerics'
WRITE (logfunt, '(3x,a,i4,a)') 'madvopt = ', madvopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'sadvopt = ', sadvopt, ','
WRITE (logfunt, '(3x,a,i3,a)') 'fctorderopt= ',fctorderopt, ','
WRITE (logfunt, '(3x,a,i3,a)') 'fctadvptprt= ',fctadvptprt, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write all the boundary conditions in the namelist format into
! the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&boundary_condition_options'
WRITE (logfunt, '(3x,a,i4,a)') 'lbcopt = ', lbcopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'wbc = ', wbc_global, ','
WRITE (logfunt, '(3x,a,i4,a)') 'ebc = ', ebc_global, ','
WRITE (logfunt, '(3x,a,i4,a)') 'sbc = ', sbc_global, ','
WRITE (logfunt, '(3x,a,i4,a)') 'nbc = ', nbc_global, ','
WRITE (logfunt, '(3x,a,i4,a)') 'tbc = ', tbc, ','
WRITE (logfunt, '(3x,a,i4,a)') 'fftopt = ', fftopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'bbc = ', bbc, ','
WRITE (logfunt, '(3x,a,i4,a)') 'rbcopt = ', rbcopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'c_phase = ', c_phase,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'rlxlbc = ', rlxlbc ,','
WRITE (logfunt, '(3x,a,i4,a)') 'pdetrnd = ', pdetrnd,','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the exbcpara namelist value into the log file.
!
!-----------------------------------------------------------------------
!
lenstr = 80
CALL strlnth
( exbcname, lenstr)
WRITE (logfunt, '(/1x,a)') '&exbcpara'
WRITE (logfunt, '(3x,a)') &
'exbcname = '''//exbcname(1:lenstr)//''','
WRITE (logfunt, '(3x,a)') 'tinitebd = '''//tinitebd//''','
WRITE (logfunt, '(3x,a,i10,a)') 'tintvebd = ', tintvebd, ','
WRITE (logfunt, '(3x,a,i10,a)') 'ngbrz = ', ngbrz, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'brlxhw = ', brlxhw, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cbcdmp = ', cbcdmp, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cbcmix = ', cbcmix, ','
WRITE (logfunt, '(3x,a,i4,a)') 'exbcfmt = ', exbcfmt, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the coriolis force namelist values into the logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&coriolis_force'
WRITE (logfunt, '(3x,a,i4,a)') 'coriopt = ', coriopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'coriotrm = ', coriotrm,','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the turbulence namelist values into the namelist logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&turbulence'
WRITE (logfunt, '(3x,a,i4,a)') 'tmixopt = ', tmixopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'trbisotp = ', trbisotp,','
WRITE (logfunt, '(3x,a,i4,a)') 'tkeopt = ', tkeopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'trbvimp = ', trbvimp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'tmixvert = ', tmixvert,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'alfcoef = ', alfcoef, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'prantl = ', prantl, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tmixcst = ', tmixcst, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'kmlimit = ', kmlimit, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write a computational_mixing namelist values into the logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&computational_mixing'
WRITE (logfunt, '(3x,a,i4,a)') 'cmix2nd = ', cmix2nd,','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cfcm2h = ', cfcm2h, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cfcm2v = ', cfcm2v, ','
WRITE (logfunt, '(3x,a,i4,a)') 'cmix4th = ', cmix4th,','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cfcm4h = ', cfcm4h, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cfcm4v = ', cfcm4v, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'scmixfctr = ', scmixfctr, ','
WRITE (logfunt, '(3x,a,i4,a)') 'cmix_opt = ', cmix_opt, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Calculate divdmpnd and write the divergence namelist data into
! the namelist log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&divergence_damping'
WRITE (logfunt, '(3x,a,i4,a)') 'divdmp = ', divdmp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'divdmpndh = ', divdmpndh,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'divdmpndv = ', divdmpndv,','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the rayleigh_damping namelist values into the logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&rayleigh_damping'
WRITE (logfunt, '(3x,a,i4,a)') 'raydmp = ', raydmp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'cfrdmp = ', cfrdmp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'zbrdmp = ', zbrdmp, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the asselin_time_filter namelist data into the logfile.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&asselin_time_filter'
WRITE (logfunt, '(3x,a,f16.4,a)') 'flteps = ', flteps, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the microphysics namelist values into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') 'µphysics'
WRITE (logfunt, '(3x,a,i4,a)') 'moist = ', moist, ','
WRITE (logfunt, '(3x,a,i4,a)') 'mphyopt = ', mphyopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'cnvctopt = ', cnvctopt,','
WRITE (logfunt, '(3x,a,e15.5,a)') 'kffbfct = ', kffbfct, ','
WRITE (logfunt, '(3x,a,i4,a)') 'kfsubsattrig = ', kfsubsattrig, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'wcldbs = ', wcldbs, ','
WRITE (logfunt, '(3x,a,e15.4,a)') 'confrq = ', confrq, ','
WRITE (logfunt, '(3x,a,e15.4,a)') 'qpfgfrq = ', qpfgfrq, ','
WRITE (logfunt, '(3x,a,i4,a)') 'idownd = ', idownd, ','
WRITE (logfunt, '(3x,a,i4,a)') 'subsatopt = ', subsatopt, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'rhsat = ', rhsat, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'rhsatmin = ', rhsatmin, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'dx_rhsatmin = ', dx_rhsatmin, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'dx_rhsat100 = ', dx_rhsat100, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the radiation namelist values into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&radiation'
WRITE (logfunt, '(3x,a,i4,a)') 'radopt = ', radopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'radstgr = ', radstgr, ','
WRITE (logfunt, '(3x,a,i4,a)') 'rlwopt = ', rlwopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dtrad = ', dtrad, ','
WRITE (logfunt, '(3x,a,i4,a)') 'raddiag = ', raddiag, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the surface physics namelist values into the namelist
! log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&surface_physics'
WRITE (logfunt, '(3x,a,i4,a)') 'sfcphy = ', sfcphy, ','
WRITE (logfunt, '(3x,a,i4,a)') 'landwtr = ', landwtr,','
WRITE (logfunt, '(3x,a,i4,a)') 'cdhwtropt = ', cdhwtropt,','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdmlnd = ', cdmlnd, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdmwtr = ', cdmwtr, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdhlnd = ', cdhlnd, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdhwtr = ', cdhwtr, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdqlnd = ', cdqlnd, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'cdqwtr = ', cdqwtr, ','
WRITE (logfunt, '(3x,a,i4,a)') 'pbldopt = ', pbldopt,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'pbldpth0 = ', pbldpth0,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'lsclpbl0 = ', lsclpbl0,','
! write (logfunt, '(3x,a,i4,a)') 'sflxdis = ', sflxdis,','
WRITE (logfunt, '(3x,a,i4,a)') 'tqflxdis = ', tqflxdis,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dtqflxdis = ', dtqflxdis,','
WRITE (logfunt, '(3x,a,i4,a)') 'sfcdiag = ', sfcdiag,','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the surface energy budget model (EBM) namelist values into
! the namelist log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&soil_ebm'
WRITE (logfunt, '(3x,a,i4,a)') 'sfcdat = ', sfcdat, ','
WRITE (logfunt, '(3x,a,i4,a)') 'styp = ', styp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'vtyp = ', vtyp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'lai0 = ', lai0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'roufns0 = ', roufns0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'veg0 = ', veg0, ','
lenstr = 80
CALL strlnth
( sfcdtfl,lenstr )
WRITE (logfunt, '(3x,a,a,a)') &
'sfcdtfl = ''', sfcdtfl(1:lenstr), ''','
WRITE (logfunt, '(3x,a,i4,a)') 'sfcfmt = ', sfcfmt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'soilinit = ', soilinit, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ptslnd0 = ', ptslnd0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'ptswtr0 = ', ptswtr0, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tsoil0 = ', tsoil0, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'wetsfc0 = ', wetsfc0, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'wetdp0 = ', wetdp0, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'wetcanp0 = ', wetcanp0, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'snowdpth0 = ', snowdpth0,','
WRITE (logfunt, '(3x,a,e15.5,a)') 'tsprt = ', tsprt, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 't2prt = ', t2prt, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'wgrat = ', wgrat, ','
WRITE (logfunt, '(3x,a,e15.5,a)') 'w2rat = ', w2rat, ','
lenstr = 80
CALL strlnth
( soilinfl,lenstr )
WRITE (logfunt, '(3x,a,a,a)') &
'soilinfl = ''', soilinfl(1:lenstr), ''','
WRITE (logfunt, '(3x,a,i4,a)') 'soilfmt = ',soilfmt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'tsoil_offset = ',tsoil_offset, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tsoil_offset_amplitude = ',tsoil_offset_amplitude, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'dtsfc = ', dtsfc, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Parameters for automatic grid translation.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&grdtrans'
WRITE (logfunt, '(3x,a,i4,a)') 'cltkopt =',cltkopt,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tceltrk =',tceltrk,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tcrestr =',tcrestr,','
WRITE (logfunt, '(3x,a,i4,a)') 'grdtrns =',grdtrns,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'umove =',umove, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'vmove =',vmove, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'twindow =',twindow,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'chkdpth =',chkdpth,','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the history_dump namelist data into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&history_dump'
WRITE (logfunt, '(3x,a,i4,a)') 'hdmpopt = ', hdmpopt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'hdmpfmt = ', hdmpfmt, ','
WRITE (logfunt, '(3x,a,i4,a)') 'grbpkbit = ', grbpkbit,','
WRITE (logfunt, '(3x,a,i4,a)') 'hdfcompr = ', hdfcompr,','
WRITE (logfunt, '(3x,a,f16.4,a)') 'thisdmp = ', thisdmp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tstrtdmp = ', tstrtdmp,','
WRITE (logfunt, '(3x,a,i4,a)') 'numhdmp = ', numhdmp, ','
IF ( numhdmp > 0 ) THEN
DO i=1,numhdmp
WRITE (logfunt, '(3x,a,i3.3,a,f16.4,a)') &
'hdmptim(',i,') = ', hdmptim(i),','
END DO
END IF
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the output namelist data into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&output'
WRITE (logfunt, '(3x,a)') &
'dirname = '''//dirname(1:ldirnam)//''','
WRITE (logfunt, '(3x,a,i4,a)') 'exbcdmp = ', exbcdmp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'extdadmp = ', extdadmp,','
WRITE (logfunt, '(3x,a,i4,a)') 'filcmprs = ', filcmprs,','
WRITE (logfunt, '(3x,a,i4,a)') 'basout = ', basout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'grdout = ', grdout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'varout = ', varout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'mstout = ', mstout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'iceout = ', iceout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'tkeout = ', tkeout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'trbout = ', trbout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'sfcout = ', sfcout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'rainout = ', rainout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'prcout = ', prcout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'landout = ', landout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'radout = ', radout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'flxout = ', flxout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'qcexout = ', qcexout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'qrexout = ', qrexout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'qiexout = ', qiexout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'qsexout = ', qsexout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'qhexout = ', qhexout, ','
WRITE (logfunt, '(3x,a,i4,a)') 'sfcdmp = ', sfcdmp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'soildmp = ', soildmp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'terndmp = ', terndmp, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tfmtprt = ', tfmtprt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'trstout = ', trstout, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tmaxmin = ', tmaxmin, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tenergy = ', tenergy, ','
WRITE (logfunt, '(3x,a,i4,a)') 'imgopt = ', imgopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'timgdmp = ', timgdmp, ','
WRITE (logfunt, '(3x,a,i4,a)') 'pltopt = ', pltopt, ','
WRITE (logfunt, '(3x,a,f16.4,a)') 'tplots = ', tplots, ','
WRITE (logfunt, '(1x,a)') '/'
!
!-----------------------------------------------------------------------
!
! Write the debug namelist value into the log file.
!
!-----------------------------------------------------------------------
!
WRITE (logfunt, '(/1x,a)') '&debug'
WRITE (logfunt, '(3x,a,i4,a)') 'lvldbg = ', lvldbg, ','
WRITE (logfunt, '(1x,a)') '/'
IF( logfunt /= 6 ) THEN
CLOSE(UNIT=logfunt)
CALL retunit( logfunt )
WRITE(6,'(/3x,a,a,a/)') &
'Log file ',logfn(1:llogfn),' was produced for this job.'
END IF
RETURN
END SUBROUTINE prtlog
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE SETGRD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE setgrd( nx,ny, x, y ) 2,4
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set up the ARPS model grid.
!
! The structure of this program is as follows:
!
! 1. Get the map projection information.
! (call subroutine setmapr)
!
! 2. Get the absolute coordinates of the model grid origin on map
! grid with the origin at north pole.
! (call subroutine lltoxy)
!
! 3. Set up the model origin.
! (call subroutine setorig)
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yuhe Liu
! 1/26/94
!
! MODIFICATIONS:
!
! 7/15/94
! Change the model grid reference point from the southwest corner to
! the center of model domain.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx Number of grid points for the model
! grid in the east-west direction.
! ny Number of grid points for the model
! grid in the north-south direction.
!
! OUTPUT:
!
! x Analysis grid points in the e-w direction
! (in grid units)
! y Analysis grid points in the n-s direction
! (in grid units)
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx ! Number of model grid points
! in the east-west direction.
INTEGER :: ny ! Number of model grid points
! in the north-south direction
REAL :: x (nx) ! 2-D model grid points east-west
! direction (model grid units)
REAL :: y (ny) ! 2-D model grid points north-south
! direction (model grid units)
!
!-----------------------------------------------------------------------
!
! Include files: globcst.inc phycst.inc
!
! dx Model grid spacing in the x-direction east-west
! (meters)
! dy Analysis grid spacing in the y-direction north-south
! (meters)
!
! ctrlat Latitude of the center of the model grid (deg. N)
! ctrlon Longitude of the center of the model grid (deg. E)
!
!wdt update
! mapproj type of map projection used to setup the model grid.
! mapproj = 1 Polar Stereographic projection
! = 2 Lambert Contformal
! = 3 Mercator projection
! = 4 Lat, Lon Projection
! = 5 User defined
! trulat1 The 1st real true latitude of map projection.
! trulat2 The 2nd real true latitude of map projection.
! trulon Real true longitude of map projection.
! sclfct Map scale factor (eg. sclfct=1/1000000)
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid parameters
INCLUDE 'phycst.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j
REAL :: alatpro(2)
REAL :: sclf
REAL :: dxscl ! Model x-direction grid spacing
! normalized by the map scale
! dxscl=dx/sclf
REAL :: dyscl ! Model y-direction grid spacing
! normalized by the map scale
! dyscl=dy/sclf
REAL :: ctrx, ctry, swx, swy
REAL :: xsub0, ysub0
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
alatpro(1) = trulat1
alatpro(2) = trulat2
IF( sclfct /= 1.0) THEN
sclf = 1.0/sclfct
dxscl = dx*sclf
dyscl = dy*sclf
ELSE
sclf = 1.0
dxscl = dx
dyscl = dy
END IF
xsub0 = dx * (nx-3) * (loc_x-1)
ysub0 = dy * (ny-3) * (loc_y-1)
!
!-----------------------------------------------------------------------
!
! Note IMPORTANT!!!!: dx and dy are in meters...and the grid is
! oriented so that the y-axis line through the true longitude of
! a map projection runs along a longitude line towards
! the northpole and the x-axis is perpendicular to the y-axis.
! Create the x,y grid in grid meters (multiplied by sclf), the
! origin is the southwest corner of the model physical domain as
! translated from the center point specified by user
! (ctrlat/ctrlon).
!
!-----------------------------------------------------------------------
!
CALL setmapr
( mapproj,sclf,alatpro,trulon )
! set up parameters for map projection
!
!-----------------------------------------------------------------------
!
! Find the absolute coordinate (ctrx,ctry) of point (ctrlat,ctrlon)
! in the latitude-longitude space.
!
!-----------------------------------------------------------------------
!
CALL lltoxy
( 1,1, ctrlat,ctrlon, ctrx, ctry )
!
!-----------------------------------------------------------------------
!
! Translate the center point to the first physical point, i.e.,
! the origin of the model grid.
!
!-----------------------------------------------------------------------
!
! swx = ctrx - (float(nx-3)/2.) * dxscl
! swy = ctry - (float(ny-3)/2.) * dyscl
swx = ctrx - (FLOAT(nproc_x*(nx-3))/2.) * dxscl
swy = ctry - (FLOAT(nproc_y*(ny-3))/2.) * dyscl
CALL setorig
( 1, swx, swy)
! set up the model origin to the coord.
xgrdorg = 0.0
ygrdorg = 0.0
!
!-----------------------------------------------------------------------
!
! Calculate the rest of the model grid points in earth meters*sclf
!
!-----------------------------------------------------------------------
!
DO i=1,nx
! x(i) = dxscl * (i-2)
x(i) = sclf*xsub0 + dxscl * (i-2)
END DO
DO j=1,ny
! y(j) = dyscl * (j-2)
y(j) = sclf*ysub0 + dyscl * (j-2)
END DO
CALL setcornerll
(nx,ny,x,y)
RETURN
END SUBROUTINE setgrd