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 7508 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90 – NEMO

Ignore:
Timestamp:
2016-12-19T13:15:59+01:00 (7 years ago)
Author:
mocavero
Message:

changes on code duplication and workshare construct

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r7037 r7508  
    129129 
    130130!$OMP PARALLEL 
    131 !$OMP WORKSHARE 
    132       zqnsoce(:,:) = qns(:,:) 
    133 !$OMP END WORKSHARE NOWAIT 
     131!$OMP DO schedule(static) private(jj, ji) 
     132      DO jj = 1, jpj 
     133         DO ji = 1, jpi 
     134      zqnsoce(ji,jj) = qns(ji,jj) 
     135         END DO 
     136      END DO 
     137!$OMP END DO NOWAIT 
    134138!$OMP DO schedule(static) private(jj,ji,zinda,ifvt,i1mfr,idfr,iflt,ial,iadv,ifral,ifrdv,zqsr,zqns,zqhc,zemp,zemp_snw,zfmm,zfsalt,zcd)  
    135139      DO jj = 1, jpj 
     
    239243      !                                !------------------------------------------! 
    240244      IF( nn_ice_embd /= 0 ) THEN      ! embedded sea-ice (mass required) 
    241 !$OMP PARALLEL WORKSHARE 
    242          snwice_mass_b(:,:) = snwice_mass(:,:)                  ! save mass from the previous ice time step 
     245!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     246      DO jj = 1, jpj 
     247         DO ji = 1, jpi 
     248         snwice_mass_b(ji,jj) = snwice_mass(ji,jj)                  ! save mass from the previous ice time step 
    243249         !                                                      ! new mass per unit area 
    244          snwice_mass  (:,:) = tms(:,:) * ( rhosn * hsnif(:,:) + rhoic * hicif(:,:)  ) * ( 1.0 - frld(:,:) ) 
     250         snwice_mass  (ji,jj) = tms(ji,jj) * ( rhosn * hsnif(ji,jj) + rhoic * hicif(ji,jj)  ) * ( 1.0 - frld(ji,jj) ) 
    245251         !                                                      ! time evolution of snow+ice mass 
    246          snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / rdt_ice 
    247 !$OMP END PARALLEL WORKSHARE 
     252         snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) / rdt_ice 
     253         END DO 
     254      END DO 
    248255      ENDIF 
    249256 
     
    261268 
    262269      IF( ln_cpl) THEN 
    263 !$OMP PARALLEL WORKSHARE 
    264          tn_ice(:,:,1) = sist(:,:)          ! sea-ice surface temperature        
    265          ht_i(:,:,1) = hicif(:,:) 
    266          ht_s(:,:,1) = hsnif(:,:) 
    267          a_i(:,:,1) = fr_i(:,:) 
    268 !$OMP END PARALLEL WORKSHARE 
     270!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     271         DO jj = 1, jpj 
     272            DO ji = 1, jpi 
     273               tn_ice(ji,jj,1) = sist(ji,jj)          ! sea-ice surface temperature        
     274               ht_i(ji,jj,1) = hicif(ji,jj) 
     275               ht_s(ji,jj,1) = hsnif(ji,jj) 
     276               a_i(ji,jj,1) = fr_i(ji,jj) 
     277            END DO 
     278         END DO 
    269279         !                                  ! Computation of snow/ice and ocean albedo 
    270280         CALL albedo_ice( tn_ice, ht_i, ht_s, zalbp, zalb ) 
    271 !$OMP PARALLEL WORKSHARE 
    272          alb_ice(:,:,1) =  0.5 * ( zalbp(:,:,1) + zalb (:,:,1) )   ! Ice albedo (mean clear and overcast skys) 
    273 !$OMP END PARALLEL WORKSHARE 
     281!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     282      DO jj = 1, jpj 
     283         DO ji = 1, jpi 
     284            alb_ice(ji,jj,1) =  0.5 * ( zalbp(ji,jj,1) + zalb (ji,jj,1) )   ! Ice albedo (mean clear and overcast skys) 
     285         END DO 
     286      END DO 
    274287         IF( iom_use('icealb_cea' ) )   CALL iom_put( 'icealb_cea', alb_ice(:,:,1) * fr_i(:,:) )  ! ice albedo 
    275288      ENDIF 
     
    355368            CALL lbc_lnk( taum, 'T', 1. ) 
    356369            ! 
    357 !$OMP PARALLEL WORKSHARE 
    358             utau_oce(:,:) = utau(:,:)                    !* save the air-ocean stresses at ice time-step 
    359             vtau_oce(:,:) = vtau(:,:) 
    360 !$OMP END PARALLEL WORKSHARE 
     370!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     371      DO jj = 1, jpj 
     372         DO ji = 1, jpi 
     373            utau_oce(ji,jj) = utau(ji,jj)                    !* save the air-ocean stresses at ice time-step 
     374            vtau_oce(ji,jj) = vtau(ji,jj) 
     375         END DO 
     376      END DO 
    361377            ! 
    362378         ENDIF 
     
    418434            CALL lbc_lnk( taum, 'T', 1. )   ;   CALL lbc_lnk( tmod_io, 'T', 1. ) 
    419435            ! 
    420 !$OMP PARALLEL WORKSHARE 
    421             utau_oce(:,:) = utau(:,:)                 !* save the air-ocean stresses at ice time-step 
    422             vtau_oce(:,:) = vtau(:,:) 
    423 !$OMP END PARALLEL WORKSHARE 
     436!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     437            DO jj = 1, jpj 
     438               DO ji = 1, jpi 
     439                  utau_oce(ji,jj) = utau(ji,jj)                 !* save the air-ocean stresses at ice time-step 
     440                  vtau_oce(ji,jj) = vtau(ji,jj) 
     441               END DO 
     442            END DO 
    424443            ! 
    425444         ENDIF 
     
    475494      r1_rdtice = 1._wp / rdt_ice 
    476495      ! 
    477 !$OMP PARALLEL WORKSHARE 
    478       soce_0(:,:) = soce                     ! constant SSS and ice salinity used in levitating sea-ice case 
    479       sice_0(:,:) = sice 
    480 !$OMP END PARALLEL WORKSHARE 
     496!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     497      DO jj = 1, jpj 
     498         DO ji = 1, jpi 
     499            soce_0(ji,jj) = soce                     ! constant SSS and ice salinity used in levitating sea-ice case 
     500            sice_0(ji,jj) = sice 
     501         END DO 
     502      END DO 
    481503      ! 
    482504      IF( cp_cfg == "orca" ) THEN            ! decrease ocean & ice reference salinities in the Baltic sea  
     
    489511      !                                      ! embedded sea ice 
    490512      IF( nn_ice_embd /= 0 ) THEN            ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 
    491 !$OMP PARALLEL WORKSHARE 
    492          snwice_mass  (:,:) = tms(:,:) * ( rhosn * hsnif(:,:) + rhoic * hicif(:,:)  ) * ( 1.0 - frld(:,:) ) 
    493          snwice_mass_b(:,:) = snwice_mass(:,:) 
    494 !$OMP END PARALLEL WORKSHARE 
     513!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     514         DO jj = 1, jpj 
     515            DO ji = 1, jpi 
     516               snwice_mass  (ji,jj) = tms(ji,jj) * ( rhosn * hsnif(ji,jj) + rhoic * hicif(ji,jj)  ) * ( 1.0 - frld(ji,jj) ) 
     517               snwice_mass_b(ji,jj) = snwice_mass(ji,jj) 
     518            END DO 
     519         END DO 
    495520      ELSE 
    496 !$OMP PARALLEL WORKSHARE 
    497          snwice_mass  (:,:) = 0.e0           ! no mass exchanges 
    498          snwice_mass_b(:,:) = 0.e0           ! no mass exchanges 
    499          snwice_fmass (:,:) = 0.e0           ! no mass exchanges 
    500 !$OMP END PARALLEL WORKSHARE 
     521!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     522      DO jj = 1, jpj 
     523         DO ji = 1, jpi 
     524         snwice_mass  (ji,jj) = 0.e0           ! no mass exchanges 
     525         snwice_mass_b(ji,jj) = 0.e0           ! no mass exchanges 
     526         snwice_fmass (ji,jj) = 0.e0           ! no mass exchanges 
     527         END DO 
     528      END DO 
    501529      ENDIF 
    502530      IF( nn_ice_embd == 2 .AND.          &  ! full embedment (case 2) & no restart :  
    503531         &   .NOT.ln_rstart ) THEN           ! deplete the initial ssh below sea-ice area 
    504 !$OMP PARALLEL WORKSHARE 
    505          sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 
    506          sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 
    507 !$OMP END PARALLEL WORKSHARE 
     532!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     533      DO jj = 1, jpj 
     534         DO ji = 1, jpi 
     535         sshn(ji,jj) = sshn(ji,jj) - snwice_mass(ji,jj) * r1_rau0 
     536         sshb(ji,jj) = sshb(ji,jj) - snwice_mass(ji,jj) * r1_rau0 
     537         END DO 
     538      END DO 
    508539!!gm I really don't like this staff here...  Find a way to put that elsewhere or differently 
    509540!!gm 
     
    516547               e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
    517548            end do 
    518 !$OMP WORKSHARE 
    519             e3t_a(:,:,:) = e3t_b(:,:,:) 
    520 !$OMP END WORKSHARE NOWAIT 
     549!$OMP DO schedule(static) private(jk, jj, ji) 
     550            DO jk = 1, jpk 
     551               DO jj = 1, jpj 
     552                  DO ji = 1, jpi 
     553                     e3t_a(ji,jj,jk) = e3t_b(ji,jj,jk) 
     554                  END DO 
     555               END DO 
     556            END DO 
    521557!$OMP END PARALLEL 
    522558            ! Reconstruction of all vertical scale factors at now and before time steps 
     
    535571            !        ! t- and w- points depth 
    536572!$OMP PARALLEL 
    537 !$OMP WORKSHARE 
    538             gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    539             gdepw_n(:,:,1) = 0.0_wp 
    540             gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
    541 !$OMP END WORKSHARE 
     573!$OMP DO schedule(static) private(jj, ji) 
     574            DO jj = 1, jpj 
     575               DO ji = 1, jpi 
     576                  gdept_n(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) 
     577                  gdepw_n(ji,jj,1) = 0.0_wp 
     578                  gde3w_n(ji,jj,1) = gdept_n(ji,jj,1) - sshn(ji,jj) 
     579               END DO 
     580            END DO 
    542581            DO jk = 2, jpk 
    543582!$OMP DO schedule(static) private(jj,ji) 
Note: See TracChangeset for help on using the changeset viewer.