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 11995 for NEMO/branches/2019/dev_r11643_ENHANCE-11_CEthe_Shaconemo_diags/src/OCE/TRA/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2019-11-28T11:35:08+01:00 (4 years ago)
Author:
cetlod
Message:

Finalisation of CMIP6 diags implementation, src directory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11643_ENHANCE-11_CEthe_Shaconemo_diags/src/OCE/TRA/eosbn2.F90

    r11536 r11995  
    3030   !!   eos_insitu_2d : Compute the in situ density for 2d fields 
    3131   !!   bn2           : Compute the Brunt-Vaisala frequency 
    32    !!   bn2           : compute the Brunt-Vaisala frequency 
    3332   !!   eos_pt_from_ct: compute the potential temperature from the Conservative Temperature 
    3433   !!   eos_rab       : generic interface of in situ thermal/haline expansion ratio  
     
    6766   END INTERFACE 
    6867   ! 
     68   INTERFACE eos_pt_from_ct 
     69      MODULE PROCEDURE eos_pt_from_ct_2d, eos_pt_from_ct_3d 
     70   END INTERFACE 
     71 
    6972   PUBLIC   eos            ! called by step, istate, tranpc and zpsgrd modules 
    7073   PUBLIC   bn2            ! called by step module 
     
    7679 
    7780   !                               !!** Namelist nameos ** 
    78    LOGICAL , PUBLIC ::   ln_TEOS10 
    79    LOGICAL , PUBLIC ::   ln_EOS80 
    80    LOGICAL , PUBLIC ::   ln_SEOS 
     81   LOGICAL , PUBLIC ::   ln_TEOS10   
     82   LOGICAL , PUBLIC ::   ln_EOS80   
     83   LOGICAL , PUBLIC ::   ln_SEOS   
    8184 
    8285   ! Parameters 
     
    936939 
    937940 
    938    FUNCTION eos_pt_from_ct( ctmp, psal ) RESULT( ptmp ) 
     941   FUNCTION eos_pt_from_ct_2d( ctmp, psal ) RESULT( ptmp ) 
    939942      !!---------------------------------------------------------------------- 
    940943      !!                 ***  ROUTINE eos_pt_from_ct  *** 
     
    959962      !!---------------------------------------------------------------------- 
    960963      ! 
    961       IF( ln_timing )   CALL timing_start('eos_pt_from_ct') 
     964      IF( ln_timing )   CALL timing_start('eos_pt_from_ct_2d') 
    962965      ! 
    963966      zdeltaS = 5._wp 
     
    990993      END DO 
    991994      ! 
    992       IF( ln_timing )   CALL timing_stop('eos_pt_from_ct') 
    993       ! 
    994    END FUNCTION eos_pt_from_ct 
     995      IF( ln_timing )   CALL timing_stop('eos_pt_from_ct_2d') 
     996      ! 
     997   END FUNCTION eos_pt_from_ct_2d 
     998 
     999    
     1000   FUNCTION eos_pt_from_ct_3d( ctmp, psal ) RESULT( ptmp ) 
     1001      !!---------------------------------------------------------------------- 
     1002      !!                 ***  ROUTINE eos_pt_from_ct  *** 
     1003      !! 
     1004      !! ** Purpose :   Compute pot.temp. from cons. temp. [Celcius] 
     1005      !! 
     1006      !! ** Method  :   rational approximation (5/3th order) of TEOS-10 algorithm 
     1007      !!       checkvalue: pt=20.02391895 Celsius for sa=35.7g/kg, ct=20degC 
     1008      !! 
     1009      !! Reference  :   TEOS-10, UNESCO 
     1010      !!                Rational approximation to TEOS10 algorithm (rms error on WOA13 values: 4.0e-5 degC) 
     1011      !!---------------------------------------------------------------------- 
     1012      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   ctmp   ! Cons. Temp [Celcius] 
     1013      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   psal   ! salinity   [psu] 
     1014      ! Leave result array automatic rather than making explicitly allocated 
     1015      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ptmp   ! potential temperature [Celcius] 
     1016      ! 
     1017      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     1018      REAL(wp) ::   zt , zs , ztm        ! local scalars 
     1019      REAL(wp) ::   zn , zd              ! local scalars 
     1020      REAL(wp) ::   zdeltaS , z1_S0 , z1_T0 
     1021      !!---------------------------------------------------------------------- 
     1022      ! 
     1023      IF ( ln_timing )   CALL timing_start('eos_pt_from_ct_3d') 
     1024      ! 
     1025      zdeltaS = 5._wp 
     1026      z1_S0   = 0.875_wp/35.16504_wp 
     1027      z1_T0   = 1._wp/40._wp 
     1028      ! 
     1029      DO jk = 1, jpkm1 
     1030         DO jj = 1, jpj 
     1031            DO ji = 1, jpi 
     1032               ! 
     1033               zt  = ctmp   (ji,jj,jk) * z1_T0 
     1034               zs  = SQRT( ABS( psal(ji,jj,jk) + zdeltaS ) * r1_S0 ) 
     1035               ztm = tmask(ji,jj,jk) 
     1036               ! 
     1037               zn = ((((-2.1385727895e-01_wp*zt   & 
     1038                  &   - 2.7674419971e-01_wp*zs+1.0728094330_wp)*zt   & 
     1039                  &   + (2.6366564313_wp*zs+3.3546960647_wp)*zs-7.8012209473_wp)*zt   & 
     1040                  &   + ((1.8835586562_wp*zs+7.3949191679_wp)*zs-3.3937395875_wp)*zs-5.6414948432_wp)*zt   & 
     1041                  &   + (((3.5737370589_wp*zs-1.5512427389e+01_wp)*zs+2.4625741105e+01_wp)*zs   & 
     1042                  &      +1.9912291000e+01_wp)*zs-3.2191146312e+01_wp)*zt   & 
     1043                  &   + ((((5.7153204649e-01_wp*zs-3.0943149543_wp)*zs+9.3052495181_wp)*zs   & 
     1044                  &      -9.4528934807_wp)*zs+3.1066408996_wp)*zs-4.3504021262e-01_wp 
     1045                  ! 
     1046               zd = (2.0035003456_wp*zt   & 
     1047                  &   -3.4570358592e-01_wp*zs+5.6471810638_wp)*zt   & 
     1048                  &   + (1.5393993508_wp*zs-6.9394762624_wp)*zs+1.2750522650e+01_wp 
     1049                  ! 
     1050               ptmp(ji,jj,jk) = ( zt / z1_T0 + zn / zd ) * ztm 
     1051                  ! 
     1052            END DO 
     1053         END DO 
     1054      END DO 
     1055      ! 
     1056      IF( ln_timing )   CALL timing_stop('eos_pt_from_ct_3d') 
     1057      ! 
     1058   END FUNCTION eos_pt_from_ct_3d 
    9951059 
    9961060 
     
    16511715 
    16521716         r1_S0  = 0.875_wp/35.16504_wp   ! Used to convert CT in potential temperature when using bulk formulae (eos_pt_from_ct) 
    1653           
     1717 
    16541718         IF(lwp) THEN 
    16551719            WRITE(numout,*) 
Note: See TracChangeset for help on using the changeset viewer.