Changeset 2831


Ignore:
Timestamp:
2011-08-25T18:24:45+02:00 (9 years ago)
Author:
davestorkey
Message:

Change to allow the choice of initial fields as boundary data for
each group of variables (TRA, U2D, U3D) independently.

Location:
branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obc_oce.F90

    r2814 r2831  
    6969   !                                                        !  = 1 the volume will be constant during all the integration. 
    7070   INTEGER, DIMENSION(jp_obc) ::   nn_dyn2d                 ! Choice of boundary condition for barotropic variables (U,V,SSH) 
     71   INTEGER, DIMENSION(jp_obc) ::   nn_dyn2d_dta           !: = 0 use the initial state as obc dta ;  
     72                                                            !: = 1 read it in a NetCDF file 
    7173   INTEGER, DIMENSION(jp_obc) ::   nn_dyn3d                 ! Choice of boundary condition for baroclinic velocities  
     74   INTEGER, DIMENSION(jp_obc) ::   nn_dyn3d_dta           !: = 0 use the initial state as obc dta ;  
     75                                                            !: = 1 read it in a NetCDF file 
    7276   INTEGER, DIMENSION(jp_obc) ::   nn_tra                   ! Choice of boundary condition for active tracers (T and S) 
     77   INTEGER, DIMENSION(jp_obc) ::   nn_tra_dta             !: = 0 use the initial state as obc dta ;  
     78                                                            !: = 1 read it in a NetCDF file 
    7379#if defined key_lim2 
    7480   INTEGER, DIMENSION(jp_obc) ::   nn_ice_lim2              ! Choice of boundary condition for sea ice variables  
     81   INTEGER, DIMENSION(jp_obc) ::   nn_ice_lim2_dta          !: = 0 use the initial state as obc dta ;  
     82                                                            !: = 1 read it in a NetCDF file 
    7583#endif 
    7684   ! 
     
    100108   !!---------------------------------------------------------------------- 
    101109 
     110   INTEGER,  DIMENSION(jp_obc)                     ::   nn_dta            !: =0 => *all* data is set to initial conditions 
     111                                                                          !: =1 => some data to be read in from data files 
    102112   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::   dta_global        !: workspace for reading in global data arrays 
    103113   TYPE(OBC_INDEX), DIMENSION(jp_obc), TARGET      ::   idx_obc           !: obc indices (local process) 
  • branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obcdta.F90

    r2818 r2831  
    8080      END IF 
    8181 
    82       ! for nn_dtactl = 0, initialise data arrays once for all 
    83       ! from initial conditions 
    84       !------------------------------------------------------- 
     82      ! Initialise data arrays once for all from initial conditions where required 
     83      !--------------------------------------------------------------------------- 
    8584      IF( kt .eq. nit000 .and. .not. PRESENT(jit) ) THEN 
    8685 
     
    101100          
    102101         DO ib_obc = 1, nb_obc 
    103             IF( nn_dtactl(ib_obc) .eq. 0 ) THEN 
    104  
    105                nblen => idx_obc(ib_obc)%nblen 
    106                nblenrim => idx_obc(ib_obc)%nblenrim 
    107  
    108                IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN  
    109                   IF( nn_dyn2d(ib_obc) .eq. jp_frs ) THEN 
    110                      ilen1(:) = nblen(:) 
    111                   ELSE 
    112                      ilen1(:) = nblenrim(:) 
    113                   ENDIF 
    114                   igrd = 1 
    115                   DO ib = 1, ilen1(igrd) 
     102 
     103            nblen => idx_obc(ib_obc)%nblen 
     104            nblenrim => idx_obc(ib_obc)%nblenrim 
     105 
     106            IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 0 ) THEN  
     107               IF( nn_dyn2d(ib_obc) .eq. jp_frs ) THEN 
     108                  ilen1(:) = nblen(:) 
     109               ELSE 
     110                  ilen1(:) = nblenrim(:) 
     111               ENDIF 
     112               igrd = 1 
     113               DO ib = 1, ilen1(igrd) 
     114                  ii = idx_obc(ib_obc)%nbi(ib,igrd) 
     115                  ij = idx_obc(ib_obc)%nbj(ib,igrd) 
     116                  dta_obc(ib_obc)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
     117               END DO  
     118               igrd = 2 
     119               DO ib = 1, ilen1(igrd) 
     120                  ii = idx_obc(ib_obc)%nbi(ib,igrd) 
     121                  ij = idx_obc(ib_obc)%nbj(ib,igrd) 
     122                  dta_obc(ib_obc)%u2d(ib) = pu2d(ii,ij) * umask(ii,ij,1)          
     123               END DO  
     124               igrd = 3 
     125               DO ib = 1, ilen1(igrd) 
     126                  ii = idx_obc(ib_obc)%nbi(ib,igrd) 
     127                  ij = idx_obc(ib_obc)%nbj(ib,igrd) 
     128                  dta_obc(ib_obc)%v2d(ib) = pv2d(ii,ij) * vmask(ii,ij,1)          
     129               END DO  
     130            ENDIF 
     131 
     132            IF( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 0 ) THEN  
     133               IF( nn_dyn3d(ib_obc) .eq. jp_frs ) THEN 
     134                  ilen1(:) = nblen(:) 
     135               ELSE 
     136                  ilen1(:) = nblenrim(:) 
     137               ENDIF 
     138               igrd = 2  
     139               DO ib = 1, ilen1(igrd) 
     140                  DO ik = 1, jpkm1 
    116141                     ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    117142                     ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    118                      dta_obc(ib_obc)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
    119                   END DO  
    120                   igrd = 2 
    121                   DO ib = 1, ilen1(igrd) 
     143                     dta_obc(ib_obc)%u3d(ib,ik) =  ( un(ii,ij,ik) - pu2d(ii,ij) ) * umask(ii,ij,ik)          
     144                  END DO 
     145               END DO  
     146               igrd = 3  
     147               DO ib = 1, ilen1(igrd) 
     148                  DO ik = 1, jpkm1 
    122149                     ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    123150                     ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    124                      dta_obc(ib_obc)%u2d(ib) = pu2d(ii,ij) * umask(ii,ij,1)          
    125                   END DO  
    126                   igrd = 3 
    127                   DO ib = 1, ilen1(igrd) 
     151                     dta_obc(ib_obc)%v3d(ib,ik) =  ( vn(ii,ij,ik) - pv2d(ii,ij) ) * vmask(ii,ij,ik)          
     152                     END DO 
     153               END DO  
     154            ENDIF 
     155 
     156            IF( nn_tra(ib_obc) .gt. 0 .and. nn_tra_dta(ib_obc) .eq. 0 ) THEN  
     157               IF( nn_tra(ib_obc) .eq. jp_frs ) THEN 
     158                  ilen1(:) = nblen(:) 
     159               ELSE 
     160                  ilen1(:) = nblenrim(:) 
     161               ENDIF 
     162               igrd = 1                       ! Everything is at T-points here 
     163               DO ib = 1, ilen1(igrd) 
     164                  DO ik = 1, jpkm1 
    128165                     ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    129166                     ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    130                      dta_obc(ib_obc)%v2d(ib) = pv2d(ii,ij) * vmask(ii,ij,1)          
    131                   END DO  
    132                ENDIF 
    133  
    134                IF( nn_dyn3d(ib_obc) .gt. 0 ) THEN  
    135                   IF( nn_dyn3d(ib_obc) .eq. jp_frs ) THEN 
    136                      ilen1(:) = nblen(:) 
    137                   ELSE 
    138                      ilen1(:) = nblenrim(:) 
    139                   ENDIF 
    140                   igrd = 2  
    141                   DO ib = 1, ilen1(igrd) 
    142                      DO ik = 1, jpkm1 
    143                         ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    144                         ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    145                         dta_obc(ib_obc)%u3d(ib,ik) =  ( un(ii,ij,ik) - pu2d(ii,ij) ) * umask(ii,ij,ik)          
    146                      END DO 
    147                   END DO  
    148                   igrd = 3  
    149                   DO ib = 1, ilen1(igrd) 
    150                      DO ik = 1, jpkm1 
    151                         ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    152                         ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    153                         dta_obc(ib_obc)%v3d(ib,ik) =  ( vn(ii,ij,ik) - pv2d(ii,ij) ) * vmask(ii,ij,ik)          
    154                      END DO 
    155                   END DO  
    156                ENDIF 
    157  
    158                IF( nn_tra(ib_obc) .gt. 0 ) THEN  
    159                   IF( nn_tra(ib_obc) .eq. jp_frs ) THEN 
    160                      ilen1(:) = nblen(:) 
    161                   ELSE 
    162                      ilen1(:) = nblenrim(:) 
    163                   ENDIF 
    164                   igrd = 1                       ! Everything is at T-points here 
    165                   DO ib = 1, ilen1(igrd) 
    166                      DO ik = 1, jpkm1 
    167                         ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    168                         ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    169                         dta_obc(ib_obc)%tem(ib,ik) = tn(ii,ij,ik) * tmask(ii,ij,ik)          
    170                         dta_obc(ib_obc)%sal(ib,ik) = sn(ii,ij,ik) * tmask(ii,ij,ik)          
    171                      END DO 
    172                   END DO  
    173                ENDIF 
    174  
    175 #if defined key_lim2 
    176                IF( nn_ice_lim2(ib_obc) .gt. 0 ) THEN  
    177                   IF( nn_ice_lim2(ib_obc) .eq. jp_frs ) THEN 
    178                      ilen1(:) = nblen(:) 
    179                   ELSE 
    180                      ilen1(:) = nblenrim(:) 
    181                   ENDIF 
    182                   igrd = 1                       ! Everything is at T-points here 
    183                   DO ib = 1, ilen1(igrd) 
    184                      ii = idx_obc(ib_obc)%nbi(ib,igrd) 
    185                      ij = idx_obc(ib_obc)%nbj(ib,igrd) 
    186                      dta_obc(ib_obc)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1)          
    187                      dta_obc(ib_obc)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1)          
    188                      dta_obc(ib_obc)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1)          
    189                   END DO  
    190                ENDIF 
    191 #endif 
    192  
    193             ENDIF 
    194          ENDDO 
    195  
    196       ENDIF 
    197  
    198       ! for nn_dtactl = 1, update external data from files 
    199       !--------------------------------------------------- 
     167                     dta_obc(ib_obc)%tem(ib,ik) = tn(ii,ij,ik) * tmask(ii,ij,ik)          
     168                     dta_obc(ib_obc)%sal(ib,ik) = sn(ii,ij,ik) * tmask(ii,ij,ik)          
     169                  END DO 
     170               END DO  
     171            ENDIF 
     172 
     173#if defined key_lim2 
     174            IF( nn_ice_lim2(ib_obc) .gt. 0 .and. nn_ice_lim2_dta(ib_obc) .eq. 0 ) THEN  
     175               IF( nn_ice_lim2(ib_obc) .eq. jp_frs ) THEN 
     176                  ilen1(:) = nblen(:) 
     177               ELSE 
     178                  ilen1(:) = nblenrim(:) 
     179               ENDIF 
     180               igrd = 1                       ! Everything is at T-points here 
     181               DO ib = 1, ilen1(igrd) 
     182                  ii = idx_obc(ib_obc)%nbi(ib,igrd) 
     183                  ij = idx_obc(ib_obc)%nbj(ib,igrd) 
     184                  dta_obc(ib_obc)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1)          
     185                  dta_obc(ib_obc)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1)          
     186                  dta_obc(ib_obc)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1)          
     187               END DO  
     188            ENDIF 
     189#endif 
     190 
     191         ENDDO ! ib_obc 
     192 
     193      ENDIF ! kt .eq. nit000 
     194 
     195      ! update external data from files 
     196      !-------------------------------- 
    200197      
    201198      jstart = 1 
    202199      DO ib_obc = 1, nb_obc    
    203          IF( nn_dtactl(ib_obc) .eq. 1 ) THEN 
     200         IF( nn_dta(ib_obc) .eq. 1 ) THEN ! skip this bit if no external data required 
    204201       
    205202            IF( PRESENT(jit) ) THEN 
    206203               ! Update barotropic boundary conditions only 
    207204               ! jit is optional argument for fld_read 
    208                IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN 
     205               IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN 
    209206                  IF( nn_tides(ib_obc) .eq. 1 ) THEN 
    210207                     dta_obc(ib_obc)%ssh(:) = 0.0 
     
    240237            ! time as the dynspg_ts option).  
    241238 
    242             IF( ln_full_vel_array(ib_obc) ) THEN  
     239            IF( ln_full_vel_array(ib_obc) .and.                                             &  
     240           &    ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn3d_dta(ib_obc) .eq. 1 ) ) THEN  
    243241 
    244242               igrd = 2                      ! zonal velocity 
     
    274272            ENDIF 
    275273 
    276          END IF ! nn_dtactl(ib_obc) = 1 
     274         END IF ! nn_dta(ib_obc) = 1 
    277275      END DO  ! ib_obc 
    278276 
     
    319317      !!--------------------------------------------------------------------------- 
    320318 
     319      ! Set nn_dta 
     320      DO ib_obc = 1, nb_obc 
     321         nn_dta(ib_obc) = MAX(  nn_dyn2d_dta(ib_obc)       & 
     322                               ,nn_dyn3d_dta(ib_obc)       & 
     323                               ,nn_tra_dta(ib_obc)         & 
     324#if defined key_ice_lim2 
     325                               ,nn_ice_lim2_dta(ib_obc)    & 
     326#endif 
     327                              ) 
     328      END DO 
     329 
    321330      ! Work out upper bound of how many fields there are to read in and allocate arrays 
    322331      ! --------------------------------------------------------------------------- 
     
    324333      nb_obc_fld(:) = 0 
    325334      DO ib_obc = 1, nb_obc          
    326          IF( nn_dtactl(ib_obc) .eq. 1 ) THEN 
    327             IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN 
    328                nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 3 
    329             ENDIF 
    330             IF( nn_dyn3d(ib_obc) .gt. 0 ) THEN 
    331                nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 2 
    332             ENDIF 
    333             IF( nn_tra(ib_obc) .gt. 0 ) THEN 
    334                nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 2 
    335             ENDIF 
    336 #if defined key_lim2 
    337             IF( nn_ice_lim2(ib_obc) .gt. 0 ) THEN 
    338                nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 3 
    339             ENDIF 
     335         IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN 
     336            nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 3 
     337         ENDIF 
     338         IF( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 1 ) THEN 
     339            nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 2 
     340         ENDIF 
     341         IF( nn_tra(ib_obc) .gt. 0 .and. nn_tra_dta(ib_obc) .eq. 1  ) THEN 
     342            nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 2 
     343         ENDIF 
     344#if defined key_lim2 
     345         IF( nn_ice_lim2(ib_obc) .gt. 0 .and. nn_ice_lim2_dta(ib_obc) .eq. 1  ) THEN 
     346            nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 3 
     347         ENDIF 
    340348#endif                
    341          ENDIF 
    342349      ENDDO             
    343350 
     
    365372      jfld = 0  
    366373      DO ib_obc = 1, nb_obc          
    367          IF( nn_dtactl(ib_obc) .eq. 1 ) THEN 
     374         IF( nn_dta(ib_obc) .eq. 1 ) THEN 
    368375            ! set file information 
    369376            cn_dir = './'        ! directory in which the model is executed 
     
    401408            ! Only read in necessary fields for this set. 
    402409            ! Important that barotropic variables come first. 
    403             IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN  
     410            IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN  
    404411 
    405412               IF( nn_dyn2d(ib_obc) .ne. jp_frs .and. nn_tides(ib_obc) .ne. 1) THEN 
     
    441448 
    442449            ! baroclinic velocities 
    443             IF( nn_dyn3d(ib_obc) .gt. 0 .or. & 
    444                   ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 ) ) THEN 
     450            IF( ( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 1 ) .or. & 
     451                  ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) ) THEN 
    445452 
    446453               jfld = jfld + 1 
     
    469476 
    470477            ! temperature and salinity 
    471             IF( nn_tra(ib_obc) .gt. 0 ) THEN 
     478            IF( nn_tra(ib_obc) .gt. 0 .and. nn_tra_dta(ib_obc) .eq. 1 ) THEN 
    472479 
    473480               jfld = jfld + 1 
     
    497504#if defined key_lim2 
    498505            ! sea ice 
    499             IF( nn_tra(ib_obc) .gt. 0 ) THEN 
     506            IF( nn_ice_lim2(ib_obc) .gt. 0 .and. nn_ice_lim2_dta(ib_obc) .eq. 1 ) THEN 
    500507 
    501508               jfld = jfld + 1 
     
    545552            ENDIF 
    546553 
    547          ENDIF ! nn_dtactl .eq. 1 
     554         ENDIF ! nn_dta .eq. 1 
    548555      ENDDO ! ib_obc 
    549556 
     
    565572 
    566573      ! Initialise local boundary data arrays 
    567       ! nn_dtactl=0 : allocate space - will be filled from initial conditions later 
    568       ! nn_dtactl=1 : point to "fnow" arrays 
     574      ! nn_xxx_dta=0 : allocate space - will be filled from initial conditions later 
     575      ! nn_xxx_dta=1 : point to "fnow" arrays 
    569576      !------------------------------------- 
    570577 
     
    575582         nblenrim => idx_obc(ib_obc)%nblenrim 
    576583 
    577          IF( nn_dtactl(ib_obc) .eq. 0 ) THEN 
    578                 
    579             ! nn_dtactl = 0  
    580             ! Allocate space 
    581             !--------------- 
    582             IF (nn_dyn2d(ib_obc) .gt. 0) THEN 
     584         IF (nn_dyn2d(ib_obc) .gt. 0) THEN 
     585            IF( nn_dyn2d_dta(ib_obc) .eq. 0 .or. ln_full_vel_array(ib_obc) .or. nn_tides(ib_obc) .eq. 1 ) THEN 
    583586               IF( nn_dyn2d(ib_obc) .eq. jp_frs ) THEN 
    584587                  ilen0(1:3) = nblen(1:3) 
     
    589592               ALLOCATE( dta_obc(ib_obc)%u2d(ilen0(2)) ) 
    590593               ALLOCATE( dta_obc(ib_obc)%v2d(ilen0(3)) ) 
    591             ENDIF 
    592             IF (nn_dyn3d(ib_obc) .gt. 0) THEN 
    593                IF( nn_dyn3d(ib_obc) .eq. jp_frs ) THEN 
    594                   ilen0(1:3) = nblen(1:3) 
    595                ELSE 
    596                   ilen0(1:3) = nblenrim(1:3) 
    597                ENDIF 
    598                ALLOCATE( dta_obc(ib_obc)%u3d(ilen0(2),jpk) ) 
    599                ALLOCATE( dta_obc(ib_obc)%v3d(ilen0(3),jpk) ) 
    600             ENDIF 
    601             IF (nn_tra(ib_obc) .gt. 0) THEN 
     594            ELSE 
     595               IF( nn_dyn2d(ib_obc) .ne. jp_frs ) THEN 
     596                  jfld = jfld + 1 
     597                  dta_obc(ib_obc)%ssh => bf(jfld)%fnow(:,1,1) 
     598               ENDIF 
     599               jfld = jfld + 1 
     600               dta_obc(ib_obc)%u2d => bf(jfld)%fnow(:,1,1) 
     601               jfld = jfld + 1 
     602               dta_obc(ib_obc)%v2d => bf(jfld)%fnow(:,1,1) 
     603            ENDIF 
     604         ENDIF 
     605 
     606         IF ( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 0 ) THEN 
     607            IF( nn_dyn3d(ib_obc) .eq. jp_frs ) THEN 
     608               ilen0(1:3) = nblen(1:3) 
     609            ELSE 
     610               ilen0(1:3) = nblenrim(1:3) 
     611            ENDIF 
     612            ALLOCATE( dta_obc(ib_obc)%u3d(ilen0(2),jpk) ) 
     613            ALLOCATE( dta_obc(ib_obc)%v3d(ilen0(3),jpk) ) 
     614         ENDIF 
     615         IF ( ( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 1 ).or. & 
     616           &  ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 ) ) THEN 
     617            jfld = jfld + 1 
     618            dta_obc(ib_obc)%u3d => bf(jfld)%fnow(:,1,:) 
     619            jfld = jfld + 1 
     620            dta_obc(ib_obc)%v3d => bf(jfld)%fnow(:,1,:) 
     621         ENDIF 
     622 
     623         IF (nn_tra(ib_obc) .gt. 0) THEN 
     624            IF( nn_tra_dta(ib_obc) .eq. 0 ) THEN 
    602625               IF( nn_tra(ib_obc) .eq. jp_frs ) THEN 
    603626                  ilen0(1:3) = nblen(1:3) 
     
    607630               ALLOCATE( dta_obc(ib_obc)%tem(ilen0(1),jpk) ) 
    608631               ALLOCATE( dta_obc(ib_obc)%sal(ilen0(1),jpk) ) 
    609             ENDIF 
    610 #if defined key_lim2 
    611             IF (nn_ice_lim2(ib_obc) .gt. 0) THEN 
     632            ELSE 
     633               jfld = jfld + 1 
     634               dta_obc(ib_obc)%tem => bf(jfld)%fnow(:,1,:) 
     635               jfld = jfld + 1 
     636               dta_obc(ib_obc)%sal => bf(jfld)%fnow(:,1,:) 
     637            ENDIF 
     638         ENDIF 
     639 
     640#if defined key_lim2 
     641         IF (nn_ice_lim2(ib_obc) .gt. 0) THEN 
     642            IF( nn_ice_lim2_dta(ib_obc) .eq. 0 ) THEN 
    612643               IF( nn_ice_lim2(ib_obc) .eq. jp_frs ) THEN 
    613644                  ilen0(1:3) = nblen(1:3) 
     
    618649               ALLOCATE( dta_obc(ib_obc)%u2d(ilen0(1)) ) 
    619650               ALLOCATE( dta_obc(ib_obc)%v2d(ilen0(1)) ) 
    620             ENDIF 
    621 #endif 
    622  
    623          ELSE 
    624  
    625             ! nn_dtactl = 1 
    626             ! Set boundary data arrays to point to "fnow" arrays 
    627             !--------------------------------------------------- 
    628             IF (nn_dyn2d(ib_obc) .gt. 0) THEN 
    629                IF( nn_dyn2d(ib_obc) .ne. jp_frs .and. nn_tides(ib_obc) .ne. 1 ) THEN 
    630                   jfld = jfld + 1 
    631                   dta_obc(ib_obc)%ssh => bf(jfld)%fnow(:,1,1) 
    632                ENDIF 
    633                IF( ln_full_vel_array(ib_obc) .or. nn_tides(ib_obc) .eq. 1 ) THEN 
    634                   ! In this case we need space but we aren't reading it  
    635                   ! directly from the external file.  
    636                   IF( nn_dyn2d(ib_obc) .eq. jp_frs ) THEN 
    637                      ilen0(:) = nblen(:) 
    638                   ELSE 
    639                      ilen0(:) = nblenrim(:) 
    640                   ENDIF 
    641                   IF( nn_tides(ib_obc) .eq. 1 ) ALLOCATE( dta_obc(ib_obc)%ssh(ilen0(1)) ) 
    642                   ALLOCATE( dta_obc(ib_obc)%u2d(ilen0(2)) ) 
    643                   ALLOCATE( dta_obc(ib_obc)%v2d(ilen0(3)) ) 
    644                ELSE 
    645                   jfld = jfld + 1 
    646                   dta_obc(ib_obc)%u2d => bf(jfld)%fnow(:,1,1) 
    647                   jfld = jfld + 1 
    648                   dta_obc(ib_obc)%v2d => bf(jfld)%fnow(:,1,1) 
    649                ENDIF 
    650             ENDIF 
    651             IF (nn_dyn3d(ib_obc) .gt. 0 .or. & 
    652               &  ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 ) ) THEN 
    653                jfld = jfld + 1 
    654                dta_obc(ib_obc)%u3d => bf(jfld)%fnow(:,1,:) 
    655                jfld = jfld + 1 
    656                dta_obc(ib_obc)%v3d => bf(jfld)%fnow(:,1,:) 
    657             ENDIF 
    658             IF (nn_tra(ib_obc) .gt. 0) THEN 
    659                jfld = jfld + 1 
    660                dta_obc(ib_obc)%tem => bf(jfld)%fnow(:,1,:) 
    661                jfld = jfld + 1 
    662                dta_obc(ib_obc)%sal => bf(jfld)%fnow(:,1,:) 
    663             ENDIF 
    664 #if defined key_lim2 
    665             IF (nn_ice_lim2(ib_obc) .gt. 0) THEN 
     651            ELSE 
    666652               jfld = jfld + 1 
    667653               dta_obc(ib_obc)%frld  => bf(jfld)%fnow(:,1,1) 
     
    671657               dta_obc(ib_obc)%hsnif => bf(jfld)%fnow(:,1,1) 
    672658            ENDIF 
    673 #endif 
    674  
    675          ENDIF ! nn_dtactl .eq. 0 
     659         ENDIF 
     660#endif 
    676661 
    677662      ENDDO ! ib_obc  
  • branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obcini.F90

    r2818 r2831  
    6767      !! 
    6868      NAMELIST/namobc/ nb_obc, ln_coords_file, cn_coords_file,             & 
    69          &             ln_mask_file, cn_mask_file, nn_dyn2d, nn_dyn3d,    & 
    70          &             nn_tra,                                             & 
     69         &             ln_mask_file, cn_mask_file, nn_dyn2d, nn_dyn2d_dta, & 
     70         &             nn_dyn3d, nn_dyn3d_dta, nn_tra, nn_tra_dta,         &   
    7171#if defined key_lim2 
    72          &             nn_ice_lim2,                                        & 
     72         &             nn_ice_lim2, nn_ice_lim2_dta,                       & 
    7373#endif 
    74          &             nn_tides, ln_vol, ln_clim, nn_dtactl, nn_volctl,    & 
     74         &             nn_tides, ln_vol, ln_clim, nn_volctl,               & 
    7575         &             nn_rimwidth, nn_dmp2d_in, nn_dmp2d_out,             & 
    7676         &             nn_dmp3d_in, nn_dmp3d_out 
     
    8787         &                               ' and general open boundary condition are not compatible' ) 
    8888 
    89       cgrid= (/'T','U','V'/) 
     89      cgrid= (/'t','u','v'/) 
    9090 
    9191      ! ----------------------------------------- 
     
    9999      cn_mask_file(:)   = '' 
    100100      nn_dyn2d(:)       = 0 
     101      nn_dyn2d_dta(:)   = -1  ! uninitialised flag 
    101102      nn_dyn3d(:)       = 0 
     103      nn_dyn3d_dta(:)   = -1  ! uninitialised flag 
    102104      nn_tra(:)         = 0 
     105      nn_tra_dta(:)     = -1  ! uninitialised flag 
    103106#if defined key_lim2 
    104107      nn_ice_lim2(:)    = 0 
     108      nn_ice_lim2_dta(:)= -1  ! uninitialised flag 
    105109#endif 
    106110      ln_vol            = .false. 
    107111      ln_clim(:)        = .false. 
    108       nn_dtactl(:)      = -1  ! uninitialised flag 
    109112      nn_tides(:)       =  0  ! default to no tidal forcing 
    110113      nn_volctl         = -1  ! uninitialised flag 
     
    135138        IF(lwp) WRITE(numout,*) '------ Open boundary data set ',ib_obc,'------'  
    136139 
    137         !                                         ! check type of data used (nn_dtactl value) 
    138         SELECT CASE( nn_dtactl(ib_obc) )                   !  
    139           CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for obc data'         
    140           CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
    141           CASE DEFAULT   ;   CALL ctl_stop( 'nn_dtactl must be 0 or 1' ) 
    142         END SELECT 
    143         IF(lwp) WRITE(numout,*) 
    144  
    145140        IF(lwp) WRITE(numout,*) 'Boundary conditions for barotropic solution:  ' 
    146141        SELECT CASE( nn_dyn2d(ib_obc) )                   
     
    150145          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_dyn2d' ) 
    151146        END SELECT 
     147        IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN 
     148           SELECT CASE( nn_dyn2d_dta(ib_obc) )                   !  
     149              CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for obc data'         
     150              CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
     151              CASE DEFAULT   ;   CALL ctl_stop( 'nn_dyn2d_dta must be 0 or 1' ) 
     152           END SELECT 
     153        ENDIF 
    152154        IF(lwp) WRITE(numout,*) 
    153155 
     
    158160          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_dyn3d' ) 
    159161        END SELECT 
     162        IF( nn_dyn3d(ib_obc) .gt. 0 ) THEN 
     163           SELECT CASE( nn_dyn3d_dta(ib_obc) )                   !  
     164              CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for obc data'         
     165              CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
     166              CASE DEFAULT   ;   CALL ctl_stop( 'nn_dyn3d_dta must be 0 or 1' ) 
     167           END SELECT 
     168        ENDIF 
    160169        IF(lwp) WRITE(numout,*) 
    161170 
     
    166175          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_tra' ) 
    167176        END SELECT 
     177        IF( nn_tra(ib_obc) .gt. 0 ) THEN 
     178           SELECT CASE( nn_tra_dta(ib_obc) )                   !  
     179              CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for obc data'         
     180              CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
     181              CASE DEFAULT   ;   CALL ctl_stop( 'nn_tra_dta must be 0 or 1' ) 
     182           END SELECT 
     183        ENDIF 
    168184        IF(lwp) WRITE(numout,*) 
    169185 
    170186#if defined key_lim2 
    171187        IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice:  ' 
    172         SELECT CASE( nn_tra(ib_obc) )                   
     188        SELECT CASE( nn_ice_lim2(ib_obc) )                   
    173189          CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    174190          CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
    175191          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_tra' ) 
    176192        END SELECT 
     193        IF( nn_ice_lim2(ib_obc) .gt. 0 ) THEN  
     194           SELECT CASE( nn_ice_lim2_dta(ib_obc) )                   !  
     195              CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for obc data'         
     196              CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
     197              CASE DEFAULT   ;   CALL ctl_stop( 'nn_ice_lim2_dta must be 0 or 1' ) 
     198           END SELECT 
     199        ENDIF 
    177200        IF(lwp) WRITE(numout,*) 
    178201#endif 
     
    255278         IF( .NOT. ln_coords_file(ib_obc) ) THEN ! Calculate global index arrays from namelist parameters 
    256279 
    257            !! Calculate global index arrays from namelist parameters 
     280            !! Calculate global index arrays from namelist parameters 
    258281 
    259282         ELSE            ! Read global index arrays from boundary coordinates file. 
Note: See TracChangeset for help on using the changeset viewer.