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 10677 for NEMO – NEMO

Changeset 10677 for NEMO


Ignore:
Timestamp:
2019-02-14T14:08:15+01:00 (5 years ago)
Author:
mathiot
Message:

issue for EW reproducibility

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/fix_ticket2238_solution1/src/OCE/ICB/icbutl.F90

    r10673 r10677  
    100100      ssh_e(:,:) = 0._wp ;  ssh_e(1:jpi, 1:jpj) = ssh_m(:,:) * tmask(:,:,1) 
    101101#endif 
    102  
    103       !! special for ssh which is used to calculate slope 
    104       !! so fudge some numbers all the way around the boundary 
    105       ssh_e(0    ,    :) = ssh_e(1  ,  :) 
    106       ssh_e(jpi+1,    :) = ssh_e(jpi,  :) 
    107       ssh_e(:    ,    0) = ssh_e(:  ,  1) 
    108       ssh_e(:    ,jpj+1) = ssh_e(:  ,jpj) 
    109       ssh_e(0,0)         = ssh_e(1,1) 
    110       ssh_e(jpi+1,0)     = ssh_e(jpi,1) 
    111       ssh_e(0,jpj+1)     = ssh_e(1,jpj) 
    112       ssh_e(jpi+1,jpj+1) = ssh_e(jpi,jpj) 
    113102      CALL lbc_lnk_icb( 'icbutl', ssh_e, 'T', +1._wp, 1, 1 ) 
    114103      ! 
     
    201190         ! since we're looking for four T points containing quadrant we're in of  
    202191         ! current T cell 
    203          ii = MAX(1, INT( pi     )) 
    204          ij = MAX(1, INT( pj     ))    ! T-point 
     192         ii = MAX(0, INT( pi     )) 
     193         ij = MAX(0, INT( pj     ))    ! T-point 
    205194         zi = pi - REAL(ii,wp) 
    206195         zj = pj - REAL(ij,wp) 
    207196      CASE ( 'U' ) 
    208          ii = MAX(1, INT( pi-0.5 )) 
    209          ij = MAX(1, INT( pj     ))    ! U-point 
    210          zi = pi - 0.5 - REAL(ii,wp) 
     197         ii = MAX(0, INT( pi-0.5_wp )) 
     198         ij = MAX(0, INT( pj     ))    ! U-point 
     199         zi = pi - 0.5_wp - REAL(ii,wp) 
    211200         zj = pj - REAL(ij,wp) 
    212201      CASE ( 'V' ) 
    213          ii = MAX(1, INT( pi     )) 
    214          ij = MAX(1, INT( pj-0.5 ))    ! V-point 
     202         ii = MAX(0, INT( pi     )) 
     203         ij = MAX(0, INT( pj-0.5_wp ))    ! V-point 
    215204         zi = pi - REAL(ii,wp) 
    216          zj = pj - 0.5 - REAL(ij,wp) 
     205         zj = pj - 0.5_wp - REAL(ij,wp) 
    217206      CASE ( 'F' ) 
    218          ii = MAX(1, INT( pi-0.5 )) 
    219          ij = MAX(1, INT( pj-0.5 ))    ! F-point 
    220          zi = pi - 0.5 - REAL(ii,wp) 
    221          zj = pj - 0.5 - REAL(ij,wp) 
     207         ii = MAX(0, INT( pi-0.5_wp )) 
     208         ij = MAX(0, INT( pj-0.5_wp ))    ! F-point 
     209         zi = pi - 0.5_wp - REAL(ii,wp) 
     210         zj = pj - 0.5_wp - REAL(ij,wp) 
    222211      END SELECT 
    223212      ! 
     
    235224      ! 
    236225      ! 
    237       icb_utl_bilin_h = ( pfld(ii,ij  ) * (1.-zi) + pfld(ii+1,ij  ) * zi ) * (1.-zj)   & 
    238          &            + ( pfld(ii,ij+1) * (1.-zi) + pfld(ii+1,ij+1) * zi ) *     zj 
     226      icb_utl_bilin_h = ( pfld(ii,ij  ) * (1._wp-zi) + pfld(ii+1,ij  ) * zi ) * (1._wp-zj)   & 
     227         &            + ( pfld(ii,ij+1) * (1._wp-zi) + pfld(ii+1,ij+1) * zi ) *     zj 
    239228      ! 
    240229   END FUNCTION icb_utl_bilin_h 
     
    393382 
    394383      ! find position in this processor. Prevent near edge problems (see #1389) 
    395       IF    ( ii < mig( 1 ) ) THEN   ;   ii = 1 
    396       ELSEIF( ii > mig(jpi) ) THEN   ;   ii = jpi 
     384      IF    ( ii < mig( 1 ) ) THEN   ;   ii = 1       ; PRINT *, 'SHOULD NOT SEE THIS 1' 
     385      ELSEIF( ii > mig(jpi) ) THEN   ;   ii = jpi     ; PRINT *, 'SHOULD NOT SEE THIS jpi' 
    397386      ELSE                           ;   ii = mi1(ii) 
    398387      ENDIF 
    399       IF    ( ij < mjg( 1 ) ) THEN   ;   ij = 1 
    400       ELSEIF( ij > mjg(jpj) ) THEN   ;   ij = jpj 
     388      IF    ( ij < mjg( 1 ) ) THEN   ;   ij = 1       ; PRINT *, 'SHOULD NOT SEE THIS i 1' 
     389      ELSEIF( ij > mjg(jpj) ) THEN   ;   ij = jpj     ; PRINT *, 'SHOULD NOT SEE THIS jpj' 
    401390      ELSE                           ;   ij  = mj1(ij) 
    402391      ENDIF 
    403392      ! 
    404       IF( ii == jpi )   ii = ii-1       
    405       IF( ij == jpj )   ij = ij-1 
     393      IF( ii == jpi ) THEN ; ii = ii-1 ; PRINT *, 'SHOULD NOT SEE THIS ii-1' ; END IF      
     394      IF( ij == jpj ) THEN ; ij = ij-1 ; PRINT *, 'SHOULD NOT SEE THIS ij-1' ; END IF 
    406395      ! 
    407396      IF(    0.0_wp <= zi .AND. zi < 0.5_wp   ) THEN 
     
    435424      ENDIF 
    436425      ! 
    437       icb_utl_bilin_e = ( ze01 * (1.-zi) + ze11 * zi ) *     zj    & 
    438          &            + ( ze00 * (1.-zi) + ze10 * zi ) * (1.-zj) 
     426      icb_utl_bilin_e = ( ze01 * (1._wp-zi) + ze11 * zi ) *        zj    & 
     427         &            + ( ze00 * (1._wp-zi) + ze10 * zi ) * (1._wp-zj) 
    439428      ! 
    440429   END FUNCTION icb_utl_bilin_e 
Note: See TracChangeset for help on using the changeset viewer.