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/DOM/domhgr.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/DOM/domhgr.F90

    r7646 r7698  
    4040   !!---------------------------------------------------------------------- 
    4141   !! NEMO/OPA 3.7 , NEMO Consortium (2016) 
    42    !! $Id$  
     42   !! $Id$ 
    4343   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    4444   !!---------------------------------------------------------------------- 
     
    117117      IF( iff == 0 ) THEN                 ! Coriolis parameter has not been defined  
    118118         IF(lwp) WRITE(numout,*) '          Coriolis parameter calculated on the sphere from gphif & gphit' 
    119          ff_f(:,:) = 2. * omega * SIN( rad * gphif(:,:) )     ! compute it on the sphere at f-point 
    120          ff_t(:,:) = 2. * omega * SIN( rad * gphit(:,:) )     !    -        -       -    at t-point 
     119!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     120         DO jj = 1, jpj 
     121            DO ji = 1, jpi 
     122               ff_f(ji,jj) = 2. * omega * SIN( rad * gphif(ji,jj) )     ! compute it on the sphere at f-point 
     123               ff_t(ji,jj) = 2. * omega * SIN( rad * gphit(ji,jj) )     !    -        -       -    at t-point 
     124            END DO 
     125         END DO 
    121126      ELSE 
    122127         IF( ln_read_cfg ) THEN 
     
    130135      !                             !==  associated horizontal metrics  ==! 
    131136      ! 
    132       r1_e1t(:,:) = 1._wp / e1t(:,:)   ;   r1_e2t (:,:) = 1._wp / e2t(:,:) 
    133       r1_e1u(:,:) = 1._wp / e1u(:,:)   ;   r1_e2u (:,:) = 1._wp / e2u(:,:) 
    134       r1_e1v(:,:) = 1._wp / e1v(:,:)   ;   r1_e2v (:,:) = 1._wp / e2v(:,:) 
    135       r1_e1f(:,:) = 1._wp / e1f(:,:)   ;   r1_e2f (:,:) = 1._wp / e2f(:,:) 
    136       ! 
    137       e1e2t (:,:) = e1t(:,:) * e2t(:,:)   ;   r1_e1e2t(:,:) = 1._wp / e1e2t(:,:) 
    138       e1e2f (:,:) = e1f(:,:) * e2f(:,:)   ;   r1_e1e2f(:,:) = 1._wp / e1e2f(:,:) 
     137!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     138      DO jj = 1, jpj 
     139         DO ji = 1, jpi 
     140            r1_e1t(ji,jj) = 1._wp / e1t(ji,jj)   ;   r1_e2t (ji,jj) = 1._wp / e2t(ji,jj) 
     141            r1_e1u(ji,jj) = 1._wp / e1u(ji,jj)   ;   r1_e2u (ji,jj) = 1._wp / e2u(ji,jj) 
     142            r1_e1v(ji,jj) = 1._wp / e1v(ji,jj)   ;   r1_e2v (ji,jj) = 1._wp / e2v(ji,jj) 
     143            r1_e1f(ji,jj) = 1._wp / e1f(ji,jj)   ;   r1_e2f (ji,jj) = 1._wp / e2f(ji,jj) 
     144            ! 
     145            e1e2t (ji,jj) = e1t(ji,jj) * e2t(ji,jj)   ;   r1_e1e2t(ji,jj) = 1._wp / e1e2t(ji,jj) 
     146            e1e2f (ji,jj) = e1f(ji,jj) * e2f(ji,jj)   ;   r1_e1e2f(ji,jj) = 1._wp / e1e2f(ji,jj) 
     147         END DO 
     148      END DO 
    139149      IF( ie1e2u_v == 0 ) THEN               ! u- & v-surfaces have not been defined 
    140150         IF(lwp) WRITE(numout,*) '          u- & v-surfaces calculated as e1 e2 product' 
    141          e1e2u (:,:) = e1u(:,:) * e2u(:,:)         ! compute them 
    142          e1e2v (:,:) = e1v(:,:) * e2v(:,:)  
     151!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     152         DO jj = 1, jpj 
     153            DO ji = 1, jpi 
     154               e1e2u (ji,jj) = e1u(ji,jj) * e2u(ji,jj)         ! compute them 
     155               e1e2v (ji,jj) = e1v(ji,jj) * e2v(ji,jj)  
     156            END DO 
     157         END DO 
    143158      ELSE 
    144159         IF(lwp) WRITE(numout,*) '          u- & v-surfaces have been read in "mesh_mask" file:' 
    145160         IF(lwp) WRITE(numout,*) '                     grid size reduction in strait(s) is used' 
    146161      ENDIF 
    147       r1_e1e2u(:,:) = 1._wp / e1e2u(:,:)     ! compute their invert in any cases 
    148       r1_e1e2v(:,:) = 1._wp / e1e2v(:,:) 
    149       !    
    150       e2_e1u(:,:) = e2u(:,:) / e1u(:,:) 
    151       e1_e2v(:,:) = e1v(:,:) / e2v(:,:) 
     162!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     163      DO jj = 1, jpj 
     164         DO ji = 1, jpi 
     165            r1_e1e2u(ji,jj) = 1._wp / e1e2u(ji,jj)     ! compute their invert in any cases 
     166            r1_e1e2v(ji,jj) = 1._wp / e1e2v(ji,jj) 
     167            !    
     168            e2_e1u(ji,jj) = e2u(ji,jj) / e1u(ji,jj) 
     169            e1_e2v(ji,jj) = e1v(ji,jj) / e2v(ji,jj) 
     170         END DO 
     171      END DO 
    152172      ! 
    153173      ! 
Note: See TracChangeset for help on using the changeset viewer.