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/DIA/diaar5.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/DIA/diaar5.F90

    r7646 r7698  
    8989         CALL wrk_alloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
    9090         CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn                 ) 
    91          zarea_ssh(:,:) = area(:,:) * sshn(:,:) 
     91!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     92         DO jj = 1, jpj 
     93            DO ji = 1, jpi 
     94               zarea_ssh(ji,jj) = area(ji,jj) * sshn(ji,jj) 
     95            END DO 
     96         END DO 
    9297      ENDIF 
    9398      ! 
     
    106111      IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) THEN     
    107112         !                      
    108          ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem)                    ! thermosteric ssh 
    109          ztsn(:,:,:,jp_sal) = sn0(:,:,:) 
     113!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     114         DO jk = 1, jpk 
     115            DO jj = 1, jpj 
     116               DO ji = 1, jpi 
     117                  ztsn(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem)                    ! thermosteric ssh 
     118                  ztsn(ji,jj,jk,jp_sal) = sn0(ji,jj,jk) 
     119               END DO 
     120            END DO 
     121         END DO 
    110122         CALL eos( ztsn, zrhd, gdept_n(:,:,:) )                       ! now in situ density using initial salinity 
    111123         ! 
    112          zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     124!$OMP PARALLEL 
     125!$OMP DO schedule(static) private(jj, ji) 
     126         DO jj = 1, jpj 
     127            DO ji = 1, jpi 
     128               zbotpres(ji,jj) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     129            END DO 
     130         END DO 
    113131         DO jk = 1, jpkm1 
    114             zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
    115          END DO 
     132!$OMP DO schedule(static) private(jj, ji) 
     133            DO jj = 1, jpj 
     134               DO ji = 1, jpi 
     135                  zbotpres(ji,jj) = zbotpres(ji,jj) + e3t_n(ji,jj,jk) * zrhd(ji,jj,jk) 
     136               END DO 
     137            END DO 
     138         END DO 
     139!$OMP END PARALLEL 
    116140         IF( ln_linssh ) THEN 
    117141            IF( ln_isfcav ) THEN 
     142!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    118143               DO ji = 1, jpi 
    119144                  DO jj = 1, jpj 
     
    122147               END DO 
    123148            ELSE 
    124                zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     149!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     150               DO ji = 1, jpi 
     151                  DO jj = 1, jpj 
     152                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,1) 
     153                  END DO 
     154               END DO 
    125155            END IF 
    126156!!gm 
     
    128158!!gm 
    129159         END IF 
     160         ! 
     161         zarho = SUM( area(:,:) * zbotpres(:,:) ) 
    130162         !                                          
    131          zarho = SUM( area(:,:) * zbotpres(:,:) )  
    132163         IF( lk_mpp )   CALL mpp_sum( zarho ) 
    133164         zssh_steric = - zarho / area_tot 
     
    136167         !                                         ! steric sea surface height 
    137168         CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) )                 ! now in situ and potential density 
    138          zrhop(:,:,jpk) = 0._wp 
     169!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     170         DO jj = 1, jpj 
     171            DO ji = 1, jpi 
     172               zrhop(ji,jj,jpk) = 0._wp 
     173            END DO 
     174         END DO 
    139175         CALL iom_put( 'rhop', zrhop ) 
    140176         ! 
    141          zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     177!$OMP PARALLEL 
     178!$OMP DO schedule(static) private(jj, ji) 
     179         DO jj = 1, jpj 
     180            DO ji = 1, jpi 
     181               zbotpres(ji,jj) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     182            END DO 
     183         END DO 
    142184         DO jk = 1, jpkm1 
    143             zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
     185!$OMP DO schedule(static) private(jj, ji) 
     186            DO jj = 1, jpj 
     187               DO ji = 1, jpi 
     188                  zbotpres(ji,jj) = zbotpres(ji,jj) + e3t_n(ji,jj,jk) * zrhd(ji,jj,jk) 
     189               END DO 
     190            END DO 
    144191         END DO 
    145192         IF( ln_linssh ) THEN 
    146193            IF ( ln_isfcav ) THEN 
     194!$OMP DO schedule(static) private(jj, ji) 
    147195               DO ji = 1,jpi 
    148196                  DO jj = 1,jpj 
     
    151199               END DO 
    152200            ELSE 
    153                zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     201!$OMP DO schedule(static) private(jj, ji) 
     202               DO jj = 1, jpj 
     203                  DO ji = 1, jpi 
     204                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,1) 
     205                  END DO 
     206               END DO 
    154207            END IF 
    155208         END IF 
     209!$OMP END PARALLEL 
    156210         !     
    157          zarho = SUM( area(:,:) * zbotpres(:,:) )  
     211         zarho = SUM( area(:,:) * zbotpres(:,:) ) 
    158212         IF( lk_mpp )   CALL mpp_sum( zarho ) 
    159213         zssh_steric = - zarho / area_tot 
     
    162216         !                                         ! ocean bottom pressure 
    163217         zztmp = rau0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
    164          zbotpres(:,:) = zztmp * ( zbotpres(:,:) + sshn(:,:) + thick0(:,:) ) 
     218!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     219         DO jj = 1, jpj 
     220            DO ji = 1, jpi 
     221               zbotpres(ji,jj) = zztmp * ( zbotpres(ji,jj) + sshn(ji,jj) + thick0(ji,jj) ) 
     222            END DO 
     223         END DO 
    165224         CALL iom_put( 'botpres', zbotpres ) 
    166225         ! 
     
    213272      ! work is not being done against stratification 
    214273          CALL wrk_alloc( jpi, jpj, zpe ) 
    215           zpe(:,:) = 0._wp 
     274!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     275          DO jj = 1, jpj 
     276             DO ji = 1, jpi 
     277                zpe(ji,jj) = 0._wp 
     278             END DO 
     279          END DO 
    216280          IF( lk_zdfddm ) THEN 
     281!$OMP PARALLEL DO schedule(static) private(ji,jj,jk,zrw,zaw,zbw) 
    217282             DO ji=1,jpi 
    218283                DO jj=1,jpj 
     
    232297             ENDDO 
    233298          ELSE 
     299!$OMP PARALLEL DO schedule(static) private(ji,jj,jk) 
    234300             DO ji = 1, jpi 
    235301                DO jj = 1, jpj 
     
    323389      INTEGER  ::   ik 
    324390      INTEGER  ::   ji, jj, jk  ! dummy loop indices 
    325       REAL(wp) ::   zztmp   
     391      REAL(wp) ::   zztmp, zsum  
    326392      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zsaldta   ! Jan/Dec levitus salinity 
    327393      ! 
     
    341407         IF( dia_ar5_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 
    342408 
    343          area(:,:) = e1e2t(:,:) * tmask_i(:,:) 
     409!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     410         DO jj = 1, jpj 
     411            DO ji = 1, jpi 
     412               area(ji,jj) = e1e2t(ji,jj) * tmask_i(ji,jj) 
     413            END DO 
     414         END DO 
    344415 
    345416         area_tot = SUM( area(:,:) )   ;   IF( lk_mpp )   CALL mpp_sum( area_tot ) 
    346417 
    347418         vol0        = 0._wp 
    348          thick0(:,:) = 0._wp 
     419!$OMP PARALLEL 
     420!$OMP DO schedule(static) private(jj, ji) 
     421         DO jj = 1, jpj 
     422            DO ji = 1, jpi 
     423               thick0(ji,jj) = 0._wp 
     424            END DO 
     425         END DO 
    349426         DO jk = 1, jpkm1 
    350             vol0        = vol0        + SUM( area (:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) ) 
    351             thick0(:,:) = thick0(:,:) +    tmask_i(:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) 
    352          END DO 
     427!$OMP DO schedule(static) private(jj, ji, zsum) 
     428            DO jj = 1, jpj 
     429               DO ji = 1, jpi 
     430                  zsum = area (ji,jj) * tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 
     431               END DO 
     432            END DO 
     433            vol0        = vol0        + zsum 
     434!$OMP DO schedule(static) private(jj, ji) 
     435            DO jj = 1, jpj 
     436               DO ji = 1, jpi 
     437                  thick0(ji,jj) = thick0(ji,jj) + tmask_i(ji,jj) * tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 
     438               END DO 
     439            END DO 
     440         END DO 
     441!$OMP END PARALLEL 
    353442         IF( lk_mpp )   CALL mpp_sum( vol0 ) 
    354443 
     
    358447         CALL iom_close( inum ) 
    359448 
    360          sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) )         
    361          sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 
     449!$OMP PARALLEL 
     450!$OMP DO schedule(static) private(jk, jj, ji) 
     451         DO jk = 1, jpk 
     452            DO jj = 1, jpj 
     453               DO ji = 1, jpi 
     454                  sn0(ji,jj,jk) = 0.5_wp * ( zsaldta(ji,jj,jk,1) + zsaldta(ji,jj,jk,2) )         
     455                  sn0(ji,jj,jk) = sn0(ji,jj,jk) * tmask(ji,jj,jk) 
     456               END DO 
     457            END DO 
     458         END DO 
    362459         IF( ln_zps ) THEN               ! z-coord. partial steps 
     460!$OMP DO schedule(static) private(jj, ji, ik, zztmp) 
    363461            DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
    364462               DO ji = 1, jpi 
     
    371469            END DO 
    372470         ENDIF 
     471!$OMP END PARALLEL 
    373472         ! 
    374473         CALL wrk_dealloc( jpi , jpj , jpk, jpts, zsaldta ) 
Note: See TracChangeset for help on using the changeset viewer.