Ignore:
Timestamp:
Jan 28, 2016, 5:02:13 PM (9 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes r2396:2434 into testing branch

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/cosp/lidar_simulator.F90

    r2298 r2435  
    11! Copyright (c) 2009, Centre National de la Recherche Scientifique
    22! 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 $
    35!
    46! Redistribution and use in source and binary forms, with or without modification, are permitted
     
    2830                , q_lsliq, q_lsice, q_cvliq, q_cvice &
    2931                , 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 )
    3233!
    3334!---------------------------------------------------------------------------------
     
    7576! - Bug fix in computation of pmol and pnorm, thanks to Masaki Satoh: a factor 2
    7677! 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
    7785!
    7886!---------------------------------------------------------------------------------
     
    96104!  cv_radliq: effective radius of CONV liquid particles (meters)
    97105!  cv_radice: effective radius of CONV ice particles (meters)
    98 !  frac_out : cloud cover in each sub-column of the gridbox (output from scops)
    99106!  ice_type : ice particle shape hypothesis (ice_type=0 for spheres, ice_type=1
    100107!             for non spherical particles)
     
    103110!  pmol : molecular attenuated backscatter lidar signal power (m^-1.sr^-1)
    104111!  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)
    105113!  tautot: optical thickess integrated from top to level z
    106114!  refl : parasol(polder) reflectance
     
    130138      REAL pres(npoints,nlev)    ! pressure full levels
    131139      REAL presf(npoints,nlev+1) ! pressure half levels
    132       REAL temp(npoints,nlev)
    133140      REAL q_lsliq(npoints,nlev), q_lsice(npoints,nlev)
    134141      REAL q_cvliq(npoints,nlev), q_cvice(npoints,nlev)
    135142      REAL ls_radliq(npoints,nlev), ls_radice(npoints,nlev)
    136143      REAL cv_radliq(npoints,nlev), cv_radice(npoints,nlev)
    137       REAL frac_out(npoints,nlev)
    138144
    139145! outputs (for each subcolumn):
     
    168174
    169175!   sub-column variables:
    170       REAL frac_sub(npoints,nlev)
    171176      REAL qpart(npoints,nlev,npart) ! mixing ratio particles in each subcolumn
    172177      REAL alpha_part(npoints,nlev,npart)
     
    177182      REAL tautot_lay(npoints)   ! temporary variable, total opt. thickness of layer k
    178183!     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!------------------------------------------------------------
     209betatot_ice(:,:)=0
     210betatot_liq(:,:)=0
     211beta_perp_ice(:,:)=0
     212beta_perp_liq(:,:)=0
     213tautot_ice(:,:)=0
     214tautot_liq(:,:)=0
     215tautot_lay_ice(:)=0;
     216tautot_lay_liq(:)=0;
     217pnorm_liq(:,:)=0
     218pnorm_ice(:,:)=0
     219pnorm_perp_ice(:,:)=0
     220pnorm_perp_liq(:,:)=0
     221pnorm_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
    184236
    185237!------------------------------------------------------------
     
    201253! We repeat the same coefficients for LS and CONV cloud to make code more readable
    202254!*     LS Liquid water coefficients:
    203          polpart(INDX_LSLIQ,1) =  2.6980e-8     
     255         polpart(INDX_LSLIQ,1) =  2.6980e-8
    204256         polpart(INDX_LSLIQ,2) = -3.7701e-6
    205257         polpart(INDX_LSLIQ,3) =  1.6594e-4
     
    208260!*     LS Ice coefficients:
    209261      if (ice_type.eq.0) then     
    210          polpart(INDX_LSICE,1) = -1.0176e-8   
     262         polpart(INDX_LSICE,1) = -1.0176e-8
    211263         polpart(INDX_LSICE,2) =  1.7615e-6
    212264         polpart(INDX_LSICE,3) = -1.0480e-4
     
    216268!*     LS Ice NS coefficients:
    217269      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
    220272         polpart(INDX_LSICE,3) = 7.51799e-5
    221273         polpart(INDX_LSICE,4) = 0.00078213
     
    223275      endif
    224276!*     CONV Liquid water coefficients:
    225          polpart(INDX_CVLIQ,1) =  2.6980e-8     
     277         polpart(INDX_CVLIQ,1) =  2.6980e-8
    226278         polpart(INDX_CVLIQ,2) = -3.7701e-6
    227279         polpart(INDX_CVLIQ,3) =  1.6594e-4
     
    230282!*     CONV Ice coefficients:
    231283      if (ice_type.eq.0) then
    232          polpart(INDX_CVICE,1) = -1.0176e-8   
     284         polpart(INDX_CVICE,1) = -1.0176e-8
    233285         polpart(INDX_CVICE,2) =  1.7615e-6
    234286         polpart(INDX_CVICE,3) = -1.0480e-4
     
    268320                  -(presf(:,k)-presf(:,k-1))/(rhoair(:,k-1)*9.81)
    269321      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 )
    274322
    275323!------------------------------------------------------------
     
    316364
    317365!------------------------------------------------------------
    318 !---- 4. Backscatter signal:
     366!---- 4.1 Total Backscatter signal:
    319367!------------------------------------------------------------
    320368
     
    356404        END WHERE
    357405      END DO
    358 !
     406
    359407! Total signal (molecular + particules):
     408!
    360409!
    361410! For performance reason on vector computers, the 2 following lines should not be used
     
    373422      pnorm(:,nlev) = betatot(:,nlev) / (2.*tautot(:,nlev)) &
    374423            & * (1.-exp(-2.0*tautot(:,nlev)))
     424
    375425!     Other layers
    376426      DO k= nlev-1, 1, -1
    377         tautot_lay(:) = tautot(:,k)-tautot(:,k+1) ! optical thickness of layer k
     427          tautot_lay(:) = tautot(:,k)-tautot(:,k+1) ! optical thickness of layer k
    378428        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(:)) &
    382430               & * (1.-EXP(-2.0*tautot_lay(:)))
    383431        ELSEWHERE
     
    387435      END DO
    388436
    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
    403574
    404575!-------- End computation Lidar --------------------------
Note: See TracChangeset for help on using the changeset viewer.