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/LIM_SRC_3/limthd.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/LIM_SRC_3/limthd.F90

    r7646 r7698  
    110110      !---------------------------------------------! 
    111111      IF( ln_limdyn ) THEN 
    112          zu_io(:,:) = u_ice(:,:) - ssu_m(:,:) 
    113          zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 
     112!$OMP PARALLEL 
     113!$OMP DO schedule(static) private(jj,ji) 
     114         DO jj = 1, jpj 
     115            DO ji = 1, jpi 
     116               zu_io(ji,jj) = u_ice(ji,jj) - ssu_m(ji,jj) 
     117               zv_io(ji,jj) = v_ice(ji,jj) - ssv_m(ji,jj) 
     118            END DO 
     119         END DO 
     120!$OMP DO schedule(static) private(jj,ji) 
    114121         DO jj = 2, jpjm1  
    115122            DO ji = fs_2, fs_jpim1 
     
    119126            END DO 
    120127         END DO 
     128!$OMP END PARALLEL 
    121129      ELSE      !  if no ice dynamics => transmit directly the atmospheric stress to the ocean 
     130!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    122131         DO jj = 2, jpjm1 
    123132            DO ji = fs_2, fs_jpim1 
     
    133142      ! Initialization and units change 
    134143      !----------------------------------! 
    135       ftr_ice(:,:,:) = 0._wp  ! part of solar radiation transmitted through the ice 
     144!$OMP PARALLEL 
     145      DO jl = 1, jpl 
     146!$OMP DO schedule(static) private(jj,ji) 
     147         DO jj = 1, jpj 
     148            DO ji = 1, jpi 
     149               ftr_ice(ji,jj,jl) = 0._wp  ! part of solar radiation transmitted through the ice 
     150            END DO 
     151         END DO 
     152      END DO 
    136153 
    137154      ! Change the units of heat content; from J/m2 to J/m3 
    138155      DO jl = 1, jpl 
    139156         DO jk = 1, nlay_i 
     157!$OMP DO schedule(static) private(jj,ji,rswitch) 
    140158            DO jj = 1, jpj 
    141159               DO ji = 1, jpi 
     
    147165         END DO 
    148166         DO jk = 1, nlay_s 
     167!$OMP DO schedule(static) private(jj,ji,rswitch) 
    149168            DO jj = 1, jpj 
    150169               DO ji = 1, jpi 
     
    160179      ! Partial computation of forcing for the thermodynamic sea ice model 
    161180      !--------------------------------------------------------------------! 
     181!$OMP DO schedule(static) private(jj,ji,rswitch,zqld,zqfr,zfric_u) 
    162182      DO jj = 1, jpj 
    163183         DO ji = 1, jpi 
     
    201221         END DO 
    202222      END DO 
     223!$OMP END PARALLEL 
    203224       
    204225      ! In case we bypass open-water ice formation 
    205       IF( .NOT. ln_limdO )  qlead(:,:) = 0._wp 
     226      IF( .NOT. ln_limdO ) THEN 
     227!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     228         DO jj = 1, jpj 
     229            DO ji = 1, jpi 
     230               qlead(ji,jj) = 0._wp 
     231            END DO 
     232         END DO 
     233      END IF 
    206234      ! In case we bypass growing/melting from top and bottom: we suppose ice is impermeable => ocean is isolated from atmosphere 
    207       IF( .NOT. ln_limdH )  hfx_in(:,:) = pfrld(:,:) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 
    208       IF( .NOT. ln_limdH )  fhtur (:,:) = 0._wp  ;  fhld  (:,:) = 0._wp 
     235      IF( .NOT. ln_limdH ) THEN 
     236!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     237         DO jj = 1, jpj 
     238            DO ji = 1, jpi 
     239               hfx_in(ji,jj) = pfrld(ji,jj) * ( qns_oce(ji,jj) + qsr_oce(ji,jj) ) + qemp_oce(ji,jj) 
     240               fhtur (ji,jj) = 0._wp 
     241            END DO 
     242         END DO 
     243      END IF 
     244!$OMP PARALLEL 
     245!$OMP DO schedule(static) private(jj,ji) 
     246      DO jj = 1, jpj 
     247         DO ji = 1, jpi 
     248            fhld (ji,jj) = 0._wp 
     249         END DO 
     250      END DO 
    209251 
    210252      ! --------------------------------------------------------------------- 
     
    214256      !     Second step in limthd_dh      :  heat remaining if total melt (zq_rema)  
    215257      !     Third  step in limsbc         :  heat from ice-ocean mass exchange (zf_mass) + solar 
     258!$OMP DO schedule(static) private(jj,ji) 
    216259      DO jj = 1, jpj 
    217260         DO ji = 1, jpi 
     
    223266         END DO 
    224267      END DO 
     268!$OMP END PARALLEL 
    225269 
    226270      !------------------------------------------------------------------------------! 
     
    288332 
    289333      ! Enthalpies are global variables we have to readjust the units (heat content in J/m2) 
     334!$OMP PARALLEL 
    290335      DO jl = 1, jpl 
    291336         DO jk = 1, nlay_i 
    292             e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * a_i(:,:,jl) * ht_i(:,:,jl) * r1_nlay_i 
     337!$OMP DO schedule(static) private(jj,ji) 
     338            DO jj = 1, jpj 
     339               DO ji = 1, jpi 
     340                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) * r1_nlay_i 
     341               END DO 
     342            END DO 
    293343         END DO 
    294344         DO jk = 1, nlay_s 
    295             e_s(:,:,jk,jl) = e_s(:,:,jk,jl) * a_i(:,:,jl) * ht_s(:,:,jl) * r1_nlay_s 
    296          END DO 
    297       END DO 
    298   
    299       ! Change thickness to volume 
    300       v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
    301       v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:) 
    302       smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 
     345!$OMP DO schedule(static) private(jj,ji) 
     346            DO jj = 1, jpj 
     347               DO ji = 1, jpi 
     348                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_s(ji,jj,jl) * r1_nlay_s 
     349               END DO 
     350            END DO 
     351         END DO 
     352      END DO 
     353 
     354! Change thickness to volume 
     355      DO jl = 1, jpl 
     356!$OMP DO schedule(static) private(jj,ji) 
     357         DO jj = 1, jpj 
     358            DO ji = 1, jpi 
     359               v_i(ji,jj,jl)   = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 
     360               v_s(ji,jj,jl)   = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 
     361               smv_i(ji,jj,jl) = sm_i(ji,jj,jl) * v_i(ji,jj,jl) 
     362            END DO 
     363         END DO 
     364      END DO 
    303365 
    304366      ! update ice age (in case a_i changed, i.e. becomes 0 or lateral melting in monocat) 
    305367      DO jl  = 1, jpl 
     368!$OMP DO schedule(static) private(jj,ji,rswitch) 
    306369         DO jj = 1, jpj 
    307370            DO ji = 1, jpi 
     
    311374         END DO 
    312375      END DO 
     376!$OMP END PARALLEL 
    313377 
    314378      CALL lim_var_zapsmall 
Note: See TracChangeset for help on using the changeset viewer.