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 11989 for NEMO/trunk/src/OCE/TRA – NEMO

Ignore:
Timestamp:
2019-11-27T16:13:52+01:00 (4 years ago)
Author:
cetlod
Message:

cmip6 diag : finalisation of CMIP6 diags implementation

Location:
NEMO/trunk/src/OCE/TRA
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/TRA/eosbn2.F90

    r11536 r11989  
    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,*) 
  • NEMO/trunk/src/OCE/TRA/traadv.F90

    r11536 r11989  
    134134      ! 
    135135!!gm ??? 
    136       IF( ln_diaptr )   CALL dia_ptr( zvn )                                    ! diagnose the effective MSF  
     136      CALL dia_ptr( kt, zvn )                                    ! diagnose the effective MSF  
    137137!!gm ??? 
    138138      ! 
     139 
    139140      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    140141         ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 
  • NEMO/trunk/src/OCE/TRA/traadv_cen.F90

    r10425 r11989  
    6161      !! ** Action : - update pta  with the now advective tracer trends 
    6262      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    63       !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     63      !!             - poleward advective heat and salt transport (ln_diaptr=T) 
    6464      !!---------------------------------------------------------------------- 
    6565      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
     
    8989      l_hst = .FALSE. 
    9090      l_ptr = .FALSE. 
    91       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )        l_trd = .TRUE. 
    92       IF(   cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     91      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )       l_trd = .TRUE. 
     92      IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) )  )    l_ptr = .TRUE.  
    9393      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    94          &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
     94         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )  l_hst = .TRUE. 
    9595      ! 
    9696      !                     
  • NEMO/trunk/src/OCE/TRA/traadv_fct.F90

    r11411 r11989  
    6868      !! ** Action : - update pta  with the now advective tracer trends 
    6969      !!             - send trends to trdtra module for further diagnostics (l_trdtra=T) 
    70       !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     70      !!             - poleward advective heat and salt transport (ln_diaptr=T) 
    7171      !!---------------------------------------------------------------------- 
    7272      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
     
    101101      l_ptr = .FALSE. 
    102102      ll_zAimp = .FALSE. 
    103       IF( ( cdtype =='TRA' .AND. l_trdtra  ) .OR. ( cdtype =='TRC' .AND. l_trdtrc ) )       l_trd = .TRUE. 
    104       IF(   cdtype =='TRA' .AND. ln_diaptr )                                                l_ptr = .TRUE.  
    105       IF(   cdtype =='TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR.  & 
     103      IF( ( cdtype == 'TRA' .AND. l_trdtra  ) .OR. ( cdtype =='TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     104      IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) ) )    l_ptr = .TRUE.  
     105      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR.  & 
    106106         &                         iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )  l_hst = .TRUE. 
    107107      ! 
  • NEMO/trunk/src/OCE/TRA/traadv_mus.F90

    r10425 r11989  
    6868      !! ** Action : - update pta  with the now advective tracer trends 
    6969      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    70       !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     70      !!             - poleward advective heat and salt transport (ln_diaptr=T) 
    7171      !! 
    7272      !! References : Estubier, A., and M. Levy, Notes Techn. Pole de Modelisation 
     
    120120      l_ptr = .FALSE. 
    121121      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
    122       IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     122      IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) )  )   l_ptr = .TRUE.  
    123123      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    124124         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
  • NEMO/trunk/src/OCE/TRA/traadv_qck.F90

    r10425 r11989  
    2121   USE trdtra          ! trends manager: tracers  
    2222   USE diaptr          ! poleward transport diagnostics 
     23   USE iom 
    2324   ! 
    2425   USE in_out_manager  ! I/O manager 
     
    8081      !! ** Action : - update pta  with the now advective tracer trends 
    8182      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    82       !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     83      !!             - poleward advective heat and salt transport (ln_diaptr=T) 
    8384      !! 
    8485      !! ** Reference : Leonard (1979, 1991) 
     
    103104      l_trd = .FALSE. 
    104105      l_ptr = .FALSE. 
    105       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
    106       IF(   cdtype == 'TRA' .AND. ln_diaptr )                                              l_ptr = .TRUE.  
     106      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )   l_trd = .TRUE. 
     107      IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) ) ) l_ptr = .TRUE.  
    107108      ! 
    108109      ! 
  • NEMO/trunk/src/OCE/TRA/traadv_ubs.F90

    r10425 r11989  
    7979      !! ** Action : - update pta  with the now advective tracer trends 
    8080      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    81       !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     81      !!             - poleward advective heat and salt transport (ln_diaptr=T) 
    8282      !! 
    8383      !! Reference : Shchepetkin, A. F., J. C. McWilliams, 2005, Ocean Modelling, 9, 347-404.  
     
    111111      l_ptr = .FALSE. 
    112112      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
    113       IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     113      IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) )  )   l_ptr = .TRUE.  
    114114      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    115115         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
  • NEMO/trunk/src/OCE/TRA/trabbc.F90

    r11536 r11989  
    100100      ENDIF 
    101101      ! 
     102      CALL iom_put ( "hfgeou" , rau0_rcp * qgh_trd0(:,:) ) 
     103      ! 
    102104      IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbc  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
    103105      ! 
  • NEMO/trunk/src/OCE/TRA/traldf_iso.F90

    r11536 r11989  
    124124      l_hst = .FALSE. 
    125125      l_ptr = .FALSE. 
    126       IF( cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     126      IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) )     l_ptr = .TRUE.  
    127127      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    128128         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
  • NEMO/trunk/src/OCE/TRA/traldf_lap_blp.F90

    r10425 r11989  
    8989      l_hst = .FALSE. 
    9090      l_ptr = .FALSE. 
    91       IF( cdtype == 'TRA' .AND. ln_diaptr )                                                l_ptr = .TRUE.  
     91      IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) )     l_ptr = .TRUE. 
    9292      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    9393         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )  l_hst = .TRUE. 
  • NEMO/trunk/src/OCE/TRA/traldf_triad.F90

    r10425 r11989  
    110110      l_hst = .FALSE. 
    111111      l_ptr = .FALSE. 
    112       IF( cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     112      IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) )      l_ptr = .TRUE.  
    113113      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    114114         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
Note: See TracChangeset for help on using the changeset viewer.