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 6748 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2016-06-28T11:53:56+02:00 (8 years ago)
Author:
mocavero
Message:

GYRE hybrid parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r6492 r6748  
    325325! need to be like this to compute the pressure gradient with ISF. If not, level beneath the ISF are not aligned (sum(e3t) /= depth) 
    326326! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively 
     327!$OMP PARALLEL DO schedule(static) private(jk) 
    327328         DO jk = 1, jpkm1 
    328329            e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk)  
    329330         END DO 
    330331         e3t_1d(jpk) = e3t_1d(jpk-1)   ! we don't care because this level is masked in NEMO 
    331  
     332!$OMP PARALLEL DO schedule(static) private(jk) 
    332333         DO jk = 2, jpk 
    333334            e3w_1d(jk) = gdept_1d(jk) - gdept_1d(jk-1)  
     
    420421            IF( rn_bathy > 0.01 ) THEN  
    421422               IF(lwp) WRITE(numout,*) '         Depth = rn_bathy read in namelist' 
     423!$OMP PARALLEL WORKSHARE 
    422424               zdta(:,:) = rn_bathy 
     425!$OMP END PARALLEL WORKSHARE 
    423426               IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ): idta()=jpk 
     427!$OMP PARALLEL WORKSHARE 
    424428                  idta(:,:) = jpkm1 
     429!$OMP END PARALLEL WORKSHARE 
    425430               ELSE                                                ! z-coordinate (zco or zps): step-like topography 
     431!$OMP PARALLEL WORKSHARE 
    426432                  idta(:,:) = jpkm1 
     433!$OMP END PARALLEL WORKSHARE 
    427434                  DO jk = 1, jpkm1 
    428435                     WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
     
    431438            ELSE 
    432439               IF(lwp) WRITE(numout,*) '         Depth = depthw(jpkm1)' 
     440!$OMP PARALLEL WORKSHARE 
    433441               idta(:,:) = jpkm1                            ! before last level 
    434442               zdta(:,:) = gdepw_1d(jpk)                     ! last w-point depth 
     443!$OMP END PARALLEL WORKSHARE 
    435444               h_oce     = gdepw_1d(jpk) 
    436445            ENDIF 
     
    449458            IF(lwp) WRITE(numout,*) '            background ocean depth = ', h_oce  , ' meters' 
    450459            !                                         
     460!$OMP PARALLEL DO schedule(static) private(jj, ji, zi, zj) 
    451461            DO jj = 1, jpjdta                              ! zdta : 
    452462               DO ji = 1, jpidta 
     
    458468            !                                              ! idta : 
    459469            IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ): idta()=jpk 
     470!$OMP PARALLEL WORKSHARE 
    460471               idta(:,:) = jpkm1 
     472!$OMP END PARALLEL WORKSHARE 
    461473            ELSE                                                ! z-coordinate (zco or zps): step-like topography 
     474!$OMP PARALLEL WORKSHARE 
    462475               idta(:,:) = jpkm1 
     476!$OMP END PARALLEL WORKSHARE 
    463477               DO jk = 1, jpkm1 
    464478                  WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
     
    469483         !                                            ! Caution : idta on the global domain: use of jperio, not nperio 
    470484         IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 
     485!$OMP PARALLEL WORKSHARE 
    471486            idta( :    , 1    ) = -1                ;      zdta( :    , 1    ) = -1._wp 
    472487            idta( :    ,jpjdta) =  0                ;      zdta( :    ,jpjdta) =  0._wp 
     488!$OMP END PARALLEL WORKSHARE 
    473489         ELSEIF( jperio == 2 ) THEN 
     490!$OMP PARALLEL WORKSHARE 
    474491            idta( :    , 1    ) = idta( : ,  3  )   ;      zdta( :    , 1    ) = zdta( : ,  3  ) 
    475492            idta( :    ,jpjdta) = 0                 ;      zdta( :    ,jpjdta) =  0._wp 
    476493            idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0._wp 
    477494            idta(jpidta, :    ) = 0                 ;      zdta(jpidta, :    ) =  0._wp 
     495!$OMP END PARALLEL WORKSHARE 
    478496         ELSE 
    479497            ih = 0                                  ;      zh = 0._wp 
    480498            IF( ln_sco )   ih = jpkm1               ;      IF( ln_sco )   zh = h_oce 
     499!$OMP PARALLEL WORKSHARE 
    481500            idta( :    , 1    ) = ih                ;      zdta( :    , 1    ) =  zh 
    482501            idta( :    ,jpjdta) = ih                ;      zdta( :    ,jpjdta) =  zh 
    483502            idta( 1    , :    ) = ih                ;      zdta( 1    , :    ) =  zh 
    484503            idta(jpidta, :    ) = ih                ;      zdta(jpidta, :    ) =  zh 
     504!$OMP END PARALLEL WORKSHARE 
    485505         ENDIF 
    486506 
    487507         !                                            ! local domain level and meter bathymetries (mbathy,bathy) 
     508!$OMP PARALLEL WORKSHARE 
    488509         mbathy(:,:) = 0                                   ! set to zero extra halo points 
    489510         bathy (:,:) = 0._wp                               ! (require for mpp case) 
     511!$OMP END PARALLEL WORKSHARE 
     512!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    490513         DO jj = 1, nlcj                                   ! interior values 
    491514            DO ji = 1, nlci 
     
    494517            END DO 
    495518         END DO 
     519!$OMP PARALLEL WORKSHARE 
    496520         risfdep(:,:)=0.e0 
    497521         misfdep(:,:)=1 
     522!$OMP END PARALLEL WORKSHARE 
    498523         ! 
    499524         DEALLOCATE( idta, zdta ) 
     
    507532            CALL iom_get  ( inum, jpdom_data, 'Bathy_level', bathy ) 
    508533            CALL iom_close( inum ) 
     534!$OMP PARALLEL WORKSHARE 
    509535            mbathy(:,:) = INT( bathy(:,:) ) 
    510536            ! initialisation isf variables 
    511537            risfdep(:,:)=0._wp ; misfdep(:,:)=1              
     538!$OMP END PARALLEL WORKSHARE 
    512539            !                                                ! ===================== 
    513540            IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
     
    547574            !                                                 
    548575            ! initialisation isf variables 
     576!$OMP PARALLEL WORKSHARE 
    549577            risfdep(:,:)=0._wp ; misfdep(:,:)=1              
     578!$OMP END PARALLEL WORKSHARE 
    550579            ! 
    551580            IF ( ln_isfcav ) THEN 
     
    864893      mikt(:,:) = MAX( misfdep(:,:) , 1 )    ! top k-index of T-level (=1) 
    865894      !                                      ! top k-index of W-level (=mikt) 
     895!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    866896      DO jj = 1, jpjm1                       ! top k-index of U- (U-) level 
    867897         DO ji = 1, jpim1 
     
    897927      IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    898928      ! 
     929!$OMP PARALLEL DO schedule(static) private(jk) 
    899930      DO jk = 1, jpk 
    900931         gdept_0(:,:,jk) = gdept_1d(jk) 
     
    9961027 
    9971028      ! Scale factors and depth at T- and W-points 
     1029!$OMP PARALLEL DO schedule(static) private(jk) 
    9981030      DO jk = 1, jpk                        ! intitialization to the reference z-coordinate 
    9991031         gdept_0(:,:,jk) = gdept_1d(jk) 
     
    10691101      ! 
    10701102      ! Scale factors and depth at U-, V-, UW and VW-points 
     1103!$OMP PARALLEL DO schedule(static) private(jk) 
    10711104      DO jk = 1, jpk                        ! initialisation to z-scale factors 
    10721105         e3u_0 (:,:,jk) = e3t_1d(jk) 
     
    10761109      END DO 
    10771110 
     1111!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    10781112      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
    10791113         DO jj = 1, jpjm1 
     
    11141148       
    11151149      ! Scale factor at F-point 
     1150!$OMP PARALLEL DO schedule(static) private(jk) 
    11161151      DO jk = 1, jpk                        ! initialisation to z-scale factors 
    11171152         e3f_0(:,:,jk) = e3t_1d(jk) 
    11181153      END DO 
     1154!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    11191155      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
    11201156         DO jj = 1, jpjm1 
     
    11311167!!gm  bug ? :  must be a do loop with mj0,mj1 
    11321168      !  
     1169!$OMP PARALLEL WORKSHARE 
    11331170      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
    11341171      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
     
    11361173      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
    11371174      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
    1138  
     1175!$OMP END PARALLEL WORKSHARE 
    11391176      ! Control of the sign 
    11401177      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
     
    11611198         gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    11621199         DO jk = 2, jpk 
    1163             gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
     1200!$OMP PARALLEL DO schedule(static) private(jj, ji)  
     1201             DO jj =1, jpj  
     1202                DO ji=1, jpi 
     1203                   gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk) 
     1204                END DO 
     1205             END DO 
    11641206         END DO 
    11651207      END IF 
Note: See TracChangeset for help on using the changeset viewer.