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 13557 – NEMO

Changeset 13557


Ignore:
Timestamp:
2020-10-02T17:19:04+02:00 (4 years ago)
Author:
smasson
Message:

trunk fix diaprt gugs, see #2532

Location:
NEMO/trunk/src/OCE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/DIA/diaptr.F90

    r13295 r13557  
    3636   END INTERFACE 
    3737 
    38    PUBLIC   ptr_sj         ! call by tra_ldf & tra_adv routines 
    39    PUBLIC   ptr_sjk        !  
    40    PUBLIC   dia_ptr_init   ! call in memogcm 
    4138   PUBLIC   dia_ptr        ! call in step module 
    4239   PUBLIC   dia_ptr_hst    ! called from tra_ldf/tra_adv routines 
    4340 
    44    !                                  !!** namelist  namptr  ** 
    4541   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hstr_adv, hstr_ldf, hstr_eiv   !: Heat/Salt TRansports(adv, diff, Bolus.) 
    4642   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hstr_ove, hstr_btr, hstr_vtr   !: heat Salt TRansports(overturn, baro, merional) 
    4743 
    48    LOGICAL , PUBLIC ::   l_diaptr        !: tracers  trend flag (set from namelist in trdini) 
    49    INTEGER, PARAMETER, PUBLIC ::   nptr = 5  ! (glo, atl, pac, ind, ipc) 
     44   LOGICAL, PUBLIC ::   l_diaptr       !: tracers  trend flag 
    5045 
    5146   REAL(wp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
     
    5954   REAL(wp), TARGET, ALLOCATABLE, SAVE, DIMENSION(:,:) :: p_fval2d 
    6055 
    61    LOGICAL ::   ll_init = .TRUE.        !: tracers  trend flag (set from namelist in trdini) 
     56   LOGICAL ::   ll_init = .TRUE.        !: tracers  trend flag 
    6257    
    6358   !! * Substitutions 
     
    8883      ! 
    8984      !overturning calculation 
    90       REAL(wp), DIMENSION(jpj,jpk,nptr) :: sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
    91       REAL(wp), DIMENSION(jpj,jpk,nptr) :: zt_jk, zs_jk ! i-mean T and S, j-Stream-Function 
    92  
    93       REAL(wp), DIMENSION(jpi,jpj,jpk,nptr)  :: z4d1, z4d2 
    94       REAL(wp), DIMENSION(jpi,jpj,nptr)      :: z3dtr ! i-mean T and S, j-Stream-Function 
     85      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::  sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
     86      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   zt_jk, zs_jk        ! i-mean T and S, j-Stream-Function 
     87 
     88      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  z4d1, z4d2 
     89      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   z3dtr 
    9590      !!---------------------------------------------------------------------- 
    9691      ! 
    9792      IF( ln_timing )   CALL timing_start('dia_ptr') 
    9893 
    99       IF( kt == nit000 .AND. ll_init )   CALL dia_ptr_init 
    100       ! 
    101       IF( .NOT. l_diaptr )   RETURN 
    102  
     94      IF( kt == nit000 .AND. ll_init )   CALL dia_ptr_init   ! -> will define l_diaptr and nbasin 
     95      ! 
     96      IF( .NOT. l_diaptr ) THEN 
     97         IF( ln_timing ) CALL timing_stop('dia_ptr') 
     98         RETURN 
     99      ENDIF 
     100      ! 
     101      ALLOCATE( z3dtr(jpi,jpj,nbasin) ) 
     102      ! 
    103103      IF( PRESENT( pvtr ) ) THEN 
    104104         IF( iom_use( 'zomsf' ) ) THEN    ! effective MSF 
    105             DO jn = 1, nptr                                    ! by sub-basins 
     105            ALLOCATE( z4d1(jpi,jpj,jpk,nbasin) ) 
     106            DO jn = 1, nbasin                                    ! by sub-basins 
    106107               z4d1(1,:,:,jn) =  ptr_sjk( pvtr(:,:,:), btmsk34(:,:,jn) )  ! zonal cumulative effective transport excluding closed seas 
    107108               DO jk = jpkm1, 1, -1  
     
    113114            END DO 
    114115            CALL iom_put( 'zomsf', z4d1 * rc_sv ) 
     116            DEALLOCATE( z4d1 ) 
    115117         ENDIF 
    116118         IF(  iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.   & 
     
    127129         ENDIF 
    128130         IF( iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) ) THEN 
    129             DO jn = 1, nptr 
     131            DO jn = 1, nbasin 
     132               ALLOCATE( sjk(jpj,jpk,nbasin), r1_sjk(jpj,jpk,nbasin), v_msf(jpj,jpk,nbasin),   & 
     133                  &                          zt_jk(jpj,jpk,nbasin), zs_jk(jpj,jpk,nbasin) ) 
    130134               sjk(:,:,jn) = ptr_sjk( zmask(:,:,:), btmsk(:,:,jn) ) 
    131135               r1_sjk(:,:,jn) = 0._wp 
     
    137141               hstr_ove(:,jp_tem,jn) = SUM( v_msf(:,:,jn)*zt_jk(:,:,jn), 2 ) 
    138142               hstr_ove(:,jp_sal,jn) = SUM( v_msf(:,:,jn)*zs_jk(:,:,jn), 2 ) 
     143               DEALLOCATE( sjk, r1_sjk, v_msf, zt_jk, zs_jk ) 
    139144               ! 
    140145            ENDDO 
    141             DO jn = 1, nptr 
     146            DO jn = 1, nbasin 
    142147               z3dtr(1,:,jn) = hstr_ove(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    143148               DO ji = 1, jpi 
     
    146151            ENDDO 
    147152            CALL iom_put( 'sophtove', z3dtr ) 
    148             DO jn = 1, nptr 
     153            DO jn = 1, nbasin 
    149154               z3dtr(1,:,jn) = hstr_ove(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    150155               DO ji = 1, jpi 
     
    157162         IF( iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) ) THEN 
    158163            ! Calculate barotropic heat and salt transport here  
    159             DO jn = 1, nptr 
     164            DO jn = 1, nbasin 
     165               ALLOCATE( sjk(jpj,1,nbasin), r1_sjk(jpj,1,nbasin) ) 
    160166               sjk(:,1,jn) = ptr_sj( zmask(:,:,:), btmsk(:,:,jn) ) 
    161167               r1_sjk(:,1,jn) = 0._wp 
     
    167173               hstr_btr(:,jp_tem,jn) = zvsum(:) * ztsum(:) * r1_sjk(:,1,jn) 
    168174               hstr_btr(:,jp_sal,jn) = zvsum(:) * zssum(:) * r1_sjk(:,1,jn) 
     175               DEALLOCATE( sjk, r1_sjk ) 
    169176               ! 
    170177            ENDDO 
    171             DO jn = 1, nptr 
     178            DO jn = 1, nbasin 
    172179               z3dtr(1,:,jn) = hstr_btr(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    173180               DO ji = 1, jpi 
     
    176183            ENDDO 
    177184            CALL iom_put( 'sophtbtr', z3dtr ) 
    178             DO jn = 1, nptr 
     185            DO jn = 1, nbasin 
    179186               z3dtr(1,:,jn) = hstr_btr(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    180187               DO ji = 1, jpi 
     
    190197         zts(:,:,:,:) = 0._wp 
    191198         IF( iom_use( 'zotem' ) .OR. iom_use( 'zosal' ) .OR. iom_use( 'zosrf' )  ) THEN    ! i-mean i-k-surface  
     199            ALLOCATE( z4d1(jpi,jpj,jpk,nbasin), z4d2(jpi,jpj,jpk,nbasin) ) 
    192200            DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    193201               zsfc = e1t(ji,jj) * e3t(ji,jj,jk,Kmm) 
     
    197205            END_3D 
    198206            ! 
    199             DO jn = 1, nptr 
     207            DO jn = 1, nbasin 
    200208               zmask(1,:,:) = ptr_sjk( zmask(:,:,:), btmsk(:,:,jn) ) 
     209               DO ji = 1, jpi 
     210                  zmask(ji,:,:) = zmask(1,:,:) 
     211               ENDDO 
    201212               z4d1(:,:,:,jn) = zmask(:,:,:) 
    202213            ENDDO 
    203214            CALL iom_put( 'zosrf', z4d1 ) 
    204215            ! 
    205             DO jn = 1, nptr 
     216            DO jn = 1, nbasin 
    206217               z4d2(1,:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) & 
    207218                  &            / MAX( z4d1(1,:,:,jn), 10.e-15 ) 
     
    212223            CALL iom_put( 'zotem', z4d2 ) 
    213224            ! 
    214             DO jn = 1, nptr 
     225            DO jn = 1, nbasin 
    215226               z4d2(1,:,:,jn) = ptr_sjk( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) & 
    216227                  &            / MAX( z4d1(1,:,:,jn), 10.e-15 ) 
     
    220231            ENDDO 
    221232            CALL iom_put( 'zosal', z4d2 ) 
     233            DEALLOCATE( z4d1, z4d2 ) 
    222234            ! 
    223235         ENDIF 
     
    226238         IF( iom_use( 'sophtadv' ) .OR. iom_use( 'sopstadv' ) ) THEN   
    227239            !  
    228             DO jn = 1, nptr 
     240            DO jn = 1, nbasin 
    229241               z3dtr(1,:,jn) = hstr_adv(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    230242               DO ji = 1, jpi 
     
    233245            ENDDO 
    234246            CALL iom_put( 'sophtadv', z3dtr ) 
    235             DO jn = 1, nptr 
     247            DO jn = 1, nbasin 
    236248               z3dtr(1,:,jn) = hstr_adv(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    237249               DO ji = 1, jpi 
     
    244256         IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) THEN   
    245257            !  
    246             DO jn = 1, nptr 
     258            DO jn = 1, nbasin 
    247259               z3dtr(1,:,jn) = hstr_ldf(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    248260               DO ji = 1, jpi 
     
    251263            ENDDO 
    252264            CALL iom_put( 'sophtldf', z3dtr ) 
    253             DO jn = 1, nptr 
     265            DO jn = 1, nbasin 
    254266               z3dtr(1,:,jn) = hstr_ldf(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    255267               DO ji = 1, jpi 
     
    262274         IF( iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) ) THEN   
    263275            !  
    264             DO jn = 1, nptr 
     276            DO jn = 1, nbasin 
    265277               z3dtr(1,:,jn) = hstr_eiv(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    266278               DO ji = 1, jpi 
     
    269281            ENDDO 
    270282            CALL iom_put( 'sophteiv', z3dtr ) 
    271             DO jn = 1, nptr 
     283            DO jn = 1, nbasin 
    272284               z3dtr(1,:,jn) = hstr_eiv(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    273285               DO ji = 1, jpi 
     
    287299             CALL dia_ptr_hst( jp_tem, 'vtr', zts(:,:,:,jp_tem) ) 
    288300             CALL dia_ptr_hst( jp_sal, 'vtr', zts(:,:,:,jp_sal) ) 
    289              DO jn = 1, nptr 
     301             DO jn = 1, nbasin 
    290302                z3dtr(1,:,jn) = hstr_vtr(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    291303                DO ji = 1, jpi 
     
    294306             ENDDO 
    295307             CALL iom_put( 'sophtvtr', z3dtr ) 
    296              DO jn = 1, nptr 
     308             DO jn = 1, nbasin 
    297309               z3dtr(1,:,jn) = hstr_vtr(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    298310               DO ji = 1, jpi 
     
    311323      ENDIF 
    312324      ! 
     325      DEALLOCATE( z3dtr ) 
     326      ! 
    313327      IF( ln_timing )   CALL timing_stop('dia_ptr') 
    314328      ! 
     
    320334      !!                  ***  ROUTINE dia_ptr_init  *** 
    321335      !!                    
    322       !! ** Purpose :   Initialization, namelist read 
     336      !! ** Purpose :   Initialization 
    323337      !!---------------------------------------------------------------------- 
    324338      INTEGER ::  inum, jn           ! local integers 
     
    326340      REAL(wp), DIMENSION(jpi,jpj) :: zmsk 
    327341      !!---------------------------------------------------------------------- 
    328  
    329       l_diaptr = .FALSE. 
    330       IF(   iom_use( 'zomsf'    ) .OR. iom_use( 'zotem'    ) .OR. iom_use( 'zosal'    ) .OR.  & 
    331          &  iom_use( 'zosrf'    ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.  & 
    332          &  iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) .OR. iom_use( 'sophtadv' ) .OR.  & 
    333          &  iom_use( 'sopstadv' ) .OR. iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) .OR.  &  
    334          &  iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) .OR. iom_use( 'sopstvtr' ) .OR.  & 
    335          &  iom_use( 'sophtvtr' ) .OR. iom_use( 'uocetr_vsum_cumul' ) )  l_diaptr  = .TRUE. 
    336  
     342       
     343      ! l_diaptr is defined with iom_use 
     344      !   --> dia_ptr_init must be done after the call to iom_init 
     345      !   --> cannot be .TRUE. without cpp key: key_iom -->  nbasin define by iom_init is initialized 
     346      l_diaptr = iom_use( 'zomsf'    ) .OR. iom_use( 'zotem'    ) .OR. iom_use( 'zosal'    ) .OR.  & 
     347         &       iom_use( 'zosrf'    ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.  & 
     348         &       iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) .OR. iom_use( 'sophtadv' ) .OR.  & 
     349         &       iom_use( 'sopstadv' ) .OR. iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) .OR.  &  
     350         &       iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) .OR. iom_use( 'sopstvtr' ) .OR.  & 
     351         &       iom_use( 'sophtvtr' ) .OR. iom_use( 'uocetr_vsum_cumul' )  
    337352  
    338353      IF(lwp) THEN                     ! Control print 
     
    340355         WRITE(numout,*) 'dia_ptr_init : poleward transport and msf initialization' 
    341356         WRITE(numout,*) '~~~~~~~~~~~~' 
    342          WRITE(numout,*) '   Namelist namptr : set ptr parameters' 
    343357         WRITE(numout,*) '      Poleward heat & salt transport (T) or not (F)      l_diaptr  = ', l_diaptr 
    344358      ENDIF 
     
    347361         ! 
    348362         IF( dia_ptr_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ptr_init : unable to allocate arrays' ) 
    349  
     363         ! 
    350364         rc_pwatt = rc_pwatt * rho0_rcp          ! conversion from K.s-1 to PetaWatt 
    351365         rc_ggram = rc_ggram * rho0              ! conversion from m3/s to Gg/s 
     
    354368 
    355369         btmsk(:,:,1) = tmask_i(:,:)                  
    356          CALL iom_open( 'subbasins', inum,  ldstop = .FALSE.  ) 
    357          CALL iom_get( inum, jpdom_global, 'atlmsk', btmsk(:,:,2) )   ! Atlantic basin 
    358          CALL iom_get( inum, jpdom_global, 'pacmsk', btmsk(:,:,3) )   ! Pacific  basin 
    359          CALL iom_get( inum, jpdom_global, 'indmsk', btmsk(:,:,4) )   ! Indian   basin 
    360          CALL iom_close( inum ) 
    361          btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) )          ! Indo-Pacific basin 
    362          DO jn = 2, nptr 
    363             btmsk(:,:,jn) = btmsk(:,:,jn) * tmask_i(:,:)               ! interior domain only 
     370         IF( nbasin == 5 ) THEN   ! nbasin has been initialized in iom_init to define the axis "basin" 
     371            CALL iom_open( 'subbasins', inum ) 
     372            CALL iom_get( inum, jpdom_global, 'atlmsk', btmsk(:,:,2) )   ! Atlantic basin 
     373            CALL iom_get( inum, jpdom_global, 'pacmsk', btmsk(:,:,3) )   ! Pacific  basin 
     374            CALL iom_get( inum, jpdom_global, 'indmsk', btmsk(:,:,4) )   ! Indian   basin 
     375            CALL iom_close( inum ) 
     376            btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) )            ! Indo-Pacific basin 
     377         ENDIF 
     378         DO jn = 2, nbasin 
     379            btmsk(:,:,jn) = btmsk(:,:,jn) * tmask_i(:,:)                 ! interior domain only 
    364380         END DO 
    365381         ! JD : modification so that overturning streamfunction is available in Atlantic at 34S to compare with observations 
     
    370386         END WHERE 
    371387         btmsk34(:,:,1) = btmsk(:,:,1)                  
    372          DO jn = 2, nptr 
    373             btmsk34(:,:,jn) = btmsk(:,:,jn) * zmsk(:,:)               ! interior domain only 
     388         DO jn = 2, nbasin 
     389            btmsk34(:,:,jn) = btmsk(:,:,jn) * zmsk(:,:)                  ! interior domain only 
    374390         ENDDO 
    375391 
     
    405421      IF( cptr == 'adv' ) THEN 
    406422         IF( ktra == jp_tem )  THEN 
    407              DO jn = 1, nptr 
     423             DO jn = 1, nbasin 
    408424                hstr_adv(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    409425             ENDDO 
    410426         ENDIF 
    411427         IF( ktra == jp_sal )  THEN 
    412              DO jn = 1, nptr 
     428             DO jn = 1, nbasin 
    413429                hstr_adv(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    414430             ENDDO 
     
    418434      IF( cptr == 'ldf' ) THEN 
    419435         IF( ktra == jp_tem )  THEN 
    420              DO jn = 1, nptr 
     436             DO jn = 1, nbasin 
    421437                hstr_ldf(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    422438             ENDDO 
    423439         ENDIF 
    424440         IF( ktra == jp_sal )  THEN 
    425              DO jn = 1, nptr 
     441             DO jn = 1, nbasin 
    426442                hstr_ldf(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    427443             ENDDO 
     
    431447      IF( cptr == 'eiv' ) THEN 
    432448         IF( ktra == jp_tem )  THEN 
    433              DO jn = 1, nptr 
     449             DO jn = 1, nbasin 
    434450                hstr_eiv(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    435451             ENDDO 
    436452         ENDIF 
    437453         IF( ktra == jp_sal )  THEN 
    438              DO jn = 1, nptr 
     454             DO jn = 1, nbasin 
    439455                hstr_eiv(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    440456             ENDDO 
     
    444460      IF( cptr == 'vtr' ) THEN 
    445461         IF( ktra == jp_tem )  THEN 
    446              DO jn = 1, nptr 
     462             DO jn = 1, nbasin 
    447463                hstr_vtr(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    448464             ENDDO 
    449465         ENDIF 
    450466         IF( ktra == jp_sal )  THEN 
    451              DO jn = 1, nptr 
     467             DO jn = 1, nbasin 
    452468                hstr_vtr(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    453469             ENDDO 
     
    467483      ierr(:) = 0 
    468484      ! 
     485      ! nbasin has been initialized in iom_init to define the axis "basin" 
     486      ! 
    469487      IF( .NOT. ALLOCATED( btmsk ) ) THEN 
    470          ALLOCATE( btmsk(jpi,jpj,nptr)    , btmsk34(jpi,jpj,nptr),   & 
    471             &      hstr_adv(jpj,jpts,nptr), hstr_eiv(jpj,jpts,nptr), & 
    472             &      hstr_ove(jpj,jpts,nptr), hstr_btr(jpj,jpts,nptr), & 
    473             &      hstr_ldf(jpj,jpts,nptr), hstr_vtr(jpj,jpts,nptr), STAT=ierr(1)  ) 
     488         ALLOCATE( btmsk(jpi,jpj,nbasin)    , btmsk34(jpi,jpj,nbasin),   & 
     489            &      hstr_adv(jpj,jpts,nbasin), hstr_eiv(jpj,jpts,nbasin), & 
     490            &      hstr_ove(jpj,jpts,nbasin), hstr_btr(jpj,jpts,nbasin), & 
     491            &      hstr_ldf(jpj,jpts,nbasin), hstr_vtr(jpj,jpts,nbasin), STAT=ierr(1)  ) 
    474492            ! 
    475493         ALLOCATE( p_fval1d(jpj), p_fval2d(jpj,jpk), Stat=ierr(2)) 
  • NEMO/trunk/src/OCE/DOM/dom_oce.F90

    r13286 r13557  
    220220 
    221221   !!---------------------------------------------------------------------- 
     222   !! variable defined here to avoid circular dependencies... 
     223   !! --------------------------------------------------------------------- 
     224   INTEGER, PUBLIC ::   nbasin         ! number of basin to be considered in diaprt (glo, atl, pac, ind, ipc) 
     225 
     226   !!---------------------------------------------------------------------- 
    222227   !! agrif domain 
    223228   !!---------------------------------------------------------------------- 
  • NEMO/trunk/src/OCE/IOM/iom.F90

    r13472 r13557  
    123123      REAL(wp), DIMENSION(2,jpkam1)         :: za_bnds   ! ABL vertical boundaries 
    124124      LOGICAL ::   ll_closedef = .TRUE. 
     125      LOGICAL ::   ll_exist 
    125126      !!---------------------------------------------------------------------- 
    126127      ! 
     
    230231          CALL iom_set_axis_attr( "ghw_abl", bounds=za_bnds ) 
    231232 
    232           CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 
     233          CALL iom_set_axis_attr(  "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 
    233234# if defined key_si3 
    234235          CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     
    243244          CALL iom_set_axis_attr( "iax_26C", (/ REAL(26,wp) /) )   ! strange syntaxe and idea... 
    244245          CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) )   ! strange syntaxe and idea... 
    245           CALL iom_set_axis_attr( "basin"  , (/ (REAL(ji,wp), ji=1,5) /) ) 
     246          ! for diaprt, we need to define an axis which size can be 1 (default) or 5 (if the file subbasins.nc exists) 
     247          INQUIRE( FILE = 'subbasins.nc', EXIST = ll_exist ) 
     248          nbasin = 1 + 4 * COUNT( (/ll_exist/) ) 
     249          CALL iom_set_axis_attr( "basin"  , (/ (REAL(ji,wp), ji=1,nbasin) /) ) 
    246250      ENDIF 
    247251      ! 
Note: See TracChangeset for help on using the changeset viewer.