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.
agrif_top_interp.F90 in NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST – NEMO

source: NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST/agrif_top_interp.F90 @ 11610

Last change on this file since 11610 was 11610, checked in by jchanut, 5 years ago

#2222, fixes to enable compiling AGRIF with TOP

  • Property svn:keywords set to Id
File size: 4.9 KB
RevLine 
[636]1MODULE agrif_top_interp
[9019]2   !!======================================================================
3   !!                   ***  MODULE  agrif_top_interp  ***
4   !! AGRIF: interpolation package for TOP
5   !!======================================================================
6   !! History :  2.0  !  ???
7   !!----------------------------------------------------------------------
[1206]8#if defined key_agrif && defined key_top
[9019]9   !!----------------------------------------------------------------------
10   !!   'key_agrif'                                              AGRIF zoom
11   !!   'key_top'                                           on-line tracers
12   !!----------------------------------------------------------------------
[636]13   USE par_oce
14   USE oce
15   USE dom_oce     
[782]16   USE agrif_oce
[2715]17   USE agrif_top_sponge
[5656]18   USE par_trc
[1271]19   USE trc
[11610]20   USE vremap
[9019]21   !
22   USE lib_mpp     ! MPP library
[628]23
[636]24   IMPLICIT NONE
25   PRIVATE
[628]26
[5656]27   PUBLIC Agrif_trc, interptrn
[636]28
[2715]29  !!----------------------------------------------------------------------
[9598]30   !! NEMO/NST 4.0 , NEMO Consortium (2018)
[1156]31   !! $Id$
[10068]32   !! Software governed by the CeCILL license (see ./LICENSE)
[1156]33   !!----------------------------------------------------------------------
[6140]34CONTAINS
[1156]35
[1271]36   SUBROUTINE Agrif_trc
[3680]37      !!----------------------------------------------------------------------
[9019]38      !!                   ***  ROUTINE Agrif_trc  ***
[3680]39      !!----------------------------------------------------------------------
40      !
41      IF( Agrif_Root() )   RETURN
[9019]42      !
43      Agrif_SpecialValue    = 0._wp
[636]44      Agrif_UseSpecialValue = .TRUE.
[9019]45      !
[5656]46      CALL Agrif_Bc_variable( trn_id, procname=interptrn )
[636]47      Agrif_UseSpecialValue = .FALSE.
[5656]48      !
49   END SUBROUTINE Agrif_trc
[636]50
[11590]51   SUBROUTINE interptrn( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before )
[9019]52      !!----------------------------------------------------------------------
[9788]53      !!                  *** ROUTINE interptrn ***
[9019]54      !!----------------------------------------------------------------------
55      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   ptab
56      INTEGER                                     , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, n1, n2
57      LOGICAL                                     , INTENT(in   ) ::   before
[5656]58      !
[11590]59      INTEGER  ::   ji, jj, jk, jn, ibdy, jbdy   ! dummy loop indices
[9031]60      INTEGER  ::   imin, imax, jmin, jmax, N_in, N_out
[9806]61      REAL(wp) ::   zrho, z1, z2, z3, z4, z5, z6, z7
[11590]62
[9031]63      ! vertical interpolation:
64      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk,n1:n2) :: ptab_child
65      REAL(wp), DIMENSION(k1:k2,n1:n2-1) :: tabin
66      REAL(wp), DIMENSION(k1:k2) :: h_in
[9788]67      REAL(wp), DIMENSION(1:jpk) :: h_out
[11590]68      !!----------------------------------------------------------------------
[9031]69
[9788]70      IF( before ) THEN         
71         DO jn = 1,jptra
[9031]72            DO jk=k1,k2
73               DO jj=j1,j2
74                 DO ji=i1,i2
75                       ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)
76                 END DO
[9788]77              END DO
78           END DO
79        END DO
80
[9031]81# if defined key_vertical
82        DO jk=k1,k2
83           DO jj=j1,j2
84              DO ji=i1,i2
[9788]85                 ptab(ji,jj,jk,jptra+1) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) 
[9031]86              END DO
87           END DO
88        END DO
89# endif
[9788]90      ELSE 
[9031]91
[11574]92# if defined key_vertical
[9031]93         DO jj=j1,j2
94            DO ji=i1,i2
95               N_in = 0
96               DO jk=k1,k2 !k2 = jpk of parent grid
97                  IF (ptab(ji,jj,jk,n2) == 0) EXIT
98                  N_in = N_in + 1
99                  tabin(jk,:) = ptab(ji,jj,jk,n1:n2-1)
100                  h_in(N_in) = ptab(ji,jj,jk,n2)
101               END DO
102               N_out = 0
103               DO jk=1,jpk ! jpk of child grid
[11590]104                  IF (tmask(ji,jj,jk) == 0) EXIT
[9031]105                  N_out = N_out + 1
[11590]106                  h_out(jk) = e3t_a(ji,jj,jk)
[9031]107               ENDDO
108               IF (N_in > 0) THEN
[11603]109                  CALL reconstructandremap(tabin(1:N_in,1:jptra),h_in,ptab_child(ji,jj,1:N_out,1:jptra),h_out,N_in,N_out,jptra)
[9031]110               ENDIF
111            ENDDO
112         ENDDO
113# else
114         ptab_child(i1:i2,j1:j2,1:jpk,1:jptra) = ptab(i1:i2,j1:j2,1:jpk,1:jptra)
115# endif
[9788]116         !
117         DO jn=1, jptra
118            tra(i1:i2,j1:j2,1:jpk,jn)=ptab_child(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk) 
119         END DO
[9031]120
[628]121      ENDIF
[3680]122      !
[5656]123   END SUBROUTINE interptrn
[2715]124
[628]125#else
[9019]126   !!----------------------------------------------------------------------
127   !!   Empty module                                           no TOP AGRIF
128   !!----------------------------------------------------------------------
[636]129CONTAINS
130   SUBROUTINE Agrif_TOP_Interp_empty
131      !!---------------------------------------------
132      !!   *** ROUTINE agrif_Top_Interp_empty ***
133      !!---------------------------------------------
134      WRITE(*,*)  'agrif_top_interp : You should not have seen this print! error?'
135   END SUBROUTINE Agrif_TOP_Interp_empty
[628]136#endif
[9019]137
138   !!======================================================================
[636]139END MODULE agrif_top_interp
Note: See TracBrowser for help on using the repository browser.