File indexing completed on 2018-03-02 18:41:30 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
32f2418b0c Jean*0001 #include "GRIDALT_OPTIONS.h"
0002
0003 SUBROUTINE MAKE_PHYS_GRID(drF,hfacC,im1,im2,jm1,jm2,Nr,
0004 & nSx,nSy,i1,i2,j1,j2,bi,bj,Nrphys,Lbot,dpphys,numlevphys,nlperdyn)
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 IMPLICIT NONE
0043
0044 integer im1,im2,jm1,jm2,Nr,nSx,nSy,Nrphys
8aa94f3b31 Andr*0045 integer i1,i2,j1,j2,bi,bj
0046 integer numlevphys
32f2418b0c Jean*0047 _RS hfacC(im1:im2,jm1:jm2,Nr,nSx,nSy)
0048 _RL dpphys(im1:im2,jm1:jm2,Nrphys,nSx,nSy)
8b4e6631e3 Jean*0049 _RS drF(Nr)
32f2418b0c Jean*0050 integer Lbot(im1:im2,jm1:jm2,nSx,nSy)
0051 integer nlperdyn(im1:im2,jm1:jm2,Nr,nSx,nSy)
0052
8aa94f3b31 Andr*0053 integer i,j,L,Lbotij,Lnew
32f2418b0c Jean*0054
0055
13837d01f6 Andr*0056 integer ntry,ntry10,ntry40
3768cb558d Andr*0057 parameter (ntry10 = 12)
0058 parameter (ntry40 = 12)
0059 _RL dptry(15),dptry10(ntry10),dptry40(ntry40)
0060 _RL bot_thick,bot_thick40
13837d01f6 Andr*0061 _RL dptry_accum(15)
0062 data dptry10/300.000,600.000,1000.000,1400.000,1700.000,2500.000,
32f2418b0c Jean*0063 & 2500.000,2500.000,2500.000,5000.000,5000.000,5000.000/
3768cb558d Andr*0064 data dptry40/300.000,600.000, 800.000, 800.000,1250.000,
32f2418b0c Jean*0065 & 1250.000,2500.000,2500.000,2500.000,2500.000,2500.000,
0066 & 2500.000/
3768cb558d Andr*0067 data bot_thick40/20000.000/
8aa94f3b31 Andr*0068 _RL deltap, dpstar_accum
0069 integer nlbotmax, nstart, nlevs, nlphys, ndone
b8ce59ac21 Andr*0070 _RL thindp
32f2418b0c Jean*0071
13837d01f6 Andr*0072 if( (Nr.eq.10) .or. (Nr.eq.20) ) then
0073 ntry = ntry10
3768cb558d Andr*0074 bot_thick = bot_thick40
13837d01f6 Andr*0075 do L = 1,ntry
0076 dptry(L) = dptry10(L)
0077 enddo
b8ce59ac21 Andr*0078 elseif((Nr.eq.40).or.(Nr.eq.46).or.(Nr.eq.70)) then
13837d01f6 Andr*0079 ntry = ntry40
3768cb558d Andr*0080 bot_thick = bot_thick40
13837d01f6 Andr*0081 do L = 1,ntry
0082 dptry(L) = dptry40(L)
0083 enddo
0084 else
0085 print *,' Dont know how to make fizhi grid '
0086 stop
0087 endif
b8ce59ac21 Andr*0088
0089 thindp=100.
0090 if(Nr.eq.70)thindp=0.02
32f2418b0c Jean*0091
8aa94f3b31 Andr*0092 do L = 1,Nr
0093 do j = j1,j2
0094 do i = i1,i2+1
0095 nlperdyn(i,j,L,bi,bj) = 0
0096 enddo
0097 enddo
0098 enddo
32f2418b0c Jean*0099
0100
0101
0102
0103
8aa94f3b31 Andr*0104 nlevs = 0
0105 dpstar_accum = 0.
0106 do L = 1,Nr
0107 dpstar_accum = dpstar_accum + drF(L)
3768cb558d Andr*0108 if(dpstar_accum.le.bot_thick) nlevs = nlevs+1
8aa94f3b31 Andr*0109 enddo
0110 numlevphys = Nr - nlevs + ntry + 1
32f2418b0c Jean*0111
8aa94f3b31 Andr*0112 dptry_accum(1) = dptry(1)
0113 do Lnew = 2,ntry
0114 dptry_accum(Lnew) = dptry_accum(Lnew-1) + dptry(Lnew)
0115 enddo
32f2418b0c Jean*0116
0117
8aa94f3b31 Andr*0118 do j = j1,j2
be5ec7d59d Andr*0119 do i = i1,i2
8aa94f3b31 Andr*0120 Lbotij = Lbot(i,j,bi,bj)
32f2418b0c Jean*0121
0122
0123
8aa94f3b31 Andr*0124 nlbotmax = 0
0125 do Lnew = 1,ntry
32f2418b0c Jean*0126 if ( (nlbotmax.eq.0) .and.
0127 & (dptry_accum(Lnew).gt.(hfacC(i,j,Lbotij,bi,bj)*drF(Lbotij))))then
8aa94f3b31 Andr*0128 nlbotmax = Lnew
0129 endif
0130 enddo
0131 if(nlbotmax.eq.0)then
0132 nlbotmax = ntry
0133 endif
32f2418b0c Jean*0134
0135
0136
8aa94f3b31 Andr*0137 nlphys = 0
0138 deltap = 0.
0139 do Lnew = 1,nlbotmax
32f2418b0c Jean*0140
8aa94f3b31 Andr*0141 if((hfacC(i,j,Lbotij,bi,bj)*drF(Lbotij)).ge.
32f2418b0c Jean*0142 & deltap+dptry(Lnew))then
8aa94f3b31 Andr*0143 nlphys = nlphys + 1
0144 dpphys(i,j,nlphys,bi,bj) = dptry(Lnew)
0145 deltap = deltap + dptry(Lnew)
0146 else
32f2418b0c Jean*0147
0148
8aa94f3b31 Andr*0149 if((dptry(Lnew-1)+(hfacC(i,j,Lbotij,bi,bj)*
32f2418b0c Jean*0150 & drF(Lbotij)-deltap)) .gt. (dptry(Lnew-1)*1.5) ) then
0151
8aa94f3b31 Andr*0152 nlphys = nlphys + 1
32f2418b0c Jean*0153 dpphys(i,j,nlphys,bi,bj) =
0154 & (hfacC(i,j,Lbotij,bi,bj)*drF(Lbotij))-deltap
8aa94f3b31 Andr*0155 else
32f2418b0c Jean*0156
0157 dpphys(i,j,nlphys,bi,bj) = dpphys(i,j,nlphys,bi,bj) +
0158 & (hfacC(i,j,Lbotij,bi,bj)*drF(Lbotij)-deltap)
8aa94f3b31 Andr*0159 endif
0160 deltap = deltap+(hfacC(i,j,Lbotij,bi,bj)*drF(Lbotij)-deltap)
0161 endif
0162 enddo
32f2418b0c Jean*0163
8aa94f3b31 Andr*0164 nlperdyn(i,j,Lbotij,bi,bj) = nlphys
32f2418b0c Jean*0165
0166
0167
0168
8aa94f3b31 Andr*0169 do L = Lbotij+1,Nr
0170 ndone = 0
0171 if(nlphys.lt.ntry)then
0172 deltap = 0.
0173 nstart = nlphys + 1
0174 do Lnew = nstart,ntry
0175 if((hfacC(i,j,L,bi,bj)*drF(L)).ge.deltap+dptry(Lnew))then
0176 nlphys = nlphys + 1
0177 dpphys(i,j,nlphys,bi,bj) = dptry(Lnew)
0178 deltap = deltap + dptry(Lnew)
0179 ndone = 0
0180 elseif (ndone.eq.0) then
32f2418b0c Jean*0181
0182
8aa94f3b31 Andr*0183 ndone = 1
0184 if( (dptry(Lnew-1)+(hfacC(i,j,L,bi,bj)*drF(L)-deltap))
32f2418b0c Jean*0185 & .gt. (dptry(Lnew-1)*1.5) ) then
0186
8aa94f3b31 Andr*0187 nlphys = nlphys + 1
32f2418b0c Jean*0188 dpphys(i,j,nlphys,bi,bj) =
0189 & (hfacC(i,j,L,bi,bj)*drF(L))-deltap
8aa94f3b31 Andr*0190 deltap = hfacC(i,j,L,bi,bj)*drF(L)
0191 else
32f2418b0c Jean*0192
8aa94f3b31 Andr*0193 dpphys(i,j,nlphys,bi,bj) = dpphys(i,j,nlphys,bi,bj) +
32f2418b0c Jean*0194 & (hfacC(i,j,L,bi,bj)*drF(L)-deltap)
8aa94f3b31 Andr*0195 deltap = hfacC(i,j,L,bi,bj)*drF(L)
0196 endif
0197 endif
0198 enddo
be5ec7d59d Andr*0199
0200
0201
0202
0203 if(nlphys.ge.ntry)then
0204 if(abs(deltap-hfacC(i,j,L-1,bi,bj)*drF(L-1)).gt.0.001)then
0205 nlphys = nlphys + 1
0206 dpphys(i,j,nlphys,bi,bj) = hfacC(i,j,L-1,bi,bj)*drF(L-1)
32f2418b0c Jean*0207 & - deltap
be5ec7d59d Andr*0208 endif
0209 endif
0210
8aa94f3b31 Andr*0211 elseif(nlphys.eq.ntry)then
32f2418b0c Jean*0212
0213
8aa94f3b31 Andr*0214 if(abs(deltap-hfacC(i,j,L-1,bi,bj)*drF(L-1)).gt.0.001)then
0215 nlphys = nlphys + 1
32f2418b0c Jean*0216 dpphys(i,j,nlphys,bi,bj) = hfacC(i,j,L-1,bi,bj)*drF(L-1)
0217 & - deltap
8aa94f3b31 Andr*0218 nlphys = nlphys + 1
0219 dpphys(i,j,nlphys,bi,bj) = hfacC(i,j,L,bi,bj)*drF(L)
0220 else
0221 nlphys = nlphys + 1
0222 dpphys(i,j,nlphys,bi,bj) = hfacC(i,j,L,bi,bj)*drF(L)
0223 endif
0224 else
32f2418b0c Jean*0225
0226
8aa94f3b31 Andr*0227 nlphys = nlphys + 1
0228 dpphys(i,j,nlphys,bi,bj) = hfacC(i,j,L,bi,bj)*drF(L)
0229 endif
0230 nlperdyn(i,j,L,bi,bj) = nlphys
0231 enddo
32f2418b0c Jean*0232
0233
0234
8aa94f3b31 Andr*0235 if(nlphys.lt.numlevphys)then
0236 nlevs = numlevphys-nlphys
b8ce59ac21 Andr*0237 dpphys(i,j,nlphys,bi,bj)=dpphys(i,j,nlphys,bi,bj)-thindp*nlevs
8aa94f3b31 Andr*0238 do Lnew = nlphys+1,numlevphys
b8ce59ac21 Andr*0239 dpphys(i,j,Lnew,bi,bj) = thindp
8aa94f3b31 Andr*0240 enddo
0241 nlperdyn(i,j,Nr,bi,bj) = numlevphys
0242 endif
32f2418b0c Jean*0243
13837d01f6 Andr*0244
8aa94f3b31 Andr*0245 enddo
0246 enddo
0247
0248 return
0249 end