Ignore:
Timestamp:
Jun 20, 2018, 4:10:30 PM (7 years ago)
Author:
jvatant
Message:

Optimization for chemistry firstcall C routine disso.c
-> Row-major-friendly declaration and nesting of loops for huge array krpd
-> ~factor 4 for this routine who was ~ 1/2 of firstcall -> ~ gain ~5% total run-time for standard runs
--JVO

File:
1 edited

Legend:

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

    r1947 r1950  
    171171     
    172172     ALLOCATE(krate(nlaykim_tot,nr_kim))
    173      ALLOCATE(krpd(15,nd_kim+1,nlrt_kim,nlat_actfluxes))
     173     ALLOCATE(krpd(nd_kim+1,nlrt_kim,15,nlat_actfluxes))
    174174
    175175     ALLOCATE(nom_prod(nkim))
     
    420420           DO i=1,nd_kim+1 ! nd_kim+1 is dissociation of N2 by GCR
    421421
    422                  krpddec   =   (   krpd(idec+1,i,ialt  ,klat)   * (1.0-factalt)                   &
    423                                  + krpd(idec+1,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    424                              + (   krpd(idec+1,i,ialt  ,klat+1) * (1.0-factalt)                   &
    425                                  + krpd(idec+1,i,ialt+1,klat+1) * factalt       ) * factlat
     422                 krpddec   =   (   krpd(i,ialt  ,idec+1,klat)   * (1.0-factalt)                   &
     423                                 + krpd(i,ialt+1,idec+1,klat)   * factalt       ) * (1.0-factlat) &
     424                             + (   krpd(i,ialt  ,idec+1,klat+1) * (1.0-factalt)                   &
     425                                 + krpd(i,ialt+1,idec+1,klat+1) * factalt       ) * factlat
    426426
    427427              if      ( factdec.lt.0. ) then
    428                  krpddecm1 =   (   krpd(idec  ,i,ialt  ,klat)   * (1.0-factalt)                   &
    429                                  + krpd(idec  ,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    430                              + (   krpd(idec  ,i,ialt  ,klat+1) * (1.0-factalt)                   &
    431                                  + krpd(idec  ,i,ialt+1,klat+1) * factalt       ) * factlat
     428                 krpddecm1 =   (   krpd(i,ialt  ,idec  ,klat)   * (1.0-factalt)                   &
     429                                 + krpd(i,ialt+1,idec  ,klat)   * factalt       ) * (1.0-factlat) &
     430                             + (   krpd(i,ialt  ,idec  ,klat+1) * (1.0-factalt)                   &
     431                                 + krpd(i,ialt+1,idec  ,klat+1) * factalt       ) * factlat
    432432                 krate(l,i) = krpddecm1 * abs(factdec) + krpddec   * ( 1.0 + factdec)
    433433              else if ( factdec.gt.0. ) then
    434                  krpddecp1 =   (   krpd(idec+2,i,ialt  ,klat)   * (1.0-factalt)                   &
    435                                  + krpd(idec+2,i,ialt+1,klat)   * factalt       ) * (1.0-factlat) &
    436                              + (   krpd(idec+2,i,ialt  ,klat+1) * (1.0-factalt)                   &
    437                                  + krpd(idec+2,i,ialt+1,klat+1) * factalt       ) * factlat
     434                 krpddecp1 =   (   krpd(i,ialt  ,idec+2,klat)   * (1.0-factalt)                   &
     435                                 + krpd(i,ialt+1,idec+2,klat)   * factalt       ) * (1.0-factlat) &
     436                             + (   krpd(i,ialt  ,idec+2,klat+1) * (1.0-factalt)                   &
     437                                 + krpd(i,ialt+1,idec+2,klat+1) * factalt       ) * factlat
    438438                 krate(l,i) = krpddecp1 * factdec      + krpddec   * ( 1.0 - factdec)
    439439              else if ( factdec.eq.0. ) then
Note: See TracChangeset for help on using the changeset viewer.