Changeset 3700 for trunk/LMDZ.TITAN
- Timestamp:
- Mar 28, 2025, 4:17:11 PM (3 months ago)
- Location:
- trunk/LMDZ.TITAN/libf
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/LMDZ.TITAN/libf/muphytitan/mm_haze.F90 ¶
r3699 r3700 792 792 call EXIT(11) 793 793 #endif 794 #ifdef MESOSCALE795 WRITE(*,*) "Aerosol production level out of model, no production of simple aerosols"796 #endif797 794 ENDIF 798 795 -
TabularUnified trunk/LMDZ.TITAN/libf/phytitan/get_haze_and_cloud_opacity.F90 ¶
r3090 r3700 200 200 !------------------------- 201 201 202 rinit = 1.e-9 ! fin = rinit*step**(33-1) = 1.e-5 203 if(CTYPE.eq.0) rinit = 1.e-7 ! fin = rinit*step**(33-1) = 1.e-3 204 205 ! No alpha(k) ! 206 ! Because it is taken into account in the optical tables ... 207 rc = (m3/m0)**(1./3.) 208 209 step = 10.**(1./8.) 210 idx = int(log(rc/rinit) / log(step)) + 1 211 212 ! Spherical (cloud) : 213 !-------------------- 214 IF(CTYPE.EQ.0) THEN 215 216 if(abs(rc_s(1)-rinit)/rc_s(1).gt.1.e-5 .or. & 217 abs(rc_s(nrad)-rinit*step**32)/rc_s(nrad).gt.1.e-5) then 218 write(*,*) 'rinit = ',rinit 219 write(*,*) 'rc_s(1) = ',rc_s(1) 220 write(*,*) 'rinit*step**32 = ',rinit*step**32 221 write(*,*) 'rc_s(nrad) = ',rc_s(nrad) 222 stop 223 endif 224 225 if(rc.le.rc_s(1)) then 226 wbar = wbar_s(ich,1) 227 gbar = gbar_s(ich,1) 228 tauext = sext_s(ich,1)*(rc/rc_s(1))**3 229 endif 230 231 if(rc.ge.rc_s(nrad)) then 232 wbar = wbar_s(ich,nrad) 233 gbar = gbar_s(ich,nrad) 234 tauext = sext_s(ich,nrad)*(rc/rc_s(nrad))**3. 235 endif 236 237 if(rc.gt.rc_s(1) .and. rc.lt.rc_s(nrad)) then 238 xfact = (log(rc)-log(rc_s(idx))) / (log(rc_s(idx+1))-log(rc_s(idx))) 239 tauext = log(sext_s(ich,idx))*(1.-xfact) + log(sext_s(ich,idx+1))*xfact 240 tauext = exp(tauext) 241 wbar = wbar_s(ich,idx)*(1.-xfact) + wbar_s(ich,idx+1)*xfact 242 gbar = gbar_s(ich,idx)*(1.-xfact) + gbar_s(ich,idx+1)*xfact 243 endif 244 245 ENDIF ! (CTYPE.EQ.0) 246 247 ! Spherical (haze) : 248 !------------------- 249 IF(CTYPE.EQ.5) THEN 250 251 if(abs(rc_as(1)-rinit)/rc_as(1).gt.1.e-5 .or. & 252 abs(rc_as(nrad)-rinit*step**32)/rc_as(nrad).gt.1.e-5) then 253 write(*,*) 'rinit = ',rinit 254 write(*,*) 'rc_as(1) = ',rc_as(1) 255 write(*,*) 'rinit*step**32 = ',rinit*step**32 256 write(*,*) 'rc_as(nrad) = ',rc_as(nrad) 257 stop 258 endif 259 260 if(rc.le.rc_as(1)) then 261 wbar = wbar_as(ich,1) 262 gbar = gbar_as(ich,1) 263 tauext = sext_as(ich,1)*(rc/rc_as(1))**3 264 endif 265 266 if(rc.ge.rc_as(nrad)) then 267 wbar = wbar_as(ich,nrad) 268 gbar = gbar_as(ich,nrad) 269 tauext = sext_as(ich,nrad)*(rc/rc_as(nrad))**3. 270 endif 271 272 if(rc.gt.rc_as(1) .and. rc.lt.rc_as(nrad)) then 273 xfact = (log(rc)-log(rc_as(idx))) / (log(rc_as(idx+1))-log(rc_as(idx))) 274 tauext = log(sext_as(ich,idx))*(1.-xfact) + log(sext_as(ich,idx+1))*xfact 275 tauext = exp(tauext) 276 wbar = wbar_as(ich,idx)*(1.-xfact) + wbar_as(ich,idx+1)*xfact 277 gbar = gbar_as(ich,idx)*(1.-xfact) + gbar_as(ich,idx+1)*xfact 278 endif 279 280 ENDIF ! (CTYPE.EQ.5) 281 282 ! Fractal (haze) : 283 !----------------- 284 IF(CTYPE.NE.0 .AND. CTYPE.NE.5) THEN 285 286 if(abs(rc_f(1)-rinit)/rc_f(1).gt.1.e-5 .or. & 287 abs(rc_f(nrad)-rinit*step**32)/rc_f(nrad).gt.1.e-5) then 288 write(*,*) 'rinit = ',rinit 289 write(*,*) 'rc_f(1) = ',rc_f(1) 290 write(*,*) 'rinit*step**32 = ',rinit*step**32 291 write(*,*) 'rc_f(nrad) = ',rc_f(nrad) 292 stop 293 endif 294 295 if(rc.le.rc_f(1)) then 296 wbar = wbar_f(ich,1) 297 gbar = gbar_f(ich,1) 298 tauext = sext_f(ich,1)*(rc/rc_f(1))**3 299 endif 300 301 if(rc.ge.rc_f(nrad)) then 302 wbar = wbar_f(ich,nrad) 303 gbar = gbar_f(ich,nrad) 304 tauext = sext_f(ich,nrad)*(rc/rc_f(nrad))**3. 305 endif 306 307 if(rc.gt.rc_f(1) .and. rc.lt.rc_f(nrad)) then 308 xfact = (log(rc)-log(rc_f(idx))) / (log(rc_f(idx+1))-log(rc_f(idx))) 309 tauext = log(sext_f(ich,idx))*(1.-xfact) + log(sext_f(ich,idx+1))*xfact 310 tauext = exp(tauext) 311 wbar = wbar_f(ich,idx)*(1.-xfact) + wbar_f(ich,idx+1)*xfact 312 gbar = gbar_f(ich,idx)*(1.-xfact) + gbar_f(ich,idx+1)*xfact 313 endif 314 315 ENDIF ! (CTYPE.NE.0 .AND. CTYPE.NE.5) 316 317 ! Sanity check : 318 !--------------- 319 IF (CTYPE.LT.0 .AND. CTYPE.GT.5) THEN 320 write(*,*) 'CTYPE < 0 ET > 5 = ',CTYPE 321 call abort 322 ENDIF 323 324 tauext = tauext * m0 202 IF((m0 .gt. tiny(m0)) .and. (m3 .gt.tiny(m3))) THEN ! if there are clouds !emoisan tests 203 rinit = 1.e-9 ! fin = rinit*step**(33-1) = 1.e-5 204 if(CTYPE.eq.0) rinit = 1.e-7 ! fin = rinit*step**(33-1) = 1.e-3 205 206 ! No alpha(k) ! 207 ! Because it is taken into account in the optical tables ... 208 rc = (m3/m0)**(1./3.) 209 210 step = 10.**(1./8.) 211 idx = int(log(rc/rinit) / log(step)) + 1 212 213 ! Spherical (cloud) : 214 !-------------------- 215 IF(CTYPE.EQ.0) THEN 216 217 if(abs(rc_s(1)-rinit)/rc_s(1).gt.1.e-5 .or. & 218 abs(rc_s(nrad)-rinit*step**32)/rc_s(nrad).gt.1.e-5) then 219 write(*,*) 'rinit = ',rinit 220 write(*,*) 'rc_s(1) = ',rc_s(1) 221 write(*,*) 'rinit*step**32 = ',rinit*step**32 222 write(*,*) 'rc_s(nrad) = ',rc_s(nrad) 223 stop 224 endif 225 226 if(rc.le.rc_s(1)) then 227 wbar = wbar_s(ich,1) 228 gbar = gbar_s(ich,1) 229 tauext = sext_s(ich,1)*(rc/rc_s(1))**3 230 endif 231 232 if(rc.ge.rc_s(nrad)) then 233 wbar = wbar_s(ich,nrad) 234 gbar = gbar_s(ich,nrad) 235 tauext = sext_s(ich,nrad)*(rc/rc_s(nrad))**3. 236 endif 237 238 if(rc.gt.rc_s(1) .and. rc.lt.rc_s(nrad)) then 239 xfact = (log(rc)-log(rc_s(idx))) / (log(rc_s(idx+1))-log(rc_s(idx))) 240 tauext = log(sext_s(ich,idx))*(1.-xfact) + log(sext_s(ich,idx+1))*xfact 241 tauext = exp(tauext) 242 wbar = wbar_s(ich,idx)*(1.-xfact) + wbar_s(ich,idx+1)*xfact 243 gbar = gbar_s(ich,idx)*(1.-xfact) + gbar_s(ich,idx+1)*xfact 244 endif 245 246 ENDIF ! (CTYPE.EQ.0) 247 248 ! Spherical (haze) : 249 !------------------- 250 IF(CTYPE.EQ.5) THEN 251 252 if(abs(rc_as(1)-rinit)/rc_as(1).gt.1.e-5 .or. & 253 abs(rc_as(nrad)-rinit*step**32)/rc_as(nrad).gt.1.e-5) then 254 write(*,*) 'rinit = ',rinit 255 write(*,*) 'rc_as(1) = ',rc_as(1) 256 write(*,*) 'rinit*step**32 = ',rinit*step**32 257 write(*,*) 'rc_as(nrad) = ',rc_as(nrad) 258 stop 259 endif 260 261 if(rc.le.rc_as(1)) then 262 wbar = wbar_as(ich,1) 263 gbar = gbar_as(ich,1) 264 tauext = sext_as(ich,1)*(rc/rc_as(1))**3 265 endif 266 267 if(rc.ge.rc_as(nrad)) then 268 wbar = wbar_as(ich,nrad) 269 gbar = gbar_as(ich,nrad) 270 tauext = sext_as(ich,nrad)*(rc/rc_as(nrad))**3. 271 endif 272 273 if(rc.gt.rc_as(1) .and. rc.lt.rc_as(nrad)) then 274 xfact = (log(rc)-log(rc_as(idx))) / (log(rc_as(idx+1))-log(rc_as(idx))) 275 tauext = log(sext_as(ich,idx))*(1.-xfact) + log(sext_as(ich,idx+1))*xfact 276 tauext = exp(tauext) 277 wbar = wbar_as(ich,idx)*(1.-xfact) + wbar_as(ich,idx+1)*xfact 278 gbar = gbar_as(ich,idx)*(1.-xfact) + gbar_as(ich,idx+1)*xfact 279 endif 280 281 ENDIF ! (CTYPE.EQ.5) 282 283 ! Fractal (haze) : 284 !----------------- 285 IF(CTYPE.NE.0 .AND. CTYPE.NE.5) THEN 286 287 if(abs(rc_f(1)-rinit)/rc_f(1).gt.1.e-5 .or. & 288 abs(rc_f(nrad)-rinit*step**32)/rc_f(nrad).gt.1.e-5) then 289 write(*,*) 'rinit = ',rinit 290 write(*,*) 'rc_f(1) = ',rc_f(1) 291 write(*,*) 'rinit*step**32 = ',rinit*step**32 292 write(*,*) 'rc_f(nrad) = ',rc_f(nrad) 293 stop 294 endif 295 296 if(rc.le.rc_f(1)) then 297 wbar = wbar_f(ich,1) 298 gbar = gbar_f(ich,1) 299 tauext = sext_f(ich,1)*(rc/rc_f(1))**3 300 endif 301 302 if(rc.ge.rc_f(nrad)) then 303 wbar = wbar_f(ich,nrad) 304 gbar = gbar_f(ich,nrad) 305 tauext = sext_f(ich,nrad)*(rc/rc_f(nrad))**3. 306 endif 307 308 if(rc.gt.rc_f(1) .and. rc.lt.rc_f(nrad)) then 309 xfact = (log(rc)-log(rc_f(idx))) / (log(rc_f(idx+1))-log(rc_f(idx))) 310 tauext = log(sext_f(ich,idx))*(1.-xfact) + log(sext_f(ich,idx+1))*xfact 311 tauext = exp(tauext) 312 wbar = wbar_f(ich,idx)*(1.-xfact) + wbar_f(ich,idx+1)*xfact 313 gbar = gbar_f(ich,idx)*(1.-xfact) + gbar_f(ich,idx+1)*xfact 314 endif 315 316 ENDIF ! (CTYPE.NE.0 .AND. CTYPE.NE.5) 317 318 ! Sanity check : 319 !--------------- 320 IF (CTYPE.LT.0 .AND. CTYPE.GT.5) THEN 321 write(*,*) 'CTYPE < 0 ET > 5 = ',CTYPE 322 call abort 323 ENDIF 324 325 tauext = tauext * m0 326 ENDIF !if there are clouds !emoisan tests 327 !else just return the initialize values of tauext, wbar and gbar =0 325 328 326 329 return -
TabularUnified trunk/LMDZ.TITAN/libf/phytitan/optci.F90 ¶
r3660 r3700 313 313 314 314 ! For small dropplets, opacity of nucleus dominates... 315 dtau_cld = (dtau_cld*m3ccn + dtau_cld*m3cld) / (m3ccn + m3cld) 316 ssa_cld(nw) = (ssa_ccn(nw)*m3ccn + ssa_cld(nw)*m3cld) / (m3ccn + m3cld) 315 IF ((m3ccn + m3cld) .le. tiny(m3ccn)) THEN !no cloud !emoisan tests 316 dtau_cld = 0. 317 ssa_cld(nw) = 0. 318 ELSE 319 dtau_cld = (dtau_cld*m3ccn + dtau_cld*m3cld) / (m3ccn + m3cld) 320 ssa_cld(nw) = (ssa_ccn(nw)*m3ccn + ssa_cld(nw)*m3cld) / (m3ccn + m3cld) 321 ENDIF 317 322 318 323 ! Tuning of optical properties for clouds : -
TabularUnified trunk/LMDZ.TITAN/libf/phytitan/optcv.F90 ¶
r3497 r3700 337 337 338 338 ! For small dropplets, opacity of nucleus dominates 339 dtau_cld = (dtau_cld*m3ccn + dtau_cld*m3cld) / (m3ccn + m3cld) 340 ssa_cld(nw) = (ssa_ccn(nw)*m3ccn + ssa_cld(nw)*m3cld) / (m3ccn + m3cld) 339 IF ((m3ccn + m3cld) .le. tiny(m3ccn)) THEN !no cloud !emoisan tests 340 dtau_cld = 0. 341 ssa_cld(nw) = 0. 342 ELSE 343 dtau_cld = (dtau_cld*m3ccn + dtau_cld*m3cld) / (m3ccn + m3cld) 344 ssa_cld(nw) = (ssa_ccn(nw)*m3ccn + ssa_cld(nw)*m3cld) / (m3ccn + m3cld) 345 ENDIF 341 346 342 347 ! Tuning of optical properties for clouds :
Note: See TracChangeset
for help on using the changeset viewer.