File indexing completed on 2018-03-02 18:38:13 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
6d54cf9ca1 Ed H*0001 #include "BULK_FORCE_OPTIONS.h"
6a1d3c464b Jean*0002
69f66dfb04 Jean*0003
0004
0005
0006 SUBROUTINE BULKF_FORMULA_LANL(
7753507405 Curt*0007 I uw, vw, us, Ta, Qa, nc, tsf_in,
6a1d3c464b Jean*0008 O flwupa, flha, fsha, df0dT,
69f66dfb04 Jean*0009 O ust, vst, evp, ssq, dEvdT,
679d149d01 Jean*0010 I iceornot, myThid )
6a1d3c464b Jean*0011
69f66dfb04 Jean*0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
7753507405 Curt*0030
69f66dfb04 Jean*0031
7753507405 Curt*0032 IMPLICIT NONE
69f66dfb04 Jean*0033
7753507405 Curt*0034 #include "EEPARAMS.h"
0035 #include "SIZE.h"
0036 #include "PARAMS.h"
6a1d3c464b Jean*0037 #include "BULKF_PARAMS.h"
7753507405 Curt*0038
69f66dfb04 Jean*0039
0040
0041 _RL uw
0042 _RL vw
0043 _RL us
0044 _RL Ta
0045 _RL Qa
7753507405 Curt*0046 _RL nc
69f66dfb04 Jean*0047 _RL tsf_in
0048 INTEGER iceornot
0049 INTEGER myThid
0050
0051 _RL flwupa
0052 _RL flha
0053 _RL fsha
0054 _RL df0dT
0055 _RL ust
0056 _RL vst
548c63e38c Jean*0057 _RL evp
69f66dfb04 Jean*0058 _RL ssq
548c63e38c Jean*0059 _RL dEvdT
69f66dfb04 Jean*0060
6a1d3c464b Jean*0061
0062 #ifdef ALLOW_BULK_FORCE
0063
69f66dfb04 Jean*0064
7753507405 Curt*0065 _RL dflhdT
0066 _RL dfshdT
0067 _RL dflwupdT
69f66dfb04 Jean*0068
0069 _RL tsf
0070 _RL ht
0071
0072 _RL hu
0073
0074 _RL usm
0075
0076 _RL lath
0077 _RL t0
0078 _RL deltap
0079 _RL delq
0080 _RL ustar
0081 _RL tstar
0082 _RL qstar
0083 _RL rd
0084 _RL re
0085 _RL rh
0086 _RL rdn, ren, rhn
0087 _RL stable
0088 _RL huol
0089 _RL x
0090 _RL xsq
0091 _RL psimh
0092 _RL psixh
0093 _RL czol
0094 _RL aln
0095
a10fbde4a0 Jean*0096
0097
69f66dfb04 Jean*0098
0099 _RL tau
0100 _RL csha
0101 _RL clha
7753507405 Curt*0102 _RL zice
548c63e38c Jean*0103 _RL ssq0, ssq1, ssq2
69f66dfb04 Jean*0104 _RL p0
679d149d01 Jean*0105 _RL bulkf_Cdn
69f66dfb04 Jean*0106 INTEGER niter_bulk, iter
7753507405 Curt*0107
69f66dfb04 Jean*0108
679d149d01 Jean*0109
0110
6a1d3c464b Jean*0111
0112
0113
0114
7753507405 Curt*0115
69f66dfb04 Jean*0116 DATA ssq0, ssq1, ssq2
548c63e38c Jean*0117 & / 3.797915 _d 0 , 7.93252 _d -6 , 2.166847 _d -3 /
69f66dfb04 Jean*0118 DATA p0 / 1013. _d 0 /
548c63e38c Jean*0119
69f66dfb04 Jean*0120
6a1d3c464b Jean*0121 ht = 2. _d 0
69f66dfb04 Jean*0122
6a1d3c464b Jean*0123 hu = 10. _d 0
69f66dfb04 Jean*0124
6a1d3c464b Jean*0125 zice = 0.0005 _d 0
7753507405 Curt*0126 aln = log(ht/zref)
0127 niter_bulk = 5
69f66dfb04 Jean*0128
7753507405 Curt*0129 czol = zref*xkar*gravity
69f66dfb04 Jean*0130
0131
0132
7753507405 Curt*0133 lath=Lvap
0134 if (iceornot.gt.0) lath=Lvap+Lfresh
0135 Tsf=Tsf_in+Tf0kel
69f66dfb04 Jean*0136
6a1d3c464b Jean*0137 if (us.eq.0. _d 0) then
7753507405 Curt*0138 us = sqrt(uw*uw + vw*vw)
0139 endif
0140 usm = max(us,umin)
0141
6a1d3c464b Jean*0142 t0 = Ta*(1. _d 0 + humid_fac*Qa)
0143
69f66dfb04 Jean*0144
548c63e38c Jean*0145
0146
0147
0148 ssq = ssq0*exp( lath*(ssq1-ssq2/Tsf) ) / p0
69f66dfb04 Jean*0149
7753507405 Curt*0150 deltap = ta - tsf + gamma_blk*ht
0151 delq = Qa - ssq
69f66dfb04 Jean*0152
0153
7753507405 Curt*0154 rdn=xkar/(log(zref/zice))
0155 rhn=rdn
0156 ren=rdn
69f66dfb04 Jean*0157
7753507405 Curt*0158 ustar=rdn*usm
0159 tstar=rhn*deltap
0160 qstar=ren*delq
69f66dfb04 Jean*0161
0162
7753507405 Curt*0163 do iter=1,niter_bulk
0164 huol = czol/ustar**2 *(tstar/t0 +
6a1d3c464b Jean*0165 & qstar/(1. _d 0/humid_fac+Qa))
0166 huol = sign( min(abs(huol),10. _d 0), huol)
7753507405 Curt*0167 stable = 5. _d -1 + sign(5. _d -1 , huol)
6a1d3c464b Jean*0168 xsq = max(sqrt(abs(1. _d 0 - 16. _d 0*huol)),1. _d 0)
7753507405 Curt*0169 x = sqrt(xsq)
6a1d3c464b Jean*0170 psimh = -5. _d 0*huol*stable + (1. _d 0-stable)*
0171 & (2. _d 0*log(5. _d -1*(1. _d 0+x)) +
0172 & 2. _d 0*log(5. _d -1*(1. _d 0+xsq)) -
0173 & 2. _d 0*atan(x) + pi*.5 _d 0)
0174 psixh = -5. _d 0*huol*stable + (1. _d 0-stable)*
0175 & (2. _d 0*log(5. _d -1*(1. _d 0+xsq)))
69f66dfb04 Jean*0176
0177
6a1d3c464b Jean*0178 rd = rdn/(1. _d 0 + rdn*(aln-psimh)/xkar)
0179 rh = rhn/(1. _d 0 + rhn*(aln-psixh)/xkar)
7753507405 Curt*0180 re = rh
69f66dfb04 Jean*0181
7753507405 Curt*0182 ustar = rd*usm
0183 qstar = re*delq
0184 tstar = rh*deltap
6a1d3c464b Jean*0185 enddo
69f66dfb04 Jean*0186
0187 tau = rhoa*ustar**2
0188 tau = tau*us/usm
0189 csha = rhoa*cpair*us*rh*rd
0190 clha = rhoa*lath*us*re*rd
0191
0192 fsha = csha*deltap
0193 flha = clha*delq
0194 evp = -flha/lath
0195
0196
7753507405 Curt*0197
0198
f4245d1665 Curt*0199
7753507405 Curt*0200
0201
0202 if (iceornot.eq.0) then
6a1d3c464b Jean*0203 flwupa=ocean_emissivity*stefan*tsf**4
0204 dflwupdT=4. _d 0*ocean_emissivity*stefan*tsf**3
69f66dfb04 Jean*0205 elseif (iceornot.eq.2) then
6a1d3c464b Jean*0206 flwupa=snow_emissivity*stefan*tsf**4
0207 dflwupdT=4. _d 0*snow_emissivity*stefan*tsf**3
69f66dfb04 Jean*0208 else
6a1d3c464b Jean*0209 flwupa=ice_emissivity*stefan*tsf**4
0210 dflwupdT=4. _d 0*ice_emissivity*stefan*tsf**3
7753507405 Curt*0211 endif
0212
0213
548c63e38c Jean*0214
0215 dEvdT = clha*ssq*ssq2/(Tsf*Tsf)
0216 dflhdT = -lath*dEvdT
7753507405 Curt*0217 dfshdT = -csha
6a1d3c464b Jean*0218
7753507405 Curt*0219
0220
0221
6a1d3c464b Jean*0222 df0dT=-dflwupdT+dfshdT+dflhdT
69f66dfb04 Jean*0223
0224
0225
679d149d01 Jean*0226 bulkf_Cdn = cdrag_1/usm + cdrag_2 + cdrag_3*usm
0227 ust = rhoa*bulkf_Cdn*us*uw
0228 vst = rhoa*bulkf_Cdn*us*vw
7753507405 Curt*0229 #endif /*ALLOW_BULK_FORCE*/
0230
6a1d3c464b Jean*0231 RETURN
0232 END