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/TOP_SRC/TRP/trcrad.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/TOP_SRC/TRP/trcrad.F90

    r7698 r7753  
    2929   !!---------------------------------------------------------------------- 
    3030   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    31    !! $Id$ 
     31   !! $Id$  
    3232   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    3333   !!---------------------------------------------------------------------- 
     
    140140      REAL(wp) :: zcoef, ztrcorn, ztrmasn   !    "         " 
    141141      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrdb, ztrtrdn   ! workspace arrays 
    142       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin   ! workspace arrays 
    143142      REAL(wp) :: zs2rdt 
    144143      LOGICAL ::   lldebug = .FALSE. 
     
    148147      IF( l_trdtrc )  CALL wrk_alloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 
    149148       
    150       CALL wrk_alloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 
    151149      IF( PRESENT( cpreserv )  ) THEN   !  total tracer concentration is preserved  
    152150       
     
    157155 
    158156            IF( l_trdtrc ) THEN 
    159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    160                DO jk = 1, jpk 
    161                   DO jj = 1, jpj 
    162                      DO ji = 1, jpi 
    163                         ztrtrdb(ji,jj,jk) = ptrb(ji,jj,jk,jn)                        ! save input trb for trend computation 
    164                         ztrtrdn(ji,jj,jk) = ptrn(ji,jj,jk,jn) 
    165                      END DO 
    166                   END DO 
    167                END DO 
     157               ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
     158               ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
    168159            ENDIF 
    169160            !                                                         ! sum over the global domain  
    170 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    171             DO jk = 1, jpk 
    172                DO jj = 1, jpj 
    173                   DO ji = 1, jpi 
    174                      zcptrbmin(ji,jj,jk) = MIN( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
    175                      zcptrnmin(ji,jj,jk) = MIN( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
    176                      zcptrbmax(ji,jj,jk) = MAX( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
    177                      zcptrnmax(ji,jj,jk) = MAX( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
    178                   END DO 
    179                END DO 
    180             END DO 
    181             ztrcorb = glob_sum( zcptrbmin(:,:,:) ) 
    182             ztrcorn = glob_sum( zcptrnmin(:,:,:) ) 
    183             ztrmasb = glob_sum( zcptrbmax(:,:,:) ) 
    184             ztrmasn = glob_sum( zcptrnmax(:,:,:) ) 
     161            ztrcorb = glob_sum( MIN( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
     162            ztrcorn = glob_sum( MIN( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
     163 
     164            ztrmasb = glob_sum( MAX( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
     165            ztrmasn = glob_sum( MAX( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
    185166 
    186167            IF( ztrcorb /= 0 ) THEN 
    187168               zcoef = 1. + ztrcorb / ztrmasb 
    188 !$OMP PARALLEL DO schedule(static) private(jk) 
    189169               DO jk = 1, jpkm1 
    190                   DO jj = 1, jpj 
    191                      DO ji = 1, jpi 
    192                         ptrb(ji,jj,jk,jn) = MAX( 0., ptrb(ji,jj,jk,jn) ) 
    193                         ptrb(ji,jj,jk,jn) = ptrb(ji,jj,jk,jn) * zcoef * tmask(ji,jj,jk) 
    194                      END DO 
    195                   END DO 
     170                  ptrb(:,:,jk,jn) = MAX( 0., ptrb(:,:,jk,jn) ) 
     171                  ptrb(:,:,jk,jn) = ptrb(:,:,jk,jn) * zcoef * tmask(:,:,jk) 
    196172               END DO 
    197173            ENDIF 
     
    199175            IF( ztrcorn /= 0 ) THEN 
    200176               zcoef = 1. + ztrcorn / ztrmasn 
    201 !$OMP PARALLEL DO schedule(static) private(jk) 
    202177               DO jk = 1, jpkm1 
    203                   DO jj = 1, jpj 
    204                      DO ji = 1, jpi 
    205                         ptrn(ji,jj,jk,jn) = MAX( 0., ptrn(ji,jj,jk,jn) ) 
    206                         ptrn(ji,jj,jk,jn) = ptrn(ji,jj,jk,jn) * zcoef * tmask(ji,jj,jk) 
    207                      END DO 
    208                   END DO 
     178                  ptrn(:,:,jk,jn) = MAX( 0., ptrn(:,:,jk,jn) ) 
     179                  ptrn(:,:,jk,jn) = ptrn(:,:,jk,jn) * zcoef * tmask(:,:,jk) 
    209180               END DO 
    210181            ENDIF 
     
    213184               ! 
    214185               zs2rdt = 1. / ( 2. * rdt ) 
    215 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    216                DO jk = 1, jpk 
    217                   DO jj = 1, jpj 
    218                      DO ji = 1, jpi 
    219                         ztrtrdb(ji,jj,jk) = ( ptrb(ji,jj,jk,jn) - ztrtrdb(ji,jj,jk) ) * zs2rdt 
    220                         ztrtrdn(ji,jj,jk) = ( ptrn(ji,jj,jk,jn) - ztrtrdn(ji,jj,jk) ) * zs2rdt 
    221                      END DO 
    222                   END DO 
    223                END DO 
    224  
     186               ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
     187               ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
    225188               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    226189               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
     
    236199 
    237200           IF( l_trdtrc ) THEN 
    238 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    239               DO jk = 1, jpk 
    240                  DO jj = 1, jpj 
    241                     DO ji = 1, jpi 
    242                        ztrtrdb(ji,jj,jk) = ptrb(ji,jj,jk,jn)                        ! save input trb for trend computation 
    243                        ztrtrdn(ji,jj,jk) = ptrn(ji,jj,jk,jn) 
    244                     END DO 
    245                  END DO 
    246               END DO 
    247            END IF 
    248  
    249 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    250            DO jk = 1, jpkm1 
    251               DO jj = 1, jpj 
    252                  DO ji = 1, jpi 
    253                     ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 
    254                     ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 
    255                  END DO 
    256               END DO 
    257            END DO 
    258  
    259            IF( l_trdtrc ) THEN 
     201              ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
     202              ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
     203           ENDIF 
     204 
     205            DO jk = 1, jpkm1 
     206               DO jj = 1, jpj 
     207                  DO ji = 1, jpi 
     208                     ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 
     209                     ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 
     210                  END DO 
     211               END DO 
     212            END DO 
     213          
     214            IF( l_trdtrc ) THEN 
    260215               ! 
    261216               zs2rdt = 1. / ( 2. * rdt * REAL( nn_dttrc, wp ) ) 
    262 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    263                DO jk = 1, jpk 
    264                   DO jj = 1, jpj 
    265                      DO ji = 1, jpi 
    266                         ztrtrdb(ji,jj,jk) = ( ptrb(ji,jj,jk,jn) - ztrtrdb(ji,jj,jk) ) * zs2rdt 
    267                         ztrtrdn(ji,jj,jk) = ( ptrn(ji,jj,jk,jn) - ztrtrdn(ji,jj,jk) ) * zs2rdt 
    268                      END DO 
    269                   END DO 
    270                END DO 
     217               ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
     218               ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
    271219               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    272220               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
     
    279227 
    280228      IF( l_trdtrc )  CALL wrk_dealloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 
    281       CALL wrk_dealloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 
    282229 
    283230   END SUBROUTINE trc_rad_sms 
Note: See TracChangeset for help on using the changeset viewer.