Ignore:
Timestamp:
May 2, 2018, 3:18:27 PM (7 years ago)
Author:
jvatant
Message:

Correct a if statement calling - safely - out-ouf-bounds arrays in calchim.F90.
Was a problem for exacting debug mode.
--JVO

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.TITAN/libf/phytitan/calchim.F90

    r1908 r1924  
    462462           ENDIF
    463463
    464            DO i=1,nd_kim+1
    465 
    466               krpddecm1 =   (   krpd(idec  ,i,ialt  ,klat)   * (1.0-factalt)                   &
    467                               + krpd(idec  ,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    468                           * (   krpd(idec  ,i,ialt  ,klat+1) * (1.0-factalt)                   &
    469                               + krpd(idec  ,i,ialt+1,klat+1) * factalt       ) * factlat
     464           DO i=1,nd_kim+1 ! nd_kim+1 is dissociation of N2 by GCR
     465
    470466              krpddec   =   (   krpd(idec+1,i,ialt  ,klat)   * (1.0-factalt)                   &
    471467                              + krpd(idec+1,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    472468                          * (   krpd(idec+1,i,ialt  ,klat+1) * (1.0-factalt)                   &
    473469                              + krpd(idec+1,i,ialt+1,klat+1) * factalt       ) * factlat
    474               krpddecp1 =   (   krpd(idec+2,i,ialt  ,klat)   * (1.0-factalt)                   &
    475                               + krpd(idec+2,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    476                           * (   krpd(idec+2,i,ialt  ,klat+1) * (1.0-factalt)                   &
    477                               + krpd(idec+2,i,ialt+1,klat+1) * factalt       ) * factlat
    478 
    479               ! nd_kim+1 is dissociation of N2 by GCR
    480               if ( factdec.lt.0. ) then
     470
     471              if      ( factdec.lt.0. ) then
     472                 krpddecm1 =   (   krpd(idec  ,i,ialt  ,klat)   * (1.0-factalt)                   &
     473                                 + krpd(idec  ,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
     474                             * (   krpd(idec  ,i,ialt  ,klat+1) * (1.0-factalt)                   &
     475                                 + krpd(idec  ,i,ialt+1,klat+1) * factalt       ) * factlat
    481476                 krate(l,i) = krpddecm1 * abs(factdec) + krpddec   * ( 1.0 + factdec)
     477              else if ( factdec.gt.0. ) then
     478                 krpddecp1 =   (   krpd(idec+2,i,ialt  ,klat)   * (1.0-factalt)                   &
     479                                 + krpd(idec+2,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
     480                             * (   krpd(idec+2,i,ialt  ,klat+1) * (1.0-factalt)                   &
     481                                 + krpd(idec+2,i,ialt+1,klat+1) * factalt       ) * factlat
     482                 krate(l,i) = krpddecp1 * factdec      + krpddec   * ( 1.0 - factdec)
     483              else if ( factdec.eq.0. ) then
     484                 krate(l,i) = krpddec
    482485              endif
    483               if ( factdec.gt.0. ) then
    484                  krate(l,i) = krpddecp1 * factdec      + krpddec   * ( 1.0 - factdec)
    485               endif
    486               if ( factdec.eq.0. ) krate(l,i) = krpddec
    487486
    488487           ENDDO ! i=1,nd_kim+1
Note: See TracChangeset for help on using the changeset viewer.