Changeset 5019 for LMDZ6/branches/cirrus/libf/phylmd/lmdz_lscp_tools.F90
- Timestamp:
- Jul 5, 2024, 10:54:38 AM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/cirrus/libf/phylmd/lmdz_lscp_tools.F90
r4951 r5019 334 334 CALL CALC_QSAT_ECMWF(klon,temp,qtot,pressure,RTT,2,.false.,qsi,dqsi) 335 335 336 DO i =1,klon337 338 IF ( temp(i) .GE. RTT) THEN336 DO i = 1, klon 337 338 IF ( temp(i) .GE. RTT ) THEN 339 339 ! warm clouds: condensation at saturation wrt liquid 340 gammasat(i)=1. 341 dgammasatdt(i)=0. 342 343 ELSEIF ((temp(i) .LT. RTT) .AND. (temp(i) .GT. temp_nowater)) THEN 340 gammasat(i) = 1. 341 dgammasatdt(i) = 0. 342 343 ELSE 344 ! cold clouds: qsi > qsl 344 345 345 IF (iflag_gammasat .GE. 2) THEN 346 gammasat(i)=qsl(i)/qsi(i) 347 dgammasatdt(i)=(dqsl(i)*qsi(i)-dqsi(i)*qsl(i))/qsi(i)/qsi(i) 346 ! homogeneous freezing of aerosols, according to 347 ! Koop, 2000 and Ren and MacKenzie, 2005 (QJRMS) 348 ! 'Cirrus regime' 349 ! if f_homofreez > qsl / qsi, liquid nucleation 350 ! if f_homofreez < qsl / qsi, homogeneous freezing of aerosols 351 ! Note: f_homofreez = qsl / qsi for temp ~= -38degC 352 f_homofreez = a_homofreez - temp(i) / b_homofreez 353 354 IF ( iflag_gammasat .GE. 3 ) THEN 355 ! condensation at homogeneous freezing threshold for temp < -38 degC 356 ! condensation at liquid saturation for temp > -38 degC 357 IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN 358 gammasat(i) = f_homofreez 359 dgammasatdt(i) = - 1. / b_homofreez 360 ELSE 361 gammasat(i) = qsl(i) / qsi(i) 362 dgammasatdt(i) = ( dqsl(i) * qsi(i) - dqsi(i) * qsl(i) ) / qsi(i) / qsi(i) 363 ENDIF 364 365 ELSEIF ( iflag_gammasat .EQ. 2 ) THEN 366 ! condensation at homogeneous freezing threshold for temp < -38 degC 367 ! condensation at a threshold linearly decreasing between homogeneous 368 ! freezing and ice saturation for -38 degC < temp < temp_nowater 369 ! condensation at ice saturation for temp > temp_nowater 370 ! If temp_nowater = 235.15 K, this is equivalent to iflag_gammasat = 1 371 IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN 372 gammasat(i) = f_homofreez 373 dgammasatdt(i) = - 1. / b_homofreez 374 ELSEIF ( temp(i) .LE. temp_nowater ) THEN 375 ! Here, we assume that f_homofreez = qsl / qsi for temp = -38 degC = 235.15 K 376 dgammasatdt(i) = ( a_homofreez - 235.15 / b_homofreez - 1. ) & 377 / ( 235.15 - temp_nowater ) 378 gammasat(i) = dgammasatdt(i) * ( temp(i) - temp_nowater ) + 1. 379 ELSE 380 gammasat(i) = 1. 381 dgammasatdt(i) = 0. 382 ENDIF 383 384 ELSEIF ( iflag_gammasat .EQ. 1 ) THEN 385 ! condensation at homogeneous freezing threshold for temp < -38 degC 386 ! condensation at ice saturation for temp > -38 degC 387 IF ( f_homofreez .LE. qsl(i) / qsi(i) ) THEN 388 gammasat(i) = f_homofreez 389 dgammasatdt(i) = - 1. / b_homofreez 390 ELSE 391 gammasat(i) = 1. 392 dgammasatdt(i) = 0. 393 ENDIF 394 348 395 ELSE 349 gammasat(i)=1. 350 dgammasatdt(i)=0. 396 ! condensation at ice saturation for temp < -38 degC 397 ! condensation at ice saturation for temp > -38 degC 398 gammasat(i) = 1. 399 dgammasatdt(i) = 0. 400 351 401 ENDIF 352 402 353 ELSE 354 355 IF (iflag_gammasat .GE.1) THEN 356 ! homogeneous freezing of aerosols, according to 357 ! Koop, 2000 and Ren and MacKenzie, 2005 (QJRMS) 358 ! 'Cirrus regime' 359 f_homofreez=a_homofreez-temp(i)/b_homofreez 360 IF (f_homofreez .GT. qsl(i)/qsi(i)) THEN 361 gammasat(i)=qsl(i)/qsi(i) 362 dgammasatdt(i)=(dqsl(i)*qsi(i)-dqsi(i)*qsl(i))/qsi(i)/qsi(i) 363 ELSE 364 gammasat(i)= (1.-delta_hetfreez) + delta_hetfreez * f_homofreez 365 dgammasatdt(i)=-delta_hetfreez/b_homofreez 366 ENDIF 367 368 ELSE 369 370 gammasat(i)=1. 371 dgammasatdt(i)=0. 372 373 ENDIF 403 ! Note that the delta_hetfreez parameter allows to linearly decrease the 404 ! condensation threshold between the calculated threshold and the ice saturation 405 ! for delta_hetfreez = 1, the threshold is the calculated condensation threshold 406 ! for delta_hetfreez = 0, the threshold is the ice saturation 407 gammasat(i) = ( 1. - delta_hetfreez ) + delta_hetfreez * gammasat(i) 408 dgammasatdt(i) = delta_hetfreez * dgammasatdt(i) 374 409 375 410 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.