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/SBC/sbcmod.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/SBC/sbcmod.F90

    r7646 r7698  
    8484      !!              - nsbc: type of sbc 
    8585      !!---------------------------------------------------------------------- 
     86      INTEGER ::   ji, jj, jn                        ! dummy loop indices 
    8687      INTEGER ::   ios, icpt                         ! local integer 
    8788      LOGICAL ::   ll_purecpl, ll_opa, ll_not_nemo   ! local logical 
     
    240241      IF( .NOT.ln_isf ) THEN        !* No ice-shelf in the domain : allocate and set to zero 
    241242         IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 
    242          fwfisf  (:,:)   = 0._wp   ;   risf_tsc  (:,:,:) = 0._wp 
    243          fwfisf_b(:,:)   = 0._wp   ;   risf_tsc_b(:,:,:) = 0._wp 
     243!$OMP PARALLEL 
     244!$OMP DO schedule(static) private(jj,ji) 
     245         DO jj = 1, jpj 
     246            DO ji = 1, jpi 
     247               fwfisf  (ji,jj)   = 0.0_wp ; fwfisf_b  (ji,jj)   = 0.0_wp 
     248            END DO 
     249         END DO 
     250!$OMP END DO NOWAIT 
     251         DO jn = 1, jpts 
     252!$OMP DO schedule(static) private(jj,ji) 
     253            DO jj = 1, jpj 
     254               DO ji = 1, jpi 
     255                  risf_tsc(ji,jj,jn) = 0.0_wp ; risf_tsc_b(ji,jj,jn) = 0.0_wp 
     256               END DO 
     257            END DO 
     258         END DO 
     259!$OMP END PARALLEL 
    244260      END IF 
    245261      IF( nn_ice == 0 ) THEN        !* No sea-ice in the domain : ice fraction is always zero 
    246          IF( nn_components /= jp_iam_opa )   fr_i(:,:) = 0._wp    ! except for OPA in SAS-OPA coupled case 
    247       ENDIF 
    248       ! 
    249       sfx   (:,:) = 0._wp           !* salt flux due to freezing/melting 
    250       fmmflx(:,:) = 0._wp           !* freezing minus melting flux 
    251  
    252       taum(:,:) = 0._wp             !* wind stress module (needed in GLS in case of reduced restart) 
     262         IF( nn_components /= jp_iam_opa ) THEN 
     263!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     264            DO jj = 1, jpj 
     265               DO ji = 1, jpi 
     266                  fr_i(ji,jj) = 0._wp    ! except for OPA in SAS-OPA coupled case 
     267               END DO 
     268            END DO 
     269         END IF 
     270      ENDIF 
     271      ! 
     272!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     273      DO jj = 1, jpj 
     274         DO ji = 1, jpi 
     275            sfx   (ji,jj) = 0._wp           !* salt flux due to freezing/melting 
     276            fmmflx(ji,jj) = 0._wp           !* freezing minus melting flux 
     277            taum  (ji,jj) = 0._wp           !* wind stress module (needed in GLS in case of reduced restart) 
     278         END DO 
     279      END DO 
    253280 
    254281      !                          ! Choice of the Surface Boudary Condition (set nsbc) 
     
    356383      !!---------------------------------------------------------------------- 
    357384      INTEGER, INTENT(in) ::   kt   ! ocean time step 
     385      INTEGER ::   ji, jj, jn       ! dummy loop indices 
    358386      ! 
    359387      LOGICAL ::   ll_sas, ll_opa   ! local logical 
     
    365393      IF( kt /= nit000 ) THEN                      !          Swap of forcing fields          ! 
    366394         !                                         ! ---------------------------------------- ! 
    367          utau_b(:,:) = utau(:,:)                         ! Swap the ocean forcing fields 
    368          vtau_b(:,:) = vtau(:,:)                         ! (except at nit000 where before fields 
    369          qns_b (:,:) = qns (:,:)                         !  are set at the end of the routine) 
    370          emp_b (:,:) = emp (:,:) 
    371          sfx_b (:,:) = sfx (:,:) 
     395!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     396         DO jj = 1, jpj 
     397            DO ji = 1, jpi 
     398               utau_b(ji,jj) = utau(ji,jj)                         ! Swap the ocean forcing fields 
     399               vtau_b(ji,jj) = vtau(ji,jj)                         ! (except at nit000 where before fields 
     400               qns_b (ji,jj) = qns (ji,jj)                         !  are set at the end of the routine) 
     401               emp_b (ji,jj) = emp (ji,jj) 
     402               sfx_b (ji,jj) = sfx (ji,jj) 
     403            END DO 
     404         END DO 
    372405         IF ( ln_rnf ) THEN 
    373             rnf_b    (:,:  ) = rnf    (:,:  ) 
    374             rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 
     406!$OMP PARALLEL 
     407!$OMP DO schedule(static) private(jj,ji) 
     408            DO jj = 1, jpj 
     409               DO ji = 1, jpi 
     410                  rnf_b    (ji,jj  ) = rnf    (ji,jj  ) 
     411               END DO 
     412            END DO 
     413!$OMP END DO NOWAIT 
     414            DO jn = 1, jpts 
     415!$OMP DO schedule(static) private(jj,ji) 
     416               DO jj = 1, jpj 
     417                  DO ji = 1, jpi 
     418                     rnf_tsc_b(ji,jj,jn) = rnf_tsc(ji,jj,jn) 
     419                  END DO 
     420               END DO 
     421            END DO 
     422!$OMP END PARALLEL 
    375423         ENDIF 
    376424      ENDIF 
     
    401449      END SELECT 
    402450      IF ( ln_wave .AND. ln_tauoc) THEN                                 ! Wave stress subctracted 
    403             utau(:,:) = utau(:,:)*tauoc_wave(:,:) 
    404             vtau(:,:) = vtau(:,:)*tauoc_wave(:,:) 
    405             taum(:,:) = taum(:,:)*tauoc_wave(:,:) 
     451!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     452         DO jj = 1, jpj 
     453            DO ji = 1, jpi 
     454               utau(ji,jj) = utau(ji,jj)*tauoc_wave(ji,jj) 
     455               vtau(ji,jj) = vtau(ji,jj)*tauoc_wave(ji,jj) 
     456               taum(ji,jj) = taum(ji,jj)*tauoc_wave(ji,jj) 
     457            END DO 
     458         END DO 
    406459      ! 
    407460            SELECT CASE( nsbc ) 
     
    457510               CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b )  ! before salt flux (T-point) 
    458511            ELSE 
    459                sfx_b (:,:) = sfx(:,:) 
     512!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     513               DO jj = 1, jpj 
     514                  DO ji = 1, jpi 
     515                     sfx_b (ji,jj) = sfx(ji,jj) 
     516                  END DO 
     517               END DO 
    460518            ENDIF 
    461519         ELSE                                                   !* no restart: set from nit000 values 
    462520            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields set to nit000' 
    463             utau_b(:,:) = utau(:,:) 
    464             vtau_b(:,:) = vtau(:,:) 
    465             qns_b (:,:) = qns (:,:) 
    466             emp_b (:,:) = emp (:,:) 
    467             sfx_b (:,:) = sfx (:,:) 
     521!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     522            DO jj = 1, jpj 
     523               DO ji = 1, jpi 
     524                  utau_b(ji,jj) = utau(ji,jj) 
     525                  vtau_b(ji,jj) = vtau(ji,jj) 
     526                  qns_b (ji,jj) = qns (ji,jj) 
     527                  emp_b (ji,jj) = emp(ji,jj) 
     528                  sfx_b (ji,jj) = sfx(ji,jj) 
     529               END DO 
     530            END DO 
    468531         ENDIF 
    469532      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.