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.
dyncor1d.F90 in trunk/NEMO/C1D_SRC – NEMO

source: trunk/NEMO/C1D_SRC/dyncor1d.F90 @ 304

Last change on this file since 304 was 257, checked in by opalod, 19 years ago

nemo_v1_update_003 : CT : Add the missing header

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.4 KB
Line 
1MODULE dyncor1d
2   !!======================================================================
3   !!                     ***  MODULE  ini1D  ***
4   !! Ocean state   :  1D initialization
5   !!=====================================================================
6#if defined key_cfg_1d
7   !!----------------------------------------------------------------------
8   !!   'key_cfg_1d'               1D Configuration
9   !!----------------------------------------------------------------------
10   !!----------------------------------------------------------------------
11   !!   fcorio_1d   : Coriolis factor at T-point
12   !!   dyn_cor_1d  : vorticity trend due to Coriolis
13   !!----------------------------------------------------------------------
14   !! * Modules used
15   USE oce            ! ocean dynamics and tracers
16   USE dom_oce        ! ocean space and time domain
17   USE phycst          ! physical constants
18   USE in_out_manager ! I/O manager
19
20   IMPLICIT NONE
21   PRIVATE
22
23   !! * Routine accessibility
24   PUBLIC fcorio_1d   ! routine called by OPA.F90
25   PUBLIC dyn_cor_1d  ! routine called by step1d.F90
26
27   !! * Substitutions
28#  include "vectopt_loop_substitute.h90"
29   !!----------------------------------------------------------------------
30   !!   OPA 9.0 , LOCEAN-IPSL (2005)
31   !! $Header$
32   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
33   !!----------------------------------------------------------------------
34
35CONTAINS
36
37   SUBROUTINE fcorio_1d
38      !!----------------------------------------------------------------------
39      !!                   ***  ROUTINE fcorio_1d  ***
40      !!
41      !! ** Purpose : Compute the Coriolis factor at T-point
42      !!
43      !! ** Method  :
44      !!
45      !! History :
46      !!   9.0  !  04-09  (C. Ethe) 1D configuration
47      !!----------------------------------------------------------------------
48      !! * Local declarations
49      !!----------------------------------------------------------------------
50      REAL(wp) ::   &
51         zphi0, zbeta, zf0         !  temporary scalars
52 
53
54      !!----------------------------------------------------------------------
55
56      ! ================= !
57      !  Coriolis factor  !
58      ! ================= !
59      IF(lwp) WRITE(numout,*)
60      IF(lwp) WRITE(numout,*) 'fcorio_1d : Coriolis factor at T-point'
61      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
62
63      SELECT CASE( jphgr_msh )   ! type of horizontal mesh
64
65      CASE ( 0, 1, 4 )               ! mesh on the sphere
66
67         ff(:,:) = 2. * omega * SIN( rad * gphit(:,:) ) 
68
69      CASE ( 2 )                     ! f-plane at ppgphi0
70
71         ff(:,:) = 2. * omega * SIN( rad * ppgphi0 )
72
73         IF(lwp) WRITE(numout,*) '          f-plane: Coriolis parameter = constant = ', ff(1,1)
74
75      CASE ( 3 )                     ! beta-plane
76
77         zbeta   = 2. * omega * COS( rad * ppgphi0 ) / ra                     ! beta at latitude ppgphi0
78         zphi0   = ppgphi0 - FLOAT( jpjglo/2) * ppe2_m *1.e-3  / ( ra * rad ) ! latitude of the first row F-points
79         zf0     = 2. * omega * SIN( rad * zphi0 )                            ! compute f0 1st point south
80
81         ff(:,:) = ( zf0  + zbeta * gphit(:,:) * 1.e+3 )                      ! f = f0 +beta* y ( y=0 at south)
82
83         IF(lwp) WRITE(numout,*) '          Beta-plane: Beta parameter = constant = ', ff(1,1)
84         IF(lwp) WRITE(numout,*) '                      Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj)
85
86      CASE ( 5 )                     ! beta-plane and rotated domain
87
88         zbeta = 2. * omega * COS( rad * ppgphi0 ) / ra                     ! beta at latitude ppgphi0
89         zphi0 = 15.e0                                                      ! latitude of the first row F-points
90         zf0   = 2. * omega * SIN( rad * zphi0 )                            ! compute f0 1st point south
91
92         ff(:,:) = ( zf0 + zbeta * ABS( gphit(:,:) - zphi0 ) * rad * ra )   ! f = f0 +beta* y ( y=0 at south)
93
94         IF(lwp) WRITE(numout,*) '          Beta-plane: Beta parameter = constant = ', ff(1,1)
95         IF(lwp) WRITE(numout,*) '                      Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj)
96
97      END SELECT
98
99   END SUBROUTINE fcorio_1d
100
101
102   SUBROUTINE dyn_cor_1d( kt )
103      !!----------------------------------------------------------------------
104      !!                   ***  ROUTINE dyn_cor_1d  ***
105      !!
106      !! ** Purpose :   Compute the now total vorticity trend and add it to
107      !!               the general trend of the momentum equation
108      !!
109      !! ** Method  :
110      !!
111      !! History :
112      !!   9.0  !  04-09  (C. Ethe) 1D configuration
113      !!----------------------------------------------------------------------
114      !! * Arguments
115      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index
116
117      !! * Local declarations
118      INTEGER ::   ji, jj, jk              ! dummy loop indices
119      REAL(wp) ::   &
120         zua, zva                          ! temporary scalars
121
122      !!----------------------------------------------------------------------
123
124      IF( kt == nit000 ) THEN
125         IF(lwp) WRITE(numout,*)
126         IF(lwp) WRITE(numout,*) 'dyn_cor_1d : total vorticity trend in 1D'
127         IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
128      ENDIF
129
130      DO jk = 1, jpkm1
131         DO jj = 2, jpjm1
132            DO ji = fs_2, fs_jpim1   ! vector opt.
133               zua =    ff(ji,jj) * vn(ji,jj,jk)
134               zva =  - ff(ji,jj) * un(ji,jj,jk)
135               ua(ji,jj,jk) = ua(ji,jj,jk) + zua
136               va(ji,jj,jk) = va(ji,jj,jk) + zva
137            END DO
138         END DO
139      END DO   
140      IF(l_ctl) THEN         ! print sum trends (used for debugging)
141         zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) )
142         zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) )
143         WRITE(numout,*) ' cor  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl
144         u_ctl = zua   ;   v_ctl = zva
145      ENDIF
146   END SUBROUTINE dyn_cor_1d
147
148#else
149   !!----------------------------------------------------------------------
150   !!   Default key                                     NO 1D Config
151   !!----------------------------------------------------------------------
152CONTAINS
153   SUBROUTINE fcorio_1d      ! Empty routine
154   END SUBROUTINE fcorio_1d   
155   SUBROUTINE dyn_cor_1d ( kt )
156      WRITE(*,*) 'dyn_cor_1d: You should not have seen this print! error?', kt
157   END SUBROUTINE dyn_cor_1d
158#endif
159
160   !!=====================================================================
161END MODULE dyncor1d
Note: See TracBrowser for help on using the repository browser.