Changeset 3947 for trunk/LMDZ.PLUTO/libf


Ignore:
Timestamp:
Nov 3, 2025, 3:44:51 PM (6 weeks ago)
Author:
debatzbr
Message:

Pluto PCM: add sanity check for single scattering albedo computation
BBT

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.PLUTO/libf/phypluto/optcv.F90

    r3929 r3947  
    144144  DTAUKV(:,:,:)    = 0.0
    145145  dtauv_aer(:,:,:) = 0.0
    146   wbarv_aer(:,:,:) = 0.0
     146  wbarv_aer(:,:,:) = 1.0
    147147
    148148  if(callmufi) then
     
    353353      ! Aerosol absorption correction --> impact on single scattering albedo.
    354354      if (callmufi) then
     355         ! Spherical aerosols
    355356         if ((TAEROS(K,NW,1).gt.0.d0) .and. TAEROS(K+1,NW,1).gt.0.d0) then
    356357            btemp(L,NW) = TAUAEROLK(K,NW,1) / &
     
    363364            btemp(L,NW) = TAUAEROLK(K,NW,1) + TAUAEROLK(K+1,NW,1)
    364365         endif
     366         ! Fractal aerosols
    365367         if ((TAEROS(K,NW,2).gt.0.d0) .and. TAEROS(K+1,NW,2).gt.0.d0) then
    366368            btemp(L,NW) = btemp(L,NW) + &
     
    390392     ! Aerosol absorption correction --> impact on single scattering albedo.
    391393     if (callmufi) then
     394      ! Spherical aerosols
    392395      if (TAEROS(K,NW,1).gt.0.d0) then
    393396         btemp(L,NW) = TAUAEROLK(K,NW,1) / &
     
    397400         btemp(L,NW) = TAUAEROLK(K,NW,1)
    398401      endif
     402      ! Fractal aerosols
    399403      if (TAEROS(K,NW,2).gt.0.d0) then
    400404         btemp(L,NW) = btemp(L,NW) + &
     
    442446      DTAUV_AER(L,nw,iaer) = TAEROS(K,nw,iaer) + TAEROS(K+1,nw,iaer)
    443447
    444       wbarv_prime = (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)) / &
    445                     (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)))
     448      IF (QXVAER(K,nw,iaer) > 0.0D0) THEN
     449         wbarv_prime = (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)) / &
     450                       (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)))
     451      ELSE
     452         wbarv_prime = 1.0
     453      ENDIF
    446454      WBARV_AER(L,nw,iaer) = wbarv_prime * TAEROS(K,nw,iaer)
    447       wbarv_prime = (QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer)) / &
    448                     (QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer)))
     455      IF (QXVAER(K+1,nw,iaer) > 0.0D0) THEN
     456         wbarv_prime = (QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer)) / &
     457                       (QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K+1,nw,iaer)/QXVAER(K+1,nw,iaer)))
     458      ELSE
     459         wbarv_prime = 1.0
     460      ENDIF
    449461      WBARV_AER(L,nw,iaer) = WBARV_AER(L,nw,iaer) + (wbarv_prime * TAEROS(K+1,nw,iaer))
    450       WBARV_AER(L,nw,iaer) = WBARV_AER(L,nw,iaer) / DTAUV_AER(L,nw,iaer)
    451       END DO ! L vertical loop
    452       ! Last level
    453       L              = L_NLAYRAD
    454       K              = 2*L+1
    455       DTAUV_AER(L,nw,iaer) = TAEROS(K,nw,iaer)
    456       WBARV_AER(L,nw,iaer) = (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)) / &
    457                              (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)))
     462      IF (DTAUV_AER(L,nw,iaer) > 0.0D0) THEN
     463         WBARV_AER(L,nw,iaer) = WBARV_AER(L,nw,iaer) / DTAUV_AER(L,nw,iaer)
     464      ELSE
     465         WBARV_AER(L,nw,iaer) = 1.0
     466      ENDIF
     467     END DO ! L vertical loop
     468
     469     ! Last level
     470     !-----------
     471     L = L_NLAYRAD
     472     K = 2*L+1
     473     DTAUV_AER(L,nw,iaer) = TAEROS(K,nw,iaer)
     474     IF (QXVAER(K,nw,iaer) > 0.0D0) THEN
     475        WBARV_AER(L,nw,iaer) = (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)) / &
     476                               (QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer) + Fabs_aer(iaer)*(1.-QSVAER(K,nw,iaer)/QXVAER(K,nw,iaer)))
     477     ELSE
     478       WBARV_AER(L,nw,iaer) = 1.0
     479     ENDIF
    458480   END DO ! nw spectral loop
    459481  END DO ! iaer Gauss loop
Note: See TracChangeset for help on using the changeset viewer.