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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90

    r4491 r6225  
    11#define TWO_WAY 
     2#undef DECAL_FEEDBACK 
    23 
    34MODULE agrif_top_update 
     5   !!====================================================================== 
     6   !!                ***  MODULE agrif_top_update  *** 
     7   !! AGRIF :    
     8   !!---------------------------------------------------------------------- 
     9   !! History :   
     10   !!---------------------------------------------------------------------- 
    411 
    512#if defined key_agrif && defined key_top 
    613   USE par_oce 
    714   USE oce 
     15   USE par_trc 
     16   USE trc 
    817   USE dom_oce 
    918   USE agrif_oce 
    10    USE trc 
    1119   USE wrk_nemo   
    1220 
     
    1624   PUBLIC Agrif_Update_Trc 
    1725 
    18    INTEGER, PUBLIC :: nbcline_trc = 0 
     26   INTEGER, PUBLIC ::   nbcline_trc = 0   !: ??? 
    1927 
    2028   !!---------------------------------------------------------------------- 
    21    !! NEMO/NST 3.3 , NEMO Consortium (2010) 
     29   !! NEMO/NST 3.7 , NEMO Consortium (2015) 
    2230   !! $Id$ 
    2331   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    2432   !!---------------------------------------------------------------------- 
    25  
    26    CONTAINS 
     33CONTAINS 
    2734 
    2835   SUBROUTINE Agrif_Update_Trc( kt ) 
    29       !!--------------------------------------------- 
    30       !!   *** ROUTINE Agrif_Update_Trc *** 
    31       !!--------------------------------------------- 
    32       !! 
    33       INTEGER, INTENT(in) :: kt 
    34       REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztra 
    35  
    36    
    37       IF ((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
    38  
    39 #if defined TWO_WAY 
    40       CALL wrk_alloc( jpi, jpj, jpk, jptra, ztra ) 
    41  
     36      !!---------------------------------------------------------------------- 
     37      !!                   *** ROUTINE Agrif_Update_Trc *** 
     38      !!---------------------------------------------------------------------- 
     39      INTEGER, INTENT(in) ::   kt 
     40      !!---------------------------------------------------------------------- 
     41      !  
     42      IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
     43#if defined TWO_WAY    
    4244      Agrif_UseSpecialValueInUpdate = .TRUE. 
    43       Agrif_SpecialValueFineGrid = 0. 
    44   
    45      IF (MOD(nbcline_trc,nbclineupdate) == 0) THEN 
    46          CALL Agrif_Update_Variable(ztra,trn_id, procname=updateTRC) 
     45      Agrif_SpecialValueFineGrid    = 0._wp 
     46      !  
     47      IF( MOD(nbcline_trc,nbclineupdate) == 0 ) THEN 
     48# if ! defined DECAL_FEEDBACK 
     49         CALL Agrif_Update_Variable(trn_id, procname=updateTRC ) 
     50# else 
     51         CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC ) 
     52# endif 
    4753      ELSE 
    48          CALL Agrif_Update_Variable(ztra,trn_id,locupdate=(/0,2/), procname=updateTRC) 
     54# if ! defined DECAL_FEEDBACK 
     55         CALL Agrif_Update_Variable( trn_id, locupdate=(/0,2/), procname=updateTRC ) 
     56# else 
     57         CALL Agrif_Update_Variable( trn_id, locupdate=(/1,2/), procname=updateTRC ) 
     58# endif 
    4959      ENDIF 
    50  
     60      ! 
    5161      Agrif_UseSpecialValueInUpdate = .FALSE. 
    5262      nbcline_trc = nbcline_trc + 1 
    53  
    54       CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztra ) 
    5563#endif 
    56  
     64      ! 
    5765   END SUBROUTINE Agrif_Update_Trc 
    5866 
    59    SUBROUTINE updateTRC(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before) 
    60       !!--------------------------------------------- 
    61       !!   *** ROUTINE UpdateTrc *** 
    62       !!--------------------------------------------- 
    63       INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    64       REAL, DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
    65       LOGICAL, INTENT(in) :: before 
    66     
    67       INTEGER :: ji,jj,jk,jn 
    6867 
    69          IF( before ) THEN 
    70             DO jn = n1, n2 
     68   SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
     69      !!---------------------------------------------------------------------- 
     70      !!                      *** ROUTINE updateT *** 
     71      !!---------------------------------------------------------------------- 
     72      INTEGER                                    , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, n1, n2 
     73      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   ptab 
     74      LOGICAL                                    , INTENT(in   ) ::   before 
     75      !! 
     76      INTEGER ::   ji, jj, jk, jn 
     77      !!---------------------------------------------------------------------- 
     78      ! 
     79      IF( before ) THEN 
     80         ptab(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
     81      ELSE 
     82         IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN 
     83            ! Add asselin part 
     84            DO jn = n1,n2 
    7185               DO jk = k1, k2 
    7286                  DO jj = j1, j2 
    7387                     DO ji = i1, i2 
    74                         tabres(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
    75                      ENDDO 
    76                   ENDDO 
    77                ENDDO 
    78             ENDDO 
    79          ELSE 
    80             IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    81             ! Add asselin part 
    82                DO jn = n1, n2 
    83                   DO jk = k1, k2 
    84                      DO jj = j1, j2 
    85                         DO ji = i1, i2 
    86                            IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN 
    87                               trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) &  
    88                                  & + atfp * ( tabres(ji,jj,jk,jn) & 
    89                                                - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
    90                            ENDIF 
    91                         ENDDO 
    92                      ENDDO 
    93                   ENDDO 
    94                ENDDO 
    95             ENDIF 
    96  
    97             DO jn = n1, n2 
    98                DO jk = k1, k2 
    99                   DO jj = j1, j2 
    100                      DO ji = i1, i2 
    101                         IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN 
    102                            trn(ji,jj,jk,jn) = tabres(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     88                        IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN 
     89                           trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn)             &  
     90                              &             + atfp * ( ptab(ji,jj,jk,jn)   & 
     91                                 &                    - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
    10392                        ENDIF 
    104                      ENDDO 
    105                   ENDDO 
    106                ENDDO 
    107             ENDDO 
     93                     END DO 
     94                  END DO 
     95               END DO 
     96            END DO 
    10897         ENDIF 
    109  
     98         DO jn = n1, n2 
     99            DO jk = k1, k2 
     100               DO jj = j1, j2 
     101                  DO ji = i1, i2 
     102                     IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN  
     103                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     104                     END IF 
     105                  END DO 
     106               END DO 
     107            END DO 
     108         END DO 
     109      ENDIF 
     110      !  
    110111   END SUBROUTINE updateTRC 
    111112 
     
    119120   END SUBROUTINE agrif_top_update_empty 
    120121#endif 
    121 END Module agrif_top_update 
     122 
     123   !!====================================================================== 
     124END MODULE agrif_top_update 
Note: See TracChangeset for help on using the changeset viewer.