source: NEMO/branches/2020/dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation/tests/WAD/MY_SRC/usrdef_istate.F90 @ 13135

Last change on this file since 13135 was 13135, checked in by orioltp, 3 months ago

dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation: merge with trunk@13134, see #2364

  • Property svn:keywords set to Id
File size: 8.2 KB
Line 
1MODULE usrdef_istate
2   !!======================================================================
3   !!                     ***  MODULE usrdef_istate   ***
4   !!
5   !!                  ===  WAD_TEST_CASES configuration  ===
6   !!
7   !! User defined : set the initial state of a user configuration
8   !!======================================================================
9   !! History :  4.0 ! 2016-03  (S. Flavoni) Original code
10   !!----------------------------------------------------------------------
11
12   !!----------------------------------------------------------------------
13   !!  usr_def_istate : initial state in Temperature and salinity
14   !!----------------------------------------------------------------------
15   USE par_oce        ! ocean space and time domain
16   USE dom_oce , ONLY : mi0, mig, mjg, glamt, gphit, ht_0
17   USE phycst         ! physical constants
18   USE wet_dry        ! Wetting and drying
19   !
20   USE in_out_manager ! I/O manager
21   USE lib_mpp        ! MPP library
22   
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   usr_def_istate   ! called in istate.F90
27
28   !! * Substitutions
29#  include "do_loop_substitute.h90"
30   !!----------------------------------------------------------------------
31   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
32   !! $Id$
33   !! Software governed by the CeCILL license (see ./LICENSE)
34   !!----------------------------------------------------------------------
35CONTAINS
36 
37   SUBROUTINE usr_def_istate( pdept, ptmask, pts, pu, pv, pssh )
38      !!----------------------------------------------------------------------
39      !!                   ***  ROUTINE usr_def_istate  ***
40      !!
41      !! ** Purpose :   Initialization of the dynamics and tracers
42      !!                Here WAD_TEST_CASES configuration
43      !!
44      !! ** Method  : - set temprature field
45      !!              - set salinity   field
46      !!----------------------------------------------------------------------
47      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   pdept   ! depth of t-point               [m]
48      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   ptmask  ! t-point ocean mask             [m]
49      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(  out) ::   pts     ! T & S fields      [Celsius ; g/kg]
50      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pu      ! i-component of the velocity  [m/s]
51      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pv      ! j-component of the velocity  [m/s]
52      REAL(wp), DIMENSION(jpi,jpj)         , INTENT(  out) ::   pssh    ! sea-surface height
53      INTEGER  ::   ji, jj            ! dummy loop indices
54      REAL(wp) ::   zi, zj
55      !
56      INTEGER  ::   jk     ! dummy loop indices
57      REAL(wp) ::   zdam   ! location of dam [Km]
58      !!----------------------------------------------------------------------
59      !
60      IF(lwp) WRITE(numout,*)
61      IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD_TEST_CASES configuration, analytical definition of initial state'
62      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~   Ocean at rest, with a constant temperature                    '
63      IF(lwp) WRITE(numout,*) '                 and  constant salinity (not used as rho=F(T) '
64      !
65      !
66      pu  (:,:,:) = 0._wp        ! ocean at rest
67      pv  (:,:,:) = 0._wp
68      pssh(:,:)   = 0._wp
69      !
70      !                          ! T & S profiles
71      pts(:,:,:,jp_tem) = 10._wp * ptmask(:,:,:)
72      !
73      pts(:,:,:,jp_sal) = 35._wp * ptmask(:,:,:)
74      !!----------------------------------------------------------------------
75      !
76      !!----------------------------------------------------------------------
77      !
78      ! Uniform T & S in most test cases
79      pts(:,:,:,jp_tem) = 10._wp
80      pts(:,:,:,jp_sal) = 35._wp
81      SELECT CASE ( nn_cfg ) 
82         !                                        ! ====================
83         CASE ( 1 )                               ! WAD 1 configuration
84            !                                     ! ====================
85            !
86            IF(lwp) WRITE(numout,*)
87            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Closed box with EW linear bottom slope'
88            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
89            !
90            do ji = 1,jpi
91             pssh(ji,:) = ( -5.5_wp + 7.4_wp*glamt(ji,1)/50._wp)*ptmask(ji,:,1)
92            end do
93            !                                     ! ====================
94         CASE ( 2, 8 )                            ! WAD 2 configuration
95            !                                     ! ====================
96            !
97            IF(lwp) WRITE(numout,*)
98            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel, mid-range initial ssh slope'
99            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
100            !
101            do ji = 1,jpi
102             pssh(ji,:) = ( -1.5_wp + 5.0_wp*glamt(ji,1)/50._wp)*ptmask(ji,:,1)
103            end do
104            !                                     ! ====================
105         CASE ( 3 )                               ! WAD 3 configuration
106            !                                     ! ====================
107            !
108            IF(lwp) WRITE(numout,*)
109            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel, extreme initial ssh slope' 
110            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
111            !
112            do ji = 1,jpi
113             pssh(ji,:) = ( -4.5_wp + 6.8_wp*glamt(ji,1)/50._wp)*ptmask(ji,:,1)
114            end do
115
116            !
117            !                                     ! ====================
118         CASE ( 4 )                               ! WAD 4 configuration
119            !                                     ! ====================
120            !
121            IF(lwp) WRITE(numout,*)
122            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic bowl, mid-range initial ssh slope' 
123            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
124            !
125            DO ji = 1, jpi
126               zi = MAX(1.0-((glamt(ji,1)-25._wp)**2)/400.0, 0.0 )
127               DO jj = 1, jpj
128                  zj = MAX(1.0-((gphit(1,jj)-17._wp)**2)/144.0, 0.0 )
129                  pssh(ji,jj) = -2.5_wp + 5.4_wp*zi*zj
130               END DO
131            END DO
132
133            !
134            !                                    ! ===========================
135         CASE ( 5, 7 )                           ! WAD 5 and 7 configurations
136            !                                    ! ===========================
137            !
138            IF(lwp) WRITE(numout,*)
139            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Double slope with shelf'
140            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
141            !
142            do ji = 1,jpi
143             pssh(ji,:) = ( -2.5_wp + 5.5_wp*glamt(ji,1)/50._wp)*ptmask(ji,:,1)
144            end do
145
146            !
147            !                                     ! ====================
148         CASE ( 6 )                               ! WAD 6 configuration
149            !                                     ! ====================
150            !
151            IF(lwp) WRITE(numout,*)
152            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel with gaussian ridge' 
153            IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
154            !
155            do ji = 1,jpi
156             pssh(ji,:) = ( -2.5_wp + 5.5_wp*(50._wp-glamt(ji,1))/50._wp)*ptmask(ji,:,1)
157            end do
158            !
159            do ji = mi0(jpiglo/2), mi0(jpiglo)
160             pts(ji,:,:,jp_sal) = 30._wp
161             pssh(ji,:) = -0.1*ptmask(ji,:,1)
162            end do
163            !
164            !
165            !                                    ! ===========================
166         CASE DEFAULT                            ! NONE existing configuration
167            !                                    ! ===========================
168            WRITE(ctmp1,*) 'WAD test with a ', nn_cfg,' option is not coded'
169            !
170            CALL ctl_stop( ctmp1 )
171            !
172      END SELECT
173
174
175      !
176      ! Apply minimum wetdepth criterion
177      !
178      DO_2D_11_11
179         IF( ht_0(ji,jj) + pssh(ji,jj) < rn_wdmin1 ) THEN
180            pssh(ji,jj) = ptmask(ji,jj,1)*( rn_wdmin1 - ht_0(ji,jj) )
181         ENDIF
182      END_2D
183      !
184   END SUBROUTINE usr_def_istate
185
186   !!======================================================================
187END MODULE usrdef_istate
Note: See TracBrowser for help on using the repository browser.