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.
Changeset 7351 for branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2016-11-28T17:04:10+01:00 (7 years ago)
Author:
emanuelaclementi
Message:

ticket #1805 step 3: /2016/dev_INGV_UKMO_2016 aligned to the trunk at revision 7161

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r5541 r7351  
    22   !!============================================================================== 
    33   !!                       ***  MODULE  eosbn2  *** 
    4    !! Ocean diagnostic variable : equation of state - in situ and potential density 
    5    !!                                               - Brunt-Vaisala frequency 
     4   !! Equation Of Seawater : in situ density - Brunt-Vaisala frequency 
    65   !!============================================================================== 
    76   !! History :  OPA  ! 1989-03  (O. Marti)  Original code 
     
    2625 
    2726   !!---------------------------------------------------------------------- 
    28    !!   eos            : generic interface of the equation of state 
    29    !!   eos_insitu     : Compute the in situ density 
    30    !!   eos_insitu_pot : Compute the insitu and surface referenced potential volumic mass 
    31    !!   eos_insitu_2d  : Compute the in situ density for 2d fields 
    32    !!   bn2            : Compute the Brunt-Vaisala frequency 
    33    !!   eos_rab        : generic interface of in situ thermal/haline expansion ratio  
    34    !!   eos_rab_3d     : compute in situ thermal/haline expansion ratio 
    35    !!   eos_rab_2d     : compute in situ thermal/haline expansion ratio for 2d fields 
    36    !!   eos_fzp_2d     : freezing temperature for 2d fields 
    37    !!   eos_fzp_0d     : freezing temperature for scalar 
    38    !!   eos_init       : set eos parameters (namelist) 
     27   !!   eos           : generic interface of the equation of state 
     28   !!   eos_insitu    : Compute the in situ density 
     29   !!   eos_insitu_pot: Compute the insitu and surface referenced potential volumic mass 
     30   !!   eos_insitu_2d : Compute the in situ density for 2d fields 
     31   !!   bn2           : Compute the Brunt-Vaisala frequency 
     32   !!   eos_rab       : generic interface of in situ thermal/haline expansion ratio  
     33   !!   eos_rab_3d    : compute in situ thermal/haline expansion ratio 
     34   !!   eos_rab_2d    : compute in situ thermal/haline expansion ratio for 2d fields 
     35   !!   eos_fzp_2d    : freezing temperature for 2d fields 
     36   !!   eos_fzp_0d    : freezing temperature for scalar 
     37   !!   eos_init      : set eos parameters (namelist) 
    3938   !!---------------------------------------------------------------------- 
    40    USE dom_oce         ! ocean space and time domain 
    41    USE phycst          ! physical constants 
     39   USE dom_oce        ! ocean space and time domain 
     40   USE phycst         ! physical constants 
     41   USE stopar         ! Stochastic T/S fluctuations 
     42   USE stopts         ! Stochastic T/S fluctuations 
    4243   ! 
    43    USE in_out_manager  ! I/O manager 
    44    USE lib_mpp         ! MPP library 
    45    USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    46    USE prtctl          ! Print control 
    47    USE wrk_nemo        ! Memory Allocation 
     44   USE in_out_manager ! I/O manager 
     45   USE lib_mpp        ! MPP library 
     46   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     47   USE prtctl         ! Print control 
     48   USE wrk_nemo       ! Memory Allocation 
    4849   USE lbclnk         ! ocean lateral boundary conditions 
    49    USE timing          ! Timing 
    50    USE stopar          ! Stochastic T/S fluctuations 
    51    USE stopts          ! Stochastic T/S fluctuations 
     50   USE timing         ! Timing 
    5251 
    5352   IMPLICIT NONE 
    5453   PRIVATE 
    5554 
    56    !                   !! * Interface 
     55   !                  !! * Interface 
    5756   INTERFACE eos 
    5857      MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 
     
    7574   PUBLIC   eos_init       ! called by istate module 
    7675 
    77    !                                !!* Namelist (nameos) * 
    78    INTEGER , PUBLIC ::   nn_eos     ! = 0/1/2 type of eq. of state and Brunt-Vaisala frequ. 
    79    LOGICAL , PUBLIC ::   ln_useCT   ! determine if eos_pt_from_ct is used to compute sst_m 
    80  
    81    !                                   !!!  simplified eos coefficients 
    82    ! default value: Vallis 2006 
     76   !                               !!** Namelist nameos ** 
     77   LOGICAL , PUBLIC ::   ln_TEOS10   ! determine if eos_pt_from_ct is used to compute sst_m 
     78   LOGICAL , PUBLIC ::   ln_EOS80   ! determine if eos_pt_from_ct is used to compute sst_m 
     79   LOGICAL , PUBLIC ::   ln_SEOS   ! determine if eos_pt_from_ct is used to compute sst_m 
     80 
     81   ! Parameters 
     82   LOGICAL , PUBLIC    ::   l_useCT         ! =T in ln_TEOS10=T (i.e. use eos_pt_from_ct to compute sst_m), =F otherwise 
     83   INTEGER , PUBLIC    ::   neos            ! Identifier for equation of state used 
     84 
     85   INTEGER , PARAMETER ::   np_teos10 = -1  ! parameter for using TEOS10 
     86   INTEGER , PARAMETER ::   np_eos80  =  0  ! parameter for using EOS80 
     87   INTEGER , PARAMETER ::   np_seos   = 1   ! parameter for using Simplified Equation of state 
     88 
     89   !                               !!!  simplified eos coefficients (default value: Vallis 2006) 
    8390   REAL(wp) ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff.  
    8491   REAL(wp) ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff.  
     
    172179 
    173180   !! * Substitutions 
    174 #  include "domzgr_substitute.h90" 
    175181#  include "vectopt_loop_substitute.h90" 
    176182   !!---------------------------------------------------------------------- 
     
    187193      !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
    188194      !!       potential temperature and salinity using an equation of state 
    189       !!       defined through the namelist parameter nn_eos. 
     195      !!       selected in the nameos namelist 
    190196      !! 
    191197      !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rau0 ) / rau0 
     
    197203      !!                rau0   reference density            kg/m^3 
    198204      !! 
    199       !!     nn_eos = -1 : polynomial TEOS-10 equation of state is used for rho(t,s,z). 
     205      !!     ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). 
    200206      !!         Check value: rho = 1028.21993233072 kg/m^3 for z=3000 dbar, ct=3 Celcius, sa=35.5 g/kg 
    201207      !! 
    202       !!     nn_eos =  0 : polynomial EOS-80 equation of state is used for rho(t,s,z). 
     208      !!     ln_eos80 : polynomial EOS-80 equation of state is used for rho(t,s,z). 
    203209      !!         Check value: rho = 1028.35011066567 kg/m^3 for z=3000 dbar, pt=3 Celcius, sp=35.5 psu 
    204210      !! 
    205       !!     nn_eos =  1 : simplified equation of state 
     211      !!     ln_seos : simplified equation of state 
    206212      !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rau0 
    207213      !!              linear case function of T only: rn_alpha<>0, other coefficients = 0 
     
    227233      IF( nn_timing == 1 )   CALL timing_start('eos-insitu') 
    228234      ! 
    229       SELECT CASE( nn_eos ) 
    230       ! 
    231       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     235      SELECT CASE( neos ) 
     236      ! 
     237      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    232238         ! 
    233239         DO jk = 1, jpkm1 
     
    269275         END DO 
    270276         ! 
    271       CASE( 1 )                !==  simplified EOS  ==! 
     277      CASE( np_seos )                !==  simplified EOS  ==! 
    272278         ! 
    273279         DO jk = 1, jpkm1 
     
    303309      !! ** Purpose :   Compute the in situ density (ratio rho/rau0) and the 
    304310      !!      potential volumic mass (Kg/m3) from potential temperature and 
    305       !!      salinity fields using an equation of state defined through the 
    306       !!     namelist parameter nn_eos. 
     311      !!      salinity fields using an equation of state selected in the 
     312      !!     namelist. 
    307313      !! 
    308314      !! ** Action  : - prd  , the in situ density (no units) 
     
    325331      IF( nn_timing == 1 )   CALL timing_start('eos-pot') 
    326332      ! 
    327       SELECT CASE ( nn_eos ) 
    328       ! 
    329       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     333      SELECT CASE ( neos ) 
     334      ! 
     335      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    330336         ! 
    331337         ! Stochastic equation of state 
     
    433439         ENDIF 
    434440          
    435       CASE( 1 )                !==  simplified EOS  ==! 
     441      CASE( np_seos )                !==  simplified EOS  ==! 
    436442         ! 
    437443         DO jk = 1, jpkm1 
     
    470476      !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
    471477      !!      potential temperature and salinity using an equation of state 
    472       !!      defined through the namelist parameter nn_eos. * 2D field case 
     478      !!      selected in the nameos namelist. * 2D field case 
    473479      !! 
    474480      !! ** Action  : - prd , the in situ density (no units) (unmasked) 
     
    489495      prd(:,:) = 0._wp 
    490496      ! 
    491       SELECT CASE( nn_eos ) 
    492       ! 
    493       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     497      SELECT CASE( neos ) 
     498      ! 
     499      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    494500         ! 
    495501         DO jj = 1, jpjm1 
     
    530536         CALL lbc_lnk( prd, 'T', 1. )                    ! Lateral boundary conditions 
    531537         ! 
    532       CASE( 1 )                !==  simplified EOS  ==! 
     538      CASE( np_seos )                !==  simplified EOS  ==! 
    533539         ! 
    534540         DO jj = 1, jpjm1 
     
    579585      IF( nn_timing == 1 )   CALL timing_start('rab_3d') 
    580586      ! 
    581       SELECT CASE ( nn_eos ) 
    582       ! 
    583       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     587      SELECT CASE ( neos ) 
     588      ! 
     589      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    584590         ! 
    585591         DO jk = 1, jpkm1 
     
    587593               DO ji = 1, jpi 
    588594                  ! 
    589                   zh  = fsdept(ji,jj,jk) * r1_Z0                                ! depth 
     595                  zh  = gdept_n(ji,jj,jk) * r1_Z0                                ! depth 
    590596                  zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    591597                  zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     
    638644         END DO 
    639645         ! 
    640       CASE( 1 )                  !==  simplified EOS  ==! 
     646      CASE( np_seos )                  !==  simplified EOS  ==! 
    641647         ! 
    642648         DO jk = 1, jpkm1 
     
    645651                  zt  = pts (ji,jj,jk,jp_tem) - 10._wp   ! pot. temperature anomaly (t-T0) 
    646652                  zs  = pts (ji,jj,jk,jp_sal) - 35._wp   ! abs. salinity anomaly (s-S0) 
    647                   zh  = fsdept(ji,jj,jk)                 ! depth in meters at t-point 
     653                  zh  = gdept_n(ji,jj,jk)                ! depth in meters at t-point 
    648654                  ztm = tmask(ji,jj,jk)                  ! land/sea bottom mask = surf. mask 
    649655                  ! 
     
    660666      CASE DEFAULT 
    661667         IF(lwp) WRITE(numout,cform_err) 
    662          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     668         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    663669         nstop = nstop + 1 
    664670         ! 
     
    671677      ! 
    672678   END SUBROUTINE rab_3d 
     679 
    673680 
    674681   SUBROUTINE rab_2d( pts, pdep, pab ) 
     
    693700      pab(:,:,:) = 0._wp 
    694701      ! 
    695       SELECT CASE ( nn_eos ) 
    696       ! 
    697       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     702      SELECT CASE ( neos ) 
     703      ! 
     704      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    698705         ! 
    699706         DO jj = 1, jpjm1 
     
    753760         CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. )                     
    754761         ! 
    755       CASE( 1 )                  !==  simplified EOS  ==! 
     762      CASE( np_seos )                  !==  simplified EOS  ==! 
    756763         ! 
    757764         DO jj = 1, jpjm1 
     
    776783      CASE DEFAULT 
    777784         IF(lwp) WRITE(numout,cform_err) 
    778          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     785         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    779786         nstop = nstop + 1 
    780787         ! 
     
    809816      pab(:) = 0._wp 
    810817      ! 
    811       SELECT CASE ( nn_eos ) 
    812       ! 
    813       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     818      SELECT CASE ( neos ) 
     819      ! 
     820      CASE( np_teos10, np_eos80 )      !==  polynomial TEOS-10 / EOS-80 ==! 
    814821         ! 
    815822         ! 
     
    862869         ! 
    863870         ! 
    864       CASE( 1 )                  !==  simplified EOS  ==! 
     871      CASE( np_seos )                  !==  simplified EOS  ==! 
    865872         ! 
    866873         zt    = pts(jp_tem) - 10._wp   ! pot. temperature anomaly (t-T0) 
    867874         zs    = pts(jp_sal) - 35._wp   ! abs. salinity anomaly (s-S0) 
    868          zh    = pdep                    ! depth at the partial step level 
     875         zh    = pdep                   ! depth at the partial step level 
    869876         ! 
    870877         zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
     
    876883      CASE DEFAULT 
    877884         IF(lwp) WRITE(numout,cform_err) 
    878          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     885         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    879886         nstop = nstop + 1 
    880887         ! 
     
    913920         DO jj = 1, jpj          ! surface and bottom value set to zero one for all in istate.F90 
    914921            DO ji = 1, jpi 
    915                zrw =   ( fsdepw(ji,jj,jk  ) - fsdept(ji,jj,jk) )   & 
    916                   &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) )  
     922               zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
     923                  &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) )  
    917924                  ! 
    918925               zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw  
     
    921928               pn2(ji,jj,jk) = grav * (  zaw * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )     & 
    922929                  &                    - zbw * ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )  )  & 
    923                   &            / fse3w(ji,jj,jk) * tmask(ji,jj,jk) 
     930                  &            / e3w_n(ji,jj,jk) * tmask(ji,jj,jk) 
    924931            END DO 
    925932         END DO 
     
    10081015      REAL(wp), DIMENSION(jpi,jpj), INTENT(out  )           ::   ptf    ! freezing temperature [Celcius] 
    10091016      ! 
    1010       INTEGER  ::   ji, jj   ! dummy loop indices 
    1011       REAL(wp) ::   zt, zs   ! local scalars 
    1012       !!---------------------------------------------------------------------- 
    1013       ! 
    1014       SELECT CASE ( nn_eos ) 
    1015       ! 
    1016       CASE ( -1, 1 )                !==  CT,SA (TEOS-10 formulation) ==! 
    1017          ! 
     1017      INTEGER  ::   ji, jj          ! dummy loop indices 
     1018      REAL(wp) ::   zt, zs, z1_S0   ! local scalars 
     1019      !!---------------------------------------------------------------------- 
     1020      ! 
     1021      SELECT CASE ( neos ) 
     1022      ! 
     1023      CASE ( np_teos10, np_seos )      !==  CT,SA (TEOS-10 and S-EOS formulations) ==! 
     1024         ! 
     1025         z1_S0 = 1._wp / 35.16504_wp 
    10181026         DO jj = 1, jpj 
    10191027            DO ji = 1, jpi 
    1020                zs= SQRT( ABS( psal(ji,jj) ) * r1_S0 )           ! square root salinity 
     1028               zs= SQRT( ABS( psal(ji,jj) ) * z1_S0 )           ! square root salinity 
    10211029               ptf(ji,jj) = ((((1.46873e-03_wp*zs-9.64972e-03_wp)*zs+2.28348e-02_wp)*zs & 
    10221030                  &          - 3.12775e-02_wp)*zs+2.07679e-02_wp)*zs-5.87701e-02_wp 
     
    10271035         IF( PRESENT( pdep ) )   ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
    10281036         ! 
    1029       CASE ( 0 )                     !==  PT,SP (UNESCO formulation)  ==! 
     1037      CASE ( np_eos80 )                !==  PT,SP (UNESCO formulation)  ==! 
    10301038         ! 
    10311039         ptf(:,:) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(:,:) )   & 
     
    10361044      CASE DEFAULT 
    10371045         IF(lwp) WRITE(numout,cform_err) 
    1038          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     1046         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    10391047         nstop = nstop + 1 
    10401048         ! 
     
    10421050      ! 
    10431051  END SUBROUTINE eos_fzp_2d 
     1052 
    10441053 
    10451054  SUBROUTINE eos_fzp_0d( psal, ptf, pdep ) 
     
    10621071      !!---------------------------------------------------------------------- 
    10631072      ! 
    1064       SELECT CASE ( nn_eos ) 
    1065       ! 
    1066       CASE ( -1, 1 )                !==  CT,SA (TEOS-10 formulation) ==! 
    1067          ! 
    1068          zs  = SQRT( ABS( psal ) * r1_S0 )           ! square root salinity 
     1073      SELECT CASE ( neos ) 
     1074      ! 
     1075      CASE ( np_teos10, np_seos )      !==  CT,SA (TEOS-10 and S-EOS formulations) ==! 
     1076         ! 
     1077         zs  = SQRT( ABS( psal ) / 35.16504_wp )           ! square root salinity 
    10691078         ptf = ((((1.46873e-03_wp*zs-9.64972e-03_wp)*zs+2.28348e-02_wp)*zs & 
    10701079                  &          - 3.12775e-02_wp)*zs+2.07679e-02_wp)*zs-5.87701e-02_wp 
     
    10731082         IF( PRESENT( pdep ) )   ptf = ptf - 7.53e-4 * pdep 
    10741083         ! 
    1075       CASE ( 0 )                     !==  PT,SP (UNESCO formulation)  ==! 
     1084      CASE ( np_eos80 )                !==  PT,SP (UNESCO formulation)  ==! 
    10761085         ! 
    10771086         ptf = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal )   & 
     
    10821091      CASE DEFAULT 
    10831092         IF(lwp) WRITE(numout,cform_err) 
    1084          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     1093         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    10851094         nstop = nstop + 1 
    10861095         ! 
     
    11211130      IF( nn_timing == 1 )   CALL timing_start('eos_pen') 
    11221131      ! 
    1123       SELECT CASE ( nn_eos ) 
    1124       ! 
    1125       CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     1132      SELECT CASE ( neos ) 
     1133      ! 
     1134      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    11261135         ! 
    11271136         DO jk = 1, jpkm1 
     
    11291138               DO ji = 1, jpi 
    11301139                  ! 
    1131                   zh  = fsdept(ji,jj,jk) * r1_Z0                                ! depth 
     1140                  zh  = gdept_n(ji,jj,jk) * r1_Z0                                ! depth 
    11321141                  zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    11331142                  zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     
    11861195         END DO 
    11871196         ! 
    1188       CASE( 1 )                !==  Vallis (2006) simplified EOS  ==! 
     1197      CASE( np_seos )                !==  Vallis (2006) simplified EOS  ==! 
    11891198         ! 
    11901199         DO jk = 1, jpkm1 
     
    11931202                  zt  = pts(ji,jj,jk,jp_tem) - 10._wp  ! temperature anomaly (t-T0) 
    11941203                  zs = pts (ji,jj,jk,jp_sal) - 35._wp  ! abs. salinity anomaly (s-S0) 
    1195                   zh  = fsdept(ji,jj,jk)               ! depth in meters  at t-point 
     1204                  zh  = gdept_n(ji,jj,jk)              ! depth in meters  at t-point 
    11961205                  ztm = tmask(ji,jj,jk)                ! tmask 
    11971206                  zn  = 0.5_wp * zh * r1_rau0 * ztm 
     
    12081217      CASE DEFAULT 
    12091218         IF(lwp) WRITE(numout,cform_err) 
    1210          IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     1219         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos 
    12111220         nstop = nstop + 1 
    12121221         ! 
     
    12271236      !!---------------------------------------------------------------------- 
    12281237      INTEGER  ::   ios   ! local integer 
    1229       !! 
    1230       NAMELIST/nameos/ nn_eos, ln_useCT, rn_a0, rn_b0, rn_lambda1, rn_mu1,   & 
     1238      INTEGER  ::   ioptio   ! local integer 
     1239      !! 
     1240      NAMELIST/nameos/ ln_TEOS10, ln_EOS80, ln_SEOS, rn_a0, rn_b0, rn_lambda1, rn_mu1,   & 
    12311241         &                                             rn_lambda2, rn_mu2, rn_nu 
    12321242      !!---------------------------------------------------------------------- 
     
    12481258         WRITE(numout,*) 'eos_init : equation of state' 
    12491259         WRITE(numout,*) '~~~~~~~~' 
    1250          WRITE(numout,*) '          Namelist nameos : set eos parameters' 
    1251          WRITE(numout,*) '             flag for eq. of state and N^2  nn_eos   = ', nn_eos 
    1252          IF( ln_useCT )   THEN 
    1253             WRITE(numout,*) '             model uses Conservative Temperature' 
    1254             WRITE(numout,*) '             Important: model must be initialized with CT and SA fields' 
    1255          ELSE 
    1256             WRITE(numout,*) '             model does not use Conservative Temperature' 
    1257          ENDIF 
     1260         WRITE(numout,*) '   Namelist nameos : Chosen the Equation Of Seawater (EOS)' 
     1261         WRITE(numout,*) '      TEOS-10 : rho=F(Conservative Temperature, Absolute  Salinity, depth)   ln_TEOS10 = ', ln_TEOS10 
     1262         WRITE(numout,*) '      EOS-80  : rho=F(Potential    Temperature, Practical Salinity, depth)   ln_EOS80  = ', ln_EOS80 
     1263         WRITE(numout,*) '      S-EOS   : rho=F(Conservative Temperature, Absolute  Salinity, depth)   ln_SEOS   = ', ln_SEOS 
    12581264      ENDIF 
    1259       ! 
    1260       SELECT CASE( nn_eos )         ! check option 
    1261       ! 
    1262       CASE( -1 )                       !==  polynomial TEOS-10  ==! 
     1265 
     1266      ! Check options for equation of state & set neos based on logical flags 
     1267      ioptio = 0 
     1268      IF( ln_TEOS10 ) THEN   ;   ioptio = ioptio+1   ;   neos = np_teos10   ;   ENDIF 
     1269      IF( ln_EOS80  ) THEN   ;   ioptio = ioptio+1   ;   neos = np_eos80    ;   ENDIF 
     1270      IF( ln_SEOS   ) THEN   ;   ioptio = ioptio+1   ;   neos = np_seos     ;   ENDIF 
     1271      IF( ioptio /= 1 )   CALL ctl_stop("Exactly one equation of state option must be selected") 
     1272      ! 
     1273      SELECT CASE( neos )         ! check option 
     1274      ! 
     1275      CASE( np_teos10 )                       !==  polynomial TEOS-10  ==! 
    12631276         IF(lwp) WRITE(numout,*) 
    12641277         IF(lwp) WRITE(numout,*) '          use of TEOS-10 equation of state (cons. temp. and abs. salinity)' 
     1278         ! 
     1279         l_useCT = .TRUE.                          ! model temperature is Conservative temperature  
    12651280         ! 
    12661281         rdeltaS = 32._wp 
     
    14491464         BPE002 = 1.7269476440e-04_wp 
    14501465         ! 
    1451       CASE( 0 )                        !==  polynomial EOS-80 formulation  ==! 
     1466      CASE( np_eos80 )                        !==  polynomial EOS-80 formulation  ==! 
    14521467         ! 
    14531468         IF(lwp) WRITE(numout,*) 
    14541469         IF(lwp) WRITE(numout,*) '          use of EOS-80 equation of state (pot. temp. and pract. salinity)' 
    14551470         ! 
     1471         l_useCT = .FALSE.                         ! model temperature is Potential temperature 
    14561472         rdeltaS = 20._wp 
    14571473         r1_S0  = 1._wp/40._wp 
     
    16391655         BPE002 = 5.3661089288e-04_wp 
    16401656         ! 
    1641       CASE( 1 )                        !==  Simplified EOS     ==! 
     1657      CASE( np_seos )                        !==  Simplified EOS     ==! 
    16421658         IF(lwp) THEN 
    16431659            WRITE(numout,*) 
     
    16541670            WRITE(numout,*) '               Caution: rn_beta0=0 incompatible with ddm parameterization ' 
    16551671         ENDIF 
    1656          ! 
    1657       CASE DEFAULT                     !==  ERROR in nn_eos  ==! 
    1658          WRITE(ctmp1,*) '          bad flag value for nn_eos = ', nn_eos 
     1672         l_useCT = .TRUE.          ! Use conservative temperature 
     1673         ! 
     1674      CASE DEFAULT                     !==  ERROR in neos  ==! 
     1675         WRITE(ctmp1,*) '          bad flag value for neos = ', neos, '. You should never see this error' 
    16591676         CALL ctl_stop( ctmp1 ) 
    16601677         ! 
     
    16651682      r1_rcp      = 1._wp / rcp 
    16661683      r1_rau0_rcp = 1._wp / rau0_rcp  
     1684      ! 
     1685      IF(lwp) THEN 
     1686         IF( l_useCT )   THEN 
     1687            WRITE(numout,*) '             model uses Conservative Temperature' 
     1688            WRITE(numout,*) '             Important: model must be initialized with CT and SA fields' 
     1689         ELSE 
     1690            WRITE(numout,*) '             model does not use Conservative Temperature' 
     1691         ENDIF 
     1692      ENDIF 
    16671693      ! 
    16681694      IF(lwp) WRITE(numout,*) 
Note: See TracChangeset for help on using the changeset viewer.