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 2647 for branches – NEMO

Changeset 2647 for branches


Ignore:
Timestamp:
2011-03-03T13:48:06+01:00 (13 years ago)
Author:
gm
Message:

dynamic mem: #785 ; OPA_SRC/OBC: move dyn allocation from nemogcm to obcini... (hopefully end)

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC
Files:
5 edited

Legend:

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

    r2592 r2647  
    44   !! Open Boundary Cond. :   define related variables 
    55   !!============================================================================== 
     6   !! history :  OPA  ! 1991-01 (CLIPPER)  Original code  
     7   !!   NEMO     1.0  ! 2002-02 (C. Talandier)  modules, F90 
     8   !!---------------------------------------------------------------------- 
     9#if defined key_obc 
    610   !!---------------------------------------------------------------------- 
    711   !!   'key_obc' :                                 Open Boundary Condition 
    812   !!---------------------------------------------------------------------- 
    9    !! history : 
    10    !!  8.0   01/91   (CLIPPER)  Original code  
    11    !!  8.5   06/02   (C. Talandier)  modules 
    12    !!        06/04   (F. Durand) ORCA2_ZIND config 
    13    !!                  
    14    !!---------------------------------------------------------------------- 
    15    !! * Modules used 
    1613   USE par_oce         ! ocean parameters 
    1714   USE obc_par         ! open boundary condition parameters 
    1815 
    19 #if defined key_obc 
    20  
    2116   IMPLICIT NONE 
    2217   PUBLIC 
     18    
     19   PUBLIC   obc_oce_alloc   ! called by obcini.F90 module 
    2320 
    2421   !!---------------------------------------------------------------------- 
     
    2623   !!---------------------------------------------------------------------- 
    2724   ! 
    28    !                                  !!* Namelist namobc: open boundary condition * 
     25   !                                            !!* Namelist namobc: open boundary condition * 
    2926   INTEGER           ::   nn_obcdta   = 0        !:  = 0 use the initial state as obc data 
    3027   !                                             !   = 1 read obc data in obcxxx.dta files 
     
    6360   !!General variables for open boundaries: 
    6461   !!-------------------------------------- 
    65    LOGICAL ::              &  !: 
    66       lfbceast, lfbcwest,  &  !: logical flag for a fixed East and West open boundaries        
    67       lfbcnorth, lfbcsouth    !: logical flag for a fixed North and South open boundaries        
    68       !                       !  These logical flags are set to 'true' if damping time  
    69       !                       !  scale are set to 0 in the namelist, for both inflow and outflow). 
     62   LOGICAL ::   lfbceast, lfbcwest      !: logical flag for a fixed East and West open boundaries        
     63   LOGICAL ::   lfbcnorth, lfbcsouth    !: logical flag for a fixed North and South open boundaries        
     64   !                                    !  These logical flags are set to 'true' if damping time  
     65   !                                    !  scale are set to 0 in the namelist, for both inflow and outflow). 
    7066 
    7167   REAL(wp), PUBLIC ::   obcsurftot       !: Total lateral surface of open boundaries 
     
    9793      !                   ! in the obcdyn.F90 routine 
    9894 
    99    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfoe_b      !: east boundary ssh correction averaged over the barotropic loop 
     95   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfoe_b   !: east boundary ssh correction averaged over the barotropic loop 
    10096      !                                            !  (if Flather's algoritm applied at open boundary) 
    10197 
     
    224220   REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   usmsk, vsmsk, tsmsk  !: 2D mask for the South OB 
    225221 
    226 #else 
    227    !!---------------------------------------------------------------------- 
    228    !!   Default option :                                       Empty module 
    229    !!---------------------------------------------------------------------- 
    230 #endif 
    231  
    232222   !!---------------------------------------------------------------------- 
    233223   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    234224   !! $Id$  
    235225   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    236    !!====================================================================== 
    237 #if defined key_obc 
     226   !!---------------------------------------------------------------------- 
    238227CONTAINS 
    239228 
    240    FUNCTION obc_oce_alloc() 
    241      IMPLICIT none 
    242  
    243      INTEGER :: obc_oce_alloc      
    244  
    245      ALLOCATE(                                                               & 
     229   INTEGER FUNCTION obc_oce_alloc() 
     230      !!---------------------------------------------------------------------- 
     231      !!               ***  FUNCTION obc_oce_alloc  *** 
     232      !!---------------------------------------------------------------------- 
     233 
     234      ALLOCATE(                                                               & 
    246235              !! East open boundary 
    247236              obctmsk(jpi,jpj), obcumask(jpi,jpj), obcvmask(jpi,jpj),        & 
     
    283272              usmsk(jpi,jpk), vsmsk(jpi,jpk), tsmsk(jpi,jpk),                & 
    284273              !! 
    285               Stat=obc_oce_alloc ) 
    286  
     274              STAT=obc_oce_alloc ) 
     275      ! 
    287276   END FUNCTION obc_oce_alloc 
    288 #endif ! Defined key_obc 
    289  
     277    
     278#else 
     279   !!---------------------------------------------------------------------- 
     280   !!   Default option         Empty module                          No OBC 
     281   !!---------------------------------------------------------------------- 
     282#endif 
     283 
     284   !!====================================================================== 
    290285END MODULE obc_oce 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/OBC/obc_par.F90

    r2528 r2647  
    44   !! Open Boundary Cond. :   define related parameters 
    55   !!============================================================================== 
     6   !! history :  OPA  ! 1991-01 (CLIPPER)  Original code  
     7   !!   NEMO     1.0  ! 2002-04   (C. Talandier)  modules 
     8   !!             -   ! 2004/06   (F. Durand) jptobc is defined as a parameter 
     9   !!---------------------------------------------------------------------- 
    610#if defined key_obc 
    711   !!---------------------------------------------------------------------- 
    812   !!   'key_obc' :                                 Open Boundary Condition 
    913   !!---------------------------------------------------------------------- 
    10    !! history : 
    11    !!  8.0   01/91   (CLIPPER)  Original code  
    12    !!  9.0   06/02   (C. Talandier)  modules 
    13    !!        06/04   (F. Durand) ORCA_R2_ZIND config 
    14    !!        06/04   (F. Durand) jptobc is defined as a parameter,  
    15    !!            in order to allow time-dependent OBCs fields on input 
    16    !!---------------------------------------------------------------------- 
    17    !! * Modules used 
    1814   USE par_oce         ! ocean parameters 
    1915 
    2016   IMPLICIT NONE 
    2117   PUBLIC 
    22    !!---------------------------------------------------------------------- 
    23    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    24    !! $Id$  
    25    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    26    !!---------------------------------------------------------------------- 
     18 
    2719#if ! defined key_agrif 
    2820   LOGICAL, PUBLIC, PARAMETER ::   lk_obc = .TRUE.     !: Ocean Boundary Condition flag 
     
    4739   !! open boundary parameter 
    4840   !!--------------------------------------------------------------------- 
    49    INTEGER, PARAMETER ::     &  !: time dimension of the BCS fields on input 
    50       jptobc  =         2  
     41   INTEGER, PARAMETER ::   jptobc      =  2        !: time dimension of the BCS fields on input 
     42    
    5143   !! * EAST open boundary 
    52    LOGICAL, PARAMETER ::     &  !: 
    53       lp_obc_east = .FALSE.     !: to active or not the East open boundary 
    54      INTEGER   & 
     44   LOGICAL, PARAMETER ::   lp_obc_east = .FALSE.   !: to active or not the East open boundary 
     45   INTEGER   & 
    5546#if !defined key_agrif 
    5647     , PARAMETER   &  
     
    6455 
    6556   !! * WEST open boundary 
    66    LOGICAL, PARAMETER ::     &  !: 
    67       lp_obc_west = .FALSE.     !: to active or not the West open boundary 
    68      INTEGER   & 
     57   LOGICAL, PARAMETER ::   lp_obc_west = .FALSE.   !: to active or not the West open boundary 
     58   INTEGER   & 
    6959#if !defined key_agrif 
    7060     , PARAMETER   &  
     
    7868 
    7969   !! * NORTH open boundary 
    80    LOGICAL, PARAMETER ::     &  !: 
    81       lp_obc_north = .FALSE.    !: to active or not the North open boundary 
     70   LOGICAL, PARAMETER ::   lp_obc_north = .FALSE.   !: to active or not the North open boundary 
    8271     INTEGER   & 
    8372#if !defined key_agrif 
     
    9281 
    9382   !! * SOUTH open boundary 
    94    LOGICAL, PARAMETER ::     &  !: 
    95       lp_obc_south = .FALSE.    !: to active or not the South open boundary 
     83   LOGICAL, PARAMETER ::   lp_obc_south = .FALSE.   !: to active or not the South open boundary 
    9684     INTEGER   & 
    9785#if !defined key_agrif 
     
    10593      jpisfm1 =  jpisf-1        !: last  ocean point         "                 " 
    10694    
    107    INTEGER, PARAMETER ::     &  !: 
    108       jpnic = 2700              !: maximum number of isolated coastlines points  
     95   INTEGER, PARAMETER ::   jpnic = 2700   !: maximum number of isolated coastlines points  
    10996 
    11097# endif 
     
    117104#endif 
    118105 
     106   !!---------------------------------------------------------------------- 
     107   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     108   !! $Id$  
     109   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    119110   !!====================================================================== 
    120111END MODULE obc_par 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/OBC/obcdta.F90

    r2627 r2647  
    44   !! Open boundary data : read the data for the open boundaries. 
    55   !!============================================================================== 
     6   !! History :  OPA  ! 1998-05 (J.M. Molines) Original code 
     7   !!            8.5  ! 2002-10 (C. Talandier, A-M. Treguier) Free surface, F90 
     8   !!   NEMO     1.0  ! 2004-06 (F. Durand, A-M. Treguier) Netcdf BC files on input 
     9   !!            3.0  ! 2007-2008 (C. Langlais, P. Mathiot, J.M. Molines) high frequency boundaries data 
     10   !!------------------------------------------------------------------------------ 
    611#if defined key_obc 
    712   !!------------------------------------------------------------------------------ 
     
    2530   PRIVATE 
    2631 
    27    PUBLIC   obc_dta      ! routines called by step.F90 
    28    PUBLIC   obc_dta_bt   ! routines called by dynspg_ts.F90 
    29    PUBLIC   obc_dta_alloc 
    30     
     32   PUBLIC   obc_dta         ! routine  called by step.F90 
     33   PUBLIC   obc_dta_bt      ! routine  called by dynspg_ts.F90 
     34   PUBLIC   obc_dta_alloc   ! function called by obcini.F90 
    3135 
    3236   REAL(wp),  DIMENSION(2)              ::   zjcnes_obc   !  
     
    4751   CHARACTER (len=40) ::   cl_obc_sTS, cl_obc_sV   !   -       - 
    4852 
    49 # if defined key_dynspg_ts 
    5053   ! bt arrays for interpolating time dependent data on the boundaries 
    5154   INTEGER ::   nt_m=0, ntobc_m 
    52    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtedta, vbtedta, sshedta       ! East 
    53    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtwdta, vbtwdta, sshwdta ! West 
    54    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtndta, vbtndta, sshndta ! North 
    55    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtsdta, vbtsdta, sshsdta ! South 
     55   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtedta, vbtedta, sshedta    ! East 
     56   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtwdta, vbtwdta, sshwdta    ! West 
     57   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtndta, vbtndta, sshndta    ! North 
     58   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtsdta, vbtsdta, sshsdta    ! South 
    5659   ! arrays used for interpolating time dependent data on the boundaries 
    5760   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uedta, vedta, tedta, sedta    ! East 
     
    5962   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: undta, vndta, tndta, sndta    ! North 
    6063   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: usdta, vsdta, tsdta, ssdta    ! South 
    61 # else 
    62    ! bt arrays for interpolating time dependent data on the boundaries 
    63    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtedta, vbtedta, sshedta        ! East 
    64    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtwdta, vbtwdta, sshwdta        ! West 
    65    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtndta, vbtndta, sshndta        ! North 
    66    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ubtsdta, vbtsdta, sshsdta        ! South 
    67    ! arrays used for interpolating time dependent data on the boundaries 
    68    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uedta, vedta, tedta, sedta    ! East 
    69    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uwdta, vwdta, twdta, swdta    ! West 
    70    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: undta, vndta, tndta, sndta    ! North 
    71    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: usdta, vsdta, tsdta, ssdta    ! South 
    72 # endif 
     64 
    7365   ! Masks set to .TRUE. after successful allocation below 
    7466   LOGICAL , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: ltemsk, luemsk, lvemsk  ! boolean msks 
     
    8779CONTAINS 
    8880 
    89    FUNCTION obc_dta_alloc() 
     81   INTEGER FUNCTION obc_dta_alloc() 
    9082      !!------------------------------------------------------------------- 
    9183      !!                     ***  ROUTINE obc_dta_alloc  *** 
    92       !!                     
    9384      !!------------------------------------------------------------------- 
    94       IMPLICIT none 
    95       INTEGER :: obc_dta_alloc 
    9685      INTEGER :: ierr(2) 
    9786      !!------------------------------------------------------------------- 
    98  
    9987# if defined key_dynspg_ts 
    100       ALLOCATE(ubtedta(jpj,0:jptobc), vbtedta(jpj,0:jptobc), & 
    101                sshedta(jpj,0:jptobc), ubtwdta(jpj,0:jptobc), & 
    102                vbtwdta(jpj,0:jptobc), sshwdta(jpj,0:jptobc), & 
    103                ubtndta(jpi,0:jptobc), vbtndta(jpi,0:jptobc), & 
    104                sshndta(jpi,0:jptobc), ubtsdta(jpi,0:jptobc), & 
    105                vbtsdta(jpi,0:jptobc), sshsdta(jpi,0:jptobc), & 
    106                ! arrays used for interpolating time dependent data on the boundaries 
    107                uedta(jpj,jpk,0:jptobc), vedta(jpj,jpk,0:jptobc), & 
    108                tedta(jpj,jpk,0:jptobc), sedta(jpj,jpk,0:jptobc), & 
    109                uwdta(jpj,jpk,0:jptobc), vwdta(jpj,jpk,0:jptobc), & 
    110                twdta(jpj,jpk,0:jptobc), swdta(jpj,jpk,0:jptobc), & 
    111                undta(jpi,jpk,0:jptobc), vndta(jpi,jpk,0:jptobc), & 
    112                tndta(jpi,jpk,0:jptobc), sndta(jpi,jpk,0:jptobc), & 
    113                usdta(jpi,jpk,0:jptobc), vsdta(jpi,jpk,0:jptobc), & 
    114                tsdta(jpi,jpk,0:jptobc), ssdta(jpi,jpk,0:jptobc), Stat=ierr(1) ) 
     88      ALLOCATE(   &     ! time-splitting : 0:jptobc 
     89         ! bt arrays for interpolating time dependent data on the boundaries 
     90         &      ubtedta  (jpj,0:jptobc) , vbtedta  (jpj,0:jptobc) , sshedta  (jpj,0:jptobc) ,    & 
     91         &      ubtwdta  (jpj,0:jptobc) , vbtwdta  (jpj,0:jptobc) , sshwdta  (jpj,0:jptobc) ,    & 
     92         &      ubtndta  (jpi,0:jptobc) , vbtndta  (jpi,0:jptobc) , sshndta  (jpi,0:jptobc) ,    & 
     93         &      ubtsdta  (jpi,0:jptobc) , vbtsdta  (jpi,0:jptobc) , sshsdta  (jpi,0:jptobc) ,    & 
     94         ! arrays used for interpolating time dependent data on the boundaries 
     95         &      uedta(jpj,jpk,0:jptobc) , vedta(jpj,jpk,0:jptobc)                           ,    & 
     96         &      tedta(jpj,jpk,0:jptobc) , sedta(jpj,jpk,0:jptobc)                           ,    & 
     97         &      uwdta(jpj,jpk,0:jptobc) , vwdta(jpj,jpk,0:jptobc)                           ,    & 
     98         &      twdta(jpj,jpk,0:jptobc) , swdta(jpj,jpk,0:jptobc)                           ,    & 
     99         &      undta(jpi,jpk,0:jptobc) , vndta(jpi,jpk,0:jptobc)                           ,    & 
     100         &      tndta(jpi,jpk,0:jptobc) , sndta(jpi,jpk,0:jptobc)                           ,    & 
     101         &      usdta(jpi,jpk,0:jptobc) , vsdta(jpi,jpk,0:jptobc)                           ,    & 
     102         &      tsdta(jpi,jpk,0:jptobc) , ssdta(jpi,jpk,0:jptobc)                           , STAT=ierr(1) ) 
    115103# else 
    116                ! bt arrays for interpolating time dependent data on the boundaries 
    117       ALLOCATE(ubtedta(jpj,jptobc), vbtedta(jpj,jptobc), sshedta(jpj,jptobc), & 
    118                ubtwdta(jpj,jptobc), vbtwdta(jpj,jptobc), sshwdta(jpj,jptobc), & 
    119                ubtndta(jpi,jptobc), vbtndta(jpi,jptobc), sshndta(jpi,jptobc), & 
    120                ubtsdta(jpi,jptobc), vbtsdta(jpi,jptobc), sshsdta(jpi,jptobc), & 
    121                ! arrays used for interpolating time dependent data on the boundaries 
    122                uedta(jpj,jpk,jptobc), vedta(jpj,jpk,jptobc),  & 
    123                tedta(jpj,jpk,jptobc), sedta(jpj,jpk,jptobc),  & 
    124                uwdta(jpj,jpk,jptobc), vwdta(jpj,jpk,jptobc),  & 
    125                twdta(jpj,jpk,jptobc), swdta(jpj,jpk,jptobc),  & 
    126                undta(jpi,jpk,jptobc), vndta(jpi,jpk,jptobc),  & 
    127                tndta(jpi,jpk,jptobc), sndta(jpi,jpk,jptobc),  & 
    128                usdta(jpi,jpk,jptobc), vsdta(jpi,jpk,jptobc),  & 
    129                tsdta(jpi,jpk,jptobc), ssdta(jpi,jpk,jptobc), Stat=ierr(1) ) 
     104      ALLOCATE(   &     ! no time splitting : 1:jptobc 
     105         ! bt arrays for interpolating time dependent data on the boundaries 
     106         &      ubtedta  (jpj,jptobc) , vbtedta  (jpj,jptobc) , sshedta  (jpj,jptobc)  ,     & 
     107         &      ubtwdta  (jpj,jptobc) , vbtwdta  (jpj,jptobc) , sshwdta  (jpj,jptobc)  ,     & 
     108         &      ubtndta  (jpi,jptobc) , vbtndta  (jpi,jptobc) , sshndta  (jpi,jptobc)  ,     & 
     109         &      ubtsdta  (jpi,jptobc) , vbtsdta  (jpi,jptobc) , sshsdta  (jpi,jptobc)  ,     & 
     110         ! arrays used for interpolating time dependent data on the boundaries 
     111         &      uedta(jpj,jpk,jptobc) , vedta(jpj,jpk,jptobc)                          ,     & 
     112         &      tedta(jpj,jpk,jptobc) , sedta(jpj,jpk,jptobc)                          ,     & 
     113         &      uwdta(jpj,jpk,jptobc) , vwdta(jpj,jpk,jptobc)                          ,     & 
     114         &      twdta(jpj,jpk,jptobc) , swdta(jpj,jpk,jptobc)                          ,     & 
     115         &      undta(jpi,jpk,jptobc) , vndta(jpi,jpk,jptobc)                          ,     & 
     116         &      tndta(jpi,jpk,jptobc) , sndta(jpi,jpk,jptobc)                          ,     & 
     117         &      usdta(jpi,jpk,jptobc) , vsdta(jpi,jpk,jptobc)                          ,     & 
     118         &      tsdta(jpi,jpk,jptobc) , ssdta(jpi,jpk,jptobc)                          , STAT=ierr(1) ) 
    130119# endif 
    131120 
    132       ALLOCATE(uedta(jpj,jpk,jptobc), vedta(jpj,jpk,jptobc), & 
    133                tedta(jpj,jpk,jptobc), sedta(jpj,jpk,jptobc), & 
    134                uwdta(jpj,jpk,jptobc), vwdta(jpj,jpk,jptobc), & 
    135                twdta(jpj,jpk,jptobc), swdta(jpj,jpk,jptobc), & 
    136                undta(jpj,jpk,jptobc), vndta(jpj,jpk,jptobc), & 
    137                tndta(jpj,jpk,jptobc), sndta(jpj,jpk,jptobc), & 
    138                usdta(jpj,jpk,jptobc), vsdta(jpj,jpk,jptobc), & 
    139                tsdta(jpj,jpk,jptobc), ssdta(jpj,jpk,jptobc), & 
    140                ltemsk(jpj,jpk), luemsk(jpj,jpk), lvemsk(jpj,jpk), & 
    141                ltwmsk(jpj,jpk), luwmsk(jpj,jpk), lvwmsk(jpj,jpk), & 
    142                ltnmsk(jpj,jpk), lunmsk(jpj,jpk), lvnmsk(jpj,jpk), & 
    143                ltsmsk(jpj,jpk), lusmsk(jpj,jpk), lvsmsk(jpj,jpk), & 
    144                Stat=ierr(2)) 
    145  
    146       obc_dta_alloc = MAXVAL(ierr) 
    147  
    148       IF(obc_dta_alloc == 0)THEN 
    149          ! Initialise mask values following successful allocation 
    150          ltemsk(:,:)=.TRUE. 
    151          luemsk(:,:)=.TRUE. 
    152          lvemsk(:,:)=.TRUE. 
    153          ltwmsk(:,:)=.TRUE. 
    154          luwmsk(:,:)=.TRUE. 
    155          lvwmsk(:,:)=.TRUE. 
    156          ltnmsk(:,:)=.TRUE. 
    157          lunmsk(:,:)=.TRUE. 
    158          lvnmsk(:,:)=.TRUE. 
    159          ltsmsk(:,:)=.TRUE. 
    160          lusmsk(:,:)=.TRUE. 
    161          lvsmsk(:,:)=.TRUE. 
     121      ALLOCATE( uedta(jpj,jpk,jptobc) , vedta(jpj,jpk,jptobc)       ,     & 
     122         &      tedta(jpj,jpk,jptobc) , sedta(jpj,jpk,jptobc)       ,     & 
     123         &      uwdta(jpj,jpk,jptobc) , vwdta(jpj,jpk,jptobc)       ,     & 
     124         &      twdta(jpj,jpk,jptobc) , swdta(jpj,jpk,jptobc)       ,     & 
     125         &      undta(jpj,jpk,jptobc) , vndta(jpj,jpk,jptobc)       ,     & 
     126         &      tndta(jpj,jpk,jptobc) , sndta(jpj,jpk,jptobc)       ,     & 
     127         &      usdta(jpj,jpk,jptobc) , vsdta(jpj,jpk,jptobc)       ,     & 
     128         &      tsdta(jpj,jpk,jptobc) , ssdta(jpj,jpk,jptobc)       ,     & 
     129         &      ltemsk(jpj,jpk) , luemsk(jpj,jpk) , lvemsk(jpj,jpk) ,     & 
     130         &      ltwmsk(jpj,jpk) , luwmsk(jpj,jpk) , lvwmsk(jpj,jpk) ,     & 
     131         &      ltnmsk(jpj,jpk) , lunmsk(jpj,jpk) , lvnmsk(jpj,jpk) ,     & 
     132         &      ltsmsk(jpj,jpk) , lusmsk(jpj,jpk) , lvsmsk(jpj,jpk) , STAT=ierr(2) ) 
     133 
     134      obc_dta_alloc = MAXVAL( ierr ) 
     135      IF( lk_mpp )   CALL mpp_sum( obc_dta_alloc ) 
     136 
     137      IF( obc_dta_alloc == 0 )  THEN         ! Initialise mask values following successful allocation 
     138         !      east            !          west            !          north           !          south           ! 
     139         ltemsk(:,:) = .TRUE.   ;   ltwmsk(:,:) = .TRUE.   ;   ltnmsk(:,:) = .TRUE.   ;   ltsmsk(:,:) = .TRUE. 
     140         luemsk(:,:) = .TRUE.   ;   luwmsk(:,:) = .TRUE.   ;   lunmsk(:,:) = .TRUE.   ;   lusmsk(:,:) = .TRUE. 
     141         lvemsk(:,:) = .TRUE.   ;   lvwmsk(:,:) = .TRUE.   ;   lvnmsk(:,:) = .TRUE.   ;   lvsmsk(:,:) = .TRUE. 
    162142      END IF 
    163  
     143      ! 
    164144   END FUNCTION obc_dta_alloc 
    165145 
     
    181161      !!                 attribute of variable time_counter). 
    182162      !! 
    183       !! 
    184       !! History : 
    185       !!        !  98-05 (J.M. Molines) Original code 
    186       !!   8.5  !  02-10 (C. Talandier, A-M. Treguier) Free surface, F90 
    187       !! 
    188       !!   9.0  !  04-06 (F. Durand, A-M. Treguier) Netcdf BC files on input 
    189       !!        !  2007-2008 (C. Langlais, P. Mathiot, J.M. Molines) high frequency boundaries data 
    190163      !!--------------------------------------------------------------------------- 
    191       !! * Arguments 
    192164      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    193  
    194       !! * Local declarations 
     165      ! 
    195166      INTEGER, SAVE :: immfile, iyyfile                     ! 
    196167      INTEGER :: nt              !  record indices (incrementation) 
    197168      REAL(wp) ::   zsec, zxy, znum, zden ! time interpolation weight 
    198  
    199169      !!--------------------------------------------------------------------------- 
    200170 
     
    302272 
    303273 
    304    SUBROUTINE obc_dta_ini (kt) 
     274   SUBROUTINE obc_dta_ini( kt ) 
    305275      !!----------------------------------------------------------------------------- 
    306276      !!                       ***  SUBROUTINE obc_dta_ini  *** 
    307277      !! 
    308       !! ** Purpose : 
    309       !!      When obc_dta first call, realize some data initialization 
    310       !! 
    311       !! ** Method : 
    312       !! 
    313       !! History : 
    314       !!   9.0  ! 07-10 (J.M. Molines ) 
     278      !! ** Purpose :   When obc_dta first call, realize some data initialization 
    315279      !!---------------------------------------------------------------------------- 
    316       !! * Argument 
    317280      INTEGER, INTENT(in)  :: kt      ! ocean time-step index 
    318  
    319       !! * Local declarations 
     281      ! 
    320282      INTEGER ::   ji, jj   ! dummy loop indices 
    321283      INTEGER, SAVE :: immfile, iyyfile                     ! 
     
    596558      !!                Data at the boundary must be in m2/s  
    597559      !! 
    598       !! History : 
    599       !!   9.0  !  05-11 (V. garnier) Original code 
     560      !! History :  9.0  !  05-11 (V. garnier) Original code 
    600561      !!--------------------------------------------------------------------------- 
    601       !! * Arguments 
    602562      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    603563      INTEGER, INTENT( in ) ::   kbt         ! barotropic ocean time-step index 
    604  
    605       !! * Local declarations 
     564      ! 
    606565      INTEGER ::   ji, jj  ! dummy loop indices 
    607566      INTEGER ::   i15 
     
    609568      REAL(wp) ::  zxy 
    610569      INTEGER ::   isrel           ! number of seconds since 1/1/1992 
    611  
    612570      !!--------------------------------------------------------------------------- 
    613571 
     
    11711129   END SUBROUTINE obc_read 
    11721130 
     1131 
    11731132   INTEGER FUNCTION nrecbef() 
    11741133      !!----------------------------------------------------------------------- 
     
    12021161      END FUNCTION nrecbef 
    12031162 
    1204       !!============================================================================== 
     1163 
    12051164      SUBROUTINE obc_depth_average(nt_x) 
    12061165         !!----------------------------------------------------------------------- 
     
    12871246      END SUBROUTINE obc_dta 
    12881247#endif 
     1248   !!============================================================================== 
    12891249   END MODULE obcdta 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/OBC/obcini.F90

    r2565 r2647  
    1818   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1919   USE phycst          ! physical constants 
    20    USE obc_oce         ! ocean open boundary conditions 
    21    USE lib_mpp         ! for mpp_sum 
     20   USE obc_oce         ! open boundary condition: ocean 
     21   USE obcdta          ! open boundary condition: data 
    2222   USE in_out_manager  ! I/O units 
     23   USE lib_mpp         ! MPP library 
    2324   USE dynspg_oce      ! flag lk_dynspg_flt 
    2425 
     
    3334   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3435   !! $Id$  
    35    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     36   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3637   !!---------------------------------------------------------------------- 
    37  
    3838CONTAINS 
    3939    
     
    8181      rdpnob   = rn_dpnob 
    8282      volemp   = rn_volemp 
    83        
    84  
     83 
     84      !                              ! allocate obc arrays 
     85      IF( obc_oce_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'obc_init : unable to allocate obc_oce arrays' ) 
     86      IF( obc_dta_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'obc_init : unable to allocate obc_dta arrays' ) 
    8587 
    8688      ! By security we set rdpxin and rdpxob respectively to 1. and 15. if the corresponding OBC is not activated 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r2641 r2647  
    470470     USE trc_oce,      ONLY: trc_oce_alloc 
    471471 
    472 #if defined key_obc 
    473      USE obcdta ,      ONLY: obc_dta_alloc 
    474      USE obc_oce,      ONLY: obc_oce_alloc 
    475 #endif 
    476  
    477472      USE wrk_nemo,    ONLY: wrk_alloc 
    478473 
     
    491486      ierr = ierr + trc_oce_alloc   ()          ! shared TRC / TRA arrays 
    492487 
    493  
    494 #if defined key_obc 
    495       ierr = ierr + obc_dta_alloc() 
    496       ierr = ierr + obc_oce_alloc() 
    497 #endif 
    498  
    499       ierr = ierr + wrk_alloc(numout, lwp) 
     488      ierr = ierr + wrk_alloc(numout, lwp)      ! workspace 
    500489 
    501490      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
Note: See TracChangeset for help on using the changeset viewer.