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 – NEMO

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

GYRE hybrid parallelization

Location:
branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcana.F90

    r6140 r6748  
    203203      ztrp= - 40.e0        ! retroaction term on heat fluxes (W/m2/K) 
    204204      zconv = 3.16e-5      ! convertion factor: 1 m/yr => 3.16e-5 mm/s 
     205!$OMP PARALLEL DO schedule(static) private(jj, ji, t_star) 
    205206      DO jj = 1, jpj 
    206207         DO ji = 1, jpi 
     
    238239 
    239240      ! freshwater (mass flux) and update of qns with heat content of emp 
     241!$OMP PARALLEL WORKSHARE 
    240242      emp (:,:) = emp(:,:) - zsumemp * tmask(:,:,1)        ! freshwater flux (=0 in domain average) 
    241243      sfx (:,:) = 0.0_wp                                   ! no salt flux 
    242244      qns (:,:) = qns(:,:) - emp(:,:) * sst_m(:,:) * rcp   ! evap and precip are at SST 
    243  
     245!$OMP END PARALLEL WORKSHARE 
    244246 
    245247      ! ---------------------------- ! 
     
    267269      ztau_sais = 0.015 
    268270      ztaun = ztau - ztau_sais * COS( (ztime - ztimemax) / (ztimemin - ztimemax) * rpi ) 
     271!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    269272      DO jj = 1, jpj 
    270273         DO ji = 1, jpi 
     
    278281      ! module of wind stress and wind speed at T-point 
    279282      zcoef = 1. / ( zrhoa * zcdrag )  
     283!$OMP PARALLEL DO schedule(static) private(jj, ji, ztx, zty, zmod) 
    280284      DO jj = 2, jpjm1 
    281285         DO ji = fs_2, fs_jpim1   ! vect. opt. 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r6460 r6748  
    187187      IF( .NOT. ln_isf ) THEN                      ! variable initialisation if no ice shelf  
    188188         IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 
     189!$OMP PARALLEL WORKSHARE 
    189190         fwfisf  (:,:)   = 0.0_wp ; fwfisf_b  (:,:)   = 0.0_wp 
    190191         risf_tsc(:,:,:) = 0.0_wp ; risf_tsc_b(:,:,:) = 0.0_wp 
     192!$OMP END PARALLEL WORKSHARE 
    191193      END IF 
    192194      IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa )   fr_i(:,:) = 0._wp    ! no ice in the domain, ice fraction is always zero 
    193  
     195!$OMP PARALLEL WORKSHARE 
    194196      sfx(:,:) = 0._wp                             ! the salt flux due to freezing/melting will be computed (i.e. will be non-zero)  
    195197                                                   ! only if sea-ice is present 
     
    198200       
    199201      taum(:,:) = 0._wp                            ! Initialise taum for use in gls in case of reduced restart 
    200  
     202!$OMP END PARALLEL WORKSHARE 
    201203      !                                            ! restartability    
    202204      IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. ln_cpl ) )   & 
     
    318320      IF( kt /= nit000 ) THEN                      !          Swap of forcing fields          ! 
    319321         !                                         ! ---------------------------------------- ! 
     322!$OMP PARALLEL WORKSHARE 
    320323         utau_b(:,:) = utau(:,:)                         ! Swap the ocean forcing fields 
    321324         vtau_b(:,:) = vtau(:,:)                         ! (except at nit000 where before fields 
     
    323326         emp_b (:,:) = emp (:,:) 
    324327         sfx_b (:,:) = sfx (:,:) 
     328!$OMP END PARALLEL WORKSHARE 
    325329         IF ( ln_rnf ) THEN 
     330!$OMP PARALLEL WORKSHARE 
    326331            rnf_b    (:,:  ) = rnf    (:,:  ) 
    327332            rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 
     333!$OMP END PARALLEL WORKSHARE 
    328334         ENDIF 
    329335      ENDIF 
     
    404410               CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b )  ! before salt flux (T-point) 
    405411            ELSE 
     412!$OMP PARALLEL WORKSHARE 
    406413               sfx_b (:,:) = sfx(:,:) 
     414!$OMP END PARALLEL WORKSHARE 
    407415            ENDIF 
    408416         ELSE                                                   !* no restart: set from nit000 values 
    409417            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields set to nit000' 
     418!$OMP PARALLEL WORKSHARE 
    410419            utau_b(:,:) = utau(:,:)  
    411420            vtau_b(:,:) = vtau(:,:) 
     
    413422            emp_b (:,:) = emp(:,:) 
    414423            sfx_b (:,:) = sfx(:,:) 
     424!$OMP END PARALLEL WORKSHARE 
    415425         ENDIF 
    416426      ENDIF 
  • 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.