[6717] | 1 | MODULE usrdef_istate |
---|
[6923] | 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE usrdef_istate *** |
---|
| 4 | !! |
---|
| 5 | !! === GYRE configuration === |
---|
| 6 | !! |
---|
[6717] | 7 | !! User defined : set the initial state of a user configuration |
---|
[6923] | 8 | !!====================================================================== |
---|
[7753] | 9 | !! History : 4.0 ! 2016-03 (S. Flavoni) Original code |
---|
[6717] | 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 phycst ! physical constants |
---|
| 17 | ! |
---|
| 18 | USE in_out_manager ! I/O manager |
---|
| 19 | USE lib_mpp ! MPP library |
---|
| 20 | |
---|
| 21 | IMPLICIT NONE |
---|
| 22 | PRIVATE |
---|
| 23 | |
---|
[6923] | 24 | PUBLIC usr_def_istate ! called in istate.F90 |
---|
[6717] | 25 | |
---|
| 26 | !!---------------------------------------------------------------------- |
---|
[9598] | 27 | !! NEMO/OCE 4.0 , NEMO Consortium (2018) |
---|
[9124] | 28 | !! $Id:$ |
---|
[9598] | 29 | !! Software governed by the CeCILL licence (./LICENSE) |
---|
[6717] | 30 | !!---------------------------------------------------------------------- |
---|
| 31 | CONTAINS |
---|
| 32 | |
---|
| 33 | SUBROUTINE usr_def_istate( pdept, ptmask, pts, pu, pv, pssh ) |
---|
| 34 | !!---------------------------------------------------------------------- |
---|
| 35 | !! *** ROUTINE usr_def_istate *** |
---|
| 36 | !! |
---|
| 37 | !! ** Purpose : Initialization of the dynamics and tracers |
---|
| 38 | !! Here GYRE configuration example : (double gyre with rotated domain) |
---|
| 39 | !! |
---|
| 40 | !! ** Method : - set temprature field |
---|
| 41 | !! - set salinity field |
---|
| 42 | !!---------------------------------------------------------------------- |
---|
| 43 | REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pdept ! depth of t-point [m] |
---|
| 44 | REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: ptmask ! t-point ocean mask [m] |
---|
[6900] | 45 | REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT( out) :: pts ! T & S fields [Celsius ; g/kg] |
---|
[6717] | 46 | REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pu ! i-component of the velocity [m/s] |
---|
| 47 | REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pv ! j-component of the velocity [m/s] |
---|
| 48 | REAL(wp), DIMENSION(jpi,jpj) , INTENT( out) :: pssh ! sea-surface height |
---|
| 49 | ! |
---|
| 50 | INTEGER :: ji, jj, jk ! dummy loop indices |
---|
| 51 | !!---------------------------------------------------------------------- |
---|
| 52 | ! |
---|
| 53 | IF(lwp) WRITE(numout,*) |
---|
| 54 | IF(lwp) WRITE(numout,*) 'usr_def_istate : analytical definition of initial state ' |
---|
| 55 | IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~ Ocean at rest, with an horizontally uniform T and S profiles' |
---|
| 56 | ! |
---|
[7753] | 57 | pu (:,:,:) = 0._wp ! ocean at rest |
---|
| 58 | pv (:,:,:) = 0._wp |
---|
| 59 | pssh(:,:) = 0._wp |
---|
[6717] | 60 | ! |
---|
| 61 | DO jk = 1, jpk ! horizontally uniform T & S profiles |
---|
| 62 | DO jj = 1, jpj |
---|
| 63 | DO ji = 1, jpi |
---|
| 64 | pts(ji,jj,jk,jp_tem) = ( ( 16. - 12. * TANH( (pdept(ji,jj,jk) - 400) / 700 ) ) & |
---|
| 65 | & * (-TANH( (500. - pdept(ji,jj,jk)) / 150. ) + 1.) / 2. & |
---|
| 66 | & + ( 15. * ( 1. - TANH( (pdept(ji,jj,jk)-50.) / 1500.) ) & |
---|
| 67 | & - 1.4 * TANH((pdept(ji,jj,jk)-100.) / 100.) & |
---|
| 68 | & + 7. * (1500. - pdept(ji,jj,jk) ) / 1500.) & |
---|
| 69 | & * (-TANH( (pdept(ji,jj,jk) - 500.) / 150.) + 1.) / 2. ) * ptmask(ji,jj,jk) |
---|
| 70 | |
---|
| 71 | pts(ji,jj,jk,jp_sal) = ( ( 36.25 - 1.13 * TANH( (pdept(ji,jj,jk) - 305) / 460 ) ) & |
---|
| 72 | & * (-TANH((500. - pdept(ji,jj,jk)) / 150.) + 1.) / 2 & |
---|
| 73 | & + ( 35.55 + 1.25 * (5000. - pdept(ji,jj,jk)) / 5000. & |
---|
| 74 | & - 1.62 * TANH( (pdept(ji,jj,jk) - 60. ) / 650. ) & |
---|
| 75 | & + 0.2 * TANH( (pdept(ji,jj,jk) - 35. ) / 100. ) & |
---|
| 76 | & + 0.2 * TANH( (pdept(ji,jj,jk) - 1000.) / 5000.) ) & |
---|
| 77 | & * (-TANH( (pdept(ji,jj,jk) - 500.) / 150.) + 1.) / 2 ) * ptmask(ji,jj,jk) |
---|
| 78 | END DO |
---|
| 79 | END DO |
---|
| 80 | END DO |
---|
| 81 | ! |
---|
| 82 | END SUBROUTINE usr_def_istate |
---|
| 83 | |
---|
| 84 | !!====================================================================== |
---|
| 85 | END MODULE usrdef_istate |
---|