- Timestamp:
- Jan 28, 2016, 5:02:13 PM (9 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2397-2403,2405-2407,2410-2413,2415-2424,2426-2429,2431-2432,2434
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phylmd/cosp/lidar_simulator.F90
r2298 r2435 1 1 ! Copyright (c) 2009, Centre National de la Recherche Scientifique 2 2 ! All rights reserved. 3 ! $Revision: 88 $, $Date: 2013-11-13 15:08:38 +0100 (mer. 13 nov. 2013) $ 4 ! $URL: http://cfmip-obs-sim.googlecode.com/svn/stable/v1.4.0/actsim/lidar_simulator.F90 $ 3 5 ! 4 6 ! Redistribution and use in source and binary forms, with or without modification, are permitted … … 28 30 , q_lsliq, q_lsice, q_cvliq, q_cvice & 29 31 , ls_radliq, ls_radice, cv_radliq, cv_radice & 30 , frac_out, ice_type & 31 , pmol, pnorm, tautot, refl ) 32 , ice_type, pmol, pnorm, pnorm_perp_tot,tautot, refl ) 32 33 ! 33 34 !--------------------------------------------------------------------------------- … … 75 76 ! - Bug fix in computation of pmol and pnorm, thanks to Masaki Satoh: a factor 2 76 77 ! was missing. This affects the ATB values but not the cloud fraction. 78 ! 79 ! January 2013, G. Cesana and H. Chepfer: 80 ! - Add the perpendicular component of the backscattered signal (pnorm_perp_tot) in the arguments 81 ! - Add the temperature for each levels (temp) in the arguments 82 ! - Add the computation of the perpendicular component of the backscattered lidar signal 83 ! Reference: Cesana G. and H. Chepfer (2013): Evaluation of the cloud water phase 84 ! in a climate model using CALIPSO-GOCCP, J. Geophys. Res., doi: 10.1002/jgrd.50376 77 85 ! 78 86 !--------------------------------------------------------------------------------- … … 96 104 ! cv_radliq: effective radius of CONV liquid particles (meters) 97 105 ! cv_radice: effective radius of CONV ice particles (meters) 98 ! frac_out : cloud cover in each sub-column of the gridbox (output from scops)99 106 ! ice_type : ice particle shape hypothesis (ice_type=0 for spheres, ice_type=1 100 107 ! for non spherical particles) … … 103 110 ! pmol : molecular attenuated backscatter lidar signal power (m^-1.sr^-1) 104 111 ! pnorm: total attenuated backscatter lidar signal power (m^-1.sr^-1) 112 ! pnorm_perp_tot: perpendicular attenuated backscatter lidar signal power (m^-1.sr^-1) 105 113 ! tautot: optical thickess integrated from top to level z 106 114 ! refl : parasol(polder) reflectance … … 130 138 REAL pres(npoints,nlev) ! pressure full levels 131 139 REAL presf(npoints,nlev+1) ! pressure half levels 132 REAL temp(npoints,nlev)133 140 REAL q_lsliq(npoints,nlev), q_lsice(npoints,nlev) 134 141 REAL q_cvliq(npoints,nlev), q_cvice(npoints,nlev) 135 142 REAL ls_radliq(npoints,nlev), ls_radice(npoints,nlev) 136 143 REAL cv_radliq(npoints,nlev), cv_radice(npoints,nlev) 137 REAL frac_out(npoints,nlev)138 144 139 145 ! outputs (for each subcolumn): … … 168 174 169 175 ! sub-column variables: 170 REAL frac_sub(npoints,nlev)171 176 REAL qpart(npoints,nlev,npart) ! mixing ratio particles in each subcolumn 172 177 REAL alpha_part(npoints,nlev,npart) … … 177 182 REAL tautot_lay(npoints) ! temporary variable, total opt. thickness of layer k 178 183 ! Optical thickness from TOA to surface for Parasol 179 REAL tautot_S_liq(npoints),tautot_S_ice(npoints) ! for liq and ice clouds 180 181 ! Abderrahmane 8-2-2011 182 Logical iflag_testlidar 183 PARAMETER (iflag_testlidar=.false.) 184 REAL tautot_S_liq(npoints),tautot_S_ice(npoints) ! for liq and ice clouds 185 186 187 ! Local variables 188 REAL Alpha, Beta, Gamma ! Polynomial coefficient for ATBperp computation 189 REAL temp(npoints,nlev) ! temperature of layer k 190 REAL betatot_ice(npoints,nlev) ! backscatter coefficient for ice particles 191 REAL beta_perp_ice(npoints,nlev) ! perpendicular backscatter coefficient for ice 192 REAL betatot_liq(npoints,nlev) ! backscatter coefficient for liquid particles 193 REAL beta_perp_liq(npoints,nlev) ! perpendicular backscatter coefficient for liq 194 REAL tautot_ice(npoints,nlev) ! total optical thickness of ice 195 REAL tautot_liq(npoints,nlev) ! total optical thickness of liq 196 REAL tautot_lay_ice(npoints) ! total optical thickness of ice in the layer k 197 REAL tautot_lay_liq(npoints) ! total optical thickness of liq in the layer k 198 REAL pnorm_liq(npoints,nlev) ! lidar backscattered signal power for liquid 199 REAL pnorm_ice(npoints,nlev) ! lidar backscattered signal power for ice 200 REAL pnorm_perp_ice(npoints,nlev) ! perpendicular lidar backscattered signal power for ice 201 REAL pnorm_perp_liq(npoints,nlev) ! perpendicular lidar backscattered signal power for liq 202 203 ! Output variable 204 REAL pnorm_perp_tot (npoints,nlev) ! perpendicular lidar backscattered signal power 205 206 !------------------------------------------------------------ 207 !---- 0. Initialisation : 208 !------------------------------------------------------------ 209 betatot_ice(:,:)=0 210 betatot_liq(:,:)=0 211 beta_perp_ice(:,:)=0 212 beta_perp_liq(:,:)=0 213 tautot_ice(:,:)=0 214 tautot_liq(:,:)=0 215 tautot_lay_ice(:)=0; 216 tautot_lay_liq(:)=0; 217 pnorm_liq(:,:)=0 218 pnorm_ice(:,:)=0 219 pnorm_perp_ice(:,:)=0 220 pnorm_perp_liq(:,:)=0 221 pnorm_perp_tot(:,:)=0 222 223 224 ! Polynomial coefficients (Alpha, Beta, Gamma) which allow to compute the ATBperpendicular 225 ! as a function of the ATB for ice or liquid cloud particles derived from CALIPSO-GOCCP 226 ! observations at 120m vertical grid (Cesana and Chepfer, JGR, 2013). 227 ! 228 ! Relationship between ATBice and ATBperp,ice for ice particles 229 ! ATBperp,ice = Alpha*ATBice 230 Alpha = 0.2904 231 232 ! Relationship between ATBice and ATBperp,ice for liquid particles 233 ! ATBperp,ice = Beta*ATBice^2 + Gamma*ATBice 234 Beta = 0.4099 235 Gamma = 0.009 184 236 185 237 !------------------------------------------------------------ … … 201 253 ! We repeat the same coefficients for LS and CONV cloud to make code more readable 202 254 !* LS Liquid water coefficients: 203 polpart(INDX_LSLIQ,1) = 2.6980e-8 255 polpart(INDX_LSLIQ,1) = 2.6980e-8 204 256 polpart(INDX_LSLIQ,2) = -3.7701e-6 205 257 polpart(INDX_LSLIQ,3) = 1.6594e-4 … … 208 260 !* LS Ice coefficients: 209 261 if (ice_type.eq.0) then 210 polpart(INDX_LSICE,1) = -1.0176e-8 262 polpart(INDX_LSICE,1) = -1.0176e-8 211 263 polpart(INDX_LSICE,2) = 1.7615e-6 212 264 polpart(INDX_LSICE,3) = -1.0480e-4 … … 216 268 !* LS Ice NS coefficients: 217 269 if (ice_type.eq.1) then 218 polpart(INDX_LSICE,1) = 1.3615e-8 219 polpart(INDX_LSICE,2) = -2.04206e-6 270 polpart(INDX_LSICE,1) = 1.3615e-8 271 polpart(INDX_LSICE,2) = -2.04206e-6 220 272 polpart(INDX_LSICE,3) = 7.51799e-5 221 273 polpart(INDX_LSICE,4) = 0.00078213 … … 223 275 endif 224 276 !* CONV Liquid water coefficients: 225 polpart(INDX_CVLIQ,1) = 2.6980e-8 277 polpart(INDX_CVLIQ,1) = 2.6980e-8 226 278 polpart(INDX_CVLIQ,2) = -3.7701e-6 227 279 polpart(INDX_CVLIQ,3) = 1.6594e-4 … … 230 282 !* CONV Ice coefficients: 231 283 if (ice_type.eq.0) then 232 polpart(INDX_CVICE,1) = -1.0176e-8 284 polpart(INDX_CVICE,1) = -1.0176e-8 233 285 polpart(INDX_CVICE,2) = 1.7615e-6 234 286 polpart(INDX_CVICE,3) = -1.0480e-4 … … 268 320 -(presf(:,k)-presf(:,k-1))/(rhoair(:,k-1)*9.81) 269 321 enddo 270 271 ! cloud fraction (0 or 1) in each sub-column:272 ! (if frac_out=1or2 -> frac_sub=1; if frac_out=0 -> frac_sub=0)273 frac_sub = MIN( frac_out, 1.0 )274 322 275 323 !------------------------------------------------------------ … … 316 364 317 365 !------------------------------------------------------------ 318 !---- 4. Backscatter signal:366 !---- 4.1 Total Backscatter signal: 319 367 !------------------------------------------------------------ 320 368 … … 356 404 END WHERE 357 405 END DO 358 ! 406 359 407 ! Total signal (molecular + particules): 408 ! 360 409 ! 361 410 ! For performance reason on vector computers, the 2 following lines should not be used … … 373 422 pnorm(:,nlev) = betatot(:,nlev) / (2.*tautot(:,nlev)) & 374 423 & * (1.-exp(-2.0*tautot(:,nlev))) 424 375 425 ! Other layers 376 426 DO k= nlev-1, 1, -1 377 tautot_lay(:) = tautot(:,k)-tautot(:,k+1) ! optical thickness of layer k427 tautot_lay(:) = tautot(:,k)-tautot(:,k+1) ! optical thickness of layer k 378 428 WHERE (tautot_lay(:).GT.0.) 379 pnorm(:,k) = betatot(:,k) * EXP(-2.0*tautot(:,k+1)) / (2.*tautot_lay(:)) & 380 !correc pnorm(:,k) = betatot(:,k) * EXP(-2.0*tautot(:,k+1)) & ! correc Satoh 381 !correc & / (2.0*tautot_lay(:)) & ! correc Satoh 429 pnorm(:,k) = betatot(:,k) * EXP(-2.0*tautot(:,k+1)) / (2.*tautot_lay(:)) & 382 430 & * (1.-EXP(-2.0*tautot_lay(:))) 383 431 ELSEWHERE … … 387 435 END DO 388 436 389 if (iflag_testlidar) then 390 !+JLD test 391 ! do k=1,nlev 392 ! print*,'Min val de frac_out=',k,minval(frac_out(:,k)) 393 ! print*,'Max val de frac_out=',k,maxval(frac_out(:,k)) 394 ! enddo 395 where ( frac_out(:,:).ge.0.5) 396 ! Correction AI 9 5 11 pnorm(:,:) = pmol(:,:)*10. 397 pnorm(:,:) = pmol(:,:)*50. 398 elsewhere 399 pnorm(:,:) = pmol(:,:) 400 endwhere 401 !-JLD test 402 endif 437 !------------------------------------------------------------ 438 !---- 4.2 Ice/Liq Backscatter signal: 439 !------------------------------------------------------------ 440 441 ! Contribution of the molecular to beta 442 betatot_ice(:,:) = beta_mol(:,:) 443 betatot_liq(:,:) = beta_mol(:,:) 444 445 tautot_ice(:,:) = tau_mol(:,:) 446 tautot_liq(:,:) = tau_mol(:,:) 447 448 DO i = 2, npart,2 449 betatot_ice(:,:) = betatot_ice(:,:)+ kp_part(:,:,i)*alpha_part(:,:,i) 450 tautot_ice(:,:) = tautot_ice(:,:) + tau_part(:,:,i) 451 ENDDO ! i 452 DO i = 1, npart,2 453 betatot_liq(:,:) = betatot_liq(:,:)+ kp_part(:,:,i)*alpha_part(:,:,i) 454 tautot_liq(:,:) = tautot_liq(:,:) + tau_part(:,:,i) 455 ENDDO ! i 456 457 458 ! Computation of the ice and liquid lidar backscattered signal (ATBice and ATBliq) 459 ! Ice only 460 ! Upper layer 461 pnorm_ice(:,nlev) = betatot_ice(:,nlev) / (2.*tautot_ice(:,nlev)) & 462 & * (1.-exp(-2.0*tautot_ice(:,nlev))) 463 464 DO k= nlev-1, 1, -1 465 tautot_lay_ice(:) = tautot_ice(:,k)-tautot_ice(:,k+1) 466 WHERE (tautot_lay_ice(:).GT.0.) 467 pnorm_ice(:,k)=betatot_ice(:,k)*EXP(-2.0*tautot_ice(:,k+1))/(2.*tautot_lay_ice(:)) & 468 & * (1.-EXP(-2.0*tautot_lay_ice(:))) 469 ELSEWHERE 470 pnorm_ice(:,k)=betatot_ice(:,k)*EXP(-2.0*tautot_ice(:,k+1)) 471 END WHERE 472 ENDDO 473 474 ! Liquid only 475 ! Upper layer 476 pnorm_liq(:,nlev) = betatot_liq(:,nlev) / (2.*tautot_liq(:,nlev)) & 477 & * (1.-exp(-2.0*tautot_liq(:,nlev))) 478 479 DO k= nlev-1, 1, -1 480 tautot_lay_liq(:) = tautot_liq(:,k)-tautot_liq(:,k+1) 481 WHERE (tautot_lay_liq(:).GT.0.) 482 pnorm_liq(:,k)=betatot_liq(:,k)*EXP(-2.0*tautot_liq(:,k+1))/(2.*tautot_lay_liq(:)) & 483 & * (1.-EXP(-2.0*tautot_lay_liq(:))) 484 ELSEWHERE 485 pnorm_liq(:,k)=betatot_liq(:,k)*EXP(-2.0*tautot_liq(:,k+1)) 486 END WHERE 487 ENDDO 488 489 490 ! Computation of ATBperp,ice/liq from ATBice/liq including the multiple scattering 491 ! contribution (Cesana and Chepfer 2013, JGR) 492 ! ATBperp,ice = Alpha*ATBice 493 ! ATBperp,liq = Beta*ATBliq^2 + Gamma*ATBliq 494 495 DO k= nlev, 1, -1 496 pnorm_perp_ice(:,k) = Alpha * pnorm_ice(:,k) ! Ice particles 497 pnorm_perp_liq(:,k) = 1000*Beta * pnorm_liq(:,k)**2 + Gamma * pnorm_liq(:,k) ! Liquid particles 498 ENDDO 499 500 ! Computation of beta_perp_ice/liq using the lidar equation 501 ! Ice only 502 ! Upper layer 503 beta_perp_ice(:,nlev) = pnorm_perp_ice(:,nlev) * (2.*tautot_ice(:,nlev)) & 504 & / (1.-exp(-2.0*tautot_ice(:,nlev))) 505 506 DO k= nlev-1, 1, -1 507 tautot_lay_ice(:) = tautot_ice(:,k)-tautot_ice(:,k+1) 508 WHERE (tautot_lay_ice(:).GT.0.) 509 beta_perp_ice(:,k) = pnorm_perp_ice(:,k)/ EXP(-2.0*tautot_ice(:,k+1)) * (2.*tautot_lay_ice(:)) & 510 & / (1.-exp(-2.0*tautot_lay_ice(:))) 511 512 ELSEWHERE 513 beta_perp_ice(:,k)=pnorm_perp_ice(:,k)/EXP(-2.0*tautot_ice(:,k+1)) 514 END WHERE 515 ENDDO 516 517 ! Liquid only 518 ! Upper layer 519 beta_perp_liq(:,nlev) = pnorm_perp_liq(:,nlev) * (2.*tautot_liq(:,nlev)) & 520 & / (1.-exp(-2.0*tautot_liq(:,nlev))) 521 522 DO k= nlev-1, 1, -1 523 tautot_lay_liq(:) = tautot_liq(:,k)-tautot_liq(:,k+1) 524 WHERE (tautot_lay_liq(:).GT.0.) 525 beta_perp_liq(:,k) = pnorm_perp_liq(:,k)/ EXP(-2.0*tautot_liq(:,k+1)) * (2.*tautot_lay_liq(:)) & 526 & / (1.-exp(-2.0*tautot_lay_liq(:))) 527 528 ELSEWHERE 529 beta_perp_liq(:,k)=pnorm_perp_liq(:,k)/EXP(-2.0*tautot_liq(:,k+1)) 530 END WHERE 531 ENDDO 532 533 534 535 !------------------------------------------------------------ 536 !---- 4.3 Perpendicular Backscatter signal: 537 !------------------------------------------------------------ 538 539 ! Computation of the total perpendicular lidar signal (ATBperp for liq+ice) 540 ! Upper layer 541 WHERE(tautot(:,nlev).GT.0) 542 pnorm_perp_tot(:,nlev) = & 543 (beta_perp_ice(:,nlev)+beta_perp_liq(:,nlev)-(beta_mol(:,nlev)/(1+1/0.0284))) / (2.*tautot(:,nlev)) & 544 & * (1.-exp(-2.0*tautot(:,nlev))) 545 ELSEWHERE 546 pnorm_perp_tot(:,nlev) = 0. 547 ENDWHERE 548 549 ! Other layers 550 DO k= nlev-1, 1, -1 551 tautot_lay(:) = tautot(:,k)-tautot(:,k+1) ! optical thickness of layer k 552 553 ! The perpendicular component of the molecular backscattered signal (Betaperp) has been 554 ! taken into account two times (once for liquid and once for ice). 555 ! We remove one contribution using 556 ! Betaperp=beta_mol(:,k)/(1+1/0.0284)) [bodhaine et al. 1999] in the following equations: 557 WHERE (pnorm(:,k).eq.0) 558 pnorm_perp_tot(:,k)=0. 559 ELSEWHERE 560 WHERE (tautot_lay(:).GT.0.) 561 pnorm_perp_tot(:,k) = & 562 (beta_perp_ice(:,k)+beta_perp_liq(:,k)-(beta_mol(:,k)/(1+1/0.0284))) * & 563 EXP(-2.0*tautot(:,k+1)) / (2.*tautot_lay(:)) & 564 & * (1.-EXP(-2.0*tautot_lay(:))) 565 ELSEWHERE 566 ! This must never happen, but just in case, to avoid div. by 0 567 pnorm_perp_tot(:,k) = & 568 (beta_perp_ice(:,k)+beta_perp_liq(:,k)-(beta_mol(:,k)/(1+1/0.0284))) * & 569 EXP(-2.0*tautot(:,k+1)) 570 END WHERE 571 ENDWHERE 572 573 END DO 403 574 404 575 !-------- End computation Lidar --------------------------
Note: See TracChangeset
for help on using the changeset viewer.