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.
zoom.F90 in branches/UKMO/dev_r5518_DMP_TOOLS/NEMOGCM/TOOLS/DMP_TOOLS/src – NEMO

source: branches/UKMO/dev_r5518_DMP_TOOLS/NEMOGCM/TOOLS/DMP_TOOLS/src/zoom.F90 @ 10778

Last change on this file since 10778 was 10778, checked in by jenniewaters, 5 years ago

#2140 Small bug fix to get code to compile.

File size: 3.7 KB
Line 
1MODULE zoom
2   
3   USE utils
4
5   CONTAINS
6
7   SUBROUTINE dtacof_zoom( presto, mask)
8      !!----------------------------------------------------------------------
9      !!                  ***  ROUTINE dtacof_zoom  ***
10      !!
11      !! ** Purpose :   Compute the damping coefficient for zoom domain
12      !!
13      !! ** Method  : - set along closed boundary due to zoom a damping over
14      !!                6 points with a max time scale of 5 days.
15      !!              - ORCA arctic/antarctic zoom: set the damping along
16      !!                south/north boundary over a latitude strip.
17      !!
18      !! ** Action  : - resto, the damping coeff. for T and S
19      !!----------------------------------------------------------------------
20      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout)  ::   presto   ! restoring coeff. (s-1)
21      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)  ::   mask   ! restoring coeff. (s-1)
22      !
23      INTEGER  ::   ji, jj, jn   ! dummy loop indices
24      REAL(wp) ::   zlat, zlat0, zlat1, zlat2, z1_5d   ! local scalar
25      REAL(wp), DIMENSION(6)  ::   zfact               ! 1Dworkspace
26
27      !Namelist variables
28      LOGICAL :: lzoom_w, lzoom_e, lzoom_n, lzoom_s 
29      NAMELIST/nam_zoom_dmp/lzoom_n,lzoom_e,lzoom_w,lzoom_s
30      !!----------------------------------------------------------------------
31      !
32      !
33     
34      ! Read namelist
35      OPEN( UNIT=numnam, FILE='namelist', FORM='FORMATTED', STATUS='OLD' )
36      READ( numnam, nam_dmp_create )
37      CLOSE( numnam )
38
39      zfact(1) =  1._wp
40      zfact(2) =  1._wp
41      zfact(3) = 11._wp / 12._wp
42      zfact(4) =  8._wp / 12._wp
43      zfact(5) =  4._wp / 12._wp
44      zfact(6) =  1._wp / 12._wp
45      zfact(:) = zfact(:) / ( 5._wp * rday )    ! 5 days max restoring time scale
46
47      presto(:,:) = 0._wp
48
49      ! damping along the forced closed boundary over 6 grid-points
50      DO jn = 1, 6
51         IF( lzoom_w )   presto( jn, : )                    = zfact(jn)   ! west  closed
52         IF( lzoom_s )   presto( : , jn )                    = zfact(jn)   ! south closed
53         IF( lzoom_e )   presto( jpi+1-jn , : ) = zfact(jn)   ! east  closed
54         IF( lzoom_n )   presto( : , jpj+1-jn ) = zfact(jn)   ! north closed
55      END DO
56
57      !                                           ! ====================================================
58      IF( cp_cfz == "arctic" .OR. cp_cfz == "antarctic" ) THEN   !  ORCA configuration : arctic or antarctic zoom
59         !                                        ! ====================================================
60         WRITE(numout,*)
61         IF(cp_cfz == "arctic" ) WRITE(numout,*) '              dtacof_zoom : ORCA    Arctic zoom'
62         IF(cp_cfz == "antarctic" ) WRITE(numout,*) '           dtacof_zoom : ORCA Antarctic zoom'
63         WRITE(numout,*)
64         !
65         !                          ! Initialization :
66         presto(:,:) = 0._wp
67         zlat0 = 10._wp                     ! zlat0 : latitude strip where resto decreases
68         zlat1 = 30._wp                     ! zlat1 : resto = 1 before zlat1
69         zlat2 = zlat1 + zlat0              ! zlat2 : resto decreases from 1 to 0 between zlat1 and zlat2
70         z1_5d = 1._wp / ( 5._wp * rday )   ! z1_5d : 1 / 5days
71
72         DO jj = 1, jpj
73            DO ji = 1, jpi
74               zlat = ABS( gphit(ji,jj) )
75               IF( zlat1 <= zlat .AND. zlat <= zlat2 ) THEN
76                  presto(ji,jj) = 0.5_wp * z1_5d * (  1._wp - COS( rpi*(zlat2-zlat)/zlat0 )  ) 
77               ELSEIF( zlat < zlat1 ) THEN
78                  presto(ji,jj) = z1_5d
79               ENDIF
80            END DO
81         END DO
82         !
83      ENDIF
84      !                             ! Mask resto array
85      presto(:,:) = presto(:,:) * mask(:,:)
86
87   END SUBROUTINE dtacof_zoom
88
89END MODULE zoom
Note: See TracBrowser for help on using the repository browser.