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

    r6489 r6748  
    5959      ! 
    6060      !                                        !* surface T-, U-, V- ocean level variables (T, S, depth, velocity) 
     61!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    6162      DO jj = 1, jpj 
    6263         DO ji = 1, jpi 
     
    6869      IF( nn_fsbc == 1 ) THEN                             !   Instantaneous surface fields        ! 
    6970         !                                                ! ---------------------------------------- ! 
     71!$OMP PARALLEL WORKSHARE 
    7072         ssu_m(:,:) = ub(:,:,1) 
    7173         ssv_m(:,:) = vb(:,:,1) 
     74!$OMP END PARALLEL WORKSHARE 
    7275         IF( l_useCT )  THEN    ;   sst_m(:,:) = eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    7376         ELSE                    ;   sst_m(:,:) = zts(:,:,jp_tem) 
    7477         ENDIF 
     78!$OMP PARALLEL WORKSHARE 
    7579         sss_m(:,:) = zts(:,:,jp_sal) 
     80!$OMP END PARALLEL WORKSHARE 
    7681         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    77          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    78          ELSE                    ;   ssh_m(:,:) = sshn(:,:) 
    79          ENDIF 
    80          ! 
     82         IF( ln_apr_dyn ) THEN   
     83!$OMP PARALLEL WORKSHARE 
     84   ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     85!$OMP END PARALLEL WORKSHARE 
     86         ELSE                     
     87!$OMP PARALLEL WORKSHARE 
     88   ssh_m(:,:) = sshn(:,:) 
     89!$OMP END PARALLEL WORKSHARE 
     90         ENDIF 
     91         ! 
     92!$OMP PARALLEL WORKSHARE 
    8193         e3t_m(:,:) = e3t_n(:,:,1) 
    8294         ! 
    8395         frq_m(:,:) = fraqsr_1lev(:,:) 
     96!$OMP END PARALLEL WORKSHARE 
    8497         ! 
    8598      ELSE 
     
    90103            IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields initialised to instantaneous values' 
    91104            zcoef = REAL( nn_fsbc - 1, wp ) 
     105!$OMP PARALLEL WORKSHARE 
    92106            ssu_m(:,:) = zcoef * ub(:,:,1) 
    93107            ssv_m(:,:) = zcoef * vb(:,:,1) 
     108!$OMP END PARALLEL WORKSHARE 
    94109            IF( l_useCT )  THEN    ;   sst_m(:,:) = zcoef * eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    95110            ELSE                    ;   sst_m(:,:) = zcoef * zts(:,:,jp_tem) 
    96111            ENDIF 
     112!$OMP PARALLEL WORKSHARE 
    97113            sss_m(:,:) = zcoef * zts(:,:,jp_sal) 
     114!$OMP END PARALLEL WORKSHARE 
    98115            !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    99             IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    100             ELSE                    ;   ssh_m(:,:) = zcoef * sshn(:,:) 
     116            IF( ln_apr_dyn ) THEN    
     117!$OMP PARALLEL WORKSHARE 
     118   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
     119!$OMP END PARALLEL WORKSHARE 
     120            ELSE                     
     121!$OMP PARALLEL WORKSHARE 
     122   ssh_m(:,:) = zcoef * sshn(:,:) 
     123!$OMP END PARALLEL WORKSHARE 
    101124            ENDIF 
    102125            ! 
     126!$OMP PARALLEL WORKSHARE 
    103127            e3t_m(:,:) = zcoef * e3t_n(:,:,1) 
    104128            ! 
    105129            frq_m(:,:) = zcoef * fraqsr_1lev(:,:) 
     130!$OMP END PARALLEL WORKSHARE 
    106131            !                                             ! ---------------------------------------- ! 
    107132         ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN      !   Initialisation: New mean computation   ! 
    108133            !                                             ! ---------------------------------------- ! 
     134!$OMP PARALLEL WORKSHARE 
    109135            ssu_m(:,:) = 0._wp     ! reset to zero ocean mean sbc fields 
    110136            ssv_m(:,:) = 0._wp 
     
    114140            e3t_m(:,:) = 0._wp 
    115141            frq_m(:,:) = 0._wp 
     142!$OMP END PARALLEL WORKSHARE 
    116143         ENDIF 
    117144         !                                                ! ---------------------------------------- ! 
    118145         !                                                !        Cumulate at each time step        ! 
    119146         !                                                ! ---------------------------------------- ! 
     147!$OMP PARALLEL WORKSHARE 
    120148         ssu_m(:,:) = ssu_m(:,:) + ub(:,:,1) 
    121149         ssv_m(:,:) = ssv_m(:,:) + vb(:,:,1) 
     150!$OMP END PARALLEL WORKSHARE 
    122151         IF( l_useCT )  THEN    ;   sst_m(:,:) = sst_m(:,:) + eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    123152         ELSE                    ;   sst_m(:,:) = sst_m(:,:) + zts(:,:,jp_tem) 
    124153         ENDIF 
     154!$OMP PARALLEL WORKSHARE 
    125155         sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 
     156!$OMP END PARALLEL WORKSHARE 
    126157         !                          ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 
    127          IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    128          ELSE                    ;   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
    129          ENDIF 
    130          ! 
     158         IF( ln_apr_dyn ) THEN    
     159!$OMP PARALLEL WORKSHARE 
     160   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     161!$OMP END PARALLEL WORKSHARE 
     162         ELSE                     
     163!$OMP PARALLEL WORKSHARE 
     164   ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
     165!$OMP END PARALLEL WORKSHARE 
     166         ENDIF 
     167         ! 
     168!$OMP PARALLEL WORKSHARE 
    131169         e3t_m(:,:) = e3t_m(:,:) + e3t_n(:,:,1) 
    132170         ! 
    133171         frq_m(:,:) = frq_m(:,:) + fraqsr_1lev(:,:) 
     172!$OMP END PARALLEL WORKSHARE 
    134173 
    135174         !                                                ! ---------------------------------------- ! 
     
    137176            !                                             ! ---------------------------------------- ! 
    138177            zcoef = 1. / REAL( nn_fsbc, wp ) 
     178!$OMP PARALLEL WORKSHARE 
    139179            sst_m(:,:) = sst_m(:,:) * zcoef     ! mean SST             [Celcius] 
    140180            sss_m(:,:) = sss_m(:,:) * zcoef     ! mean SSS             [psu] 
     
    144184            e3t_m(:,:) = e3t_m(:,:) * zcoef     ! mean vertical scale factor [m] 
    145185            frq_m(:,:) = frq_m(:,:) * zcoef     ! mean fraction of solar net radiation absorbed in the 1st T level [-] 
     186!$OMP END PARALLEL WORKSHARE 
    146187            ! 
    147188         ENDIF 
     
    223264                  &                    'from ', zf_sbc, ' to ', nn_fsbc  
    224265               zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc  
     266!$OMP PARALLEL WORKSHARE 
    225267               ssu_m(:,:) = zcoef * ssu_m(:,:)  
    226268               ssv_m(:,:) = zcoef * ssv_m(:,:) 
     
    230272               e3t_m(:,:) = zcoef * e3t_m(:,:) 
    231273               frq_m(:,:) = zcoef * frq_m(:,:) 
     274!$OMP END PARALLEL WORKSHARE 
    232275            ELSE 
    233276               IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
     
    239282         ! 
    240283         IF(lwp) WRITE(numout,*) '          default initialisation of ss?_m arrays' 
     284!$OMP PARALLEL WORKSHARE 
    241285         ssu_m(:,:) = ub(:,:,1) 
    242286         ssv_m(:,:) = vb(:,:,1) 
     287!$OMP END PARALLEL WORKSHARE 
    243288         IF( l_useCT )  THEN    ;   sst_m(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 
    244289         ELSE                    ;   sst_m(:,:) = tsn(:,:,1,jp_tem) 
    245290         ENDIF 
     291!$OMP PARALLEL WORKSHARE 
    246292         sss_m(:,:) = tsn  (:,:,1,jp_sal) 
    247293         ssh_m(:,:) = sshn (:,:) 
    248294         e3t_m(:,:) = e3t_n(:,:,1) 
    249295         frq_m(:,:) = 1._wp 
     296!$OMP END PARALLEL WORKSHARE 
    250297         ! 
    251298      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.