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_recompute_scales.F90 in utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src – NEMO

source: utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/agrif_recompute_scales.F90 @ 13056

Last change on this file since 13056 was 13056, checked in by rblod, 4 years ago

ticket #2129 : cleaning domcfg

File size: 4.7 KB
Line 
1MODULE agrif_recompute_scales
2
3   USE dom_oce
4   USE lbclnk            ! ocean lateral boundary conditions (or mpp link)
5   USE lib_mpp
6
7   IMPLICiT NONE
8
9   PRIVATE
10
11   PUBLIC agrif_recompute_scalefactors
12
13CONTAINS
14
15#if defined key_agrif
16   SUBROUTINE agrif_recompute_scalefactors
17      !!----------------------------------------------------------------------
18      !!                     ***  ROUTINE nemo_gcm  ***
19      !!----------------------------------------------------------------------
20      !
21      INTEGER :: ji, jj, jk, ikb, ikt
22
23      ! Scale factors and depth at U-, V-, UW and VW-points
24      DO jk = 1, jpk                        ! initialisation to z-scale factors
25         e3u_0 (:,:,jk) = e3t_1d(jk)
26         e3v_0 (:,:,jk) = e3t_1d(jk)
27         e3uw_0(:,:,jk) = e3w_1d(jk)
28         e3vw_0(:,:,jk) = e3w_1d(jk)
29      END DO
30
31      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors
32         DO jj = 1, jpjm1
33            DO ji = 1, jpim1   ! vector opt.
34               e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) )
35               e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) )
36               e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) )
37               e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) )
38            END DO
39         END DO
40      END DO
41      IF ( ln_isfcav ) THEN
42      ! (ISF) define e3uw (adapted for 2 cells in the water column)
43      print *,'NOT READY SINCE:'
44      print *,'MBATHY HAS NOT BEEN CORRECTED / UPDATED'
45      print *,'EVEN NOT COMPUTED IN THE CASE ln_read_cfg = .TRUE.'
46      STOP
47         DO jj = 2, jpjm1 
48            DO ji = 2, jpim1   ! vector opt.
49               ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj))
50               ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj))
51               IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) &
52                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) )
53               ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1))
54               ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1))
55               IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) &
56                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) )
57            END DO
58         END DO
59      END IF
60
61      CALL lbc_lnk('toto', e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk('toto', e3uw_0, 'U', 1._wp )   ! lateral boundary conditions
62      CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp )
63      !
64
65      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries)
66         WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk)
67         WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk)
68         WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk)
69         WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk)
70      END DO
71     
72      ! Scale factor at F-point
73      DO jk = 1, jpk                        ! initialisation to z-scale factors
74         e3f_0(:,:,jk) = e3t_1d(jk)
75      END DO
76      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors
77         DO jj = 1, jpjm1
78            DO ji = 1, jpim1   ! vector opt.
79               e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) )
80            END DO
81         END DO
82      END DO
83      CALL lbc_lnk('toto', e3f_0, 'F', 1._wp )       ! Lateral boundary conditions
84      !
85      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries)
86         WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk)
87      END DO
88!!gm  bug ? :  must be a do loop with mj0,mj1
89      !
90      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2
91      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:) 
92      e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:) 
93      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:) 
94      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:) 
95
96      ! Control of the sign
97      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' )
98      IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' )
99      IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' )
100      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' )
101      !
102   END SUBROUTINE agrif_recompute_scalefactors
103#else
104   SUBROUTINE agrif_recompute_scalefactors
105   END SUBROUTINE agrif_recompute_scalefactors
106#endif
107END MODULE agrif_recompute_scales   
Note: See TracBrowser for help on using the repository browser.