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/DIA/dia25h.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/DIA/dia25h.F90

    r6140 r7698  
    6262      INTEGER ::   ios                 ! Local integer output status for namelist read 
    6363      INTEGER ::   ierror              ! Local integer for memory allocation 
     64      INTEGER ::   ji, jj, jk 
    6465      ! 
    6566      NAMELIST/nam_dia25h/ ln_dia25h 
     
    134135      ! ------------------------- ! 
    135136      cnt_25h = 1  ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible)  
    136       tn_25h(:,:,:) = tsb(:,:,:,jp_tem) 
    137       sn_25h(:,:,:) = tsb(:,:,:,jp_sal) 
    138       sshn_25h(:,:) = sshb(:,:) 
    139       un_25h(:,:,:) = ub(:,:,:) 
    140       vn_25h(:,:,:) = vb(:,:,:) 
    141       wn_25h(:,:,:) = wn(:,:,:) 
    142       avt_25h(:,:,:) = avt(:,:,:) 
    143       avm_25h(:,:,:) = avm(:,:,:) 
     137!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     138         DO jk = 1, jpk 
     139            DO jj = 1, jpj 
     140               DO ji = 1, jpi 
     141                  tn_25h(ji,jj,jk) = tsb(ji,jj,jk,jp_tem) 
     142                  sn_25h(ji,jj,jk) = tsb(ji,jj,jk,jp_sal) 
     143                  sshn_25h(ji,jj) = sshb(ji,jj) 
     144                  un_25h(ji,jj,jk) = ub(ji,jj,jk) 
     145                  vn_25h(ji,jj,jk) = vb(ji,jj,jk) 
     146                  wn_25h(ji,jj,jk) = wn(ji,jj,jk) 
     147                  avt_25h(ji,jj,jk) = avt(ji,jj,jk) 
     148                  avm_25h(ji,jj,jk) = avm(ji,jj,jk) 
    144149# if defined key_zdfgls || defined key_zdftke 
    145          en_25h(:,:,:) = en(:,:,:) 
     150                  en_25h(ji,jj,jk) = en(ji,jj,jk) 
    146151#endif 
    147152# if defined key_zdfgls 
    148          rmxln_25h(:,:,:) = mxln(:,:,:) 
    149 #endif 
     153                  rmxln_25h(ji,jj,jk) = mxln(ji,jj,jk) 
     154#endif 
     155               END DO 
     156            END DO 
     157         END DO 
    150158#if defined key_lim3 || defined key_lim2 
    151159         CALL ctl_stop('STOP', 'dia_25h not setup yet to do tidemean ice') 
     
    223231         ENDIF 
    224232 
    225          tn_25h(:,:,:)        = tn_25h(:,:,:) + tsn(:,:,:,jp_tem) 
    226          sn_25h(:,:,:)        = sn_25h(:,:,:) + tsn(:,:,:,jp_sal) 
    227          sshn_25h(:,:)        = sshn_25h(:,:) + sshn (:,:) 
    228          un_25h(:,:,:)        = un_25h(:,:,:) + un(:,:,:) 
    229          vn_25h(:,:,:)        = vn_25h(:,:,:) + vn(:,:,:) 
    230          wn_25h(:,:,:)        = wn_25h(:,:,:) + wn(:,:,:) 
    231          avt_25h(:,:,:)       = avt_25h(:,:,:) + avt(:,:,:) 
    232          avm_25h(:,:,:)       = avm_25h(:,:,:) + avm(:,:,:) 
     233!$OMP PARALLEL 
     234!$OMP DO schedule(static) private(jj, ji) 
     235         DO jj = 1, jpj 
     236            DO ji = 1, jpi 
     237               sshn_25h(ji,jj)     = sshn_25h(ji,jj) + sshn (ji,jj) 
     238            END DO 
     239         END DO 
     240!$OMP END DO NOWAIT 
     241!$OMP DO schedule(static) private(jk, jj, ji) 
     242         DO jk = 1, jpk 
     243            DO jj = 1, jpj 
     244               DO ji = 1, jpi 
     245                  tn_25h(ji,jj,jk)        = tn_25h(ji,jj,jk) + tsn(ji,jj,jk,jp_tem) 
     246                  sn_25h(ji,jj,jk)        = sn_25h(ji,jj,jk) + tsn(ji,jj,jk,jp_sal) 
     247                  un_25h(ji,jj,jk)        = un_25h(ji,jj,jk) + un(ji,jj,jk) 
     248                  vn_25h(ji,jj,jk)        = vn_25h(ji,jj,jk) + vn(ji,jj,jk) 
     249                  wn_25h(ji,jj,jk)        = wn_25h(ji,jj,jk) + wn(ji,jj,jk) 
     250                  avt_25h(ji,jj,jk)       = avt_25h(ji,jj,jk) + avt(ji,jj,jk) 
     251                  avm_25h(ji,jj,jk)       = avm_25h(ji,jj,jk) + avm(ji,jj,jk) 
    233252# if defined key_zdfgls || defined key_zdftke 
    234          en_25h(:,:,:)        = en_25h(:,:,:) + en(:,:,:) 
     253                  en_25h(ji,jj,jk)        = en_25h(ji,jj,jk) + en(ji,jj,jk) 
    235254#endif 
    236255# if defined key_zdfgls 
    237          rmxln_25h(:,:,:)      = rmxln_25h(:,:,:) + mxln(:,:,:) 
    238 #endif 
     256                  rmxln_25h(ji,jj,jk)      = rmxln_25h(ji,jj,jk) + mxln(ji,jj,jk) 
     257#endif 
     258               END DO 
     259            END DO 
     260         END DO 
     261!$OMP END PARALLEL 
    239262         cnt_25h = cnt_25h + 1 
    240263 
     
    253276            ENDIF 
    254277 
    255             tn_25h(:,:,:)        = tn_25h(:,:,:) / 25.0_wp 
    256             sn_25h(:,:,:)        = sn_25h(:,:,:) / 25.0_wp 
    257             sshn_25h(:,:)        = sshn_25h(:,:) / 25.0_wp 
    258             un_25h(:,:,:)        = un_25h(:,:,:) / 25.0_wp 
    259             vn_25h(:,:,:)        = vn_25h(:,:,:) / 25.0_wp 
    260             wn_25h(:,:,:)        = wn_25h(:,:,:) / 25.0_wp 
    261             avt_25h(:,:,:)       = avt_25h(:,:,:) / 25.0_wp 
    262             avm_25h(:,:,:)       = avm_25h(:,:,:) / 25.0_wp 
     278!$OMP PARALLEL 
     279!$OMP DO schedule(static) private(jj, ji) 
     280         DO jj = 1, jpj 
     281            DO ji = 1, jpi 
     282               sshn_25h(ji,jj)     = sshn_25h(ji,jj) / 25.0_wp 
     283            END DO 
     284         END DO 
     285!$OMP END DO NOWAIT 
     286!$OMP DO schedule(static) private(jk, jj, ji) 
     287         DO jk = 1, jpk 
     288            DO jj = 1, jpj 
     289               DO ji = 1, jpi 
     290                  tn_25h(ji,jj,jk)        = tn_25h(ji,jj,jk) / 25.0_wp 
     291                  sn_25h(ji,jj,jk)        = sn_25h(ji,jj,jk) / 25.0_wp 
     292                  un_25h(ji,jj,jk)        = un_25h(ji,jj,jk) / 25.0_wp 
     293                  vn_25h(ji,jj,jk)        = vn_25h(ji,jj,jk) / 25.0_wp 
     294                  wn_25h(ji,jj,jk)        = wn_25h(ji,jj,jk) / 25.0_wp 
     295                  avt_25h(ji,jj,jk)       = avt_25h(ji,jj,jk) / 25.0_wp 
     296                  avm_25h(ji,jj,jk)       = avm_25h(ji,jj,jk) / 25.0_wp 
    263297# if defined key_zdfgls || defined key_zdftke 
    264             en_25h(:,:,:)        = en_25h(:,:,:) / 25.0_wp 
     298                  en_25h(ji,jj,jk)        = en_25h(ji,jj,jk) / 25.0_wp 
    265299#endif 
    266300# if defined key_zdfgls 
    267             rmxln_25h(:,:,:)       = rmxln_25h(:,:,:) / 25.0_wp 
    268 #endif 
     301                  rmxln_25h(ji,jj,jk)       = rmxln_25h(ji,jj,jk) / 25.0_wp 
     302#endif 
     303               END DO 
     304            END DO 
     305         END DO 
     306!$OMP END PARALLEL 
    269307 
    270308            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : Mean calculated by dividing 25 hour sums and writing output' 
    271309            zmdi=1.e+20 !missing data indicator for masking 
    272310            ! write tracers (instantaneous) 
    273             zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     311!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     312         DO jk = 1, jpk 
     313            DO jj = 1, jpj 
     314               DO ji = 1, jpi 
     315                  zw3d(ji,jj,jk) = tn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     316               END DO 
     317            END DO 
     318         END DO 
    274319            CALL iom_put("temper25h", zw3d)   ! potential temperature 
    275             zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     320!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     321         DO jk = 1, jpk 
     322            DO jj = 1, jpj 
     323               DO ji = 1, jpi 
     324                  zw3d(ji,jj,jk) = sn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     325               END DO 
     326            END DO 
     327         END DO 
    276328            CALL iom_put( "salin25h", zw3d  )   ! salinity 
    277             zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 
     329!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     330         DO jj = 1, jpj 
     331            DO ji = 1, jpi 
     332               zw2d(ji,jj) = sshn_25h(ji,jj)*tmask(ji,jj,1) + zmdi*(1.0-tmask(ji,jj,1)) 
     333            END DO 
     334         END DO 
    278335            CALL iom_put( "ssh25h", zw2d )   ! sea surface  
    279336 
    280337 
    281338            ! Write velocities (instantaneous) 
    282             zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 
     339!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     340         DO jk = 1, jpk 
     341            DO jj = 1, jpj 
     342               DO ji = 1, jpi 
     343                  zw3d(ji,jj,jk) = un_25h(ji,jj,jk)*umask(ji,jj,jk) + zmdi*(1.0-umask(ji,jj,jk)) 
     344               END DO 
     345            END DO 
     346         END DO 
    283347            CALL iom_put("vozocrtx25h", zw3d)    ! i-current 
    284             zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 
     348!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     349         DO jk = 1, jpk 
     350            DO jj = 1, jpj 
     351               DO ji = 1, jpi 
     352                  zw3d(ji,jj,jk) = vn_25h(ji,jj,jk)*vmask(ji,jj,jk) + zmdi*(1.0-vmask(ji,jj,jk)) 
     353               END DO 
     354            END DO 
     355         END DO 
    285356            CALL iom_put("vomecrty25h", zw3d  )   ! j-current 
    286  
    287             zw3d(:,:,:) = wn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     357!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     358         DO jk = 1, jpk 
     359            DO jj = 1, jpj 
     360               DO ji = 1, jpi 
     361                  zw3d(ji,jj,jk) = wn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     362               END DO 
     363            END DO 
     364         END DO 
    288365            CALL iom_put("vomecrtz25h", zw3d )   ! k-current 
    289             zw3d(:,:,:) = avt_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     366!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     367         DO jk = 1, jpk 
     368            DO jj = 1, jpj 
     369               DO ji = 1, jpi 
     370                  zw3d(ji,jj,jk) = avt_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     371               END DO 
     372            END DO 
     373         END DO 
    290374            CALL iom_put("avt25h", zw3d )   ! diffusivity 
    291             zw3d(:,:,:) = avm_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     375!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     376         DO jk = 1, jpk 
     377            DO jj = 1, jpj 
     378               DO ji = 1, jpi 
     379                  zw3d(ji,jj,jk) = avm_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     380               END DO 
     381            END DO 
     382         END DO 
    292383            CALL iom_put("avm25h", zw3d)   ! viscosity 
    293384#if defined key_zdftke || defined key_zdfgls  
    294             zw3d(:,:,:) = en_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     385!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     386         DO jk = 1, jpk 
     387            DO jj = 1, jpj 
     388               DO ji = 1, jpi 
     389                  zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     390               END DO 
     391            END DO 
     392         END DO 
    295393            CALL iom_put("tke25h", zw3d)   ! tke 
    296394#endif 
    297395#if defined key_zdfgls  
    298             zw3d(:,:,:) = rmxln_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     396!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     397         DO jk = 1, jpk 
     398            DO jj = 1, jpj 
     399               DO ji = 1, jpi 
     400                  zw3d(ji,jj,jk) = rmxln_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     401               END DO 
     402            END DO 
     403         END DO 
    299404            CALL iom_put( "mxln25h",zw3d) 
    300405#endif 
    301406 
    302407            ! After the write reset the values to cnt=1 and sum values equal current value  
    303             tn_25h(:,:,:) = tsn(:,:,:,jp_tem) 
    304             sn_25h(:,:,:) = tsn(:,:,:,jp_sal) 
    305             sshn_25h(:,:) = sshn (:,:) 
    306             un_25h(:,:,:) = un(:,:,:) 
    307             vn_25h(:,:,:) = vn(:,:,:) 
    308             wn_25h(:,:,:) = wn(:,:,:) 
    309             avt_25h(:,:,:) = avt(:,:,:) 
    310             avm_25h(:,:,:) = avm(:,:,:) 
     408!$OMP PARALLEL 
     409!$OMP DO schedule(static) private(jj, ji) 
     410         DO jj = 1, jpj 
     411            DO ji = 1, jpi 
     412               sshn_25h(ji,jj) = sshn (ji,jj) 
     413            END DO 
     414         END DO 
     415!$OMP END DO NOWAIT 
     416!$OMP DO schedule(static) private(jk, jj, ji) 
     417         DO jk = 1, jpk 
     418            DO jj = 1, jpj 
     419               DO ji = 1, jpi 
     420                  tn_25h(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) 
     421                  sn_25h(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) 
     422                  un_25h(ji,jj,jk) = un(ji,jj,jk) 
     423                  vn_25h(ji,jj,jk) = vn(ji,jj,jk) 
     424                  wn_25h(ji,jj,jk) = wn(ji,jj,jk) 
     425                  avt_25h(ji,jj,jk) = avt(ji,jj,jk) 
     426                  avm_25h(ji,jj,jk) = avm(ji,jj,jk) 
    311427# if defined key_zdfgls || defined key_zdftke 
    312             en_25h(:,:,:) = en(:,:,:) 
     428                  en_25h(ji,jj,jk) = en(ji,jj,jk) 
    313429#endif 
    314430# if defined key_zdfgls 
    315             rmxln_25h(:,:,:) = mxln(:,:,:) 
    316 #endif 
     431                  rmxln_25h(ji,jj,jk) = mxln(ji,jj,jk) 
     432#endif 
     433               END DO 
     434            END DO 
     435         END DO 
     436!$OMP END PARALLEL 
    317437            cnt_25h = 1 
    318438            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : After 25hr mean write, reset sum to current value and cnt_25h to one for overlapping average',cnt_25h 
Note: See TracChangeset for help on using the changeset viewer.