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 7753 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90 – NEMO

Ignore:
Timestamp:
2017-03-03T12:46:59+01:00 (7 years ago)
Author:
mocavero
Message:

Reverting trunk to remove OpenMP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r7698 r7753  
    114114      zviold = v_i 
    115115      zvsold = v_s 
    116 !$OMP PARALLEL 
    117 !$OMP DO schedule(static) private(jj,ji) 
    118       DO jj = 1, jpj 
    119          DO ji = 1, jpi 
    120             zsmvold(ji,jj) = 0._wp 
    121          END DO 
    122       END DO 
     116      zsmvold(:,:) = SUM( smv_i(:,:,:), dim=3 ) 
     117      zeiold (:,:) = et_i 
     118      zesold (:,:) = et_s  
     119 
     120      !--- Thickness correction init. --- ! 
     121      zatold(:,:) = at_i 
    123122      DO jl = 1, jpl 
    124 !$OMP DO schedule(static) private(jj,ji) 
    125          DO jj = 1, jpj 
    126             DO ji = 1, jpi 
    127                zsmvold(ji,jj) = zsmvold(ji,jj) + smv_i(ji,jj,jl) 
    128             END DO 
    129          END DO 
    130       END DO 
    131 !$OMP DO schedule(static) private(jj,ji) 
    132       DO jj = 1, jpj 
    133          DO ji = 1, jpi 
    134             zeiold (ji,jj) = et_i(ji,jj) 
    135             zesold (ji,jj) = et_s(ji,jj) 
    136  
    137             !--- Thickness correction init. --- ! 
    138             zatold (ji,jj) = at_i(ji,jj) 
    139          END DO 
    140       END DO 
    141       DO jl = 1, jpl 
    142 !$OMP DO schedule(static) private(jj,ji,rswitch) 
    143123         DO jj = 1, jpj 
    144124            DO ji = 1, jpi 
     
    150130      END DO 
    151131      ! --- Record max of the surrounding ice thicknesses for correction in case advection creates ice too thick --- ! 
     132      zhimax(:,:,:) = ht_i(:,:,:) + ht_s(:,:,:) 
    152133      DO jl = 1, jpl 
    153 !$OMP DO schedule(static) private(jj,ji) 
    154          DO jj = 1, jpj 
    155             DO ji = 1, jpi 
    156                zhimax(ji,jj,jl) = ht_i(ji,jj,jl) + ht_s(ji,jj,jl) 
    157             END DO 
    158          END DO 
    159       END DO 
    160 !$OMP END PARALLEL 
    161       DO jl = 1, jpl 
    162 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    163134         DO jj = 2, jpjm1 
    164135            DO ji = 2, jpim1 
     
    202173         zdt = rdt_ice / REAL(initad) 
    203174          
    204 !$OMP PARALLEL 
    205175         ! transport 
    206 !$OMP DO schedule(static) private(jj,ji) 
    207          DO jj = 1, jpj 
    208             DO ji = 1, jpi 
    209                zudy(ji,jj) = u_ice(ji,jj) * e2u(ji,jj) 
    210                zvdx(ji,jj) = v_ice(ji,jj) * e1v(ji,jj) 
    211             END DO 
    212          END DO 
     176         zudy(:,:) = u_ice(:,:) * e2u(:,:) 
     177         zvdx(:,:) = v_ice(:,:) * e1v(:,:) 
    213178          
    214179         ! define velocity for advection: u*grad(H) 
    215 !$OMP DO schedule(static) private(jj,ji) 
    216180         DO jj = 2, jpjm1 
    217181            DO ji = fs_2, fs_jpim1 
     
    227191            END DO 
    228192         END DO 
    229 !$OMP END PARALLEL 
    230193          
    231194         ! advection 
     
    245208         END DO 
    246209         ! 
    247 !$OMP PARALLEL 
    248 !$OMP DO schedule(static) private(jj,ji) 
    249          DO jj = 1, jpj 
    250             DO ji = 1, jpi 
    251                at_i(ji,jj) = a_i(ji,jj,1)      ! total ice fraction 
    252             END DO 
    253          END DO 
     210         at_i(:,:) = a_i(:,:,1)      ! total ice fraction 
    254211         DO jl = 2, jpl 
    255 !$OMP DO schedule(static) private(jj,ji) 
    256             DO jj = 1, jpj 
    257                DO ji = 1, jpi 
    258                   at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 
    259                END DO 
    260             END DO 
    261          END DO 
    262 !$OMP END PARALLEL 
     212            at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 
     213         END DO 
    263214         ! 
    264215         CALL wrk_dealloc( jpi,jpj, zudy, zvdx, zcu_box, zcv_box ) 
     
    279230         ENDIF 
    280231          
    281 !$OMP PARALLEL 
    282 !$OMP DO schedule(static) private(jj,ji) 
    283          DO jj = 1, jpj 
    284             DO ji = 1, jpi 
    285                zarea(ji,jj) = e1e2t(ji,jj) 
    286           
    287                !------------------------- 
    288                ! transported fields                                         
    289                !------------------------- 
    290                z0opw(ji,jj,1) = ato_i(ji,jj) * e1e2t(ji,jj)             ! Open water area  
    291             END DO 
    292          END DO 
     232         zarea(:,:) = e1e2t(:,:) 
     233          
     234         !------------------------- 
     235         ! transported fields                                         
     236         !------------------------- 
     237         z0opw(:,:,1) = ato_i(:,:) * e1e2t(:,:)             ! Open water area  
    293238         DO jl = 1, jpl 
    294 !$OMP DO schedule(static) private(jj,ji) 
    295             DO jj = 1, jpj 
    296                DO ji = 1, jpi 
    297                   z0snw (ji,jj,jl)  = v_s  (ji,jj,  jl) * e1e2t(ji,jj)  ! Snow volume 
    298                   z0ice(ji,jj,jl)   = v_i  (ji,jj,  jl) * e1e2t(ji,jj)  ! Ice  volume 
    299                   z0ai  (ji,jj,jl)  = a_i  (ji,jj,  jl) * e1e2t(ji,jj)  ! Ice area 
    300                   z0smi (ji,jj,jl)  = smv_i(ji,jj,  jl) * e1e2t(ji,jj)  ! Salt content 
    301                   z0oi (ji,jj,jl)   = oa_i (ji,jj,  jl) * e1e2t(ji,jj)  ! Age content 
    302                   z0es (ji,jj,jl)   = e_s  (ji,jj,1,jl) * e1e2t(ji,jj)  ! Snow heat content 
    303                END DO 
    304             END DO 
     239            z0snw (:,:,jl)  = v_s  (:,:,  jl) * e1e2t(:,:)  ! Snow volume 
     240            z0ice(:,:,jl)   = v_i  (:,:,  jl) * e1e2t(:,:)  ! Ice  volume 
     241            z0ai  (:,:,jl)  = a_i  (:,:,  jl) * e1e2t(:,:)  ! Ice area 
     242            z0smi (:,:,jl)  = smv_i(:,:,  jl) * e1e2t(:,:)  ! Salt content 
     243            z0oi (:,:,jl)   = oa_i (:,:,  jl) * e1e2t(:,:)  ! Age content 
     244            z0es (:,:,jl)   = e_s  (:,:,1,jl) * e1e2t(:,:)  ! Snow heat content 
    305245            DO jk = 1, nlay_i 
    306 !$OMP DO schedule(static) private(jj,ji) 
    307                DO jj = 1, jpj 
    308                   DO ji = 1, jpi 
    309                      z0ei  (ji,jj,jk,jl) = e_i  (ji,jj,jk,jl) * e1e2t(ji,jj) ! Ice  heat content 
    310                   END DO 
    311                END DO 
    312             END DO 
    313          END DO 
    314 !$OMP END PARALLEL 
     246               z0ei  (:,:,jk,jl) = e_i  (:,:,jk,jl) * e1e2t(:,:) ! Ice  heat content 
     247            END DO 
     248         END DO 
    315249 
    316250 
     
    402336         ! Recover the properties from their contents 
    403337         !------------------------------------------- 
    404 !$OMP PARALLEL 
    405 !$OMP DO schedule(static) private(jj,ji) 
    406          DO jj = 1, jpj 
    407             DO ji = 1, jpi 
    408                ato_i(ji,jj) = z0opw(ji,jj,1) * r1_e1e2t(ji,jj) 
    409             END DO 
    410          END DO 
     338         ato_i(:,:) = z0opw(:,:,1) * r1_e1e2t(:,:) 
    411339         DO jl = 1, jpl 
    412 !$OMP DO schedule(static) private(jj,ji) 
    413             DO jj = 1, jpj 
    414                DO ji = 1, jpi 
    415                   v_i  (ji,jj,  jl) = z0ice(ji,jj,jl) * r1_e1e2t(ji,jj) 
    416                   v_s  (ji,jj,  jl) = z0snw(ji,jj,jl) * r1_e1e2t(ji,jj) 
    417                   smv_i(ji,jj,  jl) = z0smi(ji,jj,jl) * r1_e1e2t(ji,jj) 
    418                   oa_i (ji,jj,  jl) = z0oi (ji,jj,jl) * r1_e1e2t(ji,jj) 
    419                   a_i  (ji,jj,  jl) = z0ai (ji,jj,jl) * r1_e1e2t(ji,jj) 
    420                   e_s  (ji,jj,1,jl) = z0es (ji,jj,jl) * r1_e1e2t(ji,jj) 
    421                END DO 
    422             END DO 
     340            v_i  (:,:,  jl) = z0ice(:,:,jl) * r1_e1e2t(:,:) 
     341            v_s  (:,:,  jl) = z0snw(:,:,jl) * r1_e1e2t(:,:) 
     342            smv_i(:,:,  jl) = z0smi(:,:,jl) * r1_e1e2t(:,:) 
     343            oa_i (:,:,  jl) = z0oi (:,:,jl) * r1_e1e2t(:,:) 
     344            a_i  (:,:,  jl) = z0ai (:,:,jl) * r1_e1e2t(:,:) 
     345            e_s  (:,:,1,jl) = z0es (:,:,jl) * r1_e1e2t(:,:) 
    423346            DO jk = 1, nlay_i 
    424 !$OMP DO schedule(static) private(jj,ji) 
    425                DO jj = 1, jpj 
    426                   DO ji = 1, jpi 
    427                      e_i(ji,jj,jk,jl) = z0ei(ji,jj,jk,jl) * r1_e1e2t(ji,jj) 
    428                   END DO 
    429                END DO 
    430             END DO 
    431          END DO 
    432  
    433 !$OMP DO schedule(static) private(jj,ji) 
    434          DO jj = 1, jpj 
    435             DO ji = 1, jpi 
    436                at_i(ji,jj) = a_i(ji,jj,1)      ! total ice fraction 
    437             END DO 
    438          END DO 
     347               e_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:) 
     348            END DO 
     349         END DO 
     350 
     351         at_i(:,:) = a_i(:,:,1)      ! total ice fraction 
    439352         DO jl = 2, jpl 
    440 !$OMP DO schedule(static) private(jj,ji) 
    441             DO jj = 1, jpj 
    442                DO ji = 1, jpi 
    443                   at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 
    444                END DO 
    445             END DO 
    446          END DO 
    447 !$OMP END PARALLEL 
     353            at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 
     354         END DO 
    448355          
    449356         CALL wrk_dealloc( jpi,jpj,            zarea ) 
     
    462369         !     mask eddy diffusivity coefficient at ocean U- and V-points 
    463370         jm=1 
    464 !$OMP PARALLEL 
    465371         DO jl = 1, jpl 
    466 !$OMP DO schedule(static) private(jj,ji) 
    467372            DO jj = 1, jpjm1                 ! NB: has not to be defined on jpj line and jpi row 
    468373               DO ji = 1 , fs_jpim1 
     
    474379            END DO 
    475380 
    476 !$OMP DO schedule(static) private(jj,ji) 
    477             DO jj = 1, jpj 
    478                DO ji = 1, jpi 
    479                   zhdfptab(ji,jj,jm)= a_i  (ji,jj,  jl) 
    480                END DO 
    481             END DO 
    482             jm = jm + 1 
    483 !$OMP DO schedule(static) private(jj,ji) 
    484             DO jj = 1, jpj 
    485                DO ji = 1, jpi 
    486                   zhdfptab(ji,jj,jm)= v_i  (ji,jj,  jl) 
    487                END DO 
    488             END DO 
    489             jm = jm + 1 
    490 !$OMP DO schedule(static) private(jj,ji) 
    491             DO jj = 1, jpj 
    492                DO ji = 1, jpi 
    493                   zhdfptab(ji,jj,jm)= v_s  (ji,jj,  jl) 
    494                END DO 
    495             END DO 
    496             jm = jm + 1 
    497 !$OMP DO schedule(static) private(jj,ji) 
    498             DO jj = 1, jpj 
    499                DO ji = 1, jpi 
    500                   zhdfptab(ji,jj,jm)= smv_i(ji,jj,  jl) 
    501                END DO 
    502             END DO 
    503             jm = jm + 1 
    504 !$OMP DO schedule(static) private(jj,ji) 
    505             DO jj = 1, jpj 
    506                DO ji = 1, jpi 
    507                   zhdfptab(ji,jj,jm)= oa_i (ji,jj,  jl) 
    508                END DO 
    509             END DO 
    510             jm = jm + 1 
    511 !$OMP DO schedule(static) private(jj,ji) 
    512             DO jj = 1, jpj 
    513                DO ji = 1, jpi 
    514                   zhdfptab(ji,jj,jm)= e_s  (ji,jj,1,jl) 
    515                END DO 
    516             END DO 
    517             jm = jm + 1 
     381            zhdfptab(:,:,jm)= a_i  (:,:,  jl); jm = jm + 1 
     382            zhdfptab(:,:,jm)= v_i  (:,:,  jl); jm = jm + 1 
     383            zhdfptab(:,:,jm)= v_s  (:,:,  jl); jm = jm + 1 
     384            zhdfptab(:,:,jm)= smv_i(:,:,  jl); jm = jm + 1 
     385            zhdfptab(:,:,jm)= oa_i (:,:,  jl); jm = jm + 1 
     386            zhdfptab(:,:,jm)= e_s  (:,:,1,jl); jm = jm + 1 
    518387            ! Sample of adding more variables to apply lim_hdf (ihdf_vars must be increased) 
    519388            !   zhdfptab(:,:,jm) = variable_1 (:,:,1,jl); jm = jm + 1   
    520389            !   zhdfptab(:,:,jm) = variable_2 (:,:,1,jl); jm = jm + 1  
    521390            DO jk = 1, nlay_i 
    522 !$OMP DO schedule(static) private(jj,ji) 
    523                DO jj = 1, jpj 
    524                   DO ji = 1, jpi 
    525                      zhdfptab(ji,jj,jm)=e_i(ji,jj,jk,jl) 
    526                   END DO 
    527                END DO 
    528                jm= jm+1 
     391              zhdfptab(:,:,jm)=e_i(:,:,jk,jl); jm= jm+1 
    529392            END DO 
    530393         END DO 
     
    532395         ! --- Prepare diffusion for open water area --- ! 
    533396         !     mask eddy diffusivity coefficient at ocean U- and V-points 
    534 !$OMP DO schedule(static) private(jj,ji) 
    535397         DO jj = 1, jpjm1                    ! NB: has not to be defined on jpj line and jpi row 
    536398            DO ji = 1 , fs_jpim1 
     
    542404         END DO 
    543405         ! 
    544 !$OMP DO schedule(static) private(jj,ji) 
    545          DO jj = 1, jpj 
    546             DO ji = 1, jpi 
    547                zhdfptab(ji,jj,jm)= ato_i  (ji,jj); 
    548             END DO 
    549          END DO 
    550 !$OMP END PARALLEL 
     406         zhdfptab(:,:,jm)= ato_i  (:,:); 
    551407 
    552408         ! --- Apply diffusion --- ! 
     
    555411         ! --- Recover properties --- ! 
    556412         jm=1 
    557 !$OMP PARALLEL 
    558413         DO jl = 1, jpl 
    559 !$OMP DO schedule(static) private(jj,ji) 
    560             DO jj = 1, jpj 
    561                DO ji = 1, jpi 
    562                   a_i  (ji,jj,  jl)=zhdfptab(ji,jj,jm) 
    563                END DO 
    564             END DO 
    565             jm = jm + 1 
    566 !$OMP DO schedule(static) private(jj,ji) 
    567             DO jj = 1, jpj 
    568                DO ji = 1, jpi 
    569                   v_i  (ji,jj,  jl)=zhdfptab(ji,jj,jm) 
    570                END DO 
    571             END DO 
    572             jm = jm + 1 
    573 !$OMP DO schedule(static) private(jj,ji) 
    574             DO jj = 1, jpj 
    575                DO ji = 1, jpi 
    576                   v_s  (ji,jj,  jl)=zhdfptab(ji,jj,jm) 
    577                END DO 
    578             END DO 
    579             jm = jm + 1 
    580 !$OMP DO schedule(static) private(jj,ji) 
    581             DO jj = 1, jpj 
    582                DO ji = 1, jpi 
    583                   smv_i(ji,jj,  jl)=zhdfptab(ji,jj,jm) 
    584                END DO 
    585             END DO 
    586             jm = jm + 1 
    587 !$OMP DO schedule(static) private(jj,ji) 
    588             DO jj = 1, jpj 
    589                DO ji = 1, jpi 
    590                   oa_i (ji,jj,  jl)=zhdfptab(ji,jj,jm) 
    591                END DO 
    592             END DO 
    593             jm = jm + 1 
    594 !$OMP DO schedule(static) private(jj,ji) 
    595             DO jj = 1, jpj 
    596                DO ji = 1, jpi 
    597                   e_s  (ji,jj,1,jl)=zhdfptab(ji,jj,jm) 
    598                END DO 
    599             END DO 
    600             jm = jm + 1 
    601  
     414            a_i  (:,:,  jl) = zhdfptab(:,:,jm); jm = jm + 1 
     415            v_i  (:,:,  jl) = zhdfptab(:,:,jm); jm = jm + 1 
     416            v_s  (:,:,  jl) = zhdfptab(:,:,jm); jm = jm + 1 
     417            smv_i(:,:,  jl) = zhdfptab(:,:,jm); jm = jm + 1 
     418            oa_i (:,:,  jl) = zhdfptab(:,:,jm); jm = jm + 1 
     419            e_s  (:,:,1,jl) = zhdfptab(:,:,jm); jm = jm + 1 
    602420            ! Sample of adding more variables to apply lim_hdf 
    603421            !   variable_1  (:,:,1,jl) = zhdfptab(:,:, jm  ) ; jm + 1  
    604422            !   variable_2  (:,:,1,jl) = zhdfptab(:,:, jm  ) ; jm + 1 
    605423            DO jk = 1, nlay_i 
    606 !$OMP DO schedule(static) private(jj,ji) 
    607                DO jj = 1, jpj 
    608                   DO ji = 1, jpi 
    609                      e_i(ji,jj,jk,jl) = zhdfptab(ji,jj,jm) 
    610                   END DO 
    611                END DO 
    612                jm = jm + 1 
    613             END DO 
    614          END DO 
    615 !$OMP DO schedule(static) private(jj,ji) 
    616          DO jj = 1, jpj 
    617             DO ji = 1, jpi 
    618                ato_i  (ji,jj) = zhdfptab(ji,jj,jm) 
    619             END DO 
    620          END DO 
    621 !$OMP END PARALLEL 
     424               e_i(:,:,jk,jl) = zhdfptab(:,:,jm);jm= jm + 1 
     425            END DO 
     426         END DO 
     427         ato_i  (:,:) = zhdfptab(:,:,jm) 
    622428               
    623429      ENDIF 
    624430 
    625431      ! --- diags --- 
    626 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    627432      DO jj = 1, jpj 
    628433         DO ji = 1, jpi 
     
    641446            
    642447         !--- Thickness correction in case too high --- ! 
    643 !$OMP PARALLEL 
    644448         DO jl = 1, jpl 
    645 !$OMP DO schedule(static) private(jj,ji,rswitch,zdv) 
    646449            DO jj = 1, jpj 
    647450               DO ji = 1, jpi 
     
    678481          
    679482         ! Force the upper limit of ht_i to always be < hi_max (99 m). 
    680 !$OMP DO schedule(static) private(jj,ji,rswitch) 
    681483         DO jj = 1, jpj 
    682484            DO ji = 1, jpi 
     
    686488            END DO 
    687489         END DO 
    688 !$OMP END PARALLEL 
    689490 
    690491      ENDIF 
     
    694495      !------------------------------------------------------------ 
    695496      ! 
    696 !$OMP PARALLEL 
    697 !$OMP DO schedule(static) private(jj,ji) 
    698          DO jj = 1, jpj 
    699             DO ji = 1, jpi 
    700                at_i(ji,jj) = 0._wp 
    701             END DO 
    702          END DO 
    703          DO jl = 1, jpl 
    704 !$OMP DO schedule(static) private(jj,ji) 
    705             DO jj = 1, jpj 
    706                DO ji = 1, jpi 
    707                   at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 
    708                END DO 
    709             END DO 
    710          END DO 
    711 !$OMP END PARALLEL 
    712  
     497      at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 
    713498      IF ( nn_limdyn == 1 .OR. ( ( nn_monocat == 2 ) .AND. ( jpl == 1 ) ) ) THEN ! simple conservative piling, comparable with LIM2 
    714499         DO jl = 1, jpl 
    715 !$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,zda) 
    716500            DO jj = 1, jpj 
    717501               DO ji = 1, jpi 
     
    726510       
    727511      ! --- agglomerate variables ----------------- 
    728 !$OMP PARALLEL 
    729 !$OMP DO schedule(static) private(jj,ji) 
    730       DO jj = 1, jpj 
    731          DO ji = 1, jpi 
    732             vt_i(ji,jj) = 0._wp 
    733             vt_s(ji,jj) = 0._wp 
    734             at_i(ji,jj) = 0._wp 
    735          END DO 
    736       END DO 
    737       DO jl = 1, jpl 
    738 !$OMP DO schedule(static) private(jj,ji) 
    739          DO jj = 1, jpj 
    740             DO ji = 1, jpi 
    741                vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) 
    742                vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) 
    743                at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 
    744             END DO 
    745          END DO 
    746       END DO 
     512      vt_i(:,:) = SUM( v_i(:,:,:), dim=3 ) 
     513      vt_s(:,:) = SUM( v_s(:,:,:), dim=3 ) 
     514      at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 
    747515       
    748516      ! --- open water = 1 if at_i=0 -------------------------------- 
    749 !$OMP DO schedule(static) private(jj,ji) 
    750       DO jj = 1, jpj 
    751          DO ji = 1, jpi 
    752             IF( at_i(ji,jj) == 0._wp ) ato_i(ji,jj) = 1._wp  
    753          END DO 
    754       END DO 
    755 !$OMP END PARALLEL 
     517      WHERE( at_i == 0._wp ) ato_i = 1._wp  
    756518       
    757519      ! conservation test 
Note: See TracChangeset for help on using the changeset viewer.