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

source: utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/agrif_recompute_scalefactors.f90 @ 13024

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

First version of new nesting tools merged with domaincfg, see ticket #2129

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