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.
bdydta.F90 in NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/BDY – NEMO

source: NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/BDY/bdydta.F90 @ 14037

Last change on this file since 14037 was 14037, checked in by ayoung, 3 years ago

Updated to trunk at 14020. Sette tests passed with change of results for configurations with non-linear ssh. Ticket #2506.

  • Property svn:keywords set to Id
File size: 42.2 KB
RevLine 
[911]1MODULE bdydta
[1125]2   !!======================================================================
3   !!                       ***  MODULE bdydta  ***
[911]4   !! Open boundary data : read the data for the unstructured open boundaries.
[1125]5   !!======================================================================
6   !! History :  1.0  !  2005-01  (J. Chanut, A. Sellar)  Original code
7   !!             -   !  2007-01  (D. Storkey) Update to use IOM module
[2528]8   !!             -   !  2007-07  (D. Storkey) add bdy_dta_fla
[1125]9   !!            3.0  !  2008-04  (NEMO team)  add in the reference version
[2528]10   !!            3.3  !  2010-09  (E.O'Dea) modifications for Shelf configurations
11   !!            3.3  !  2010-09  (D.Storkey) add ice boundary conditions
[3294]12   !!            3.4  !  2011     (D. Storkey) rewrite in preparation for OBC-BDY merge
[9656]13   !!            3.6  !  2012-01  (C. Rousset) add ice boundary conditions for sea ice
14   !!            4.0  !  2018     (C. Rousset) SI3 compatibility
[1125]15   !!----------------------------------------------------------------------
[9019]16
[1125]17   !!----------------------------------------------------------------------
[9019]18   !!    bdy_dta      : read external data along open boundaries from file
19   !!    bdy_dta_init : initialise arrays etc for reading of external data
20   !!----------------------------------------------------------------------
21   USE oce            ! ocean dynamics and tracers
22   USE dom_oce        ! ocean space and time domain
23   USE phycst         ! physical constants
24   USE sbcapr         ! atmospheric pressure forcing
[12377]25   USE tide_mod, ONLY: ln_tide ! tidal forcing
[9019]26   USE bdy_oce        ! ocean open boundary conditions 
27   USE bdytides       ! tidal forcing at boundaries
[9570]28#if defined key_si3
[9019]29   USE ice            ! sea-ice variables
30   USE icevar         ! redistribute ice input into categories
[2528]31#endif
[9019]32   !
[10529]33   USE lib_mpp, ONLY: ctl_stop, ctl_nam
[9019]34   USE fldread        ! read input fields
35   USE iom            ! IOM library
36   USE in_out_manager ! I/O logical units
37   USE timing         ! Timing
[911]38
39   IMPLICIT NONE
40   PRIVATE
41
[3294]42   PUBLIC   bdy_dta          ! routine called by step.F90 and dynspg_ts.F90
43   PUBLIC   bdy_dta_init     ! routine called by nemogcm.F90
[911]44
[14037]45   INTEGER , PARAMETER ::   jpbdyfld  = 17    ! maximum number of files to read
[11536]46   INTEGER , PARAMETER ::   jp_bdyssh = 1     !
47   INTEGER , PARAMETER ::   jp_bdyu2d = 2     !
48   INTEGER , PARAMETER ::   jp_bdyv2d = 3     !
49   INTEGER , PARAMETER ::   jp_bdyu3d = 4     !
50   INTEGER , PARAMETER ::   jp_bdyv3d = 5     !
51   INTEGER , PARAMETER ::   jp_bdytem = 6     !
52   INTEGER , PARAMETER ::   jp_bdysal = 7     !
53   INTEGER , PARAMETER ::   jp_bdya_i = 8     !
54   INTEGER , PARAMETER ::   jp_bdyh_i = 9     !
55   INTEGER , PARAMETER ::   jp_bdyh_s = 10    !
56   INTEGER , PARAMETER ::   jp_bdyt_i = 11    !
57   INTEGER , PARAMETER ::   jp_bdyt_s = 12    !
58   INTEGER , PARAMETER ::   jp_bdytsu = 13    !
59   INTEGER , PARAMETER ::   jp_bdys_i = 14    !
60   INTEGER , PARAMETER ::   jp_bdyaip = 15    !
61   INTEGER , PARAMETER ::   jp_bdyhip = 16    !
[14037]62   INTEGER , PARAMETER ::   jp_bdyhil = 17    !
[11536]63#if ! defined key_si3
64   INTEGER , PARAMETER ::   jpl = 1
65#endif
66
[4354]67!$AGRIF_DO_NOT_TREAT
[11536]68   TYPE(FLD), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET ::   bf   ! structure of input fields (file informations, fields read)
[4354]69!$AGRIF_END_DO_NOT_TREAT
[911]70
[12377]71   !! * Substitutions
72#  include "do_loop_substitute.h90"
[13237]73#  include "domzgr_substitute.h90"
[1125]74   !!----------------------------------------------------------------------
[9598]75   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
[1146]76   !! $Id$
[10068]77   !! Software governed by the CeCILL license (see ./LICENSE)
[1125]78   !!----------------------------------------------------------------------
[911]79CONTAINS
80
[12377]81   SUBROUTINE bdy_dta( kt, Kmm )
[1125]82      !!----------------------------------------------------------------------
[3294]83      !!                   ***  SUBROUTINE bdy_dta  ***
[911]84      !!                   
[3294]85      !! ** Purpose :   Update external data for open boundary conditions
[911]86      !!
[3294]87      !! ** Method  :   Use fldread.F90
88      !!               
[1125]89      !!----------------------------------------------------------------------
[6140]90      INTEGER, INTENT(in)           ::   kt           ! ocean time-step index
[12377]91      INTEGER, INTENT(in)           ::   Kmm          ! ocean time level index
[6140]92      !
[11536]93      INTEGER ::  jbdy, jfld, jstart, jend, ib, jl    ! dummy loop indices
94      INTEGER ::  ii, ij, ik, igrd, ipl               ! local integers
95      TYPE(OBC_DATA)         , POINTER ::   dta_alias        ! short cut
96      TYPE(FLD), DIMENSION(:), POINTER ::   bf_alias
[911]97      !!---------------------------------------------------------------------------
[6140]98      !
[9124]99      IF( ln_timing )   CALL timing_start('bdy_dta')
[6140]100      !
[3294]101      ! Initialise data arrays once for all from initial conditions where required
102      !---------------------------------------------------------------------------
[12377]103      IF( kt == nit000 ) THEN
[1125]104
[3294]105         ! Calculate depth-mean currents
106         !-----------------------------
[11536]107
[9019]108         DO jbdy = 1, nb_bdy
[6140]109            !
[9019]110            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN
[11536]111               IF( dta_bdy(jbdy)%lneed_ssh ) THEN
[4292]112                  igrd = 1
[12547]113                  DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is allocated and used only on the rim
[9019]114                     ii = idx_bdy(jbdy)%nbi(ib,igrd)
115                     ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]116                     dta_bdy(jbdy)%ssh(ib) = ssh(ii,ij,Kmm) * tmask(ii,ij,1)         
[11536]117                  END DO
[9019]118               ENDIF
[12921]119               IF( ASSOCIATED(dta_bdy(jbdy)%u2d) ) THEN   ! no SIZE with a unassociated pointer. v2d and u2d can differ on subdomain
[4292]120                  igrd = 2
[12921]121                  DO ib = 1, SIZE(dta_bdy(jbdy)%u2d)      ! u2d is used either over the whole bdy or only on the rim
[9019]122                     ii = idx_bdy(jbdy)%nbi(ib,igrd)
123                     ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]124                     dta_bdy(jbdy)%u2d(ib) = uu_b(ii,ij,Kmm) * umask(ii,ij,1)         
[11536]125                  END DO
[12921]126               ENDIF
127               IF( ASSOCIATED(dta_bdy(jbdy)%v2d) ) THEN   ! no SIZE with a unassociated pointer. v2d and u2d can differ on subdomain
[4292]128                  igrd = 3
[12921]129                  DO ib = 1, SIZE(dta_bdy(jbdy)%v2d)      ! v2d is used either over the whole bdy or only on the rim
[9019]130                     ii = idx_bdy(jbdy)%nbi(ib,igrd)
131                     ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]132                     dta_bdy(jbdy)%v2d(ib) = vv_b(ii,ij,Kmm) * vmask(ii,ij,1)         
[11536]133                  END DO
[9019]134               ENDIF
[4292]135            ENDIF
[9019]136            !
137            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN
[11536]138               IF( dta_bdy(jbdy)%lneed_dyn3d ) THEN
[4292]139                  igrd = 2 
[12547]140                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
[4292]141                     DO ik = 1, jpkm1
[9019]142                        ii = idx_bdy(jbdy)%nbi(ib,igrd)
143                        ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]144                        dta_bdy(jbdy)%u3d(ib,ik) =  ( uu(ii,ij,ik,Kmm) - uu_b(ii,ij,Kmm) ) * umask(ii,ij,ik)         
[3294]145                     END DO
[11536]146                  END DO
[4292]147                  igrd = 3 
[12547]148                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
[4292]149                     DO ik = 1, jpkm1
[9019]150                        ii = idx_bdy(jbdy)%nbi(ib,igrd)
151                        ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]152                        dta_bdy(jbdy)%v3d(ib,ik) =  ( vv(ii,ij,ik,Kmm) - vv_b(ii,ij,Kmm) ) * vmask(ii,ij,ik)         
[11536]153                     END DO
154                  END DO
[9019]155               ENDIF
[3294]156            ENDIF
[911]157
[9019]158            IF( nn_tra_dta(jbdy) == 0 ) THEN
[11536]159               IF( dta_bdy(jbdy)%lneed_tra ) THEN
[4292]160                  igrd = 1 
[12547]161                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
[4292]162                     DO ik = 1, jpkm1
[9019]163                        ii = idx_bdy(jbdy)%nbi(ib,igrd)
164                        ij = idx_bdy(jbdy)%nbj(ib,igrd)
[12377]165                        dta_bdy(jbdy)%tem(ib,ik) = ts(ii,ij,ik,jp_tem,Kmm) * tmask(ii,ij,ik)         
166                        dta_bdy(jbdy)%sal(ib,ik) = ts(ii,ij,ik,jp_sal,Kmm) * tmask(ii,ij,ik)         
[4292]167                     END DO
[11536]168                  END DO
[9019]169               ENDIF
[3294]170            ENDIF
[911]171
[9570]172#if defined key_si3
[9657]173            IF( nn_ice_dta(jbdy) == 0 ) THEN    ! set ice to initial values
[11536]174               IF( dta_bdy(jbdy)%lneed_ice ) THEN
[4292]175                  igrd = 1   
176                  DO jl = 1, jpl
[12547]177                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
[9019]178                        ii = idx_bdy(jbdy)%nbi(ib,igrd)
179                        ij = idx_bdy(jbdy)%nbj(ib,igrd)
[11536]180                        dta_bdy(jbdy)%a_i(ib,jl) =  a_i (ii,ij,jl) * tmask(ii,ij,1) 
181                        dta_bdy(jbdy)%h_i(ib,jl) =  h_i (ii,ij,jl) * tmask(ii,ij,1) 
182                        dta_bdy(jbdy)%h_s(ib,jl) =  h_s (ii,ij,jl) * tmask(ii,ij,1) 
183                        dta_bdy(jbdy)%t_i(ib,jl) =  SUM(t_i (ii,ij,:,jl)) * r1_nlay_i * tmask(ii,ij,1) 
184                        dta_bdy(jbdy)%t_s(ib,jl) =  SUM(t_s (ii,ij,:,jl)) * r1_nlay_s * tmask(ii,ij,1)
185                        dta_bdy(jbdy)%tsu(ib,jl) =  t_su(ii,ij,jl) * tmask(ii,ij,1) 
186                        dta_bdy(jbdy)%s_i(ib,jl) =  s_i (ii,ij,jl) * tmask(ii,ij,1)
187                        ! melt ponds
188                        dta_bdy(jbdy)%aip(ib,jl) =  a_ip(ii,ij,jl) * tmask(ii,ij,1) 
189                        dta_bdy(jbdy)%hip(ib,jl) =  h_ip(ii,ij,jl) * tmask(ii,ij,1) 
[14037]190                        dta_bdy(jbdy)%hil(ib,jl) =  h_il(ii,ij,jl) * tmask(ii,ij,1) 
[4292]191                     END DO
192                  END DO
193               ENDIF
194            ENDIF
[3294]195#endif
[9019]196         END DO ! jbdy
[6140]197         !
198      ENDIF ! kt == nit000
[911]199
[3294]200      ! update external data from files
201      !--------------------------------
[3703]202
[11536]203      DO jbdy = 1, nb_bdy
[3703]204
[11536]205         dta_alias => dta_bdy(jbdy)
206         bf_alias  => bf(:,jbdy)
[3703]207
[11536]208         ! read/update all bdy data
209         ! ------------------------
[12377]210         ! BDY: use pt_offset=0.5 as applied at the end of the step and fldread is referenced at the middle of the step
211         CALL fld_read( kt, 1, bf_alias, pt_offset = 0.5_wp, Kmm = Kmm )
[11536]212         ! apply some corrections in some specific cases...
213         ! --------------------------------------------------
214         !
215         ! if runoff condition: change river flow we read (in m3/s) into barotropic velocity (m/s)
[12921]216         IF( cn_tra(jbdy) == 'runoff' ) THEN   ! runoff
[11536]217            !
[12921]218            IF( ASSOCIATED(dta_bdy(jbdy)%u2d) ) THEN   ! no SIZE with a unassociated pointer. v2d and u2d can differ on subdomain
219               igrd = 2                         ! zonal flow (m3/s) to barotropic zonal velocity (m/s)
220               DO ib = 1, SIZE(dta_alias%u2d)   ! u2d is used either over the whole bdy or only on the rim
221                  ii   = idx_bdy(jbdy)%nbi(ib,igrd)
222                  ij   = idx_bdy(jbdy)%nbj(ib,igrd)
223                  dta_alias%u2d(ib) = dta_alias%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) )
224               END DO
225            ENDIF
226            IF( ASSOCIATED(dta_bdy(jbdy)%v2d) ) THEN   ! no SIZE with a unassociated pointer. v2d and u2d can differ on subdomain
227               igrd = 3                         ! meridional flow (m3/s) to barotropic meridional velocity (m/s)
228               DO ib = 1, SIZE(dta_alias%v2d)   ! v2d is used either over the whole bdy or only on the rim
229                  ii   = idx_bdy(jbdy)%nbi(ib,igrd)
230                  ij   = idx_bdy(jbdy)%nbj(ib,igrd)
231                  dta_alias%v2d(ib) = dta_alias%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) )
232               END DO
233            ENDIF
[11536]234         ENDIF
235
236         ! tidal harmonic forcing ONLY: initialise arrays
237         IF( nn_dyn2d_dta(jbdy) == 2 ) THEN   ! we did not read ssh, u/v2d
[12921]238            IF( ASSOCIATED(dta_alias%ssh) ) dta_alias%ssh(:) = 0._wp
239            IF( ASSOCIATED(dta_alias%u2d) ) dta_alias%u2d(:) = 0._wp
240            IF( ASSOCIATED(dta_alias%v2d) ) dta_alias%v2d(:) = 0._wp
[11536]241         ENDIF
242
243         ! If full velocities in boundary data, then split it into barotropic and baroclinic component
244         IF( bf_alias(jp_bdyu3d)%ltotvel ) THEN     ! if we read 3D total velocity (can be true only if u3d was read)
245            !
246            igrd = 2                       ! zonal velocity
247            DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
248               ii   = idx_bdy(jbdy)%nbi(ib,igrd)
249               ij   = idx_bdy(jbdy)%nbj(ib,igrd)
[12638]250               dta_alias%u2d(ib) = 0._wp   ! compute barotrope zonal velocity and put it in u2d
[11536]251               DO ik = 1, jpkm1
[13237]252                  dta_alias%u2d(ib) = dta_alias%u2d(ib)   &
253                     &              + e3u(ii,ij,ik,Kmm) * umask(ii,ij,ik) * dta_alias%u3d(ib,ik)
[11536]254               END DO
[12377]255               dta_alias%u2d(ib) =  dta_alias%u2d(ib) * r1_hu(ii,ij,Kmm)
[11536]256               DO ik = 1, jpkm1            ! compute barocline zonal velocity and put it in u3d
257                  dta_alias%u3d(ib,ik) = dta_alias%u3d(ib,ik) - dta_alias%u2d(ib)
258               END DO
259            END DO
260            igrd = 3                       ! meridional velocity
261            DO ib = 1, idx_bdy(jbdy)%nblen(igrd)
262               ii   = idx_bdy(jbdy)%nbi(ib,igrd)
263               ij   = idx_bdy(jbdy)%nbj(ib,igrd)
[12638]264               dta_alias%v2d(ib) = 0._wp   ! compute barotrope meridional velocity and put it in v2d
[11536]265               DO ik = 1, jpkm1
[13237]266                  dta_alias%v2d(ib) = dta_alias%v2d(ib)   &
267                     &              + e3v(ii,ij,ik,Kmm) * vmask(ii,ij,ik) * dta_alias%v3d(ib,ik)
[11536]268               END DO
[12377]269               dta_alias%v2d(ib) =  dta_alias%v2d(ib) * r1_hv(ii,ij,Kmm)
[11536]270               DO ik = 1, jpkm1            ! compute barocline meridional velocity and put it in v3d
271                  dta_alias%v3d(ib,ik) = dta_alias%v3d(ib,ik) - dta_alias%v2d(ib)
272               END DO
273            END DO
274         ENDIF   ! ltotvel
275
276         !  atm surface pressure : add inverted barometer effect to ssh if it was read
277         IF ( ln_apr_obc .AND. TRIM(bf_alias(jp_bdyssh)%clrootname) /= 'NOT USED' ) THEN
278            igrd = 1
279            DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is used only on the rim
280               ii   = idx_bdy(jbdy)%nbi(ib,igrd)
281               ij   = idx_bdy(jbdy)%nbj(ib,igrd)
282               dta_alias%ssh(ib) = dta_alias%ssh(ib) + ssh_ib(ii,ij)
283            END DO
284         ENDIF
285
[9570]286#if defined key_si3
[12638]287         IF( dta_alias%lneed_ice .AND. idx_bdy(jbdy)%nblen(1) > 0 ) THEN
[11536]288            ! fill temperature and salinity arrays
289            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyt_i)%fnow(:,1,:) = rice_tem (jbdy)
290            IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyt_s)%fnow(:,1,:) = rice_tem (jbdy)
291            IF( TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' )   bf_alias(jp_bdytsu)%fnow(:,1,:) = rice_tem (jbdy)
292            IF( TRIM(bf_alias(jp_bdys_i)%clrootname) == 'NOT USED' )   bf_alias(jp_bdys_i)%fnow(:,1,:) = rice_sal (jbdy)
[14037]293            IF( TRIM(bf_alias(jp_bdyaip)%clrootname) == 'NOT USED' )   &               ! rice_apnd is the pond fraction
294               &   bf_alias(jp_bdyaip)%fnow(:,1,:) = rice_apnd(jbdy) * bf_alias(jp_bdya_i)%fnow(:,1,:)   ! ( a_ip = rice_apnd*a_i )
[11536]295            IF( TRIM(bf_alias(jp_bdyhip)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyhip)%fnow(:,1,:) = rice_hpnd(jbdy)
[14037]296            IF( TRIM(bf_alias(jp_bdyhil)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyhil)%fnow(:,1,:) = rice_hlid(jbdy)
297
[12396]298            ! if T_i is read and not T_su, set T_su = T_i
299            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) &
300               &   bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_i)%fnow(:,1,:)
301            ! if T_s is read and not T_su, set T_su = T_s
302            IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) &
303               &   bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_s)%fnow(:,1,:)
304            ! if T_i is read and not T_s, set T_s = T_i
305            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) &
306               &   bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdyt_i)%fnow(:,1,:)
307            ! if T_su is read and not T_s, set T_s = T_su
308            IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) &
309               &   bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdytsu)%fnow(:,1,:)
[11536]310            ! if T_su is read and not T_i, set T_i = (T_su + T_freeze)/2
311            IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) &
312               &   bf_alias(jp_bdyt_i)%fnow(:,1,:) = 0.5_wp * ( bf_alias(jp_bdytsu)%fnow(:,1,:) + 271.15 )
313            ! if T_s is read and not T_i, set T_i = (T_s + T_freeze)/2
314            IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) &
315               &   bf_alias(jp_bdyt_i)%fnow(:,1,:) = 0.5_wp * ( bf_alias(jp_bdyt_s)%fnow(:,1,:) + 271.15 )
316
317            ! make sure ponds = 0 if no ponds scheme
318            IF ( .NOT.ln_pnd ) THEN
319               bf_alias(jp_bdyaip)%fnow(:,1,:) = 0._wp
320               bf_alias(jp_bdyhip)%fnow(:,1,:) = 0._wp
[14037]321               bf_alias(jp_bdyhil)%fnow(:,1,:) = 0._wp
[11536]322            ENDIF
[14037]323            IF ( .NOT.ln_pnd_lids ) THEN
324               bf_alias(jp_bdyhil)%fnow(:,1,:) = 0._wp
325            ENDIF
[11536]326           
327            ! convert N-cat fields (input) into jpl-cat (output)
328            ipl = SIZE(bf_alias(jp_bdya_i)%fnow, 3)           
329            IF( ipl /= jpl ) THEN      ! ice: convert N-cat fields (input) into jpl-cat (output)
[14037]330               CALL ice_var_itd( bf_alias(jp_bdyh_i)%fnow(:,1,:), bf_alias(jp_bdyh_s)%fnow(:,1,:), bf_alias(jp_bdya_i)%fnow(:,1,:), & ! in
331                  &              dta_alias%h_i                  , dta_alias%h_s                  , dta_alias%a_i                  , & ! out
332                  &              bf_alias(jp_bdyt_i)%fnow(:,1,:), bf_alias(jp_bdyt_s)%fnow(:,1,:), &                                  ! in (optional)
333                  &              bf_alias(jp_bdytsu)%fnow(:,1,:), bf_alias(jp_bdys_i)%fnow(:,1,:), &                                  ! in     -
334                  &              bf_alias(jp_bdyaip)%fnow(:,1,:), bf_alias(jp_bdyhip)%fnow(:,1,:), bf_alias(jp_bdyhil)%fnow(:,1,:), & ! in     -
335                  &              dta_alias%t_i                  , dta_alias%t_s                  , &                                  ! out    -
336                  &              dta_alias%tsu                  , dta_alias%s_i                  , &                                  ! out    -
337                  &              dta_alias%aip                  , dta_alias%hip                  , dta_alias%hil )                    ! out    -
[11536]338            ENDIF
339         ENDIF
[4292]340#endif
[9019]341      END DO  ! jbdy
[911]342
[7646]343      IF ( ln_tide ) THEN
344         IF (ln_dynspg_ts) THEN      ! Fill temporary arrays with slow-varying bdy data                           
[11536]345            DO jbdy = 1, nb_bdy      ! Tidal component added in ts loop
346               IF ( nn_dyn2d_dta(jbdy) .GE. 2 ) THEN
[12921]347                  IF( ASSOCIATED(dta_bdy(jbdy)%ssh) ) dta_bdy_s(jbdy)%ssh(:) = dta_bdy(jbdy)%ssh(:)
348                  IF( ASSOCIATED(dta_bdy(jbdy)%u2d) ) dta_bdy_s(jbdy)%u2d(:) = dta_bdy(jbdy)%u2d(:)
349                  IF( ASSOCIATED(dta_bdy(jbdy)%v2d) ) dta_bdy_s(jbdy)%v2d(:) = dta_bdy(jbdy)%v2d(:)
[12377]350               ENDIF
351            END DO
352         ELSE ! Add tides if not split-explicit free surface else this is done in ts loop
353            !
354            CALL bdy_dta_tides( kt=kt, pt_offset = 1._wp )
[7646]355         ENDIF
[12377]356      ENDIF
357      !
358      IF( ln_timing )   CALL timing_stop('bdy_dta')
359      !
360   END SUBROUTINE bdy_dta
[12921]361   
[4292]362
[6140]363   SUBROUTINE bdy_dta_init
[3294]364      !!----------------------------------------------------------------------
365      !!                   ***  SUBROUTINE bdy_dta_init  ***
366      !!                   
367      !! ** Purpose :   Initialise arrays for reading of external data
368      !!                for open boundary conditions
369      !!
[4292]370      !! ** Method  :   
[3294]371      !!               
372      !!----------------------------------------------------------------------
[11536]373      INTEGER ::   jbdy, jfld    ! Local integers
374      INTEGER ::   ierror, ios     !
[6140]375      !
[12377]376      INTEGER ::   nbdy_rdstart, nbdy_loc
377      CHARACTER(LEN=50)                      ::   cerrmsg       ! error string
[11536]378      CHARACTER(len=3)                       ::   cl3           !
[3294]379      CHARACTER(len=100)                     ::   cn_dir        ! Root directory for location of data files
380      LOGICAL                                ::   ln_full_vel   ! =T => full velocities in 3D boundary data
[9019]381      !                                                         ! =F => baroclinic velocities in 3D boundary data
[11536]382      LOGICAL                                ::   ln_zinterp    ! =T => requires a vertical interpolation of the bdydta
[14037]383      REAL(wp)                               ::   rn_ice_tem, rn_ice_sal, rn_ice_age, rn_ice_apnd, rn_ice_hpnd, rn_ice_hlid
[11536]384      INTEGER                                ::   ipk,ipl       !
385      INTEGER                                ::   idvar         ! variable ID
386      INTEGER                                ::   indims        ! number of dimensions of the variable
387      INTEGER                                ::   iszdim        ! number of dimensions of the variable
388      INTEGER, DIMENSION(4)                  ::   i4dimsz       ! size of variable dimensions
389      INTEGER                                ::   igrd          ! index for grid type (1,2,3 = T,U,V)
390      LOGICAL                                ::   lluld         ! is the variable using the unlimited dimension
391      LOGICAL                                ::   llneed        !
392      LOGICAL                                ::   llread        !
[12921]393      LOGICAL                                ::   llfullbdy     !
[11536]394      TYPE(FLD_N), DIMENSION(1), TARGET  ::   bn_tem, bn_sal, bn_u3d, bn_v3d   ! must be an array to be used with fld_fill
395      TYPE(FLD_N), DIMENSION(1), TARGET  ::   bn_ssh, bn_u2d, bn_v2d           ! informations about the fields to be read
[14037]396      TYPE(FLD_N), DIMENSION(1), TARGET  ::   bn_a_i, bn_h_i, bn_h_s, bn_t_i, bn_t_s, bn_tsu, bn_s_i, bn_aip, bn_hip, bn_hil       
[11536]397      TYPE(FLD_N), DIMENSION(:), POINTER ::   bn_alias                        ! must be an array to be used with fld_fill
398      TYPE(FLD  ), DIMENSION(:), POINTER ::   bf_alias
399      !
[14037]400      NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d,                 &
401                         & bn_a_i, bn_h_i, bn_h_s, bn_t_i, bn_t_s, bn_tsu, bn_s_i, bn_aip, bn_hip, bn_hil, &
402                         & rn_ice_tem, rn_ice_sal, rn_ice_age, rn_ice_apnd, rn_ice_hpnd, rn_ice_hlid,      &
403                         & ln_full_vel, ln_zinterp
[3294]404      !!---------------------------------------------------------------------------
[6140]405      !
[3651]406      IF(lwp) WRITE(numout,*)
407      IF(lwp) WRITE(numout,*) 'bdy_dta_ini : initialization of data at the open boundaries'
408      IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
409      IF(lwp) WRITE(numout,*) ''
410
[11536]411      ALLOCATE( bf(jpbdyfld,nb_bdy), STAT=ierror )
[3294]412      IF( ierror > 0 ) THEN   
413         CALL ctl_stop( 'bdy_dta: unable to allocate bf structure' )   ;   RETURN 
[911]414      ENDIF
[11536]415      bf(:,:)%clrootname = 'NOT USED'   ! default definition used as a flag in fld_read to do nothing.
416      bf(:,:)%lzint      = .FALSE.      ! default definition
417      bf(:,:)%ltotvel    = .FALSE.      ! default definition
418 
[3294]419      ! Read namelists
420      ! --------------
[12377]421      nbdy_rdstart = 1
[11536]422      DO jbdy = 1, nb_bdy
[4147]423
[11536]424         WRITE(ctmp1, '(a,i2)') 'BDY number ', jbdy
425         WRITE(ctmp2, '(a,i2)') 'block nambdy_dta number ', jbdy
[911]426
[12377]427         ! There is only one nambdy_dta block in namelist_ref -> use it for each bdy so we read from the beginning
[11536]428         READ  ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901)
429901      IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_dta in reference namelist' )
[911]430
[11536]431         !   by-pass nambdy_dta reading if no input data used in this bdy   
432         IF(       ( dta_bdy(jbdy)%lneed_dyn2d .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1 )   &
433            & .OR. ( dta_bdy(jbdy)%lneed_dyn3d .AND.     nn_dyn3d_dta(jbdy)    == 1 )   &
434            & .OR. ( dta_bdy(jbdy)%lneed_tra   .AND.       nn_tra_dta(jbdy)    == 1 )   &
435            & .OR. ( dta_bdy(jbdy)%lneed_ice   .AND.       nn_ice_dta(jbdy)    == 1 )   )   THEN
[12377]436            !
437            ! Need to support possibility of reading more than one
438            ! nambdy_dta from the namelist_cfg internal file.
439            ! Do this by finding the jbdy'th occurence of nambdy_dta in the
440            ! character buffer as the starting point.
441            !
442            nbdy_loc = INDEX( numnam_cfg( nbdy_rdstart: ), 'nambdy_dta' )
443            IF( nbdy_loc .GT. 0 ) THEN
444               nbdy_rdstart = nbdy_rdstart + nbdy_loc
445            ELSE
446               WRITE(cerrmsg,'(A,I4,A)') 'Error: entry number ',jbdy,' of nambdy_dta not found'
447               ios = -1
448               CALL ctl_nam ( ios , cerrmsg )
449            ENDIF
450            READ  ( numnam_cfg( MAX( 1, nbdy_rdstart - 2 ): ), nambdy_dta, IOSTAT = ios, ERR = 902)
[11536]451902         IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy_dta in configuration namelist' )
452            IF(lwm) WRITE( numond, nambdy_dta )           
453         ENDIF
[911]454
[11536]455         ! get the number of ice categories in bdy data file (use a_i information to do this)
456         ipl = jpl   ! default definition
457         IF( dta_bdy(jbdy)%lneed_ice ) THEN    ! if we need ice bdy data
458            IF( nn_ice_dta(jbdy) == 1 ) THEN   ! if we get ice bdy data from netcdf file
459               CALL fld_fill(  bf(jp_bdya_i,jbdy:jbdy), bn_a_i, cn_dir, 'bdy_dta', 'a_i'//' '//ctmp1, ctmp2 )   ! use namelist info
[12377]460               CALL fld_def( bf(jp_bdya_i,jbdy) )
461               CALL iom_open( bf(jp_bdya_i,jbdy)%clname, bf(jp_bdya_i,jbdy)%num )
[11536]462               idvar = iom_varid( bf(jp_bdya_i,jbdy)%num, bf(jp_bdya_i,jbdy)%clvar, kndims=indims, kdimsz=i4dimsz, lduld=lluld )
463               IF( indims == 4 .OR. ( indims == 3 .AND. .NOT. lluld ) ) THEN   ;   ipl = i4dimsz(3)   ! xylt or xyl
464               ELSE                                                            ;   ipl = 1            ! xy or xyt
[3294]465               ENDIF
[12377]466               CALL iom_close( bf(jp_bdya_i,jbdy)%num )
[11891]467               bf(jp_bdya_i,jbdy)%clrootname = 'NOT USED'   ! reset to default value as this subdomain may not need to read this bdy
[11536]468            ENDIF
469         ENDIF
[911]470
[11536]471#if defined key_si3
472         IF( .NOT.ln_pnd ) THEN
[14037]473            rn_ice_apnd = 0. ; rn_ice_hpnd = 0. ; rn_ice_hlid = 0.
474            CALL ctl_warn( 'rn_ice_apnd & rn_ice_hpnd = 0 & rn_ice_hlid = 0 when no ponds' )
[11536]475         ENDIF
[14037]476         IF( .NOT.ln_pnd_lids ) THEN
477            rn_ice_hlid = 0.
478         ENDIF
[11536]479#endif
[911]480
[11536]481         ! temp, salt, age and ponds of incoming ice
482         rice_tem (jbdy) = rn_ice_tem
483         rice_sal (jbdy) = rn_ice_sal
484         rice_age (jbdy) = rn_ice_age
485         rice_apnd(jbdy) = rn_ice_apnd
486         rice_hpnd(jbdy) = rn_ice_hpnd
[14037]487         rice_hlid(jbdy) = rn_ice_hlid
488
[11536]489         
490         DO jfld = 1, jpbdyfld
[911]491
[11536]492            ! =====================
493            !          ssh
494            ! =====================
495            IF( jfld == jp_bdyssh ) THEN
496               cl3 = 'ssh'
497               igrd = 1                                                    ! T point
498               ipk = 1                                                     ! surface data
499               llneed = dta_bdy(jbdy)%lneed_ssh                            ! dta_bdy(jbdy)%ssh will be needed
500               llread = MOD(nn_dyn2d_dta(jbdy),2) == 1                     ! get data from NetCDF file
501               bf_alias => bf(jp_bdyssh,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy
502               bn_alias => bn_ssh                                          ! alias for ssh structure of nambdy_dta
503               iszdim = idx_bdy(jbdy)%nblenrim(igrd)                       ! length of this bdy on this MPI processus : used only on the rim
[3294]504            ENDIF
[11536]505            ! =====================
506            !         dyn2d
507            ! =====================
508            IF( jfld == jp_bdyu2d ) THEN
509               cl3 = 'u2d'
510               igrd = 2                                                    ! U point
511               ipk = 1                                                     ! surface data
[12921]512               llneed = dta_bdy(jbdy)%lneed_dyn2d                          ! dta_bdy(jbdy)%u2d will be needed
[11536]513               llread = .NOT. ln_full_vel .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1   ! don't get u2d from u3d and read NetCDF file
514               bf_alias => bf(jp_bdyu2d,jbdy:jbdy)                         ! alias for u2d structure of bdy number jbdy
515               bn_alias => bn_u2d                                          ! alias for u2d structure of nambdy_dta
[12921]516               llfullbdy = ln_full_vel .OR. cn_dyn2d(jbdy) == 'frs'        ! need u2d over the whole bdy or only over the rim?
517               IF( llfullbdy ) THEN  ;   iszdim = idx_bdy(jbdy)%nblen(igrd)
518               ELSE                  ;   iszdim = idx_bdy(jbdy)%nblenrim(igrd)
[4292]519               ENDIF
[3294]520            ENDIF
[11536]521            IF( jfld == jp_bdyv2d ) THEN
522               cl3 = 'v2d'
523               igrd = 3                                                    ! V point
524               ipk = 1                                                     ! surface data
[12921]525               llneed = dta_bdy(jbdy)%lneed_dyn2d                          ! dta_bdy(jbdy)%v2d will be needed
[11536]526               llread = .NOT. ln_full_vel .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1   ! don't get v2d from v3d and read NetCDF file
527               bf_alias => bf(jp_bdyv2d,jbdy:jbdy)                         ! alias for v2d structure of bdy number jbdy
528               bn_alias => bn_v2d                                          ! alias for v2d structure of nambdy_dta
[12921]529               llfullbdy = ln_full_vel .OR. cn_dyn2d(jbdy) == 'frs'        ! need v2d over the whole bdy or only over the rim?
530               IF( llfullbdy ) THEN  ;   iszdim = idx_bdy(jbdy)%nblen(igrd)
531               ELSE                  ;   iszdim = idx_bdy(jbdy)%nblenrim(igrd)
[4292]532               ENDIF
[911]533            ENDIF
[11536]534            ! =====================
535            !         dyn3d
536            ! =====================
537            IF( jfld == jp_bdyu3d ) THEN
538               cl3 = 'u3d'
539               igrd = 2                                                    ! U point
540               ipk = jpk                                                   ! 3d data
541               llneed = dta_bdy(jbdy)%lneed_dyn3d .OR.               &     ! dta_bdy(jbdy)%u3d will be needed
542                  &   ( dta_bdy(jbdy)%lneed_dyn2d .AND. ln_full_vel )      !   u3d needed to compute u2d
543               llread = nn_dyn3d_dta(jbdy) == 1                            ! get data from NetCDF file
544               bf_alias => bf(jp_bdyu3d,jbdy:jbdy)                         ! alias for u3d structure of bdy number jbdy
545               bn_alias => bn_u3d                                          ! alias for u3d structure of nambdy_dta
546               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus
547           ENDIF
548            IF( jfld == jp_bdyv3d ) THEN
549               cl3 = 'v3d'
550               igrd = 3                                                    ! V point
551               ipk = jpk                                                   ! 3d data
552               llneed = dta_bdy(jbdy)%lneed_dyn3d .OR.               &     ! dta_bdy(jbdy)%v3d will be needed
553                  &   ( dta_bdy(jbdy)%lneed_dyn2d .AND. ln_full_vel )      !   v3d needed to compute v2d
554               llread = nn_dyn3d_dta(jbdy) == 1                            ! get data from NetCDF file
555               bf_alias => bf(jp_bdyv3d,jbdy:jbdy)                         ! alias for v3d structure of bdy number jbdy
556               bn_alias => bn_v3d                                          ! alias for v3d structure of nambdy_dta
557               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus
558           ENDIF
[911]559
[11536]560            ! =====================
561            !          tra
562            ! =====================
563            IF( jfld == jp_bdytem ) THEN
564               cl3 = 'tem'
565               igrd = 1                                                    ! T point
566               ipk = jpk                                                   ! 3d data
567               llneed = dta_bdy(jbdy)%lneed_tra                            ! dta_bdy(jbdy)%tem will be needed
568               llread = nn_tra_dta(jbdy) == 1                              ! get data from NetCDF file
569               bf_alias => bf(jp_bdytem,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy
570               bn_alias => bn_tem                                          ! alias for ssh structure of nambdy_dta
571               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus
[4333]572            ENDIF
[11536]573            IF( jfld == jp_bdysal ) THEN
574               cl3 = 'sal'
575               igrd = 1                                                    ! T point
576               ipk = jpk                                                   ! 3d data
577               llneed = dta_bdy(jbdy)%lneed_tra                            ! dta_bdy(jbdy)%sal will be needed
578               llread = nn_tra_dta(jbdy) == 1                              ! get data from NetCDF file
579               bf_alias => bf(jp_bdysal,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy
580               bn_alias => bn_sal                                          ! alias for ssh structure of nambdy_dta
581               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus
[3294]582            ENDIF
[911]583
[11536]584            ! =====================
585            !          ice
586            ! =====================
587            IF(  jfld == jp_bdya_i .OR. jfld == jp_bdyh_i .OR. jfld == jp_bdyh_s .OR. &
588               & jfld == jp_bdyt_i .OR. jfld == jp_bdyt_s .OR. jfld == jp_bdytsu .OR. &
[14037]589               & jfld == jp_bdys_i .OR. jfld == jp_bdyaip .OR. jfld == jp_bdyhip .OR. jfld == jp_bdyhil ) THEN
[11536]590               igrd = 1                                                    ! T point
591               ipk = ipl                                                   ! jpl-cat data
592               llneed = dta_bdy(jbdy)%lneed_ice                            ! ice will be needed
593               llread = nn_ice_dta(jbdy) == 1                              ! get data from NetCDF file
594               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus
[4292]595            ENDIF
[11536]596            IF( jfld == jp_bdya_i ) THEN
597               cl3 = 'a_i'
598               bf_alias => bf(jp_bdya_i,jbdy:jbdy)                         ! alias for a_i structure of bdy number jbdy
599               bn_alias => bn_a_i                                          ! alias for a_i structure of nambdy_dta
[4292]600            ENDIF
[11536]601            IF( jfld == jp_bdyh_i ) THEN
602               cl3 = 'h_i'
603               bf_alias => bf(jp_bdyh_i,jbdy:jbdy)                         ! alias for h_i structure of bdy number jbdy
604               bn_alias => bn_h_i                                          ! alias for h_i structure of nambdy_dta
[3294]605            ENDIF
[11536]606            IF( jfld == jp_bdyh_s ) THEN
607               cl3 = 'h_s'
608               bf_alias => bf(jp_bdyh_s,jbdy:jbdy)                         ! alias for h_s structure of bdy number jbdy
609               bn_alias => bn_h_s                                          ! alias for h_s structure of nambdy_dta
[4292]610            ENDIF
[11536]611            IF( jfld == jp_bdyt_i ) THEN
612               cl3 = 't_i'
613               bf_alias => bf(jp_bdyt_i,jbdy:jbdy)                         ! alias for t_i structure of bdy number jbdy
614               bn_alias => bn_t_i                                          ! alias for t_i structure of nambdy_dta
[4292]615            ENDIF
[11536]616            IF( jfld == jp_bdyt_s ) THEN
617               cl3 = 't_s'
618               bf_alias => bf(jp_bdyt_s,jbdy:jbdy)                         ! alias for t_s structure of bdy number jbdy
619               bn_alias => bn_t_s                                          ! alias for t_s structure of nambdy_dta
[4292]620            ENDIF
[11536]621            IF( jfld == jp_bdytsu ) THEN
622               cl3 = 'tsu'
623               bf_alias => bf(jp_bdytsu,jbdy:jbdy)                         ! alias for tsu structure of bdy number jbdy
624               bn_alias => bn_tsu                                          ! alias for tsu structure of nambdy_dta
[3294]625            ENDIF
[11536]626            IF( jfld == jp_bdys_i ) THEN
627               cl3 = 's_i'
628               bf_alias => bf(jp_bdys_i,jbdy:jbdy)                         ! alias for s_i structure of bdy number jbdy
629               bn_alias => bn_s_i                                          ! alias for s_i structure of nambdy_dta
630            ENDIF
631            IF( jfld == jp_bdyaip ) THEN
632               cl3 = 'aip'
633               bf_alias => bf(jp_bdyaip,jbdy:jbdy)                         ! alias for aip structure of bdy number jbdy
634               bn_alias => bn_aip                                          ! alias for aip structure of nambdy_dta
635            ENDIF
636            IF( jfld == jp_bdyhip ) THEN
637               cl3 = 'hip'
638               bf_alias => bf(jp_bdyhip,jbdy:jbdy)                         ! alias for hip structure of bdy number jbdy
639               bn_alias => bn_hip                                          ! alias for hip structure of nambdy_dta
640            ENDIF
[14037]641            IF( jfld == jp_bdyhil ) THEN
642               cl3 = 'hil'
643               bf_alias => bf(jp_bdyhil,jbdy:jbdy)                         ! alias for hil structure of bdy number jbdy
644               bn_alias => bn_hil                                          ! alias for hil structure of nambdy_dta
645            ENDIF
[911]646
[11879]647            IF( llneed .AND. iszdim > 0 ) THEN                             ! dta_bdy(jbdy)%xxx will be needed
[11536]648               !                                                           !   -> must be associated with an allocated target
649               ALLOCATE( bf_alias(1)%fnow( iszdim, 1, ipk ) )              ! allocate the target
650               !
651               IF( llread ) THEN                                           ! get data from NetCDF file
652                  CALL fld_fill( bf_alias, bn_alias, cn_dir, 'bdy_dta', cl3//' '//ctmp1, ctmp2 )   ! use namelist info
653                  IF( bf_alias(1)%ln_tint ) ALLOCATE( bf_alias(1)%fdta( iszdim, 1, ipk, 2 ) )
654                  bf_alias(1)%imap    => idx_bdy(jbdy)%nbmap(1:iszdim,igrd)   ! associate the mapping used for this bdy
655                  bf_alias(1)%igrd    = igrd                                  ! used only for vertical integration of 3D arrays
[11793]656                  bf_alias(1)%ibdy    = jbdy                                  !  "    "    "     "          "      "  "    "   
[11536]657                  bf_alias(1)%ltotvel = ln_full_vel                           ! T if u3d is full velocity
658                  bf_alias(1)%lzint   = ln_zinterp                            ! T if it requires a vertical interpolation
[4292]659               ENDIF
660
[11536]661               ! associate the pointer and get rid of the dimensions with a size equal to 1
662               IF( jfld == jp_bdyssh )        dta_bdy(jbdy)%ssh => bf_alias(1)%fnow(:,1,1)
663               IF( jfld == jp_bdyu2d )        dta_bdy(jbdy)%u2d => bf_alias(1)%fnow(:,1,1)
664               IF( jfld == jp_bdyv2d )        dta_bdy(jbdy)%v2d => bf_alias(1)%fnow(:,1,1)
665               IF( jfld == jp_bdyu3d )        dta_bdy(jbdy)%u3d => bf_alias(1)%fnow(:,1,:)
666               IF( jfld == jp_bdyv3d )        dta_bdy(jbdy)%v3d => bf_alias(1)%fnow(:,1,:)
667               IF( jfld == jp_bdytem )        dta_bdy(jbdy)%tem => bf_alias(1)%fnow(:,1,:)
668               IF( jfld == jp_bdysal )        dta_bdy(jbdy)%sal => bf_alias(1)%fnow(:,1,:)
669               IF( jfld == jp_bdya_i ) THEN
670                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%a_i => bf_alias(1)%fnow(:,1,:)
671                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%a_i(iszdim,jpl) )
672                  ENDIF
673               ENDIF
674               IF( jfld == jp_bdyh_i ) THEN
675                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%h_i => bf_alias(1)%fnow(:,1,:)
676                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%h_i(iszdim,jpl) )
677                  ENDIF
678               ENDIF
679               IF( jfld == jp_bdyh_s ) THEN
680                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%h_s => bf_alias(1)%fnow(:,1,:)
681                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%h_s(iszdim,jpl) )
682                  ENDIF
683               ENDIF
684               IF( jfld == jp_bdyt_i ) THEN
685                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%t_i => bf_alias(1)%fnow(:,1,:)
686                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%t_i(iszdim,jpl) )
687                  ENDIF
688               ENDIF
689               IF( jfld == jp_bdyt_s ) THEN
690                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%t_s => bf_alias(1)%fnow(:,1,:)
691                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%t_s(iszdim,jpl) )
692                  ENDIF
693               ENDIF
694               IF( jfld == jp_bdytsu ) THEN
695                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%tsu => bf_alias(1)%fnow(:,1,:)
696                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%tsu(iszdim,jpl) )
697                  ENDIF
698               ENDIF
699               IF( jfld == jp_bdys_i ) THEN
700                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%s_i => bf_alias(1)%fnow(:,1,:)
701                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%s_i(iszdim,jpl) )
702                  ENDIF
703               ENDIF
704               IF( jfld == jp_bdyaip ) THEN
705                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%aip => bf_alias(1)%fnow(:,1,:)
706                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%aip(iszdim,jpl) )
707                  ENDIF
708               ENDIF
709               IF( jfld == jp_bdyhip ) THEN
710                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%hip => bf_alias(1)%fnow(:,1,:)
711                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%hip(iszdim,jpl) )
712                  ENDIF
713               ENDIF
[14037]714               IF( jfld == jp_bdyhil ) THEN
715                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%hil => bf_alias(1)%fnow(:,1,:)
716                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%hil(iszdim,jpl) )
717                  ENDIF
718               ENDIF
[4292]719            ENDIF
[11536]720
721         END DO   ! jpbdyfld
[6140]722         !
[9019]723      END DO ! jbdy
[6140]724      !
725   END SUBROUTINE bdy_dta_init
[11536]726   
[911]727   !!==============================================================================
728END MODULE bdydta
Note: See TracBrowser for help on using the repository browser.