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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90

    r4147 r6225  
    77   !!            8.5  !  02-06  (G. Madec)  F90: Free form and module 
    88   !!            9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
    9    !!---------------------------------------------------------------------- 
    10 #if ! defined key_coupled 
    11   
     9   !!----------------------------------------------------------------------  
    1210   !!---------------------------------------------------------------------- 
    1311   !!   Only for ORCA2 ORCA1 and ORCA025 
     
    3028   PUBLIC dia_fwb    ! routine called by step.F90 
    3129 
    32    LOGICAL, PUBLIC, PARAMETER ::   lk_diafwb = .TRUE.    !: fresh water budget flag 
    33  
    3430   REAL(wp)               ::   a_fwf ,          & 
    3531      &                        a_sshb, a_sshn, a_salb, a_saln 
     
    3733 
    3834   !! * Substitutions 
    39 #  include "domzgr_substitute.h90" 
    4035#  include "vectopt_loop_substitute.h90" 
    4136   !!---------------------------------------------------------------------- 
     
    4439   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    4540   !!---------------------------------------------------------------------- 
    46  
    4741CONTAINS 
    4842 
     
    5549      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    5650      !! 
    57       INTEGER :: inum             ! temporary logical unit 
    58       INTEGER :: ji, jj, jk, jt   ! dummy loop indices 
    59       INTEGER :: ii0, ii1, ij0, ij1 
    60       REAL(wp) ::   zarea, zvol, zwei 
    61       REAL(wp) ::  ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
    62       REAL(wp) ::  zt, zs, zu   
    63       REAL(wp) ::  zsm0, zfwfnew 
     51      INTEGER  :: inum             ! temporary logical unit 
     52      INTEGER  :: ji, jj, jk, jt   ! dummy loop indices 
     53      INTEGER  :: ii0, ii1, ij0, ij1 
     54      INTEGER  :: isrow         ! index for ORCA1 starting row 
     55      REAL(wp) :: zarea, zvol, zwei 
     56      REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
     57      REAL(wp) :: zt, zs, zu   
     58      REAL(wp) :: zsm0, zfwfnew 
    6459      IF( cp_cfg == "orca" .AND. jp_cfg == 1 .OR. jp_cfg == 2 .OR. jp_cfg == 4 ) THEN 
    6560      !!---------------------------------------------------------------------- 
     
    7772         a_salb   = 0.e0 ! valeur de sal au debut de la simulation 
    7873         ! sshb used because diafwb called after tranxt (i.e. after the swap) 
    79          a_sshb = SUM( e1t(:,:) * e2t(:,:) * sshb(:,:) * tmask_i(:,:) ) 
     74         a_sshb = SUM( e1e2t(:,:) * sshb(:,:) * tmask_i(:,:) ) 
    8075         IF( lk_mpp )   CALL mpp_sum( a_sshb )      ! sum over the global domain 
    8176 
     
    8378            DO jj = 2, jpjm1 
    8479               DO ji = fs_2, fs_jpim1   ! vector opt. 
    85                   zwei  = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
     80                  zwei  = e1e2t(ji,jj) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    8681                  a_salb = a_salb + ( tsb(ji,jj,jk,jp_sal) - zsm0 ) * zwei 
    8782               END DO 
     
    9186      ENDIF 
    9287       
    93       a_fwf    = SUM( e1t(:,:) * e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) )  
     88      a_fwf    = SUM( e1e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) )  
    9489      IF( lk_mpp )   CALL mpp_sum( a_fwf    )       ! sum over the global domain 
    9590 
     
    10196         zfwfnew = 0.e0 
    10297         ! Mean sea level at nitend 
    103          a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 
     98         a_sshn = SUM( e1e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 
    10499         IF( lk_mpp )   CALL mpp_sum( a_sshn )      ! sum over the global domain 
    105          zarea  = SUM( e1t(:,:) * e2t(:,:) *             tmask_i(:,:) ) 
     100         zarea  = SUM( e1e2t(:,:) *             tmask_i(:,:) ) 
    106101         IF( lk_mpp )   CALL mpp_sum( zarea  )      ! sum over the global domain 
    107102          
     
    109104            DO jj = 2, jpjm1 
    110105               DO ji = fs_2, fs_jpim1   ! vector opt. 
    111                   zwei  = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
     106                  zwei  = e1e2t(ji,jj) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    112107                  a_saln = a_saln + ( tsn(ji,jj,jk,jp_sal) - zsm0 ) * zwei 
    113108                  zvol  = zvol  + zwei 
     
    119114          
    120115         ! Conversion in m3 
    121          a_fwf    = a_fwf * rdttra(1) * 1.e-3  
     116         a_fwf    = a_fwf * rdt * 1.e-3  
    122117          
    123118         ! fwf correction to bring back the mean ssh to zero 
     
    169164         CASE ( 1 )                                  !  ORCA_R1 configurations 
    170165            !                                        ! ======================= 
    171             ii0 = 283   ;   ii1 = 283 
    172             ij0 = 200   ;   ij1 = 200 
     166            ! This dirty section will be suppressed by simplification process: 
     167            ! all this will come back in input files 
     168            ! Currently these hard-wired indices relate to configuration with 
     169            ! extend grid (jpjglo=332) 
     170            isrow = 332 - jpjglo 
     171            ! 
     172            ii0 = 283           ;   ii1 = 283 
     173            ij0 = 241 - isrow   ;   ij1 = 241 - isrow 
    173174            !                                        ! ======================= 
    174175         CASE DEFAULT                                !    ORCA R05 or R025 
     
    183184                  zt = 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    184185                  zs = 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
    185                   zu = un(ji,jj,jk) * fse3t(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
     186                  zu = un(ji,jj,jk) * e3t_n(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
    186187 
    187188                  IF( un(ji,jj,jk) > 0.e0 ) THEN  
     
    216217         CASE ( 1 )                                  !  ORCA_R1 configurations 
    217218            !                                        ! ======================= 
    218             ii0 = 282   ;   ii1 = 282 
    219             ij0 = 200   ;   ij1 = 200 
     219            ! This dirty section will be suppressed by simplification process: 
     220            ! all this will come back in input files 
     221            ! Currently these hard-wired indices relate to configuration with 
     222            ! extend grid (jpjglo=332) 
     223            isrow = 332 - jpjglo 
     224            ii0 = 282           ;   ii1 = 282 
     225            ij0 = 240 - isrow   ;   ij1 = 240 - isrow 
    220226            !                                        ! ======================= 
    221227         CASE DEFAULT                                !    ORCA R05 or R025 
     
    230236                  zt = 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    231237                  zs = 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
    232                   zu = un(ji,jj,jk) * fse3t(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
     238                  zu = un(ji,jj,jk) * e3t_n(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
    233239                   
    234240                  IF( un(ji,jj,jk) > 0.e0 ) THEN  
     
    263269         CASE ( 1 )                                  !  ORCA_R1 configurations 
    264270            !                                        ! ======================= 
    265             ii0 = 331   ;   ii1 = 331 
    266             ij0 = 176   ;   ij1 = 176 
     271            ! This dirty section will be suppressed by simplification process: 
     272            ! all this will come back in input files 
     273            ! Currently these hard-wired indices relate to configuration with 
     274            ! extend grid (jpjglo=332) 
     275            isrow = 332 - jpjglo 
     276            ii0 = 331           ;   ii1 = 331 
     277            ij0 = 215 - isrow   ;   ij1 = 215 - isrow 
    267278            !                                        ! ======================= 
    268279         CASE DEFAULT                                !    ORCA R05 or R025 
     
    277288                  zt = 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    278289                  zs = 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
    279                   zu = un(ji,jj,jk) * fse3t(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
     290                  zu = un(ji,jj,jk) * e3t_n(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
    280291                   
    281292                  IF( un(ji,jj,jk) > 0.e0 ) THEN  
     
    310321         CASE ( 1 )                                  !  ORCA_R1 configurations 
    311322            !                                        ! ======================= 
    312             ii0 = 297   ;   ii1 = 297  
    313             ij0 = 230   ;   ij1 = 230 
     323            ! This dirty section will be suppressed by simplification process: 
     324            ! all this will come back in input files 
     325            ! Currently these hard-wired indices relate to configuration with 
     326            ! extend grid (jpjglo=332) 
     327            isrow = 332 - jpjglo 
     328            ii0 = 297           ;   ii1 = 297 
     329            ij0 = 269 - isrow   ;   ij1 = 269 - isrow 
    314330            !                                        ! ======================= 
    315331         CASE DEFAULT                                !    ORCA R05 or R025 
     
    324340                  zt = 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    325341                  zs = 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
    326                   zu = un(ji,jj,jk) * fse3t(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
     342                  zu = un(ji,jj,jk) * e3t_n(ji,jj,jk) * e2u(ji,jj) * tmask_i(ji,jj) 
    327343                   
    328344                  IF( un(ji,jj,jk) > 0.e0 ) THEN  
     
    386402         WRITE(inum,*) 
    387403         WRITE(inum,*)    'Net freshwater budget ' 
    388          WRITE(inum,9010) '  fwf    = ',a_fwf,   ' m3 =', a_fwf   /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 
     404         WRITE(inum,9010) '  fwf    = ',a_fwf,   ' m3 =', a_fwf   /(FLOAT(nitend-nit000+1)*rdt) * 1.e-6,' Sv' 
    389405         WRITE(inum,*) 
    390406         WRITE(inum,9010) '  zarea =',zarea 
     
    442458      ENDIF 
    443459 
    444       IF( nn_timing == 1 )   CALL timing_start('dia_fwb') 
     460      IF( nn_timing == 1 )   CALL timing_stop('dia_fwb') 
    445461 
    446462 9005 FORMAT(1X,A,ES24.16) 
     
    453469   END SUBROUTINE dia_fwb 
    454470 
    455 #else 
    456    !!---------------------------------------------------------------------- 
    457    !!   Default option :                                       Dummy Module 
    458    !!---------------------------------------------------------------------- 
    459    LOGICAL, PUBLIC, PARAMETER ::   lk_diafwb = .FALSE.    !: fresh water budget flag 
    460 CONTAINS 
    461    SUBROUTINE dia_fwb( kt )        ! Empty routine 
    462       WRITE(*,*) 'dia_fwb: : You should not have seen this print! error?', kt 
    463    END SUBROUTINE dia_fwb 
    464 #endif 
    465  
    466471   !!====================================================================== 
    467472END MODULE diafwb 
Note: See TracChangeset for help on using the changeset viewer.