Changeset 3340 for trunk/LMDZ.TITAN/libf


Ignore:
Timestamp:
May 22, 2024, 6:23:52 PM (7 months ago)
Author:
slebonnois
Message:

SL: Lucie's modifications to run without clouds and still get good tropospheric T profile

Location:
trunk/LMDZ.TITAN/libf
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.TITAN/libf/chimtitan/disso.c

    r2326 r3340  
    200200
    201201/* lecture des flux actiniques:
    202    - suppose que l'executable est dans $LMDGCM/RUN/xxx/
    203    - et les moyennes dans $LMDGCM/datagcm/PHOT(NLAT)/Moy_(lat:1 a NLAT)
     202   - suppose la presence d'un lien au même niveau que l'executable
     203   pointant vers le repertoire datagcm (ou qu'il soit...)
     204   - et les moyennes dans datagcm/PHOT(NLAT)/Moy_(lat:1 a NLAT)
    204205*/
    205    strcpy( dir, "../../datagcm/PHOT" );
     206   strcpy( dir, "datagcm/PHOT" );
    206207   if( (*NLAT) < 10 )
    207208   {
  • trunk/LMDZ.TITAN/libf/phytitan/optci.F90

    r3318 r3340  
    106106  integer dumch
    107107  real*8  dumwvl
     108  integer ilev_cutoff
     109  real*8 corr_haze
    108110
    109111  ! Variables for new optics
     
    152154   lkcoef(:,:)   = 0.0
    153155
     156   ! Level of cutoff
     157   !~~~~~~~~~~~~~~~~
     158   ilev_cutoff = 26
     159
    154160   do K=2,L_LEVELS
    155161      ilay = L_NLAYRAD+1 - k/2 ! int. arithmetic => gives the gcm layer index (reversed)
     
    182188               m3as = pqmo(ilay,2) / 2.0
    183189               m3af = pqmo(ilay,4) / 2.0
    184                ! Cut-off (here for p = 2.7e3Pa / alt = 70km)
    185                IF (ilay .lt. 23) THEN
    186                   m3as = pqmo(23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    187                   m3af = pqmo(23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     190               ! Cut-off
     191               IF (ilay .lt. ilev_cutoff) THEN
     192                  m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     193                  m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    188194               ENDIF
    189195
     
    206212               m0as  = pqmo(ilay,1) / 2.0
    207213               m3as  = pqmo(ilay,2) / 2.0
    208                ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)
     214               ! If not callclouds : must have a cut-off
    209215               IF (.NOT. callclouds) THEN
    210                   IF (ilay .lt. 23) THEN
    211                      m0as = pqmo(23,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    212                      m3as = pqmo(23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     216                  IF (ilay .lt. ilev_cutoff) THEN
     217                     m0as = pqmo(ilev_cutoff,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     218                     m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    213219                  ENDIF
    214220               ENDIF
     
    220226               m0af  = pqmo(ilay,3) / 2.0
    221227               m3af  = pqmo(ilay,4) / 2.0
    222                ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)
     228               ! If not callclouds : must have a cut-off
    223229               IF (.NOT. callclouds) THEN
    224                   IF (ilay .lt. 23) THEN
    225                      m0af = pqmo(23,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    226                      m3af = pqmo(23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     230                  IF (ilay .lt. ilev_cutoff) THEN
     231                     m0af = pqmo(ilev_cutoff,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     232                     m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    227233                  ENDIF
    228234               ENDIF
     
    248254            ENDIF
    249255           
     256            ! Opacity and albedo adjustement below cutoff :
     257            IF (.NOT. callclouds) THEN
     258               corr_haze=0.6-0.4*TANH((PMID(K)*100.-2500.)/250.)
     259               IF (ilay .lt. ilev_cutoff) THEN
     260                  DHAZE_T(k,nw) = DHAZE_T(k,nw) * corr_haze
     261               ENDIF
     262            ENDIF
     263
    250264            ! Diagnostics for the haze :
    251265            DIAG_OPTH(k,nw,1) = DHAZE_T(k,nw) ! dtau
  • trunk/LMDZ.TITAN/libf/phytitan/optcv.F90

    r3318 r3340  
    117117  integer dumch
    118118  real*8  dumwvl
     119  integer ilev_cutoff ! pressure level index of cutoff
     120  real*8  corr_haze
     121  real*8  corr_alb
    119122
    120123  ! Variables for new optics
     
    168171   lkcoef(:,:)   = 0.0
    169172
     173   ! Level of cutoff
     174   !~~~~~~~~~~~~~~~~
     175   ilev_cutoff = 26
     176
    170177   do K=2,L_LEVELS
    171178      ilay = L_NLAYRAD+1 - k/2 ! int. arithmetic => gives the gcm layer index (reversed)
     
    210217               m3af = pqmo(ilay,4) / 2.0
    211218               ! Cut-off (here for p = 2.7e3Pa / alt = 70km)
    212                IF (ilay .lt. 23) THEN
    213                   m3as = pqmo(23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    214                   m3af = pqmo(23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     219               IF (ilay .lt. ilev_cutoff) THEN
     220                  m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     221                  m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    215222               ENDIF
    216223               
     
    235242               ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)
    236243               IF (.NOT. callclouds) THEN
    237                   IF (ilay .lt. 23) THEN
    238                      m0as = pqmo(23,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    239                      m3as = pqmo(23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     244                  IF (ilay .lt. ilev_cutoff) THEN
     245                     m0as = pqmo(ilev_cutoff,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     246                     m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    240247                  ENDIF
    241248               ENDIF
     
    249256               ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)
    250257               IF (.NOT. callclouds) THEN
    251                   IF (ilay .lt. 23) THEN
    252                      m0af = pqmo(23,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
    253                      m3af = pqmo(23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))
     258                  IF (ilay .lt. ilev_cutoff) THEN
     259                     m0af = pqmo(ilev_cutoff,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
     260                     m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff))
    254261                  ENDIF
    255262               ENDIF
     
    273280               SSA_T(k,nw)   = 1.0
    274281               ASF_T(k,nw)   = 1.0
     282            ENDIF
     283
     284            ! Opacity and albedo adjustement below cutoff
     285            !----------------------------------------------
     286            corr_haze=0.85-0.15*TANH((PMID(k)*100.-2500.)/250.)
     287            corr_alb =0.85-0.15*TANH((PMID(k)*100.-4500.)/1000.)
     288            IF (.NOT. callclouds) THEN
     289               IF (ilay .lt. ilev_cutoff) THEN
     290                  DHAZE_T(k,nw) = DHAZE_T(k,nw) * corr_haze
     291                  SSA_T(k,nw)   = SSA_T(k,nw) * corr_alb
     292               ENDIF
    275293            ENDIF
    276294
  • trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90

    r3318 r3340  
    139139!    pdt(ngrid,nlayer)         /  variables due to physical processes.
    140140!    pdq(ngrid,nlayer)        /
    141 !    pdpsrf(ngrid)             /
     141!    pdpsrf(ngrid)           /
    142142!
    143143!
     
    290290      real gmplanet
    291291      real taux(ngrid),tauy(ngrid)
     292      real factlat
     293      real zundg(nlayer)
    292294
    293295
     
    11171119               ENDDO
    11181120            ENDIF
     1121            ! In case there is no clouds, in the troposphere the moments are  fixed to evacuate all aerosols
     1122            IF (.NOT. callclouds) THEN
     1123               DO l = 1, nlayer
     1124                  DO ig=1,ngrid
     1125                     IF (pplay(ig,l) .gt. 1000.) THEN
     1126                        pdq(ig,l,1)=0.
     1127                        pdq(ig,l,2)=0.
     1128                        IF (pplay(ig,l) .gt. 5000.) THEN
     1129                           pdq(ig,l,3)=0.
     1130                           pdq(ig,l,4)=0.
     1131                        ENDIF
     1132                     ENDIF
     1133                  ENDDO
     1134               ENDDO
     1135            ENDIF
    11191136#endif
    11201137
     
    13541371      if (nudging_u) then
    13551372         zdundg(:,:) = 0.D0
     1373         j=1
    13561374         ! boucle sur les points de grille :
    13571375         do i = 1, ngrid
    1358             ! boucle sur les latitudes :
    1359             do j = 1, 49
    1360                ! Nudging of the first 23 layers only !!
    1361                if (ABS(REAL(u_ref(j,1)) - REAL(latitude_deg(i))) .lt. 1e-2) then
    1362                   zdundg(i,1:23) = (u_ref(j,2:24) - (pu(i,1:23)+pdu(i,1:23)*ptimestep)) / nudging_dt
    1363                endif
    1364             enddo
     1376             ! interpolation linéaire des données dans le fichier lu (sur 49 latitudes)
     1377             do while ((u_ref(j,1).ge.latitude_deg(i)).and.(j.lt.49))
     1378               j=j+1
     1379             enddo
     1380             factlat =  (latitude_deg(i)-u_ref(j,1))/(u_ref(j-1,1)-u_ref(j,1))
     1381             ! Nudging of the first 23 layers only !!
     1382             ! IF CHANGE IN VERTICAL RESOLUTION IN THE FIRST 23 LEVELS, IT DOES NOT WORK !!!
     1383             zundg(1:23) = factlat*u_ref(j-1,2:24)+(1-factlat)*u_ref(j,2:24)
     1384             zdundg(i,1:23) = (zundg(1:23) - (pu(i,1:23)+pdu(i,1:23)*ptimestep)) / nudging_dt
    13651385         enddo
     1386         
    13661387         pdu(:,:) = pdu(:,:) + zdundg(:,:)
    13671388      endif
     
    18091830      ! Optical diagnostics :
    18101831      !--------------------------------------------------------
     1832
     1833      if (1.eq.0) then  ! not by default...
     1834
    18111835      ! Haze opacity :
    18121836      CALL send_xios_field('ttauhv_14',zpopthv(:,:,14,2)) ! 14 --> 1.076 um
     
    18771901      ENDIF     
    18781902
     1903      endif  ! 1.eq.0 ...
     1904
    18791905      ! Diagnostics for haze and clouds (4D) :
    18801906      CALL send_xios_field('dtauhi',zpopthi(:,:,:,1))
     
    19381964         ! Surface (2D) :
    19391965         CALL send_xios_field("aer_prec",mmd_aer_prec(:))
    1940          CALL send_xios_field("ccn_prec",mmd_ccn_prec(:))
    19411966         IF (callclouds) THEN
     1967            CALL send_xios_field("ccn_prec",mmd_ccn_prec(:))
    19421968            DO iq = 1, size(ices_indx)
    19431969               CALL send_xios_field('i'//TRIM(nameOfTracer(gazs_indx(iq)))//'_prec',mmd_ice_prec(:,iq))
Note: See TracChangeset for help on using the changeset viewer.