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

Ignore:
Timestamp:
2014-09-25T18:26:34+02:00 (10 years ago)
Author:
rblod
Message:

dev_r4765_CNRS_agrif: First update of AGRIF for dynamic only (_flt and _ts), see ticket #1380 and associated wiki page

File:
1 edited

Legend:

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

    r4491 r4789  
    2424   !!---------------------------------------------------------------------- 
    2525 
    26    CONTAINS 
     26CONTAINS 
    2727 
    2828   SUBROUTINE Agrif_Update_Trc( kt ) 
     
    3030      !!   *** ROUTINE Agrif_Update_Trc *** 
    3131      !!--------------------------------------------- 
    32       !! 
    3332      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  
     33      !!--------------------------------------------- 
     34      !  
     35      IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
     36#if defined TWO_WAY    
    4237      Agrif_UseSpecialValueInUpdate = .TRUE. 
    4338      Agrif_SpecialValueFineGrid = 0. 
    44   
    45      IF (MOD(nbcline_trc,nbclineupdate) == 0) THEN 
    46          CALL Agrif_Update_Variable(ztra,trn_id, procname=updateTRC) 
     39      !  
     40      IF (MOD(nbcline_trc,nbclineupdate) == 0) THEN 
     41# if ! defined DECAL_FEEDBACK 
     42         CALL Agrif_Update_Variable(trn_id, procname=updateTRC) 
     43# else 
     44         CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC) 
     45# endif 
    4746      ELSE 
    48          CALL Agrif_Update_Variable(ztra,trn_id,locupdate=(/0,2/), procname=updateTRC) 
     47# if ! defined DECAL_FEEDBACK 
     48         CALL Agrif_Update_Variable(trn_id,locupdate=(/0,2/), procname=updateTRC) 
     49# else 
     50         CALL Agrif_Update_Variable(trn_id,locupdate=(/1,2/), procname=updateTRC) 
     51# endif 
    4952      ENDIF 
    50  
     53      ! 
    5154      Agrif_UseSpecialValueInUpdate = .FALSE. 
    5255      nbcline_trc = nbcline_trc + 1 
    53  
    54       CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztra ) 
    5556#endif 
    56  
     57      ! 
    5758   END SUBROUTINE Agrif_Update_Trc 
    5859 
    59    SUBROUTINE updateTRC(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before) 
     60   SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    6061      !!--------------------------------------------- 
    61       !!   *** ROUTINE UpdateTrc *** 
     62      !!           *** ROUTINE updateT *** 
    6263      !!--------------------------------------------- 
     64#  include "domzgr_substitute.h90" 
    6365      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 
     66      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: ptab 
    6567      LOGICAL, INTENT(in) :: before 
    66     
     68      !! 
    6769      INTEGER :: ji,jj,jk,jn 
    68  
    69          IF( before ) THEN 
    70             DO jn = n1, n2 
    71                DO jk = k1, k2 
    72                   DO jj = j1, j2 
    73                      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 
     70      !!--------------------------------------------- 
     71      ! 
     72      IF (before) THEN 
     73         DO jn = n1,n2 
     74            DO jk=k1,k2 
     75               DO jj=j1,j2 
     76                  DO ji=i1,i2 
     77                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
     78                  END DO 
     79               END DO 
     80            END DO 
     81         END DO 
     82      ELSE 
     83         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    8184            ! 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) 
     85            DO jn = n1,n2 
     86               DO jk=k1,k2 
     87                  DO jj=j1,j2 
     88                     DO ji=i1,i2 
     89                        IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN 
     90                           trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) &  
     91                                 & + atfp * ( ptab(ji,jj,jk,jn) & 
     92                                 &             - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
    10393                        ENDIF 
    10494                     ENDDO 
     
    10797            ENDDO 
    10898         ENDIF 
    109  
     99         DO jn = n1,n2 
     100            DO jk=k1,k2 
     101               DO jj=j1,j2 
     102                  DO ji=i1,i2 
     103                     IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN  
     104                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     105                     END IF 
     106                  END DO 
     107               END DO 
     108            END DO 
     109         END DO 
     110      ENDIF 
     111      !  
    110112   END SUBROUTINE updateTRC 
    111113 
     
    119121   END SUBROUTINE agrif_top_update_empty 
    120122#endif 
    121 END Module agrif_top_update 
     123END MODULE agrif_top_update 
Note: See TracChangeset for help on using the changeset viewer.