*IF DEF,SCMA S_INSTAT.2
CC *****************************COPYRIGHT****************************** S_INSTAT.3
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. S_INSTAT.4
C S_INSTAT.5
C Use, duplication or disclosure of this code is subject to the S_INSTAT.6
C restrictions as set forth in the contract. S_INSTAT.7
C S_INSTAT.8
C Meteorological Office S_INSTAT.9
C London Road S_INSTAT.10
C BRACKNELL S_INSTAT.11
C Berkshire UK S_INSTAT.12
C RG12 2SZ S_INSTAT.13
C S_INSTAT.14
C If no contract has been raised with this copy of the code, the use, S_INSTAT.15
C duplication or disclosure of it is strictly prohibited. Permission S_INSTAT.16
C to do so must first be obtained in writing from the Head of Numerical S_INSTAT.17
C Modelling at the above address. S_INSTAT.18
C ******************************COPYRIGHT****************************** S_INSTAT.19
C S_INSTAT.20
C Subroutine INITSTAT S_INSTAT.21
C Purpose:- To calculate the initial variables required by S_INSTAT.22
C statistical forcing routines used later S_INSTAT.23
C and also prints out initial climate datasets S_INSTAT.24
C Programmer:- J. LEAN - modified code from original SCM to S_INSTAT.25
C meet UM standards S_INSTAT.26
C Modification History: S_INSTAT.27
C Version Date S_INSTAT.28
C 4.5 07/98 SCM integrated as a standard UM configuration S_INSTAT.29
C Introduce multicolumn SCM S_INSTAT.30
C JC Thil. S_INSTAT.31
CC===================================================================== S_INSTAT.32
C S_INSTAT.33
Subroutine INITSTAT( 1,19S_INSTAT.34
& points, nlevs, nwet, ntrop, S_INSTAT.35
& andayy, dayno, q, t, lat, long, S_INSTAT.36
& pstari, pstara, pstarb, alfada, alfadb, tbara, tbarb, S_INSTAT.37
& tsda, tsdb, tgrada, tgradb, dbara, dbarb, dgrada, dgradb, S_INSTAT.38
& vnbara, vnbarb, vnsda, vnsdb, vpbara, vpbarb, wbara, wbarb, S_INSTAT.39
& wsda, wsdb, atime, btime, ak, bk) S_INSTAT.40
S_INSTAT.41
Implicit none S_INSTAT.42
S_INSTAT.43
Integer S_INSTAT.44
& points ! IN no of model columns S_INSTAT.45
& ,nlevs ! IN no of levels S_INSTAT.46
& ,nwet ! IN Number of model levels in which S_INSTAT.47
! Q is set. S_INSTAT.48
& ,ntrop ! IN Max number of levels in the S_INSTAT.49
! troposphere S_INSTAT.50
S_INSTAT.51
*CALL C_PI
S_INSTAT.52
C S_INSTAT.53
C--------------------------------------------------------------------- S_INSTAT.54
C Arguments S_INSTAT.55
C--------------------------------------------------------------------- S_INSTAT.56
C S_INSTAT.57
Real S_INSTAT.58
& andayy ! IN No. of days in 1 year S_INSTAT.59
Integer S_INSTAT.60
& dayno ! IN Day number relative to winter S_INSTAT.61
! solstice S_INSTAT.62
Real S_INSTAT.63
& alfada(points) ! OUT Amplitude and mean of S_INSTAT.64
& ,alfadb(points) ! seasonal variation of tuning S_INSTAT.65
& ,ak(nlevs) ! factor Coefficient defining S_INSTAT.66
! hybrid vertical coordinate S_INSTAT.67
& ,atime,btime ! OUT Constants for calculating S_INSTAT.68
! annual cycle used in eqn 2.33 S_INSTAT.69
! in SCM doc. S_INSTAT.70
& ,bk(nlevs) ! Coefficient defining hybrid S_INSTAT.71
! vertical coordinate S_INSTAT.72
& ,dbara(points,nwet) ! OUT Amplitude and mean of seasonal S_INSTAT.73
& ,dbarb(points,nwet) ! variation of mean dew pt. S_INSTAT.74
! depression (K) S_INSTAT.75
& ,dgrada(points,nwet) ! OUT Amplitude and mean of seasonal S_INSTAT.76
& ,dgradb(points,nwet) ! variation of gradient of S_INSTAT.77
! dew pt. depression (K/km) S_INSTAT.78
& ,lat0 ! Dummy for I/Os S_INSTAT.79
& ,lat(points) ! OUT Latitude and longitude of S_INSTAT.80
& ,long(points) ! gridpoint S_INSTAT.81
& ,long0 ! Dummy for I/Os S_INSTAT.82
& ,pstara(points) ! OUT Amplitude and mean of seasonal S_INSTAT.83
& ,pstarb(points) ! variation of surface pressure (Pa) S_INSTAT.84
& ,q(points,nwet) ! INOUT Specific humidity (Kg Kg**-1) S_INSTAT.85
& ,t(points,nlevs) ! INOUT Temps(K) S_INSTAT.86
& ,tbara(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.87
& ,tbarb(points,nlevs) ! variation of mean temo. (K) S_INSTAT.88
& ,tgrada(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.89
& ,tgradb(points,nlevs) ! variation of temp. gradient S_INSTAT.90
! (K km**-1) S_INSTAT.91
& ,tsda(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.92
& ,tsdb(points,nlevs) ! variation of SD of temp. (K) S_INSTAT.93
& ,tstara(points) ! OUT Amplitude and mean of seasonal S_INSTAT.94
& ,tstarb(points) ! variation of surface temp. (K) S_INSTAT.95
& ,vnbara(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.96
& ,vnbarb(points,nlevs) ! variation of velocity VN S_INSTAT.97
! (m s**-1) S_INSTAT.98
& ,vnsda(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.99
& ,vnsdb(points,nlevs) ! variation of SD of velocity VN S_INSTAT.100
! (m s**-1) S_INSTAT.101
& ,vpbara(points,nlevs) ! OUT Amplitude and mean of seasonal S_INSTAT.102
& ,vpbarb(points,nlevs) ! variation of velocity VP S_INSTAT.103
! (m s**-1) S_INSTAT.104
& ,wbara(points,ntrop) ! OUT Amplitude and mean of seasonal S_INSTAT.105
& ,wbarb(points,ntrop) ! variation of vert. vel. S_INSTAT.106
! ( mb s**-1) S_INSTAT.107
& ,wsda(points,ntrop) ! OUT Amplitude and mean of seasonal S_INSTAT.108
& ,wsdb(points,ntrop) ! variation of SD of vert. vel. S_INSTAT.109
! (mb s**-1) S_INSTAT.110
C S_INSTAT.111
C--------------------------------------------------------------------- S_INSTAT.112
C Local variables S_INSTAT.113
C--------------------------------------------------------------------- S_INSTAT.114
C S_INSTAT.115
C Variables for printout of climate dataset S_INSTAT.116
C S_INSTAT.117
Character*29 S_INSTAT.118
& cfmt ! Format statement for each row S_INSTAT.119
! of variables S_INSTAT.120
Character*34 S_INSTAT.121
& ctfmt ! Format statement for title S_INSTAT.122
! of each row S_INSTAT.123
Integer S_INSTAT.124
& element ! Array element no. S_INSTAT.125
& ,lastrow ! No. of elements in last row S_INSTAT.126
& ,nlevsrows, nlevscount ! No. of rows and Do Loop counter S_INSTAT.127
& ,ntroprows, ntropcount ! elements S_INSTAT.128
& ,nwetrows, nwetcount ! elements S_INSTAT.129
C S_INSTAT.130
Integer S_INSTAT.131
& i, k, l ! Loop counter S_INSTAT.132
Real S_INSTAT.133
& alfad0 ! Dummy for I/Os S_INSTAT.134
& ,alfad1(points) S_INSTAT.135
& ,alfad2(points) ! Tuning factor for Jan and July S_INSTAT.136
& ,daynew ! Function to calculate SIN arg S_INSTAT.137
! (eqn. 2.33 in SCM doc.) S_INSTAT.138
& ,daysol1,daysol2 ! No. of days after winter S_INSTAT.139
& ,dbar0(nwet) ! dummy var for I/Os S_INSTAT.140
& ,dbar1(points,nwet) ! Mean dew pt. depressions S_INSTAT.141
& ,dbar2(points,nwet) ! for Jan. and July (K) S_INSTAT.142
& ,dewpt(points,nwet,2) ! Dew point (K) S_INSTAT.143
& ,dgrad0(nwet) ! Dummy var for I/Os S_INSTAT.144
& ,dgrad1(points,nwet) ! Gradient dew pt. depressions S_INSTAT.145
& ,dgrad2(points,nwet) ! for Jan. and July (K km**-1) S_INSTAT.146
& ,press(points,nlevs) ! Pressure for sigma levels (Pa) S_INSTAT.147
& ,pstar0 ! Dummy for I/Os S_INSTAT.148
& ,pstar1(points) ! Surface pressure for S_INSTAT.149
& ,pstar2(points) ! Jan. and July (Pa) S_INSTAT.150
& ,pstari(points) ! Initial surface pressure (Pa) S_INSTAT.151
& ,qi(points,nwet) ! Initial specific humidity S_INSTAT.152
! (Kg Kg**-1) S_INSTAT.153
& ,rpress(points,nlevs) ! Reciprocal pressure S_INSTAT.154
! ((HPa or mb)**-1) S_INSTAT.155
& ,tbar0(nlevs) ! dummy var fo I/Os S_INSTAT.156
& ,tbar1(points,nlevs) ! Mean temp. for Jan. and July S_INSTAT.157
& ,tbar2(points,nlevs) ! (K) S_INSTAT.158
& ,tgrad0(nlevs) ! Dummy var for I/Os S_INSTAT.159
& ,tgrad1(points,nlevs) ! Gradient temp. S_INSTAT.160
& ,tgrad2(points,nlevs) ! for Jan. and July (K km**-1) S_INSTAT.161
& ,ti(points,nlevs) ! Initial temps. (K) S_INSTAT.162
& ,tsd0(nlevs) ! dummy var fo I/Os S_INSTAT.163
& ,tsd1(points,nlevs) ! SD of temp. for Jan. and July S_INSTAT.164
& ,tsd2(points,nlevs) ! (K) S_INSTAT.165
& ,tstar0 ! Dummy for I/Os S_INSTAT.166
& ,tstar1(points) ! Surface temperature for S_INSTAT.167
& ,tstar2(points) ! Jan and July (K) S_INSTAT.168
& ,vnbar0(nlevs) ! Dummy var for I/Os S_INSTAT.169
& ,vnbar1(points,nlevs) ! Mean horizontal velocity VN S_INSTAT.170
& ,vnbar2(points,nlevs) ! for Jan. and July (m s**-1) S_INSTAT.171
& ,vnsd0(nlevs) ! Dummy for I/Os S_INSTAT.172
& ,vnsd1(points,nlevs) ! SD horizontal velocity VN S_INSTAT.173
& ,vnsd2(points,nlevs) ! for Jan. and July (m s**-1) S_INSTAT.174
& ,vpbar0(nlevs) ! Dummy var for I/O. S_INSTAT.175
& ,vpbar1(points,nlevs) ! Mean horizontal velocity VP S_INSTAT.176
& ,vpbar2(points,nlevs) ! for Jan. and July (m s**-1) S_INSTAT.177
& ,wbar0(ntrop) ! Dummy for I/Os S_INSTAT.178
& ,wbar1(points,ntrop) ! Mean vertical velocity S_INSTAT.179
& ,wbar2(points,ntrop) ! for Jan and July (mb s**-1) S_INSTAT.180
& ,wsd0(ntrop) ! Dummy for I/Os S_INSTAT.181
& ,wsd1(points,ntrop) ! SD vertical velocity S_INSTAT.182
& ,wsd2(points,ntrop) ! for Jan and July (mb s**-1) S_INSTAT.183
& ,xt ! Argument of SIN distribution S_INSTAT.184
! eqn. 2.33 S_INSTAT.185
C S_INSTAT.186
C Read climate stats for January and July S_INSTAT.187
C S_INSTAT.188
C Each column is read in a set of dummy variables, S_INSTAT.189
C then, the values are copied accross to the real S_INSTAT.190
C arrays. This is to ensure conistency between S_INSTAT.191
C one column and multicolumns runs, even though it creates S_INSTAT.192
C redundancy S_INSTAT.193
Do l = 1, points S_INSTAT.194
Read (25,204) lat0, long0, pstar0, tstar0, alfad0 S_INSTAT.195
Read (25,202) tbar0, tsd0, dbar0 S_INSTAT.196
Read (25,203) tgrad0, dgrad0 S_INSTAT.197
Read (25,202) vnbar0, vpbar0, vnsd0 S_INSTAT.198
Read (25,201) wbar0, wsd0 S_INSTAT.199
Read (25,205) daysol1 S_INSTAT.200
lat(l) = lat0 S_INSTAT.201
long(l) = long0 S_INSTAT.202
pstar1(l) = pstar0 S_INSTAT.203
tstar1(l) = tstar0 S_INSTAT.204
alfad1(l) = alfad0 S_INSTAT.205
Do k = 1, nlevs S_INSTAT.206
tbar1(l,k) = tbar0(k) S_INSTAT.207
tsd1(l,k) = tsd0(k) S_INSTAT.208
tgrad1(l,k) = tgrad0(k) S_INSTAT.209
vnbar1(l,k) = vnbar0(k) S_INSTAT.210
vpbar1(l,k) = vpbar0(k) S_INSTAT.211
vnsd1(l,k) = vnsd0(k) S_INSTAT.212
enddo S_INSTAT.213
Do k = 1, nwet S_INSTAT.214
dbar1(l,k) = dbar0(k) S_INSTAT.215
dgrad1(l,k) = dgrad0(k) S_INSTAT.216
enddo S_INSTAT.217
Do k = 1, ntrop S_INSTAT.218
wbar1(l,k) = wbar0(k) S_INSTAT.219
wsd1(l,k) = wsd0(k) S_INSTAT.220
enddo S_INSTAT.221
S_INSTAT.222
Read (26,204) lat0, long0, pstar0, tstar0, alfad0 S_INSTAT.223
Read (26,202) tbar0, tsd0, dbar0 S_INSTAT.224
Read (26,203) tgrad0, dgrad0 S_INSTAT.225
Read (26,202) vnbar0, vpbar0, vnsd0 S_INSTAT.226
Read (26,201) wbar0, wsd0 S_INSTAT.227
Read (26,205) daysol2 S_INSTAT.228
lat(l) = lat0 S_INSTAT.229
long(l) = long0 S_INSTAT.230
pstar2(l) = pstar0 S_INSTAT.231
tstar2(l) = tstar0 S_INSTAT.232
alfad2(l) = alfad0 S_INSTAT.233
Do k = 1, nlevs S_INSTAT.234
tbar2(l,k) = tbar0(k) S_INSTAT.235
tsd2(l,k) = tsd0(k) S_INSTAT.236
tgrad2(l,k) = tgrad0(k) S_INSTAT.237
vnbar2(l,k) = vnbar0(k) S_INSTAT.238
vpbar2(l,k) = vpbar0(k) S_INSTAT.239
vnsd2(l,k) = vnsd0(k) S_INSTAT.240
enddo S_INSTAT.241
Do k = 1, nwet S_INSTAT.242
dbar2(l,k) = dbar0(k) S_INSTAT.243
dgrad2(l,k) = dgrad0(k) S_INSTAT.244
enddo S_INSTAT.245
Do k = 1, ntrop S_INSTAT.246
wbar2(l,k) = wbar0(k) S_INSTAT.247
wsd2(l,k) = wsd0(k) S_INSTAT.248
enddo S_INSTAT.249
S_INSTAT.250
enddo ! l S_INSTAT.251
c S_INSTAT.252
c Calculate amplitude and mean of annual sinusoidal distribution S_INSTAT.253
c Eqs 10 and 11 S_INSTAT.254
c S_INSTAT.255
Call ABNEW
( tstar1, tstar2, tstara, tstarb, points, 1) S_INSTAT.256
Call ABNEW
( pstar1, pstar2, pstara, pstarb, points, 1) S_INSTAT.257
Call ABNEW
( alfad1, alfad2, alfada, alfadb, points, 1) S_INSTAT.258
Call ABNEW
( tbar1, tbar2, tbara, tbarb, points, nlevs) S_INSTAT.259
Call ABNEW
( tsd1, tsd2, tsda, tsdb, points, nlevs) S_INSTAT.260
Call ABNEW
( tgrad1, tgrad2, tgrada, tgradb, points, nlevs) S_INSTAT.261
Call ABNEW
( dbar1, dbar2, dbara, dbarb, points, nwet) S_INSTAT.262
Call ABNEW
( dgrad1, dgrad2, dgrada, dgradb, points, nwet) S_INSTAT.263
Call ABNEW
( vnbar1, vnbar2, vnbara, vnbarb, points, nlevs) S_INSTAT.264
Call ABNEW
( vnsd1, vnsd2, vnsda, vnsdb, points, nlevs) S_INSTAT.265
Call ABNEW
( vpbar1, vpbar2, vpbara, vpbarb, points, nlevs) S_INSTAT.266
Call ABNEW
( wbar1, wbar2, wbara, wbarb, points, ntrop) S_INSTAT.267
Call ABNEW
( wsd1, wsd2, wsda, wsdb, points, ntrop) S_INSTAT.268
C S_INSTAT.269
C Calculate constants for annual cycle used in eqn. 12 S_INSTAT.270
C S_INSTAT.271
atime = 2. * pi / andayy S_INSTAT.272
btime = pi * (.5-2.*daysol1) S_INSTAT.273
C S_INSTAT.274
C Calculate argument of sinusoidal distribution (eqn. 12) S_INSTAT.275
C S_INSTAT.276
xt = DAYNEW
(atime, btime, dayno) S_INSTAT.277
C S_INSTAT.278
C Calculate sinusoidal distribution (eqn. 12) S_INSTAT.279
C S_INSTAT.280
Call XNEW
(pstari, pstara, pstarb, points, 1, xt) S_INSTAT.281
Call XNEW
(ti, tbara, tbarb, points, nlevs, xt) S_INSTAT.282
Call XNEW
(q, dbara, dbarb, points, nwet, xt) S_INSTAT.283
C S_INSTAT.284
C Calculate default initial profile for Q S_INSTAT.285
C S_INSTAT.286
Call PNEW
(nlevs, press, rpress, points, nwet, pstari, ak, bk) S_INSTAT.287
Do k = 1, nwet S_INSTAT.288
Do i = 1, points S_INSTAT.289
dewpt(i,k,1) = ti(i,k) - q(i,k) S_INSTAT.290
enddo S_INSTAT.291
enddo S_INSTAT.292
Call QSAT
(qi, dewpt(1,1,1), press, (points*nwet)) S_INSTAT.293
Do k = 1, nlevs S_INSTAT.294
Do i = 1, points S_INSTAT.295
t(i,k) = ti(i,k) S_INSTAT.296
enddo S_INSTAT.297
enddo S_INSTAT.298
Do k = 1, nwet S_INSTAT.299
Do i = 1, points S_INSTAT.300
q(i,k) = qi(i,k) S_INSTAT.301
enddo S_INSTAT.302
enddo ! i S_INSTAT.303
C S_INSTAT.304
C********************************************************************* S_INSTAT.305
C Print out climate datasets for January and July as read in S_INSTAT.306
C This section of code is very long but is necessary for S_INSTAT.307
C flexiblity ie to cope with any number of levels S_INSTAT.308
C********************************************************************* S_INSTAT.309
C S_INSTAT.310
daysol1 = daysol1 * andayy S_INSTAT.311
daysol2 = daysol2 * andayy S_INSTAT.312
S_INSTAT.313
Do l = 1 , points S_INSTAT.314
C Transfer the arrays back to their 1D versions: S_INSTAT.315
lat0 = lat(l) S_INSTAT.316
long0 = long(l) S_INSTAT.317
pstar0 = pstar1(l) S_INSTAT.318
tstar0 = tstar1(l) S_INSTAT.319
alfad0 = alfad1(l) S_INSTAT.320
Do k = 1, nlevs S_INSTAT.321
tbar0(k) = tbar1(l,k) S_INSTAT.322
tsd0(k) = tsd1(l,k) S_INSTAT.323
tgrad0(k) = tgrad1(l,k) S_INSTAT.324
vnbar0(k) = vnbar1(l,k) S_INSTAT.325
vpbar0(k) = vpbar1(l,k) S_INSTAT.326
vnsd0(k) = vnsd1(l,k) S_INSTAT.327
enddo S_INSTAT.328
Do k = 1, nwet S_INSTAT.329
dbar0(k)= dbar1(l,k) S_INSTAT.330
dgrad0(k)= dgrad1(l,k) S_INSTAT.331
enddo S_INSTAT.332
Do k = 1, ntrop S_INSTAT.333
wbar0(k)= wbar1(l,k) S_INSTAT.334
wsd0(k)= wsd1(l,k) S_INSTAT.335
enddo S_INSTAT.336
S_INSTAT.337
if (points .gt. 1) Write (11,*) 'Column no ', l S_INSTAT.338
Write (11,301) lat0, long0 S_INSTAT.339
Write (11,302) pstar0, tstar0, alfad0, daysol1 S_INSTAT.340
C S_INSTAT.341
C Set format statements S_INSTAT.342
C S_INSTAT.343
cfmt = '('' '', (1pe10.3,1x))' S_INSTAT.344
ctfmt = '(''0 '', (3x,''level'',i2,1x))' S_INSTAT.345
C S_INSTAT.346
C Calculate no. of rows and no. of elements in last row for S_INSTAT.347
C variables with nlevs S_INSTAT.348
C S_INSTAT.349
If ( mod(nlevs,10) .eq. 0) then S_INSTAT.350
nlevsrows = int(nlevs/10) S_INSTAT.351
lastrow = 10 S_INSTAT.352
else S_INSTAT.353
nlevsrows = int(nlevs/10) + 1 S_INSTAT.354
lastrow = mod(nlevs,10) S_INSTAT.355
endif S_INSTAT.356
Do nlevscount = 1, nlevsrows S_INSTAT.357
element = 10 * (nlevscount-1) S_INSTAT.358
If (nlevscount .lt. nlevsrows) then S_INSTAT.359
c S_INSTAT.360
c Write out all complete rows ie of 10 variables per row S_INSTAT.361
C S_INSTAT.362
Write (11,303) (element+i, i = 1, 10) S_INSTAT.363
Write (11,304) (tbar0(element+i), i = 1, 10), S_INSTAT.364
& (tsd0(element+i), i = 1, 10), S_INSTAT.365
& (tgrad0(element+i), i = 1, 10), S_INSTAT.366
& (vnbar0(element+i), i = 1, 10), S_INSTAT.367
& (vpbar0(element+i), i = 1, 10), S_INSTAT.368
& (vnsd0(element+i), i = 1, 10) S_INSTAT.369
else S_INSTAT.370
C S_INSTAT.371
C Write out last row. Use an internal format statement by S_INSTAT.372
C creating a character string. This will enable a variable S_INSTAT.373
C format to be created eg NF10.6 where N is the no. of S_INSTAT.374
C elements in the last row which can be written into the S_INSTAT.375
C format statement via an internal write statement. S_INSTAT.376
C S_INSTAT.377
Write (ctfmt(14:15),'(i2)')lastrow S_INSTAT.378
Write(11,ctfmt)(element+i,i= 1, lastrow) S_INSTAT.379
Write(cfmt(15:16),'(i2)')lastrow S_INSTAT.380
Write(cfmt(4:12),'(''tmn k '')') S_INSTAT.381
Write(11,cfmt)(tbar0(i+element),i= 1, lastrow) S_INSTAT.382
Write(cfmt(4:12),'(''tsd k '')') S_INSTAT.383
Write(11,cfmt)(tsd0(i+element),i= 1, lastrow) S_INSTAT.384
Write(cfmt(4:12),'(''tgrd k/km'')') S_INSTAT.385
Write(11,cfmt)(tgrad0(i+element),i= 1, lastrow) S_INSTAT.386
Write(cfmt(4:12),'(''vnmn m/s '')') S_INSTAT.387
Write(11,cfmt)(vnbar0(i+element),i= 1, lastrow) S_INSTAT.388
Write(cfmt(4:12),'(''vpmn m/s '')') S_INSTAT.389
Write(11,cfmt)(vpbar0(i+element),i= 1, lastrow) S_INSTAT.390
Write(cfmt(4:12),'(''vnsd m/s '')') S_INSTAT.391
Write(11,cfmt)(vnsd0(i+element),i= 1, lastrow) S_INSTAT.392
endif S_INSTAT.393
enddo S_INSTAT.394
C S_INSTAT.395
C Calculate no. of rows and no. of elements in last row for S_INSTAT.396
C variables with NWET S_INSTAT.397
C S_INSTAT.398
If ( mod(nwet,10) .eq. 0) then S_INSTAT.399
nwetrows = int(nwet/10) S_INSTAT.400
lastrow = 10 S_INSTAT.401
else S_INSTAT.402
nwetrows = int(nwet/10) + 1 S_INSTAT.403
lastrow = mod(nwet,10) S_INSTAT.404
endif S_INSTAT.405
Do nwetcount = 1, nwetrows S_INSTAT.406
element = 10*(nwetcount-1) S_INSTAT.407
If (nwetcount .lt. nwetrows) then S_INSTAT.408
C S_INSTAT.409
C Write out all complete rows ie of 10 variables per row S_INSTAT.410
C S_INSTAT.411
Write (11,303) (element+i,i = 1, 10) S_INSTAT.412
Write (11,305) (dbar0(element+i),i = 1, 10), S_INSTAT.413
& (dgrad0(element+i),i = 1, 10) S_INSTAT.414
else S_INSTAT.415
C S_INSTAT.416
C Write out last row. Use an internal format statement by S_INSTAT.417
C creating a character string. This will enable a variable S_INSTAT.418
C format to be created eg NF10.6 where N is the no. of S_INSTAT.419
C elements in the last row which can be written into the S_INSTAT.420
C format statement via an internal write statement. S_INSTAT.421
C S_INSTAT.422
Write (ctfmt(14:15),'(i2)') lastrow S_INSTAT.423
Write (11,ctfmt) (element+i, i = 1, lastrow) S_INSTAT.424
Write (cfmt(15:16),'(i2)') lastrow S_INSTAT.425
Write (cfmt(4:12),'(''dmn k '')') S_INSTAT.426
Write (11,cfmt) (dbar0(i+element), i = 1, lastrow) S_INSTAT.427
Write (cfmt(4:12),'(''dgrd k/km'')') S_INSTAT.428
Write (11,cfmt) (dgrad0(i+element), i = 1, lastrow) S_INSTAT.429
endif S_INSTAT.430
enddo S_INSTAT.431
C S_INSTAT.432
C Calculate no. of rows and no. of elements in last row for S_INSTAT.433
C variables with NTROP S_INSTAT.434
C S_INSTAT.435
If ( mod(ntrop,10) .eq. 0) then S_INSTAT.436
ntroprows = int(ntrop/10) S_INSTAT.437
lastrow = 10 S_INSTAT.438
else S_INSTAT.439
ntroprows = int(ntrop/10) + 1 S_INSTAT.440
lastrow = mod(ntrop,10) S_INSTAT.441
endif S_INSTAT.442
do ntropcount = 1,ntroprows S_INSTAT.443
element = 10 * (ntropcount-1) S_INSTAT.444
if ( ntropcount .lt. ntroprows) then S_INSTAT.445
c S_INSTAT.446
C Write out all complete rows ie of 10 variables per row S_INSTAT.447
C S_INSTAT.448
Write (11,303) (element+i,i=1,10) S_INSTAT.449
Write (11,306) (wbar0(element+i), i = 1, 10), S_INSTAT.450
& (wsd0(element+i),i=1,10) S_INSTAT.451
else S_INSTAT.452
C S_INSTAT.453
C Write out last row. Use an internal format statement by S_INSTAT.454
C creating a character string. This will enable a variable S_INSTAT.455
C format to be created eg NF10.6 where N is the no. of S_INSTAT.456
C elements in the last row which can be written into the S_INSTAT.457
C format statement via an internal write statement. S_INSTAT.458
C S_INSTAT.459
Write (ctfmt(14:15),'(i2)') lastrow S_INSTAT.460
Write (11,ctfmt) (element+i, i = 1, lastrow) S_INSTAT.461
Write (cfmt(15:16),'(i2)') lastrow S_INSTAT.462
Write (cfmt(4:12),'(''wmn mb/s '')') S_INSTAT.463
Write (11,cfmt) (wbar0(i+element), i = 1, lastrow) S_INSTAT.464
Write (cfmt(4:12),'(''wsd mb/s '')') S_INSTAT.465
Write (11,cfmt) (wsd0(i+element), i = 1, lastrow) S_INSTAT.466
endif S_INSTAT.467
enddo S_INSTAT.468
S_INSTAT.469
C Transfer the arrays back to their 1D versions: S_INSTAT.470
lat0 = lat(l) S_INSTAT.471
long0 = long(l) S_INSTAT.472
pstar0 = pstar2(l) S_INSTAT.473
tstar0 = tstar2(l) S_INSTAT.474
alfad0 = alfad2(l) S_INSTAT.475
Do k = 1, nlevs S_INSTAT.476
tbar0(k) = tbar2(l,k) S_INSTAT.477
tsd0(k) = tsd2(l,k) S_INSTAT.478
tgrad0(k) = tgrad2(l,k) S_INSTAT.479
vnbar0(k) = vnbar2(l,k) S_INSTAT.480
vpbar0(k) = vpbar2(l,k) S_INSTAT.481
vnsd0(k) = vnsd2(l,k) S_INSTAT.482
enddo S_INSTAT.483
Do k = 1, nwet S_INSTAT.484
dbar0(k)= dbar2(l,k) S_INSTAT.485
dgrad0(k)= dgrad2(l,k) S_INSTAT.486
enddo S_INSTAT.487
Do k = 1, ntrop S_INSTAT.488
wbar0(k)= wbar2(l,k) S_INSTAT.489
wsd0(k)= wsd2(l,k) S_INSTAT.490
enddo S_INSTAT.491
S_INSTAT.492
S_INSTAT.493
Write (11,307) lat0, long0 S_INSTAT.494
Write (11,302) pstar0, tstar0, alfad0, daysol2 S_INSTAT.495
C S_INSTAT.496
C Calculate no. of rows and no. of elements in last row for S_INSTAT.497
C variables with nlevs S_INSTAT.498
C S_INSTAT.499
If ( mod(nlevs,10).eq.0) then S_INSTAT.500
nlevsrows = int(nlevs/10) S_INSTAT.501
lastrow = 10 S_INSTAT.502
else S_INSTAT.503
nlevsrows = int(nlevs/10) + 1 S_INSTAT.504
lastrow = mod(nlevs,10) S_INSTAT.505
endif S_INSTAT.506
Do nlevscount = 1, nlevsrows S_INSTAT.507
element = 10*(nlevscount-1) S_INSTAT.508
if (nlevscount .lt. nlevsrows) then S_INSTAT.509
C S_INSTAT.510
C Write out all complete rows ie of 10 variables per row S_INSTAT.511
C S_INSTAT.512
Write (11,303) (element+i, i = 1, 10) S_INSTAT.513
Write (11,304) (tbar0(element+i),i = 1, 10), S_INSTAT.514
& (tsd0(element+i),i = 1, 10), S_INSTAT.515
& (tgrad0(element+i),i = 1, 10), S_INSTAT.516
& (vnbar0(element+i),i = 1, 10), S_INSTAT.517
& (vpbar0(element+i),i = 1, 10), S_INSTAT.518
& (vnsd0(element+i),i = 1, 10) S_INSTAT.519
else S_INSTAT.520
C S_INSTAT.521
C Write out last row. Use an internal format statement by S_INSTAT.522
C a character string. This will enable a variable format S_INSTAT.523
C to be created eg NF10.6 where N is the no. of elements in S_INSTAT.524
C the last row which can be written into the format S_INSTAT.525
C statement via an internal write statement. S_INSTAT.526
C S_INSTAT.527
Write (ctfmt(14:15),'(i2)') lastrow S_INSTAT.528
Write (11,ctfmt) (element+i,i = 1, lastrow) S_INSTAT.529
Write (cfmt(15:16),'(i2)') lastrow S_INSTAT.530
Write (cfmt(4:12),'(''tmn k '')') S_INSTAT.531
Write (11,cfmt) (tbar0(i+element), i = 1, lastrow) S_INSTAT.532
Write (cfmt(4:12),'(''tsd k '')') S_INSTAT.533
Write (11,cfmt) (tsd0(i+element),i = 1, lastrow) S_INSTAT.534
Write (cfmt(4:12),'(''tgrd k/km'')') S_INSTAT.535
Write (11,cfmt) (tgrad0(i+element),i = 1, lastrow) S_INSTAT.536
Write (cfmt(4:12),'(''vnmn m/s '')') S_INSTAT.537
Write (11,cfmt) (vnbar0(i+element),i = 1, lastrow) S_INSTAT.538
Write (cfmt(4:12),'(''vpmn m/s '')') S_INSTAT.539
Write (11,cfmt) (vpbar0(i+element),i = 1, lastrow) S_INSTAT.540
Write (cfmt(4:12),'(''vnsd m/s '')') S_INSTAT.541
Write (11,cfmt) (vnsd0(i+element),i = 1, lastrow) S_INSTAT.542
endif S_INSTAT.543
enddo S_INSTAT.544
C S_INSTAT.545
C Calculate no. of rows and no. of elements in last row for S_INSTAT.546
C variables with nwet S_INSTAT.547
C S_INSTAT.548
If ( mod(nwet,10) .eq. 0) then S_INSTAT.549
nwetrows = int(nwet/10) S_INSTAT.550
lastrow = 10 S_INSTAT.551
else S_INSTAT.552
nwetrows = int(nwet/10) + 1 S_INSTAT.553
lastrow = mod(nwet,10) S_INSTAT.554
endif S_INSTAT.555
Do nwetcount = 1, nwetrows S_INSTAT.556
element = 10 * (nwetcount-1) S_INSTAT.557
If (nwetcount .lt. nwetrows) then S_INSTAT.558
C S_INSTAT.559
C Write out all complete rows ie of 10 variables per row S_INSTAT.560
C S_INSTAT.561
Write (11,303) (element+i,i = 1, 10) S_INSTAT.562
Write (11,305) (dbar0(element+i),i = 1, 10), S_INSTAT.563
& (dgrad0(element+i),i = 1, 10) S_INSTAT.564
else S_INSTAT.565
C S_INSTAT.566
C Write out last row. Use an internal format statement by S_INSTAT.567
C creating a character string. This will enable a variable S_INSTAT.568
C format to be created eg NF10.6 where N is the no. of S_INSTAT.569
C elements in the last row which can be written into the S_INSTAT.570
C format statement via an internal write statement. S_INSTAT.571
C S_INSTAT.572
Write (ctfmt(14:15),'(i2)') lastrow S_INSTAT.573
Write (11,ctfmt) (element+i,i = 1, lastrow) S_INSTAT.574
Write (cfmt(15:16),'(i2)') lastrow S_INSTAT.575
Write (cfmt(4:12),'(''dmn k/km '')') S_INSTAT.576
Write (11,cfmt) (dbar0(i+element),i = 1, lastrow) S_INSTAT.577
Write (cfmt(4:12),'(''dgrd k/km'')') S_INSTAT.578
Write (11,cfmt) (dgrad0(i+element),i = 1, lastrow) S_INSTAT.579
endif S_INSTAT.580
enddo S_INSTAT.581
C S_INSTAT.582
C Calculate no. of rows and no. of elements in last row for S_INSTAT.583
c variables with ntrop S_INSTAT.584
C S_INSTAT.585
If ( mod(ntrop,10).eq.0) then S_INSTAT.586
ntroprows = int(ntrop/10) S_INSTAT.587
lastrow = 10 S_INSTAT.588
else S_INSTAT.589
ntroprows = int(ntrop/10) + 1 S_INSTAT.590
lastrow = mod(ntrop,10) S_INSTAT.591
endif S_INSTAT.592
Do ntropcount = 1, ntroprows S_INSTAT.593
element = 10*(ntropcount-1) S_INSTAT.594
If (ntropcount .lt. ntroprows) then S_INSTAT.595
c S_INSTAT.596
c Write out all complete rows ie of 10 variables per row S_INSTAT.597
C S_INSTAT.598
Write (11,303) (element+i, i = 1, 10) S_INSTAT.599
Write (11,306) (wbar0(element+i), i = 1, 10), S_INSTAT.600
& (wsd0(element+i),i = 1, 10) S_INSTAT.601
else S_INSTAT.602
c S_INSTAT.603
c Write out last row. Use an internal format statement by S_INSTAT.604
C creating a character string. This will enable a variable S_INSTAT.605
C formatC to be created eg NF10.6 where N is the no. of S_INSTAT.606
C elements in the last row which can be written into the S_INSTAT.607
C format statement via an internal write statement. S_INSTAT.608
C S_INSTAT.609
Write (ctfmt(14:15),'(i2)') lastrow S_INSTAT.610
Write (11,ctfmt)(element+i, i = 1, lastrow) S_INSTAT.611
Write (cfmt(15:16),'(i2)') lastrow S_INSTAT.612
Write (cfmt(4:12),'(''wmn mb/s '')') S_INSTAT.613
Write (11,cfmt)(wbar0(i+element), i = 1, lastrow) S_INSTAT.614
Write (cfmt(4:12),'(''wsd mb/s '')') S_INSTAT.615
Write (11,cfmt)(wsd0(i+element), i = 1, lastrow) S_INSTAT.616
endif S_INSTAT.617
enddo S_INSTAT.618
enddo ! l S_INSTAT.619
C S_INSTAT.620
C S_INSTAT.621
201 Format(6e8.2) S_INSTAT.622
202 Format(10f7.2) S_INSTAT.623
203 Format(5e8.2) S_INSTAT.624
204 Format(2f7.2,f7.1,2f7.2) S_INSTAT.625
205 Format(f7.6) S_INSTAT.626
301 Format('0Climate forcing data for july' S_INSTAT.627
& ,/,' ________________________________' S_INSTAT.628
& ,/,' lat=',f7.2,' long=',f7.2) S_INSTAT.629
302 Format(' pstar (Pa) ',f10.2,' tstar (K) ',f7.2/, S_INSTAT.630
& ' tuning factor ' ,f7.2,/, S_INSTAT.631
& ' dayno. relative to winter solstice ',f7.2) S_INSTAT.632
303 Format('0 level',i2,9(4x,'level',i2)) S_INSTAT.633
304 Format( S_INSTAT.634
& ' tmn K ',10(1pe10.3,1x)/,' tsd K ',10(1pe10.3,1X)/, S_INSTAT.635
& ' tgrd K/km',10(1pe10.3,1x)/, S_INSTAT.636
& ' vnmn m/s ',10(1pe10.3,1x)/,' vpmn m/s ',10(1pe10.3,1x)/, S_INSTAT.637
& ' vnsd m/s ',10(1pe10.3,1x)) S_INSTAT.638
305 Format( S_INSTAT.639
& ' dmn K ',10(1pe10.3,1x)/,' dgrd K/km',10(1pe10.3,1x)/) S_INSTAT.640
306 Format( S_INSTAT.641
& ' wbar mb/s',10(1pe10.3,1x)/,' wsd mb/s ',10(1pe10.3,1x)/) S_INSTAT.642
307 Format('1Climate forcing data for january' S_INSTAT.643
& ,/,' ________________________________' S_INSTAT.644
& ,/,' lat=',f7.2,' long=',f7.2) S_INSTAT.645
Return S_INSTAT.646
End ! Subroutine INITSTAT S_INSTAT.647
C S_INSTAT.648
*ENDIF S_INSTAT.649