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.
Diff [20:30] for / – NEMO

Changes in / [20:30]


Ignore:
Location:
/trunk/NEMO/OPA_SRC
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • /trunk/NEMO/OPA_SRC/DIA/diawri.F90

    r20 r30  
    371371         CALL histdef( nid_W, "soleahtw", "lateral eddy diffusivity"           , "m2/s"   ,   &  ! ahtw 
    372372            &          jpi, jpj, nh_W, 1  , 1, 1  , - 99, 32, clop, zsto, zout ) 
    373          IF( lk_traldf_eiv ) THEN 
     373# if defined key_traldf_eiv  
    374374            CALL histdef( nid_W, "soleaeiw", "eddy induced vel. coeff. at w-point", "m2/s",   &  ! aeiw 
    375375               &       jpi, jpj, nh_W, 1  , 1, 1  , - 99, 32, clop, zsto, zout ) 
    376          ENDIF 
     376# endif 
    377377#endif 
    378378 
     
    482482#if defined key_traldf_c2d 
    483483      CALL histwrite( nid_W, "soleahtw", it, ahtw          , ndim_hT, ndex_hT )   ! lateral eddy diff. coef. 
    484       IF( lk_traldf_eiv ) THEN 
     484# if defined key_traldf_eiv 
    485485         CALL histwrite( nid_W, "soleaeiw", it, aeiw       , ndim_hT, ndex_hT )   ! EIV coefficient at w-point 
    486       ENDIF 
     486# endif 
    487487#endif 
    488488 
  • /trunk/NEMO/OPA_SRC/DIA/ptr.F90

    r20 r30  
    1616   USE oce           ! ocean dynamics and active tracers 
    1717   USE dom_oce       ! ocean space and time domain 
     18   USE ldftra_oce    ! ??? 
     19   USE lib_mpp 
     20   USE in_out_manager 
    1821 
    1922   IMPLICIT NONE 
     
    2124 
    2225   !! *  Routine accessibility 
    23    PUBLIC dia_ptr    ! call by stp routine 
    24    PUBLIC prt_vj     ! call by tra_ldf & tra_adv routines 
     26   PUBLIC dia_ptr_init   ! call in step module 
     27   PUBLIC dia_ptr        ! call by in step module 
     28   PUBLIC prt_vj         ! call by tra_ldf & tra_adv routines 
    2529 
    2630   !! * Share Module variables 
    27    LOGICAL, PUBLIC, PARAMETER ::   lk_diaptr = .TRUE.    ! poleward transport flag 
    28    INTEGER, PUBLIC ::      !!! ** ptr namelist (namptr) ** 
    29       nf_ptr = 15           ! frequency of ptr computation 
     31   LOGICAL, PUBLIC, PARAMETER ::   lk_diaptr = .TRUE.    !: poleward transport flag 
     32   INTEGER, PUBLIC ::    & !!: ** ptr namelist (namptr) ** 
     33      nf_ptr = 15           !: frequency of ptr computation 
    3034   REAL(wp), PUBLIC, DIMENSION(jpj) ::   &   ! poleward transport 
    31       pht_adv, pst_adv,  &  ! heat and salt: advection 
    32       pht_ove, pst_ove,  &  ! heat and salt: overturning 
    33       pht_ldf, pst_ldf,  &  ! heat and salt: lateral diffusion 
    34       pht_eiv, pst_eiv      ! heat and salt: bolus advection 
     35      pht_adv, pst_adv,  &  !: heat and salt: advection 
     36      pht_ove, pst_ove,  &  !: heat and salt: overturning 
     37      pht_ldf, pst_ldf,  &  !: heat and salt: lateral diffusion 
     38      pht_eiv, pst_eiv      !: heat and salt: bolus advection 
    3539 
    3640   !! Module variables 
     
    4549   !! * Substitutions 
    4650#  include "domzgr_substitute.h90" 
     51#  include "vectopt_loop_substitute.h90" 
    4752   !!---------------------------------------------------------------------- 
    4853   !!   OPA 9.0 , LODYC-IPSL  (2003) 
     
    7277      !! * local declarations 
    7378      INTEGER  ::   ji, jj, jk        ! dummy loop arguments 
     79      INTEGER  ::   ijpj = jpj        ! ??? 
    7480      REAL(wp),DIMENSION(jpj) ::   & 
    7581         p_fval                       ! function value 
     
    8591         END DO 
    8692      END DO 
    87  
    88 #if defined key_mpp 
    89       CALL mpp_sum( p_fval, jpj )     !!bug  I presume 
    90 #endif 
     93      IF( lk_mpp )   CALL mpp_sum( p_fval, ijpj )     !!bug  I presume 
    9194 
    9295   END FUNCTION ptr_vj 
     
    127130         END DO 
    128131      END DO 
    129  
    130 #if defined key_mpp 
    131       CALL mpp_sum( p_fval, jpj*jpk )    !!bug  I presume 
    132 #endif 
     132      IF( lk_mpp)   CALL mpp_sum( p_fval, jpj*jpk )    !!bug  I presume 
    133133 
    134134   END FUNCTION ptr_vjk 
     
    171171      END DO 
    172172      p_fval(:,:) = p_val(:,:) * 0.5 
    173  
    174 #if defined key_mpp 
    175       CALL mpp_sum( p_fval, jpj*jpk )         !!bug  I presume 
    176 #endif 
     173      IF( lk_mpp )   CALL mpp_sum( p_fval, jpj*jpk )         !!bug  I presume 
    177174 
    178175   END FUNCTION ptr_vtjk 
     
    300297               zphi(:) = gphiv(ji,:)         ! if iline is in the local domain 
    301298            END DO 
    302 #  if defined key_mpp 
    303             CALL mpp_sum( zphi, jpj )        ! provide the correct zphi to all local domains 
    304 #  endif 
     299            IF( lk_mpp )   CALL mpp_sum( zphi, jpj )        ! provide the correct zphi to all local domains 
     300 
    305301            !                                        ! ======================= 
    306302         ELSE                                        !   OTHER configurations 
     
    402398               zphi(:) = gphiv(ji,:)         ! if iline is in the local domain 
    403399            END DO 
    404 #  if defined key_mpp 
    405             CALL mpp_sum( zphi, jpj )        ! provide the correct zphi to all local domains 
    406 #  endif 
     400            IF( lk_mpp )   CALL mpp_sum( zphi, jpj )        ! provide the correct zphi to all local domains 
     401 
    407402            !                                        ! ======================= 
    408403         ELSE                                        !   OTHER configurations 
     
    515510CONTAINS 
    516511   SUBROUTINE dia_ptr( kt )        ! Empty routine 
    517       WRITE(*,*) kt 
     512      WRITE(*,*) 'dia_ptr: You should not have seen this print! error?', kt 
    518513   END SUBROUTINE dia_ptr 
     514   SUBROUTINE dia_ptr_init         ! Empty routine 
     515      WRITE(*,*) 'dia_ptr_init: You should not have seen this print! error?' 
     516   END SUBROUTINE dia_ptr_init 
    519517#endif 
    520518 
  • /trunk/NEMO/OPA_SRC/DOM/domhgr.F90

    r20 r30  
    101101      !! * local declarations 
    102102      INTEGER  ::   ji, jj          ! dummy loop indices 
    103       INTEGER  ::   jeq             ! index of equator T point (computed for case 4) 
     103      INTEGER  ::   ijeq             ! index of equator T point (computed for case 4) 
    104104      REAL(wp) ::   & 
    105105         zti, zui, zvi, zfi,     &  ! temporary scalars 
     
    234234         !  The formula should work even if the equator is outside the domain. 
    235235         zarg = rpi / 4. - rpi / 180. * ppgphi0 / 2. 
    236          jeq = ABS( 180./rpi * LOG( COS( zarg ) / SIN( zarg ) ) / ppe1_deg ) 
    237  
    238          IF(lwp) WRITE(numout,*) '          Index of the equator on the MERCATOR grid:', jeq 
     236         ijeq = ABS( 180./rpi * LOG( COS( zarg ) / SIN( zarg ) ) / ppe1_deg ) 
     237 
     238         IF(lwp) WRITE(numout,*) '          Index of the equator on the MERCATOR grid:', ijeq 
    239239 
    240240         DO jj = 1, jpj 
    241241            DO ji = 1, jpi 
    242                zti = FLOAT( ji - 1 + nimpp - 1 )         ;   ztj = FLOAT( jj - jeq + njmpp - 1 ) 
    243                zui = FLOAT( ji - 1 + nimpp - 1 ) + 0.5   ;   zuj = FLOAT( jj - jeq + njmpp - 1 ) 
    244                zvi = FLOAT( ji - 1 + nimpp - 1 )         ;   zvj = FLOAT( jj - jeq + njmpp - 1 ) + 0.5 
    245                zfi = FLOAT( ji - 1 + nimpp - 1 ) + 0.5   ;   zfj = FLOAT( jj - jeq + njmpp - 1 ) + 0.5 
     242               zti = FLOAT( ji - 1 + nimpp - 1 )         ;   ztj = FLOAT( jj - ijeq + njmpp - 1 ) 
     243               zui = FLOAT( ji - 1 + nimpp - 1 ) + 0.5   ;   zuj = FLOAT( jj - ijeq + njmpp - 1 ) 
     244               zvi = FLOAT( ji - 1 + nimpp - 1 )         ;   zvj = FLOAT( jj - ijeq + njmpp - 1 ) + 0.5 
     245               zfi = FLOAT( ji - 1 + nimpp - 1 ) + 0.5   ;   zfj = FLOAT( jj - ijeq + njmpp - 1 ) + 0.5 
    246246         ! Longitude 
    247247               glamt(ji,jj) = ppglam0 + ppe1_deg * zti 
     
    336336         zf0     = 2. * omega * SIN( rad * zphi0 )                            ! compute f0 1st point south 
    337337 
    338          ff(:,:) = ( zf0  + zbeta * gphif(:,:) )                          ! f = f0 +beta* y ( y=0 at south) 
     338         ff(:,:) = ( zf0  + zbeta * gphif(:,:) * 1.e+3 )                      ! f = f0 +beta* y ( y=0 at south) 
    339339 
    340340         IF(lwp) WRITE(numout,*) '          Beta-plane: Beta parameter = constant = ', ff(1,1) 
     
    560560         !                                             ! ===================== 
    561561         IF( n_cla == 0 ) THEN 
    562             e2u( mi0(160):mi1(161) , mj0(88):mj1(88) ) =  18.e3   ! Bab el Mandeb (e2u = 18 km) 
     562            ii0 = 160   ;   ii1 = 161        ! Bab el Mandeb (e2u = 18 km) 
     563            ij0 =  88   ;   ij1 =  88   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij0) ) =  18.e3  
    563564            IF(lwp) WRITE(numout,*) 
    564565            IF(lwp) WRITE(numout,*) '          Bab el Mandeb: e2u reduced to 18 km' 
    565566         ENDIF  
    566   
    567          e2u( mi0(145):mi1(146) , mj0(116):mj1(116) ) =  15.e3    ! Sound Strait (e2u = 15 km) 
     567 
     568         ii0 = 145   ;   ii1 = 146        ! Sound Strait (e2u = 15 km) 
     569         ij0 = 116   ;   ij1 = 116   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij0) ) =  15.e3  
    568570         IF(lwp) WRITE(numout,*) 
    569571         IF(lwp) WRITE(numout,*) '        : Reduced e2u at the Sound Strait' 
  • /trunk/NEMO/OPA_SRC/DOM/domzgr.F90

    r20 r30  
    338338               DO jj = 1, jpjdta 
    339339                  DO ji = 1, jpidta 
    340                      IF( gdepw(jk) < zdta(ji,jj) .AND. zdta(ji,jj) <= gdepw(jk+1) )   idta(ji,jj) = jk 
     340                     IF( gdept(jk) < zdta(ji,jj) .AND. zdta(ji,jj) <= gdept(jk+1) )   idta(ji,jj) = jk 
    341341                  END DO 
    342342               END DO 
     
    346346         ! set boundary conditions (caution, idta on the global domain: use of jperio, not nperio) 
    347347         IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 
    348             idta( : , 1 ) = -1                ;      zdta( : , 1 ) = -1.e0 
    349             idta( : ,jpj) =  0                ;      zdta( : ,jpj) =  0.e0 
     348            idta( :    , 1    ) = -1                ;      zdta( :    , 1    ) = -1.e0 
     349            idta( :    ,jpjdta) =  0                ;      zdta( :    ,jpjdta) =  0.e0 
    350350         ELSEIF( jperio == 2 ) THEN 
    351             idta( : , 1 ) = idta( : ,  3  )   ;      zdta( : , 1 ) = zdta( : ,  3  ) 
    352             idta( : ,jpj) = 0                 ;      zdta( : ,jpj) =  0.e0 
    353             idta( 1 , : ) = 0                 ;      zdta( 1 , : ) =  0.e0 
    354             idta(jpi, : ) = 0                 ;      zdta(jpi, : ) =  0.e0 
     351            idta( :    , 1    ) = idta( : ,  3  )   ;      zdta( :    , 1    ) = zdta( : ,  3  ) 
     352            idta( :    ,jpjdta) = 0                 ;      zdta( :    ,jpjdta) =  0.e0 
     353            idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0.e0 
     354            idta(jpidta, :    ) = 0                 ;      zdta(jpidta, :    ) =  0.e0 
    355355         ELSE 
    356             idta( : , 1 ) = 0                 ;      zdta( : , 1 ) =  0.e0 
    357             idta( : ,jpj) = 0                 ;      zdta( : ,jpj) =  0.e0 
    358             idta( 1 , : ) = 0                 ;      zdta( 1 , : ) =  0.e0 
    359             idta(jpi, : ) = 0                 ;      zdta(jpi, : ) =  0.e0 
     356            idta( :    , 1    ) = 0                 ;      zdta( :    , 1    ) =  0.e0 
     357            idta( :    ,jpjdta) = 0                 ;      zdta( :    ,jpjdta) =  0.e0 
     358            idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0.e0 
     359            idta(jpidta, :    ) = 0                 ;      zdta(jpidta, :    ) =  0.e0 
     360         ENDIF 
     361 
     362         !  EEL R5 configuration with east and west open boundaries. 
     363         !  Two rows of zeroes are needed at the south and north for OBCs 
     364           
     365         IF( cp_cfg == "eel" .AND. jp_cfg == 5 ) THEN 
     366            idta( : , 2      ) = 0                 ;      zdta( : , 2      ) =  0.e0 
     367!!CT            idta( : ,jpjdta-1) = 0                 ;      zdta( : ,jpjdta-1) =  0.e0 
    360368         ENDIF 
    361369 
     
    611619         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points suppressed' 
    612620      ENDIF 
    613 #if defined key_mpp 
    614       zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    615       CALL lbc_lnk( zbathy, 'T', 1. ) 
    616       mbathy(:,:) = INT( zbathy(:,:) ) 
    617 #endif 
     621      IF( lk_mpp ) THEN 
     622         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     623         CALL lbc_lnk( zbathy, 'T', 1. ) 
     624         mbathy(:,:) = INT( zbathy(:,:) ) 
     625      ENDIF 
    618626 
    619627      ! 3.2 East-west cyclic boundary conditions 
     
    622630         IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west',   & 
    623631            ' boundary: nperio = ', nperio 
    624 #if defined key_mpp 
    625          IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
    626             IF( jperio /= 1 )   mbathy(1,:) = 0 
    627          ENDIF 
    628          IF( nbondi == 1 .OR. nbondi == 2 ) THEN 
    629             IF( jperio /= 1 )   mbathy(nlci,:) = 0 
    630          ENDIF 
    631 #else 
    632          mbathy( 1 ,:) = 0 
    633          mbathy(jpi,:) = 0 
    634 #endif 
     632         IF( lk_mpp ) THEN 
     633            IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
     634               IF( jperio /= 1 )   mbathy(1,:) = 0 
     635            ENDIF 
     636            IF( nbondi == 1 .OR. nbondi == 2 ) THEN 
     637               IF( jperio /= 1 )   mbathy(nlci,:) = 0 
     638            ENDIF 
     639         ELSE 
     640            mbathy( 1 ,:) = 0 
     641            mbathy(jpi,:) = 0 
     642         ENDIF 
    635643      ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio ==  6 ) THEN 
    636644         IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions',   & 
     
    656664 
    657665         !  Boundary condition on mbathy 
    658 #   if ! defined key_mpp 
    659          !!bug ???  y reflechir! 
    660          !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
    661          zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    662          CALL lbc_lnk( zbathy, 'T', 1. ) 
    663          mbathy(:,:) = INT( zbathy(:,:) ) 
    664 #   endif 
     666         IF( .NOT.lk_mpp ) THEN  
     667            !!bug ???  y reflechir! 
     668            !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
     669            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     670            CALL lbc_lnk( zbathy, 'T', 1. ) 
     671            mbathy(:,:) = INT( zbathy(:,:) ) 
     672         ENDIF 
    665673 
    666674      ENDIF 
  • /trunk/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r20 r30  
    126126      ENDIF 
    127127 
    128       IF( .NOT. lk_sco ) THEN          ! horizontal = iso-level except in s-coordinate 
    129          ln_dynldf_level = ln_dynldf_level .OR. ln_dynldf_hor 
     128      IF( lk_sco ) THEN          ! s-coordinates: rotation required for horizontal or isopycnal direction 
     129         IF( ( ln_dynldf_iso .OR. ln_dynldf_hor ) .AND. .NOT.lk_ldfslp ) THEN 
     130            IF(lwp) WRITE(numout,cform_err) 
     131            IF(lwp) WRITE(numout,*) '          the rotation of the viscous tensor require key_ldfslp' 
     132            IF( .NOT.lk_esopa )   nstop = nstop + 1 
     133         ENDIF 
     134      ELSE                       ! z-coordinates with/without partial step: 
     135         ln_dynldf_level = ln_dynldf_level .OR. ln_dynldf_hor      ! level mixing = horizontal mixing 
    130136         ln_dynldf_hor   = .FALSE. 
    131137         IF(lwp) WRITE(numout,*) '          horizontal mixing in z-coord or partial steps: force ln_dynldf_level = T' 
    132          IF(lwp) WRITE(numout,*) '             ln_dynldf_level = ', ln_dynldf_level, ' ln_dynldf_hor = ', ln_dynldf_hor 
    133          IF(lwp) WRITE(numout,*) '             ln_dynldf_t 1: ', .NOT. lk_ldfslp .OR. .NOT. lk_esopa   & 
    134                                                , '2 ' , ln_dynldf_iso .OR. .NOT. ln_dynldf_hor 
    135       ENDIF 
    136       IF( .NOT.lk_ldfslp .AND. ( ln_dynldf_iso .OR. .NOT. ln_dynldf_hor ) ) THEN 
    137          IF( .NOT.lk_esopa ) THEN 
     138         IF(lwp) WRITE(numout,*) '                                                  and    force ln_dynldf_hor   = F' 
     139         IF( ln_dynldf_iso .AND. .NOT.lk_ldfslp ) THEN             ! rotation required for isopycnal mixing 
    138140            IF(lwp) WRITE(numout,cform_err) 
    139             IF(lwp) WRITE(numout,*) '          the rotation of the diffusive tensor require key_ldfslp' 
    140             nstop = nstop + 1 
     141            IF(lwp) WRITE(numout,*) '          the rotation of the viscous tensor require key_ldfslp' 
     142            IF( .NOT.lk_esopa )   nstop = nstop + 1 
    141143         ENDIF 
    142144      ENDIF 
    143  
    144145 
    145146      l_dynldf_lap     =       ln_dynldf_lap   .AND. ln_dynldf_level     ! iso-level   laplacian operator 
  • /trunk/NEMO/OPA_SRC/LDF/ldfeiv.F90

    r20 r30  
    295295         DO jj = 2, jpjm1 
    296296            DO ji = fs_2, fs_jpim1   ! vector opt. 
    297                aeiw(ji,jj) = MIN( aeiw(ji,jj), 1000. ) 
     297               aeiw(ji,jj) = MIN( aeiw(ji,jj), aeiv0 ) 
    298298            END DO 
    299299         END DO 
     
    336336#else 
    337337   !!---------------------------------------------------------------------- 
    338    !!   Default option                                         Empty module 
     338   !!   Default option                                         Dummy module 
    339339   !!---------------------------------------------------------------------- 
    340340CONTAINS 
    341    SUBROUTINE ldf_eiv             ! Empty routine 
     341   SUBROUTINE ldf_eiv( kt )       ! Empty routine 
     342      WRITE(*,*) 'ldf_eiv: You should not have seen this print! error?', kt 
    342343   END SUBROUTINE ldf_eiv 
    343344#endif 
  • /trunk/NEMO/OPA_SRC/LDF/ldftra.F90

    r20 r30  
    135135      ENDIF 
    136136 
    137       IF( .NOT. lk_sco ) THEN          ! horizontal = iso-level except in s-coordinate 
    138          ln_traldf_level = ln_traldf_level .OR. ln_traldf_hor 
     137      IF( lk_sco ) THEN          ! s-coordinates: rotation required for horizontal or isopycnal mixing 
     138         IF( ( ln_traldf_iso .OR. ln_traldf_hor ) .AND. .NOT.lk_ldfslp ) THEN 
     139            IF(lwp) WRITE(numout,cform_err) 
     140            IF(lwp) WRITE(numout,*) '          the rotation of the diffusive tensor require key_ldfslp' 
     141            IF( .NOT.lk_esopa )   nstop = nstop + 1 
     142         ENDIF 
     143      ELSE                       ! z-coordinates with/without partial step: 
     144         ln_traldf_level = ln_traldf_level .OR. ln_traldf_hor      ! level diffusion = horizontal diffusion 
    139145         ln_traldf_hor   = .FALSE. 
    140       ENDIF 
    141       IF( .NOT.lk_ldfslp .AND. ( ln_traldf_iso .OR. .NOT.ln_traldf_hor ) ) THEN 
    142          IF( .NOT.lk_esopa ) THEN 
     146         IF(lwp) WRITE(numout,*) '          horizontal mixing in z-coord or partial steps: force ln_traldf_level = T' 
     147         IF(lwp) WRITE(numout,*) '                                                  and    force ln_traldf_hor   = F' 
     148         IF( ln_traldf_iso .AND. .NOT.lk_ldfslp ) THEN             ! rotation required for isopycnal mixing 
    143149            IF(lwp) WRITE(numout,cform_err) 
    144150            IF(lwp) WRITE(numout,*) '          the rotation of the diffusive tensor require key_ldfslp' 
    145             nstop = nstop + 1 
     151            IF( .NOT.lk_esopa )   nstop = nstop + 1 
    146152         ENDIF 
    147153      ENDIF 
  • /trunk/NEMO/OPA_SRC/OBC/obcdta.F90

    r20 r30  
    1919   USE daymod          ! calendar 
    2020   USE in_out_manager  ! I/O logical units 
     21   USE lib_mpp         ! distribued memory computing 
    2122 
    2223 
     
    4243   SUBROUTINE obc_dta_uvt ( kt ) 
    4344      !!--------------------------------------------------------------------------- 
    44       !!                         SUBROUTINE obc_dta_uvt  
    45       !!                        ************************ 
    46       !! ** Purpose : 
    47       !!      Find the climatological  boundary arrays for the specified date,  
     45      !!                      ***  SUBROUTINE obc_dta_uvt  *** 
     46      !!                     
     47      !! ** Purpose :   Find the climatological  boundary arrays for the specified date,  
    4848      !!      Originally this routine interpolated between monthly fields 
    4949      !!      of a climatology. 
     
    5151      !!      and do not need to interpolate. 
    5252      !! 
    53       !! ** Method : 
    54       !!      Determine the current month from kdat, and interpolate for the 
    55       !!      current day. 
     53      !! ** Method  :   Determine the current month from kdat, and interpolate for 
     54      !!      the current day. 
    5655      !! 
    5756      !! History : 
     
    149148                        sedta(ij,jk,1) = sn(ji,jj,jk)*tmask(ji,jj,jk) 
    150149                        tedta(ij,jk,1) = tn(ji,jj,jk)*tmask(ji,jj,jk) 
    151                         uedta(ij,jk,1) = 0.1*umask(ji,jj,jk) 
     150                        uedta(ij,jk,1) = un(ji,jj,jk)*umask(ji,jj,jk) 
    152151                     END DO 
    153152                  END DO 
     
    240239            IF( nobc_dta == 0 )   THEN                ! initial state used 
    241240               !                                      ! ================== ! 
    242             DO ji = fs_niw0, fs_niw1 ! Vector opt. 
     241               DO ji = fs_niw0, fs_niw1 ! Vector opt. 
     242                  DO jk = 1, jpkm1 
     243                     DO jj = 1, jpj 
     244                        ij = jj -1 + njmpp 
     245                        swdta(ij,jk,1) = sn(ji,jj,jk)*tmask(ji,jj,jk) 
     246                        twdta(ij,jk,1) = tn(ji,jj,jk)*tmask(ji,jj,jk) 
     247                        uwdta(ij,jk,1) = un(ji,jj,jk)*umask(ji,jj,jk) 
     248                     END DO 
     249                  END DO 
     250               END DO 
     251    
    243252               DO jk = 1, jpkm1 
    244253                  DO jj = 1, jpj 
    245254                     ij = jj -1 + njmpp 
    246                      swdta(ij,jk,1) = sn(ji,jj,jk)*tmask(ji,jj,jk) 
    247                      twdta(ij,jk,1) = tn(ji,jj,jk)*tmask(ji,jj,jk) 
    248                      uwdta(ij,jk,1) = 0.1*umask(ji,jj,jk) 
     255                     sfow(jj,jk) = swdta(ij,jk,1)*twmsk(jj,jk) 
     256                     tfow(jj,jk) = twdta(ij,jk,1)*twmsk(jj,jk) 
     257                     ufow(jj,jk) = uwdta(ij,jk,1)*uwmsk(jj,jk) 
    249258                  END DO 
    250259               END DO 
    251             END DO 
    252  
    253             DO jk = 1, jpkm1 
    254                DO jj = 1, jpj 
    255                   ij = jj -1 + njmpp 
    256                   sfow(jj,jk) = swdta(ij,jk,1)*twmsk(jj,jk) 
    257                   tfow(jj,jk) = twdta(ij,jk,1)*twmsk(jj,jk) 
    258                   ufow(jj,jk) = uwdta(ij,jk,1)*uwmsk(jj,jk) 
    259                END DO 
    260             END DO 
    261260               !                                      ! =================== ! 
    262261            ELSE                                      ! read in obceast.dta 
    263262               !                                      ! =================== ! 
    264             OPEN(UNIT   = inum,       & 
     263               OPEN(UNIT   = inum,      & 
    265264                 IOSTAT = ios,          & 
    266265                 FILE   ='obcwest.dta', & 
     
    268267                 ACCESS ='DIRECT',      & 
    269268                 RECL   = 4096 ) 
    270             IF( ios > 0 ) THEN 
    271                IF(lwp) WRITE(numout,*) 'obc_dta_uvt: Pbm to OPEN the obcwest.dta file ' 
    272                IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    273                nstop = nstop + 1 
    274             END IF 
    275             READ(inum,REC=1) clversion, clcom,irecl 
    276             CLOSE(inum) 
    277             IF(lwp) WRITE(numout,*)'       ' 
    278             IF(lwp) WRITE(numout,*)'         opening obcwest.dta  with irecl=',irecl 
    279             OPEN(UNIT   = inum,       & 
     269               IF( ios > 0 ) THEN 
     270                  IF(lwp) WRITE(numout,*) 'obc_dta_uvt: Pbm to OPEN the obcwest.dta file ' 
     271                  IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     272                  nstop = nstop + 1 
     273               END IF 
     274               READ(inum,REC=1) clversion, clcom,irecl 
     275               CLOSE(inum) 
     276               IF(lwp) WRITE(numout,*)'       ' 
     277               IF(lwp) WRITE(numout,*)'         opening obcwest.dta  with irecl=',irecl 
     278               OPEN(UNIT   = inum,      & 
    280279                 IOSTAT = ios,          & 
    281280                 FILE   ='obcwest.dta', & 
     
    283282                 ACCESS ='DIRECT',      & 
    284283                 RECL   = irecl ) 
    285             IF( ios > 0 ) THEN 
    286                IF(lwp) WRITE(numout,*) 'obc_dta_uvt: Pbm to OPEN the obcwest.dta file ' 
    287                IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    288                nstop = nstop + 1 
    289             END IF 
    290  
    291             ! ... Read datafile and set temperature, salinity and normal velocity 
    292             ! ... initialise the swdta, twdta arrays 
    293             ! ... index 1 refer to before, 2 to after 
    294             DO jk = 1, jpkm1 
    295                irec = 2 +  (jk -1)* jpf 
    296                READ(inum,REC=irec  )((swdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
    297                READ(inum,REC=irec+1)((twdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
    298                READ(inum,REC=irec+2)((uwdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
    299                DO jj = 1, jpj 
    300                   ij = jj -1 + njmpp 
    301                   sfow(jj,jk) = swdta(ij,jk,1)*twmsk(jj,jk) 
    302                   tfow(jj,jk) = twdta(ij,jk,1)*twmsk(jj,jk) 
    303                END DO 
    304             END DO 
    305             CLOSE(inum) 
     284               IF( ios > 0 ) THEN 
     285                  IF(lwp) WRITE(numout,*) 'obc_dta_uvt: Pbm to OPEN the obcwest.dta file ' 
     286                  IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     287                  nstop = nstop + 1 
     288               END IF 
     289 
     290               ! ... Read datafile and set temperature, salinity and normal velocity 
     291               ! ... initialise the swdta, twdta arrays 
     292               ! ... index 1 refer to before, 2 to after 
     293               DO jk = 1, jpkm1 
     294                  irec = 2 +  (jk -1)* jpf 
     295                  READ(inum,REC=irec  )((swdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
     296                  READ(inum,REC=irec+1)((twdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
     297                  READ(inum,REC=irec+2)((uwdta(jj,jk,1),ji=1,1),jj=jpjwd, jpjwf) 
     298                  DO jj = 1, jpj 
     299                     ij = jj -1 + njmpp 
     300                     sfow(jj,jk) = swdta(ij,jk,1)*twmsk(jj,jk) 
     301                     tfow(jj,jk) = twdta(ij,jk,1)*twmsk(jj,jk) 
     302                  END DO 
     303               END DO 
     304               CLOSE(inum) 
    306305 
    307306#if ! defined key_dynspg_fsc 
    308             ! ... Rigid lid case: make sure uwdta is baroclinic velocity 
    309             ! ... In rigid lid case uwdta needs to be the baroclinic component. 
    310  
    311             CALL obc_cli( uwdta, ucliw, fs_niw0, fs_niw1, 0, jpj, njmpp )   
     307               ! ... Rigid lid case: make sure uwdta is baroclinic velocity 
     308               ! ... In rigid lid case uwdta needs to be the baroclinic component. 
     309 
     310               CALL obc_cli( uwdta, ucliw, fs_niw0, fs_niw1, 0, jpj, njmpp )   
    312311 
    313312# endif 
    314             ! ... Set normal velocity (on niw0, niw1 <=> jpiwob) 
    315             DO jk = 1, jpkm1 
    316                 DO jj = 1, jpj 
    317                    ij = jj -1 + njmpp 
    318                    ufow(jj,jk) = uwdta(ij,jk,1)*uwmsk(jj,jk) 
    319                 END DO 
    320             END DO 
     313               ! ... Set normal velocity (on niw0, niw1 <=> jpiwob) 
     314               DO jk = 1, jpkm1 
     315                   DO jj = 1, jpj 
     316                      ij = jj -1 + njmpp 
     317                      ufow(jj,jk) = uwdta(ij,jk,1)*uwmsk(jj,jk) 
     318                   END DO 
     319               END DO 
    321320            ENDIF 
    322321         ENDIF 
     
    332331            vndta(:,:,1) = 0.e0 
    333332 
    334             OPEN(UNIT   = inum,        & 
     333            OPEN(UNIT   = inum,          & 
    335334                 IOSTAT = ios,           & 
    336335                 FILE   ='obcnorth.dta', & 
     
    528527      !! * Arguments 
    529528      INTEGER,INTENT(in) :: kt  
    530       WRITE(*,*) kt 
     529      WRITE(*,*) 'obc_dta_psi: You should not have seen this print! error?', kt 
    531530   END SUBROUTINE obc_dta_psi 
    532531#else 
     
    567566      !! * Local declarations 
    568567      INTEGER ::   ji, jj, jnic, jip         ! dummy loop indices 
     568      INTEGER ::   inum = 11                 ! temporary logical unit 
    569569      INTEGER ::   ip, ii, ij, iii, ijj 
    570570      INTEGER ::   kbsfstart 
     
    622622         END DO 
    623623      END IF 
    624 # if defined key_mpp 
    625       CALL mpprisl( gcbic, 3 ) 
    626 # endif 
     624 
     625      IF( lk_mpp )   CALL mpp_isl( gcbic, 3 ) 
    627626 
    628627      ! 3. Update the climatological barotropic function at the boundary  
     
    711710   SUBROUTINE obc_dta_uvt( kt )             ! Empty routine 
    712711      INTEGER, INTENT (in) :: kt 
    713       WRITE(*,*) kt 
     712      WRITE(*,*) 'obc_dta_uvt: You should not have seen this print! error?', kt 
    714713   END SUBROUTINE obc_dta_uvt 
    715714 
    716715   SUBROUTINE obc_dta_psi( kt )             ! Empty routine 
    717716      INTEGER, INTENT (in) :: kt 
    718       WRITE(*,*) kt 
     717      WRITE(*,*) 'obc_dta_psi: You should not have seen this print! error?', kt 
    719718   END SUBROUTINE obc_dta_psi 
    720719 
  • /trunk/NEMO/OPA_SRC/OBC/obcini.F90

    r20 r30  
    11 MODULE obcini 
    2 #if defined key_obc 
    32   !!================================================================================= 
    43   !!                       ***  MODULE  obcini  *** 
    54   !! OBC initial state :  Open boundary initial state 
    65   !!================================================================================= 
    7  
     6#if defined key_obc 
     7   !!--------------------------------------------------------------------------------- 
     8   !!   'key_obc'                                             Open Boundary Conditions 
    89   !!--------------------------------------------------------------------------------- 
    910   !! * Modules used 
     
    4142      !!      (t, s)      over 2 time step and 2 rows 
    4243      !!      if ln_rstart = .FALSE. : no restart, fields set to zero 
    43       !!      if ln_rstart = .TRUE.  : restart, fields are read in file numrob 
     44      !!      if ln_rstart = .TRUE.  : restart, fields are read in a file  
    4445      !!      if rdpxxx = 0 then lfbc is set true for this boundary. 
    4546      !! 
    46       !! ** Input file :   restart.obc   : input restart file for open  
    47       !!                                   boundaries (unit file numrob) 
     47      !! ** Input   :   restart.obc file, restart file for open boundaries  
     48      !! 
    4849      !! History : 
    4950      !!   8.0  !  97-07  (G. Madec)  Original code 
     
    5253      !!---------------------------------------------------------------------- 
    5354      !! * Modules used 
    54       USE obcrst,   ONLY :   obc_rst_lec               ! Make obc_rst_lec routine available 
    55       USE obcdom,   ONLY :   obc_dom                   ! Make obc_dom routine available 
     55      USE obcrst,   ONLY :   obc_rst_lec   ! Make obc_rst_lec routine available 
     56      USE obcdom,   ONLY :   obc_dom       ! Make obc_dom routine available 
    5657 
    5758      !! * Local declarations 
     
    6263 
    6364      NAMELIST/namobc/ rdpein, rdpwin, rdpnin, rdpsin,   & 
    64                        rdpeob, rdpwob, rdpnob, rdpsob,   & 
    65                        zbsic1, zbsic2, zbsic3,           & 
    66                        nbic, volemp 
     65         &             rdpeob, rdpwob, rdpnob, rdpsob,   & 
     66         &             zbsic1, zbsic2, zbsic3,           & 
     67         &             nbic, volemp, nobc_dta 
    6768      !!---------------------------------------------------------------------- 
    6869 
     
    135136      IF(lwp) WRITE(numout,*) '         namobc' 
    136137      IF(lwp) WRITE(numout,*) ' ' 
    137       IF(lwp) WRITE(numout,*) '         data in file (=1) or     nobc_dta = ',nobc_dta 
     138      IF(lwp) WRITE(numout,*) '         data in file (=1) or     nobc_dta = ', nobc_dta 
    138139      IF(lwp) WRITE(numout,*) '         initial state used (=0)             ' 
    139140      IF( lwp.AND.lpeastobc ) THEN 
    140141         WRITE(numout,*) '         East open boundary :' 
    141          WRITE(numout,*) '              i index                    jpieob = ',jpieob 
    142          WRITE(numout,*) '              damping time scale (days)  rdpeob = ',rdpeob 
    143          WRITE(numout,*) '              damping time scale (days)  rdpein = ',rdpein 
     142         WRITE(numout,*) '              i index                    jpieob = ', jpieob 
     143         WRITE(numout,*) '              damping time scale (days)  rdpeob = ', rdpeob 
     144         WRITE(numout,*) '              damping time scale (days)  rdpein = ', rdpein 
    144145      END IF 
    145146 
    146147      IF( lwp.AND.lpwestobc ) THEN 
    147148         WRITE(numout,*) '         West open boundary :' 
    148          WRITE(numout,*) '              i index                    jpiwob = ',jpiwob 
    149          WRITE(numout,*) '              damping time scale (days)  rdpwob = ',rdpwob 
    150          WRITE(numout,*) '              damping time scale (days)  rdpwin = ',rdpwin 
     149         WRITE(numout,*) '              i index                    jpiwob = ', jpiwob 
     150         WRITE(numout,*) '              damping time scale (days)  rdpwob = ', rdpwob 
     151         WRITE(numout,*) '              damping time scale (days)  rdpwin = ', rdpwin 
    151152      END IF 
    152153 
    153154      IF( lwp.AND.lpnorthobc ) THEN 
    154155         WRITE(numout,*) '         North open boundary :' 
    155          WRITE(numout,*) '               j index                    jpjnob = ',jpjnob 
    156          WRITE(numout,*) '               damping time scale (days)  rdpnob = ',rdpnob 
    157          WRITE(numout,*) '               damping time scale (days)  rdpnin = ',rdpnin 
     156         WRITE(numout,*) '               j index                    jpjnob = ', jpjnob 
     157         WRITE(numout,*) '               damping time scale (days)  rdpnob = ', rdpnob 
     158         WRITE(numout,*) '               damping time scale (days)  rdpnin = ', rdpnin 
    158159      END IF 
    159160 
    160161      IF( lwp.AND.lpsouthobc ) THEN 
    161162         WRITE(numout,*) '         South open boundary :' 
    162          WRITE(numout,*) '               j index                    jpjsob = ',jpjsob 
    163          WRITE(numout,*) '               damping time scale (days)  rdpsob = ',rdpsob 
    164          WRITE(numout,*) '               damping time scale (days)  rdpsin = ',rdpsin 
     163         WRITE(numout,*) '               j index                    jpjsob = ', jpjsob 
     164         WRITE(numout,*) '               damping time scale (days)  rdpsob = ', rdpsob 
     165         WRITE(numout,*) '               damping time scale (days)  rdpsin = ', rdpsin 
    165166         WRITE(numout,*) ' ' 
    166167      END IF 
     
    537538         END DO 
    538539      END IF 
    539  
    540 # if defined key_mpp 
    541       CALL mpp_sum( obcsurftot ) 
    542 # endif 
     540      IF( lk_mpp )   CALL mpp_sum( obcsurftot )   ! sum over the global domain 
    543541 
    544542# endif 
     
    566564            IF( (njw1 + njmpp - 1) == jpjwf ) ztestmask(2)=ztestmask(2)+ tmask(ji,njw1,1) 
    567565         END DO 
    568 # if defined key_mpp 
    569          CALL mpp_sum( ztestmask, 2 ) 
    570 # endif 
     566         IF( lk_mpp )   CALL mpp_sum( ztestmask, 2 )   ! sum over the global domain 
     567 
    571568         IF( ztestmask(1) /= 0. ) icorner(1)=icorner(1)+1 
    572569         IF( ztestmask(2) /= 0. ) icorner(4)=icorner(4)+1 
     
    587584            IF( (nje1 + njmpp - 1) == jpjef ) ztestmask(2)=ztestmask(2)+ tmask(ji,nje1,1) 
    588585         END DO 
    589 # if defined key_mpp 
    590          CALL mpp_sum( ztestmask, 2 ) 
    591 # endif 
     586         IF( lk_mpp )   CALL mpp_sum( ztestmask, 2 )   ! sum over the global domain 
     587 
    592588        IF( ztestmask(1) /= 0. ) icorner(2)=icorner(2)+1 
    593589        IF( ztestmask(2) /= 0. ) icorner(3)=icorner(3)+1 
     
    608604            IF( (nin1 + nimpp - 1) == jpinf ) ztestmask(2)=ztestmask(2)+ tmask(nin1,jj,1) 
    609605         END DO 
    610 # if defined key_mpp 
    611          CALL mpp_sum( ztestmask, 2 ) 
    612 # endif 
     606         IF( lk_mpp )   CALL mpp_sum( ztestmask, 2 )   ! sum over the global domain 
     607 
    613608         IF( ztestmask(1) /= 0. ) icorner(4)=icorner(4)+1 
    614609         IF( ztestmask(2) /= 0. ) icorner(3)=icorner(3)+1 
     
    629624            IF( (nis1 + nimpp - 1) == jpisf ) ztestmask(2)=ztestmask(2)+ tmask(nis1,jj,1) 
    630625         END DO 
    631 # if defined key_mpp 
    632          CALL mpp_sum( ztestmask, 2 ) 
    633 # endif 
     626         IF( lk_mpp )   CALL mpp_sum( ztestmask, 2 )   ! sum over the global domain 
     627 
    634628         IF( ztestmask(1) /= 0. ) icorner(1)=icorner(1)+1 
    635629         IF( ztestmask(2) /= 0. ) icorner(2)=icorner(2)+1 
     
    695689      ! -------------------------------------------------------------- 
    696690 
    697       ! ... Restart from numrob 
     691      ! ... Restart from restart.obc 
    698692      IF( ln_rstart ) THEN 
    699693         CALL obc_rst_lec 
     
    703697          !     Those have dimensions of local subdomains 
    704698 
    705           bebnd(:,:,:)   = 0.e0 
    706           uebnd(:,:,:,:) = 0.e0 
    707           vebnd(:,:,:,:) = 0.e0 
    708           tebnd(:,:,:,:) = 0.e0  
    709           sebnd(:,:,:,:) = 0.e0 
    710  
    711           bwbnd(:,:,:)   = 0.e0 
    712           uwbnd(:,:,:,:) = 0.e0 
    713           vwbnd(:,:,:,:) = 0.e0 
    714           twbnd(:,:,:,:) = 0.e0  
    715           swbnd(:,:,:,:) = 0.e0 
    716  
    717           bnbnd(:,:,:)   = 0.e0 
    718           unbnd(:,:,:,:) = 0.e0 
    719           vnbnd(:,:,:,:) = 0.e0 
    720           tnbnd(:,:,:,:) = 0.e0  
    721           snbnd(:,:,:,:) = 0.e0 
    722  
    723           bsbnd(:,:,:)   = 0.e0 
    724           usbnd(:,:,:,:) = 0.e0 
    725           vsbnd(:,:,:,:) = 0.e0 
    726           tsbnd(:,:,:,:) = 0.e0  
    727           ssbnd(:,:,:,:) = 0.e0 
     699          bebnd(:,:,:)   = 0.e0   ;   bnbnd(:,:,:)   = 0.e0 
     700          uebnd(:,:,:,:) = 0.e0   ;   unbnd(:,:,:,:) = 0.e0 
     701          vebnd(:,:,:,:) = 0.e0   ;   vnbnd(:,:,:,:) = 0.e0 
     702          tebnd(:,:,:,:) = 0.e0   ;   tnbnd(:,:,:,:) = 0.e0  
     703          sebnd(:,:,:,:) = 0.e0   ;   snbnd(:,:,:,:) = 0.e0 
     704 
     705          bwbnd(:,:,:)   = 0.e0   ;   bsbnd(:,:,:)   = 0.e0 
     706          uwbnd(:,:,:,:) = 0.e0   ;   usbnd(:,:,:,:) = 0.e0 
     707          vwbnd(:,:,:,:) = 0.e0   ;   vsbnd(:,:,:,:) = 0.e0 
     708          twbnd(:,:,:,:) = 0.e0   ;   tsbnd(:,:,:,:) = 0.e0  
     709          swbnd(:,:,:,:) = 0.e0   ;   ssbnd(:,:,:,:) = 0.e0 
    728710 
    729711      END IF 
     
    744726            istop = istop + 1 
    745727         END IF 
    746 # if defined key_mpp 
    747          ! ...  
    748          IF( nimpp > jpieob-5) THEN 
    749             IF(lwp) WRITE(numout,cform_err) 
    750             IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the East OBC' 
    751             IF(lwp) WRITE(numout,*) '        nimpp must be < jpieob-5' 
    752             istop = istop + 1 
    753          END IF 
    754 # else 
    755          IF( tmask(jpieob+1,jpjed  ,1) /= 0. .OR.    & 
    756              tmask(jpieob+1,jpjed+1,1) /= 1.         ) THEN 
    757             IF(lwp) WRITE(numout,cform_err) 
    758             IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
    759             IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
    760             istop = istop + 1 
    761          END IF 
    762          IF( tmask(jpieob+1,jpjef  ,1) /= 0. .OR.  & 
    763              tmask(jpieob+1,jpjef-1,1) /= 1.       ) THEN 
    764             IF(lwp) WRITE(numout,cform_err) 
    765             IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
    766             IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
    767             istop = istop + 1 
    768          END IF 
    769  
    770          ! ... stop if  e r r o r (s)   detected 
    771          IF( istop /= 0 ) THEN 
    772             IF(lwp)WRITE(numout,*) 
    773             IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
    774             IF(lwp)WRITE(numout,*) ' =============== ' 
    775             IF(lwp)WRITE(numout,*) 
    776             nstop = nstop + 1 
    777          END IF 
    778 # endif 
    779       END IF 
     728 
     729         IF( lk_mpp ) THEN 
     730            ! ...  
     731            IF( nimpp > jpieob-5) THEN 
     732               IF(lwp) WRITE(numout,cform_err) 
     733               IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the East OBC' 
     734               IF(lwp) WRITE(numout,*) '        nimpp must be < jpieob-5' 
     735               istop = istop + 1 
     736            ENDIF 
     737         ELSE 
     738            IF( tmask(jpieob+1,jpjed  ,1) /= 0. .OR.    & 
     739                tmask(jpieob+1,jpjed+1,1) /= 1.         ) THEN 
     740               IF(lwp) WRITE(numout,cform_err) 
     741               IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
     742               IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
     743               istop = istop + 1 
     744            END IF 
     745            IF( tmask(jpieob+1,jpjef  ,1) /= 0. .OR.  & 
     746                tmask(jpieob+1,jpjef-1,1) /= 1.       ) THEN 
     747               IF(lwp) WRITE(numout,cform_err) 
     748               IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
     749               IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
     750               istop = istop + 1 
     751            END IF 
     752 
     753            ! ... stop if  e r r o r (s)   detected 
     754            IF( istop /= 0 ) THEN 
     755               IF(lwp)WRITE(numout,*) 
     756               IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
     757               IF(lwp)WRITE(numout,*) ' =============== ' 
     758               IF(lwp)WRITE(numout,*) 
     759               nstop = nstop + 1 
     760            ENDIF 
     761         ENDIF 
     762      ENDIF 
    780763 
    781764      ! ... control of the west boundary 
     
    787770            istop = istop + 1 
    788771         END IF 
    789 # if defined key_mpp 
    790          ! ...  
    791          IF( (nimpp < jpiwob+5) .AND. (nimpp > 1) ) THEN 
    792             IF(lwp) WRITE(numout,cform_err) 
    793             IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the West OBC' 
    794             IF(lwp) WRITE(numout,*) '        nimpp must be > jpiwob-5 or =1' 
    795             istop = istop + 1 
    796          END IF 
    797 # else 
    798          IF( tmask(jpiwob,jpjwd  ,1) /= 0. .OR.    & 
    799              tmask(jpiwob,jpjwd+1,1) /= 1.         ) THEN 
    800             IF(lwp) WRITE(numout,cform_err) 
    801             IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
    802             IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
    803             istop = istop + 1 
    804          END IF 
    805          IF ( tmask(jpieob+1,jpjef  ,1) /= 0. .OR.  & 
    806               tmask(jpieob+1,jpjef-1,1) /= 1.       ) THEN 
    807              IF(lwp) WRITE(numout,cform_err) 
    808              IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
    809              IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
    810              istop = istop + 1 
    811          END IF 
    812  
    813          ! ... stop if  e r r o r (s)   detected 
    814          IF( istop /= 0 ) THEN 
    815             IF(lwp)WRITE(numout,*) 
    816             IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
    817             IF(lwp)WRITE(numout,*) ' =============== ' 
    818             IF(lwp)WRITE(numout,*) 
    819             nstop = nstop + 1 
    820          END IF 
    821 # endif 
    822       END IF 
     772 
     773         IF( lk_mpp ) THEN 
     774            IF( (nimpp < jpiwob+5) .AND. (nimpp > 1) ) THEN 
     775               IF(lwp) WRITE(numout,cform_err) 
     776               IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the West OBC' 
     777               IF(lwp) WRITE(numout,*) '        nimpp must be > jpiwob-5 or =1' 
     778               istop = istop + 1 
     779            ENDIF 
     780         ELSE 
     781            IF( tmask(jpiwob,jpjwd  ,1) /= 0. .OR.    & 
     782                tmask(jpiwob,jpjwd+1,1) /= 1.         ) THEN 
     783               IF(lwp) WRITE(numout,cform_err) 
     784               IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
     785               IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
     786               istop = istop + 1 
     787            END IF 
     788            IF ( tmask(jpieob+1,jpjef  ,1) /= 0. .OR.  & 
     789                 tmask(jpieob+1,jpjef-1,1) /= 1.       ) THEN 
     790                IF(lwp) WRITE(numout,cform_err) 
     791                IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
     792                IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
     793                istop = istop + 1 
     794            END IF 
     795    
     796            ! ... stop if  e r r o r (s)   detected 
     797            IF( istop /= 0 ) THEN 
     798               IF(lwp)WRITE(numout,*) 
     799               IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
     800               IF(lwp)WRITE(numout,*) ' =============== ' 
     801               IF(lwp)WRITE(numout,*) 
     802               nstop = nstop + 1 
     803            ENDIF 
     804         ENDIF 
     805      ENDIF 
    823806 
    824807      ! control of the north boundary 
     
    830813            istop = istop + 1 
    831814         END IF 
    832 # if defined key_mpp 
    833          ! ...  
    834          IF( njmpp > jpjnob-5) THEN 
    835             IF(lwp) WRITE(numout,cform_err) 
    836             IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the North OBC' 
    837             IF(lwp) WRITE(numout,*) '        njmpp must be < jpjnob-5' 
    838             istop = istop + 1 
    839          END IF 
    840 # else 
    841          IF( tmask(jpind  , jpjnob+1,1) /= 0. .OR.    & 
    842              tmask(jpind+1, jpjnob+1,1) /= 1.         ) THEN 
    843             IF(lwp) WRITE(numout,cform_err) 
    844             IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
    845             IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
    846             istop = istop + 1 
    847          END IF 
    848          IF( tmask(jpinf  ,jpjnob+1,1) /= 0. .OR.  & 
    849              tmask(jpinf-1,jpjnob+1,1) /= 1.       ) THEN 
    850             IF(lwp) WRITE(numout,cform_err) 
    851             IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
    852             IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
    853             istop = istop + 1 
    854          END IF 
    855  
    856          ! ... stop if  e r r o r (s)   detected 
    857          IF( istop /= 0 ) THEN 
    858             IF(lwp)WRITE(numout,*) 
    859             IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
    860             IF(lwp)WRITE(numout,*) ' =============== ' 
    861             IF(lwp)WRITE(numout,*) 
    862             nstop = nstop + 1 
    863          END IF 
    864 # endif 
    865       END IF 
     815 
     816         IF( lk_mpp ) THEN 
     817            IF( njmpp > jpjnob-5) THEN 
     818               IF(lwp) WRITE(numout,cform_err) 
     819               IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the North OBC' 
     820               IF(lwp) WRITE(numout,*) '        njmpp must be < jpjnob-5' 
     821               istop = istop + 1 
     822            ENDIF 
     823         ELSE 
     824            IF( tmask(jpind  , jpjnob+1,1) /= 0. .OR.    & 
     825                tmask(jpind+1, jpjnob+1,1) /= 1.         ) THEN 
     826               IF(lwp) WRITE(numout,cform_err) 
     827               IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
     828               IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
     829               istop = istop + 1 
     830            END IF 
     831            IF( tmask(jpinf  ,jpjnob+1,1) /= 0. .OR.  & 
     832                tmask(jpinf-1,jpjnob+1,1) /= 1.       ) THEN 
     833               IF(lwp) WRITE(numout,cform_err) 
     834               IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
     835               IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
     836               istop = istop + 1 
     837            END IF 
     838    
     839            ! ... stop if  e r r o r (s)   detected 
     840            IF( istop /= 0 ) THEN 
     841               IF(lwp)WRITE(numout,*) 
     842               IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
     843               IF(lwp)WRITE(numout,*) ' =============== ' 
     844               IF(lwp)WRITE(numout,*) 
     845               nstop = nstop + 1 
     846            ENDIF 
     847         ENDIF 
     848      ENDIF 
    866849 
    867850      ! control of the south boundary 
     
    873856            istop = istop + 1 
    874857         END IF 
    875 # if defined key_mpp 
    876          ! ...  
    877          IF( (njmpp < jpjsob+5) .AND. (njmpp > 1) ) THEN 
    878             IF(lwp) WRITE(numout,cform_err) 
    879             IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the South OBC' 
    880             IF(lwp) WRITE(numout,*) '        njmpp must be > jpjsob+5 or =1' 
    881             istop = istop + 1 
    882          END IF 
    883 # else 
    884          IF( tmask(jpisd  , jpjsob,1) /= 0. .OR.    & 
    885              tmask(jpisd+1, jpjsob,1) /= 1.         ) THEN 
    886             IF(lwp) WRITE(numout,cform_err) 
    887             IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
    888             IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
    889             istop = istop + 1 
    890          END IF 
    891          IF( tmask(jpisf  ,jpjsob,1) /= 0. .OR.  & 
    892              tmask(jpisf-1,jpjsob,1) /= 1.       ) THEN 
    893             IF(lwp) WRITE(numout,cform_err) 
    894             IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
    895             IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
    896             istop = istop + 1 
    897          END IF 
    898  
    899          ! ... stop if  e r r o r (s)   detected 
    900          IF( istop /= 0 ) THEN 
    901             IF(lwp)WRITE(numout,*) 
    902             IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
    903             IF(lwp)WRITE(numout,*) ' =============== ' 
    904             IF(lwp)WRITE(numout,*) 
    905             nstop = nstop + 1 
    906          END IF 
    907 # endif 
    908       END IF 
     858 
     859         IF( lk_mpp ) THEN 
     860            IF( (njmpp < jpjsob+5) .AND. (njmpp > 1) ) THEN 
     861               IF(lwp) WRITE(numout,cform_err) 
     862               IF(lwp) WRITE(numout,*) '        A sub-domain is too close to the South OBC' 
     863               IF(lwp) WRITE(numout,*) '        njmpp must be > jpjsob+5 or =1' 
     864               istop = istop + 1 
     865            ENDIF 
     866         ELSE 
     867            IF( tmask(jpisd  , jpjsob,1) /= 0. .OR.    & 
     868                tmask(jpisd+1, jpjsob,1) /= 1.         ) THEN 
     869               IF(lwp) WRITE(numout,cform_err) 
     870               IF(lwp) WRITE(numout,*) '           starting point is not a land T-point.' 
     871               IF(lwp) WRITE(numout,*) '      or   starting point + 1 is not a ocean T-point.' 
     872               istop = istop + 1 
     873            END IF 
     874            IF( tmask(jpisf  ,jpjsob,1) /= 0. .OR.  & 
     875                tmask(jpisf-1,jpjsob,1) /= 1.       ) THEN 
     876               IF(lwp) WRITE(numout,cform_err) 
     877               IF(lwp) WRITE(numout,*) '           ending point is not a land T-point.' 
     878               IF(lwp) WRITE(numout,*) '        or ending point - 1 is not a ocean T-point.' 
     879               istop = istop + 1 
     880            END IF 
     881    
     882            ! ... stop if  e r r o r (s)   detected 
     883            IF( istop /= 0 ) THEN 
     884               IF(lwp)WRITE(numout,*) 
     885               IF(lwp)WRITE(numout,*) istop,' E R R O R (S) detected : stop' 
     886               IF(lwp)WRITE(numout,*) ' =============== ' 
     887               IF(lwp)WRITE(numout,*) 
     888               nstop = nstop + 1 
     889            ENDIF 
     890         ENDIF 
     891      ENDIF 
    909892 
    910893   END SUBROUTINE obc_init 
     894 
    911895#else 
    912    !!================================================================================= 
    913    !!                       ***  MODULE  obcini  *** 
    914    !! OBC initial state :  Open boundary initial state 
    915    !!================================================================================= 
     896   !!--------------------------------------------------------------------------------- 
     897   !!   Dummy module                                                NO open boundaries 
     898   !!--------------------------------------------------------------------------------- 
    916899CONTAINS 
    917  
    918    SUBROUTINE obc_init 
    919       !                 This is not an Open boundary mode ==> empty routine 
     900   SUBROUTINE obc_init      ! Dummy routine 
    920901   END SUBROUTINE obc_init 
    921902#endif 
    922903 
     904   !!================================================================================= 
    923905END MODULE obcini 
  • /trunk/NEMO/OPA_SRC/TRA/trabbl_adv.h90

    r20 r30  
    7171         zahu, zahv                        !    "                  " 
    7272      REAL(wp), DIMENSION(jpi,jpj) ::   &  ! temporary workspace arrays 
    73          zalphax,zalphay, zwu, zwv,     &  !    "                  " 
    74          zunb, zvnb, zind,              &  !    "                  " 
     73         zalphax, zwu, zunb,            &  !    "                  " 
     74         zalphay, zwv, zvnb,            &  !    "                  " 
    7575         zwx, zwy, zww, zwz                !    "                  " 
    7676      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    7777         zhdivn                            ! temporary workspace arrays 
    7878      REAL(wp) ::   & 
    79          zfui, zfvj, zbt, zsigna,       &  ! temporary scalars 
    80          zcofi , zupsut, zupsus,        &  !    "         " 
    81          zcofj , zupsvt, zupsvs,        &  !    "         " 
    82          zcenut, zcenus,                &  !    "         " 
    83          zcenvt, zcenvs                    !    "         " 
     79         zfui, zfvj, zbt, zsigna           ! temporary scalars 
    8480      REAL(wp) ::   & 
    85          fsalbt, pft, pfs, pfh,         &  ! statement function 
    86          fsx, fsy, pfx1, pfx2,          &  !    "          " 
    87          pfu, pfv, pfy1, pfy2              !    "          " 
     81         fsalbt, pft, pfs, pfh             ! statement function 
    8882      !!---------------------------------------------------------------------- 
    8983      ! ratio alpha/beta 
     
    106100             +(   0.791325e-08 * pft - 0.933746e-06 ) * pft                  & 
    107101                                     + 0.380374e-04 ) * pfh 
    108       ! Up Stream Advection Scheme 
    109       ! ========================== 
    110       !  fsx: along i-direction 
    111       !  fsy: along j-direction 
    112  
    113       fsx( pfx1, pfx2, pfu ) = ( ( pfu + abs(pfu) ) * pfx1   & 
    114                                 +( pfu - abs(pfu) ) * pfx2 ) * 0.5 
    115       fsy( pfy1, pfy2, pfv ) = ( ( pfv + abs(pfv) ) * pfy1   & 
    116                                 +( pfv - abs(pfv) ) * pfy2 ) * 0.5 
    117102      !!---------------------------------------------------------------------- 
    118103 
     
    142127#endif 
    143128      END DO 
    144 # if defined key_vectopt_loop   &&   ! defined key_autotasking  
    145       j = 1 
     129#if defined key_vectopt_loop   &&   ! defined key_autotasking  
     130      jj = 1 
    146131      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    147132            zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1) 
    148133            zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)   ! retirer le mask en u, v et t ! 
    149134      END DO 
    150 # else 
     135#else 
    151136      DO jj = 1, jpjm1 
    152137         DO ji = 1, jpim1 
     
    178163            zahu(ji,jj) = atrbbl*e2u(ji,jj)*fse3u(ji,jj,iku)/e1u(ji,jj) * umask(ji,jj,1) 
    179164            zahv(ji,jj) = atrbbl*e1v(ji,jj)*fse3v(ji,jj,ikv)/e2v(ji,jj) * vmask(ji,jj,1) 
    180 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
    181          END DO 
    182 #endif 
     165# if ! defined key_vectopt_loop   ||   defined key_autotasking 
     166         END DO 
     167# endif 
    183168      END DO 
    184169#endif 
     
    259244      END SELECT 
    260245 
    261  
    262246      ! lateral boundary conditions on zalphax and zalphay   (unchanged sign) 
    263247       CALL lbc_lnk( zalphax, 'U', 1. )   ;   CALL lbc_lnk( zalphay, 'V', 1. ) 
    264 #endif 
     248 
    265249 
    266250      ! 3. Velocities that are exchanged between ajacent bottom boxes. 
     
    288272          END DO 
    289273 
    290       ! lateral boundary conditions on uzbbl and vzbbl   (changed sign) 
    291        CALL lbc_lnk( uzbbl, 'U', -1. )   ;   CALL lbc_lnk( vzbbl, 'V', -1. ) 
     274      ! lateral boundary conditions on u_bbl and v_bbl   (changed sign) 
     275       CALL lbc_lnk( u_bbl, 'U', -1. )   ;   CALL lbc_lnk( v_bbl, 'V', -1. ) 
    292276 
    293277 
     
    384368!           zwz(ji,jj) = 0.5* zfvj * ( zsnb(ji,jj) + zsnb(ji,jj+1) ) 
    385369            ! upstream scheme 
    386             zwx(ji,jj) = fsx(ztbb(ji,jj),ztbb(ji+1,jj),zfui) 
    387             zwy(ji,jj) = fsy(ztbb(ji,jj),ztbb(ji,jj+1),zfvj) 
    388             zww(ji,jj) = fsx(zsbb(ji,jj),zsbb(ji+1,jj),zfui) 
    389             zwz(ji,jj) = fsy(zsbb(ji,jj),zsbb(ji,jj+1),zfvj) 
     370            zwx(ji,jj) = ( ( zfui + ABS( zfui ) ) * ztbb(ji  ,jj  )   & 
     371               &          +( zfui - ABS( zfui ) ) * ztbb(ji+1,jj  ) ) * 0.5 
     372            zwy(ji,jj) = ( ( zfui + ABS( zfvj ) ) * ztbb(ji  ,jj  )   & 
     373               &          +( zfui - ABS( zfvj ) ) * ztbb(ji  ,jj+1) ) * 0.5 
     374            zww(ji,jj) = ( ( zfui + ABS( zfui ) ) * zsbb(ji  ,jj  )   & 
     375               &          +( zfui - ABS( zfui ) ) * zsbb(ji+1,jj  ) ) * 0.5 
     376            zwz(ji,jj) = ( ( zfui + ABS( zfvj ) ) * zsbb(ji  ,jj  )   & 
     377               &          +( zfui - ABS( zfvj ) ) * zsbb(ji  ,jj+1) ) * 0.5 
    390378#if ! defined key_vectopt_loop   ||   defined key_autotasking 
    391379         END DO 
  • /trunk/NEMO/OPA_SRC/TRA/traldf_iso_zps.F90

    r20 r30  
    44   !! Ocean active tracers:  horizontal component of the lateral tracer mixing trend 
    55   !!============================================================================== 
    6 #if defined key_ldfslp   ||   defined key_esopa 
     6#if ( defined key_ldfslp   &&   defined key_partial_steps )   ||   defined key_esopa 
    77   !!---------------------------------------------------------------------- 
    88   !!   'key_ldfslp'               slope of the lateral diffusive direction 
     
    289289CONTAINS 
    290290   SUBROUTINE tra_ldf_iso_zps( kt )               ! Empty routine 
    291       WRITE(*,*) kt 
     291      WRITE(*,*) 'tra_ldf_iso_zps: You should not have seen this print! error?', kt 
    292292   END SUBROUTINE tra_ldf_iso_zps 
    293293#endif 
Note: See TracChangeset for help on using the changeset viewer.