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 3211 for branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2011-12-11T16:00:26+01:00 (12 years ago)
Author:
spickles2
Message:

Stephen Pickles, 11 Dec 2011

Commit to bring the rest of the DCSE NEMO development branch
in line with the latest development version. This includes
array index re-ordering of all OPA_SRC/.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r2715 r3211  
    6161 
    6262   REAL(wp), PUBLIC ::   ralpbet              !: alpha / beta ratio 
     63 
     64   !! * Control permutation of array indices 
     65#  include "dom_oce_ftrans.h90" 
     66#  include "zdfddm_ftrans.h90" 
    6367    
    6468   !! * Substitutions 
     
    111115      USE wrk_nemo, ONLY:   zws => wrk_3d_1   ! 3D workspace 
    112116      !! 
     117 
     118!FTRANS zws :I :I :z 
     119!FTRANS pts :I :I :z :I 
     120!FTRANS prd :I :I :z 
     121 
    113122      REAL(wp), DIMENSION(:,:,:,:), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    114123      !                                                      ! 2 : salinity               [psu] 
     
    135144         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
    136145         !   
     146#if defined key_z_first 
     147         DO jj = 1, jpj 
     148            DO ji = 1, jpi 
     149               DO jk = 1, jpkm1 
     150#else 
    137151         DO jk = 1, jpkm1 
    138152            DO jj = 1, jpj 
    139153               DO ji = 1, jpi 
     154#endif 
    140155                  zt = pts   (ji,jj,jk,jp_tem) 
    141156                  zs = pts   (ji,jj,jk,jp_sal) 
     
    178193         ! 
    179194      CASE( 1 )                !==  Linear formulation function of temperature only  ==! 
     195#if defined key_z_first 
     196         DO jj = 1, jpj 
     197            DO ji = 1, jpi 
     198               DO jk = 1, jpkm1 
     199                  prd(ji,jj,jk) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jk,jp_tem) ) * tmask(ji,jj,jk) 
     200               END DO 
     201            END DO 
     202         END DO 
     203#else 
    180204         DO jk = 1, jpkm1 
    181205            prd(:,:,jk) = ( 0.0285_wp - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
    182206         END DO 
     207#endif 
    183208         ! 
    184209      CASE( 2 )                !==  Linear formulation function of temperature and salinity  ==! 
     210#if defined key_z_first 
     211         DO jj = 1, jpj 
     212            DO ji = 1, jpi 
     213               DO jk = 1, jpkm1 
     214                  prd(ji,jj,jk) = ( rn_beta  * pts(ji,jj,jk,jp_sal) - rn_alpha * pts(ji,jj,jk,jp_tem) ) * tmask(ji,jj,jk) 
     215               END DO 
     216            END DO 
     217         END DO 
     218#else 
    185219         DO jk = 1, jpkm1 
    186220            prd(:,:,jk) = ( rn_beta  * pts(:,:,jk,jp_sal) - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
    187221         END DO 
     222#endif 
    188223         ! 
    189224      END SELECT 
     
    193228      IF( wrk_not_released(3, 1) )   CALL ctl_stop('eos_insitu: failed to release workspace array') 
    194229      ! 
     230 
     231!! * Reset control of array index permutation 
     232!FTRANS CLEAR 
     233#  include "dom_oce_ftrans.h90" 
     234#  include "zdfddm_ftrans.h90" 
     235 
    195236   END SUBROUTINE eos_insitu 
    196237 
     
    245286      USE wrk_nemo, ONLY:   zws => wrk_3d_1 ! 3D workspace 
    246287      !! 
    247       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts    ! 1 : potential temperature  [Celcius] 
    248       !                                                                ! 2 : salinity               [psu] 
    249       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prd    ! in situ density            [-] 
    250       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prhop  ! potential density (surface referenced) 
     288 
     289!FTRANS zws :I :I :z 
     290!FTRANS pts :I :I :z :I 
     291!FTRANS prd :I :I :z 
     292!FTRANS prhop :I :I :z 
     293 
     294!!DCSE NEMO: This style defeats ftrans 
     295!     REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts    ! 1 : potential temperature  [Celcius] 
     296!     !                                                                ! 2 : salinity               [psu] 
     297!     REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prd    ! in situ density            [-] 
     298!     REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prhop  ! potential density (surface referenced) 
     299      REAL(wp), INTENT(in   ) ::   pts(jpi,jpj,jpk,jpts)   ! 1 : potential temperature  [Celcius] 
     300      !                                                    ! 2 : salinity               [psu] 
     301      REAL(wp), INTENT(  out) ::   prd(jpi,jpj,jpk)        ! in situ density            [-] 
     302      REAL(wp), INTENT(  out) ::   prhop(jpi,jpj,jpk)      ! potential density (surface referenced) 
    251303      ! 
    252304      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    266318         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
    267319         !   
     320#if defined key_z_first 
     321         DO jj = 1, jpj 
     322            DO ji = 1, jpi 
     323               DO jk = 1, jpkm1 
     324#else 
    268325         DO jk = 1, jpkm1 
    269326            DO jj = 1, jpj 
    270327               DO ji = 1, jpi 
     328#endif 
    271329                  zt = pts   (ji,jj,jk,jp_tem) 
    272330                  zs = pts   (ji,jj,jk,jp_sal) 
     
    312370         ! 
    313371      CASE( 1 )                !==  Linear formulation = F( temperature )  ==! 
     372#if defined key_z_first 
     373         DO jj = 1, jpj 
     374            DO ji = 1, jpi 
     375               DO jk = 1, jpkm1 
     376                  prd  (ji,jj,jk) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jk,jp_tem) )        * tmask(ji,jj,jk) 
     377                  prhop(ji,jj,jk) = ( 1.e0_wp   +            prd(ji,jj,jk)        ) * rau0 * tmask(ji,jj,jk) 
     378               END DO 
     379            END DO 
     380         END DO 
     381#else 
    314382         DO jk = 1, jpkm1 
    315383            prd  (:,:,jk) = ( 0.0285_wp - rn_alpha * pts(:,:,jk,jp_tem) )        * tmask(:,:,jk) 
    316384            prhop(:,:,jk) = ( 1.e0_wp   +            prd (:,:,jk)       ) * rau0 * tmask(:,:,jk) 
    317385         END DO 
     386#endif 
    318387         ! 
    319388      CASE( 2 )                !==  Linear formulation = F( temperature , salinity )  ==! 
     389#if defined key_z_first 
     390         DO jj = 1, jpj 
     391            DO ji = 1, jpi 
     392               DO jk = 1, jpkm1 
     393                  prd  (ji,jj,jk) = ( rn_beta  * pts(ji,jj,jk,jp_sal) - rn_alpha * pts(ji,jj,jk,jp_tem) )        * tmask(ji,jj,jk) 
     394                  prhop(ji,jj,jk) = ( 1.e0_wp  + prd(ji,jj,jk)                                          ) * rau0 * tmask(ji,jj,jk) 
     395               END DO 
     396            END DO 
     397         END DO 
     398#else 
    320399         DO jk = 1, jpkm1 
    321400            prd  (:,:,jk) = ( rn_beta  * pts(:,:,jk,jp_sal) - rn_alpha * pts(:,:,jk,jp_tem) )        * tmask(:,:,jk) 
    322401            prhop(:,:,jk) = ( 1.e0_wp  + prd (:,:,jk) )                                       * rau0 * tmask(:,:,jk) 
    323402         END DO 
     403#endif 
    324404         ! 
    325405      END SELECT 
     
    329409      IF( wrk_not_released(3, 1) )   CALL ctl_stop('eos_insitu_pot: failed to release workspace array') 
    330410      ! 
     411 
     412!! * Reset control of array index permutation 
     413!FTRANS CLEAR 
     414#  include "dom_oce_ftrans.h90" 
     415#  include "zdfddm_ftrans.h90" 
     416 
    331417   END SUBROUTINE eos_insitu_pot 
    332418 
     
    400486         DO jj = 1, jpjm1 
    401487            DO ji = 1, fs_jpim1   ! vector opt. 
     488#if defined key_z_first 
     489               zmask = tmask_1(ji,jj)          ! land/sea bottom mask = surf. mask 
     490#else 
    402491               zmask = tmask(ji,jj,1)          ! land/sea bottom mask = surf. mask 
     492#endif 
    403493               zt    = pts  (ji,jj,jp_tem)            ! interpolated T 
    404494               zs    = pts  (ji,jj,jp_sal)            ! interpolated S 
     
    442532         DO jj = 1, jpjm1 
    443533            DO ji = 1, fs_jpim1   ! vector opt. 
     534#if defined key_z_first 
     535               prd(ji,jj) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jp_tem) ) * tmask_1(ji,jj) 
     536#else 
    444537               prd(ji,jj) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jp_tem) ) * tmask(ji,jj,1) 
     538#endif 
    445539            END DO 
    446540         END DO 
     
    449543         DO jj = 1, jpjm1 
    450544            DO ji = 1, fs_jpim1   ! vector opt. 
     545#if defined key_z_first 
     546               prd(ji,jj) = ( rn_beta * pts(ji,jj,jp_sal) - rn_alpha * pts(ji,jj,jp_tem) ) * tmask_1(ji,jj)  
     547#else 
    451548               prd(ji,jj) = ( rn_beta * pts(ji,jj,jp_sal) - rn_alpha * pts(ji,jj,jp_tem) ) * tmask(ji,jj,1)  
     549#endif 
    452550            END DO 
    453551         END DO 
     
    492590      !! References :   McDougall, J. Phys. Oceanogr., 17, 1950-1964, 1987. 
    493591      !!---------------------------------------------------------------------- 
    494       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    495       !                                                               ! 2 : salinity               [psu] 
    496       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pn2   ! Brunt-Vaisala frequency    [s-1] 
     592 
     593!FTRANS pts :I :I :z :I 
     594!FTRANS pn2 :I :I :z 
     595 
     596!!DCSE_NEMO: This style defeats ftrans 
     597!     REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
     598!     !                                                               ! 2 : salinity               [psu] 
     599!     REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pn2   ! Brunt-Vaisala frequency    [s-1] 
     600 
     601      REAL(wp), INTENT(in   ) ::   pts(jpi,jpj,jpk,jpts)   ! 1 : potential temperature  [Celcius] 
     602      !                                                    ! 2 : salinity               [psu] 
     603      REAL(wp), INTENT(  out) ::   pn2(jpi,jpj,jpk)        ! Brunt-Vaisala frequency    [s-1] 
    497604      !! 
    498605      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    509616      ! 
    510617      CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     618#if defined key_z_first 
     619         DO jj = 1, jpj 
     620            DO ji = 1, jpi 
     621               DO jk = 2, jpkm1 
     622#else 
    511623         DO jk = 2, jpkm1 
    512624            DO jj = 1, jpj 
    513625               DO ji = 1, jpi 
     626#endif 
    514627                  zgde3w = grav / fse3w(ji,jj,jk) 
    515628                  zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) )         ! potential temperature at w-pt 
     
    556669         ! 
    557670      CASE( 1 )                !==  Linear formulation = F( temperature )  ==! 
     671#if defined key_z_first 
     672         DO jj = 1, jpj 
     673            DO ji = 1, jpi 
     674               DO jk = 2, jpkm1 
     675                  pn2(ji,jj,jk) = grav * rn_alpha * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) & 
     676                     &                 / fse3w(ji,jj,jk) * tmask(ji,jj,jk) 
     677               END DO 
     678            END DO 
     679         END DO 
     680#else 
    558681         DO jk = 2, jpkm1 
    559682            pn2(:,:,jk) = grav * rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
    560683         END DO 
     684#endif 
    561685         ! 
    562686      CASE( 2 )                !==  Linear formulation = F( temperature , salinity )  ==! 
     687#if defined key_z_first 
     688         DO jj = 1, jpj 
     689            DO ji = 1, jpi 
     690               DO jk = 2, jpkm1 
     691                  pn2(ji,jj,jk) = grav * (  rn_alpha * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )      & 
     692                     &                    - rn_beta  * ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )  )   & 
     693                     &                 / fse3w(ji,jj,jk) * tmask(ji,jj,jk) 
     694               END DO 
     695            END DO 
     696         END DO  
     697#else 
    563698         DO jk = 2, jpkm1 
    564699            pn2(:,:,jk) = grav * (  rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) )      & 
     
    566701               &               / fse3w(:,:,jk) * tmask(:,:,jk) 
    567702         END DO  
     703#endif 
    568704#if defined key_zdfddm 
     705#if defined key_z_first 
     706         DO jj = 1, jpj                                   ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
     707            DO ji = 1, jpi 
     708               DO jk = 2, jpkm1 
     709#else 
    569710         DO jk = 2, jpkm1                                 ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
    570711            DO jj = 1, jpj 
    571712               DO ji = 1, jpi 
     713#endif 
    572714                  zds = ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )   
    573715                  IF ( ABS( zds ) <= 1.e-20_wp ) zds = 1.e-20_wp 
     
    584726#endif 
    585727      ! 
     728 
     729!! * Reset control of array index permutation 
     730!FTRANS CLEAR 
     731#  include "dom_oce_ftrans.h90" 
     732#  include "zdfddm_ftrans.h90" 
     733 
    586734   END SUBROUTINE eos_bn2 
    587735 
     
    609757      !! ** Action  : - palph, pbeta : thermal and haline expansion coeff. at T-point 
    610758      !!---------------------------------------------------------------------- 
    611       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts            ! pot. temperature & salinity 
    612       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   palph, pbeta   ! thermal & haline expansion coeff. 
     759 
     760!FTRANS pts :I :I :z :I 
     761!FTRANS palph :I :I :z 
     762!FTRANS pbeta :I :I :z 
     763!!DCSE_NEMO: This style defeats ftrans 
     764!     REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts            ! pot. temperature & salinity 
     765!     REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   palph, pbeta   ! thermal & haline expansion coeff. 
     766      REAL(wp), INTENT(in   ) ::   pts(jpi,jpj,jpk,jpts)            ! pot. temperature & salinity 
     767      REAL(wp), INTENT(  out) ::   palph(jpi,jpj,jpk)               ! thermal expansion coeff. 
     768      REAL(wp), INTENT(  out) ::   pbeta(jpi,jpj,jpk)               ! haline  expansion coeff. 
    613769      ! 
    614770      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    619775      ! 
    620776      CASE ( 0 )               ! Jackett and McDougall (1994) formulation 
     777#if defined key_z_first 
     778         DO jj = 1, jpj 
     779            DO ji = 1, jpi 
     780               DO jk = 1, jpk 
     781#else 
    621782         DO jk = 1, jpk 
    622783            DO jj = 1, jpj 
    623784               DO ji = 1, jpi 
     785#endif 
    624786                  zt = pts(ji,jj,jk,jp_tem)           ! potential temperature 
    625787                  zs = pts(ji,jj,jk,jp_sal) - 35._wp  ! salinity anomaly (s-35) 
     
    670832      END SELECT 
    671833      ! 
     834 
     835!! * Reset control of array index permutation 
     836!FTRANS CLEAR 
     837#  include "dom_oce_ftrans.h90" 
     838#  include "zdfddm_ftrans.h90" 
     839 
    672840   END SUBROUTINE eos_alpbet 
    673841 
Note: See TracChangeset for help on using the changeset viewer.