New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 7698 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90 – NEMO

Ignore:
Timestamp:
2017-02-18T10:02:03+01:00 (7 years ago)
Author:
mocavero
Message:

update trunk with OpenMP parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r7646 r7698  
    128128      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend 
    129129         CALL wrk_alloc( jpi,jpj,jpk,   ztrdt )  
    130          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     130!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     131            DO jk = 1, jpk 
     132               DO jj = 1, jpj 
     133                  DO ji = 1, jpi 
     134                     ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     135                  END DO 
     136               END DO 
     137            END DO 
    131138      ENDIF 
    132139      ! 
     
    142149         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    143150            z1_2 = 1._wp 
    144             qsr_hc_b(:,:,:) = 0._wp 
     151!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     152            DO jk = 1, jpk 
     153               DO jj = 1, jpj 
     154                  DO ji = 1, jpi 
     155                     qsr_hc_b(ji,jj,jk) = 0._wp 
     156                  END DO 
     157               END DO 
     158            END DO 
    145159         ENDIF 
    146160      ELSE                             !==  Swap of qsr heat content  ==! 
    147161         z1_2 = 0.5_wp 
    148          qsr_hc_b(:,:,:) = qsr_hc(:,:,:) 
     162!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     163            DO jk = 1, jpk 
     164               DO jj = 1, jpj 
     165                  DO ji = 1, jpi 
     166                     qsr_hc_b(ji,jj,jk) = qsr_hc(ji,jj,jk) 
     167                  END DO 
     168               END DO 
     169            END DO 
    149170      ENDIF 
    150171      ! 
     
    155176      CASE( np_BIO )                   !==  bio-model fluxes  ==! 
    156177         ! 
     178!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    157179         DO jk = 1, nksr 
    158             qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
     180            DO jj = 1, jpj 
     181               DO ji = 1, jpi 
     182                  qsr_hc(ji,jj,jk) = r1_rau0_rcp * ( etot3(ji,jj,jk) - etot3(ji,jj,jk+1) ) 
     183               END DO 
     184             END DO 
    159185         END DO 
    160186         ! 
     
    166192         IF( nqsr == np_RGBc ) THEN          !*  Variable Chlorophyll 
    167193            CALL fld_read( kt, 1, sf_chl )         ! Read Chl data and provides it at the current time step 
     194!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zchl,zCtot,zze,zpsi,zlogc,zlogc2,zlogc3,zCb,zCmax,zpsimax,zdelpsi,zCze) 
    168195            DO jk = 1, nksr + 1 
    169196               DO jj = 2, jpjm1                       ! Separation in R-G-B depending of the surface Chl 
     
    190217            END DO 
    191218         ELSE                                !* constant chrlorophyll 
     219!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    192220           DO jk = 1, nksr + 1 
    193               zchl3d(:,:,jk) = 0.05  
     221              DO jj = 1, jpj 
     222                 DO ji = 1, jpi 
     223                    zchl3d(ji,jj,jk) = 0.05 
     224                 ENDDO 
     225              ENDDO 
    194226            ENDDO 
    195227         ENDIF 
    196228         ! 
    197229         zcoef  = ( 1. - rn_abs ) / 3._wp    !* surface equi-partition in R-G-B 
     230!$OMP PARALLEL 
     231!$OMP DO schedule(static) private(jj,ji) 
    198232         DO jj = 2, jpjm1 
    199233            DO ji = fs_2, fs_jpim1 
     
    205239            END DO 
    206240         END DO 
     241!$OMP END DO NOWAIT 
    207242         ! 
    208243         DO jk = 2, nksr+1                   !* interior equi-partition in R-G-B depending of vertical profile of Chl 
     244!$OMP DO schedule(static) private(jj,ji,zchl,irgb) 
    209245            DO jj = 2, jpjm1 
    210246               DO ji = fs_2, fs_jpim1 
     
    217253            END DO 
    218254 
     255!$OMP DO schedule(static) private(jj,ji,zc0,zc1,zc2,zc3) 
    219256            DO jj = 2, jpjm1 
    220257               DO ji = fs_2, fs_jpim1 
     
    232269         END DO 
    233270         ! 
     271!$OMP DO schedule(static) private(jk,jj,ji) 
    234272         DO jk = 1, nksr                     !* now qsr induced heat content 
    235273            DO jj = 2, jpjm1 
     
    239277            END DO 
    240278         END DO 
     279!$OMP END PARALLEL 
    241280         ! 
    242281         CALL wrk_dealloc( jpi,jpj,        zekb, zekg, zekr        )  
     
    247286         zz0 =        rn_abs   * r1_rau0_rcp      ! surface equi-partition in 2-bands 
    248287         zz1 = ( 1. - rn_abs ) * r1_rau0_rcp 
     288!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zc0,zc1) 
    249289         DO jk = 1, nksr                          ! solar heat absorbed at T-point in the top 400m  
    250290            DO jj = 2, jpjm1 
     
    260300      ! 
    261301      !                          !-----------------------------! 
     302!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    262303      DO jk = 1, nksr            !  update to the temp. trend  ! 
    263304         DO jj = 2, jpjm1        !-----------------------------! 
     
    270311      ! 
    271312      IF( ln_qsr_ice ) THEN      ! sea-ice: store the 1st ocean level attenuation coefficient 
     313!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    272314         DO jj = 2, jpjm1  
    273315            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    284326         CALL wrk_alloc( jpi,jpj,jpk,   zetot ) 
    285327         ! 
    286          zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
     328!$OMP PARALLEL 
     329!$OMP DO schedule(static) private(jj,ji) 
     330         DO jj = 1, jpj  
     331            DO ji = 1, jpi   ! vector opt. 
     332               zetot(ji,jj,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
     333            END DO 
     334         END DO 
    287335         DO jk = nksr, 1, -1 
    288             zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) / r1_rau0_rcp 
     336!$OMP DO schedule(static) private(jj,ji) 
     337            DO jj = 1, jpj  
     338               DO ji = 1, jpi   ! vector opt. 
     339                  zetot(ji,jj,jk) = zetot(ji,jj,jk+1) + qsr_hc(ji,jj,jk) / r1_rau0_rcp 
     340               END DO 
     341            END DO 
    289342         END DO          
     343!$OMP END PARALLEL 
    290344         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation 
    291345         ! 
     
    299353      ! 
    300354      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    301          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     355!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     356         DO jk = 1, jpk 
     357            DO jj = 1, jpj 
     358               DO ji = 1, jpi 
     359                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     360               END DO 
     361            END DO 
     362         END DO 
    302363         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    303364         CALL wrk_dealloc( jpi,jpj,jpk,   ztrdt )  
     
    426487      END SELECT 
    427488      ! 
    428       qsr_hc(:,:,:) = 0._wp     ! now qsr heat content set to zero where it will not be computed 
     489!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     490      DO jk = 1, jpk 
     491         DO jj = 1, jpj 
     492            DO ji = 1, jpi 
     493               qsr_hc(ji,jj,jk) = 0._wp     ! now qsr heat content set to zero where it will not be computed 
     494            END DO 
     495         END DO 
     496      END DO 
    429497      ! 
    430498      ! 1st ocean level attenuation coefficient (used in sbcssm) 
     
    432500         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev  ) 
    433501      ELSE 
    434          fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
     502!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     503         DO jj = 1, jpj 
     504            DO ji = 1, jpi 
     505               fraqsr_1lev(ji,jj) = 1._wp   ! default : no penetration 
     506            END DO 
     507         END DO 
    435508      ENDIF 
    436509      ! 
Note: See TracChangeset for help on using the changeset viewer.