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 508 for trunk/NEMO/LIM_SRC/limdmp.F90 – NEMO

Ignore:
Timestamp:
2006-10-03T17:58:55+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_071:RB: add iom for restart and reorganization of restart

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC/limdmp.F90

    r477 r508  
    44   !!  Ice model : restoring Ice thickness and Fraction leads 
    55   !!====================================================================== 
    6 #if defined key_ice_lim && defined key_tradmp 
     6   !! History :   2.0  !  04-04 (S. Theetten) Original code 
    77   !!---------------------------------------------------------------------- 
    8    !!   'key_ice_lim' :                                   LIM sea-ice model 
     8#if defined key_ice_lim   &&   defined key_tradmp 
     9   !!---------------------------------------------------------------------- 
     10   !!   'key_ice_lim'  AND                                LIM sea-ice model 
     11   !!   'key_tradmp'                                                Damping 
     12   !!---------------------------------------------------------------------- 
    913   !!---------------------------------------------------------------------- 
    1014   !!   lim_dmp      : ice model damping 
    1115   !!---------------------------------------------------------------------- 
    12    !! * Modules used 
    1316   USE in_out_manager  ! I/O manager 
     17   USE phycst          ! physical constants 
    1418   USE ice 
    1519   USE ice_oce 
     
    1822   USE oce 
    1923   USE daymod          ! calendar 
     24   USE iom 
    2025    
    2126   IMPLICIT NONE 
    2227   PRIVATE 
    2328 
    24    !! * Routine accessibility 
    25    PUBLIC lim_dmp     ! called by ice_step 
     29   PUBLIC   lim_dmp     ! called by ice_step 
    2630    
    27    !! * Shared module variables 
    28    CHARACTER (len=38) ::   & 
    29       cl_icedata = 'ice_damping_ATL4.nc' 
    30    INTEGER ::   & 
    31         nice1      ,   &  ! first record used 
    32         nice2             ! second record used 
    33     
    34     REAL(wp), DIMENSION(jpi,jpj,2) ::   & 
    35          hicif_data ,   & ! ice thickness data at two consecutive times 
    36          frld_data        ! fraction lead data at two consecutive times 
    37  
    38     REAL(wp), DIMENSION(jpi,jpj) ::   & 
    39          hicif_dta ,   &  ! ice thickness at a given time 
    40          frld_dta         ! fraction lead at a given time 
     31   INTEGER                        ::   nice1, nice2,  &  ! first and second record used 
     32      &                                inumice_dmp       ! logical unit for ice variables (damping) 
     33   REAL(wp), DIMENSION(jpi,jpj)   ::   hicif_dta  ,   &  ! ice thickness at a given time 
     34      &                                frld_dta          ! fraction lead at a given time 
     35   REAL(wp), DIMENSION(jpi,jpj,2) ::   hicif_data ,   &  ! ice thickness data at two consecutive times 
     36      &                                frld_data         ! fraction lead data at two consecutive times 
    4137 
    4238   !! * Substitution 
    4339#  include "vectopt_loop_substitute.h90" 
    4440   !!---------------------------------------------------------------------- 
    45    !!   LIM 2.0 , UCL-LOCEAN-IPSL  (2005) 
     41   !!   LIM 2.0 , UCL-LOCEAN-IPSL  (2006) 
    4642   !! $Header$ 
    47    !! This software is governed by the CeCILL licence see !modipsl/doc/NEMO_CeCILL.txt 
     43   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4844   !!---------------------------------------------------------------------- 
    4945 
     
    5854      !! 
    5955      !! ** method  : the key_tradmp must be used to compute resto(:,:) coef. 
    60       !!      
    61       !! ** action : 
    62       !! 
    63       !! History : 
    64       !! 
    65       !!   2.0  !  04-04 (S. Theetten) Original 
    6656      !!--------------------------------------------------------------------- 
    67       !! * Arguments 
    68       INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
    69  
    70       !! * Local Variables 
    71       INTEGER  ::   ji, jj         ! dummy loop indices 
     57      INTEGER, INTENT(in) ::   kt     ! ocean time-step 
     58      ! 
     59      INTEGER             ::   ji, jj         ! dummy loop indices 
    7260      !!--------------------------------------------------------------------- 
    73      
    74       CALL dta_lim(kt) 
     61      ! 
     62      CALL dta_lim( kt ) 
    7563 
    7664      DO jj = 2, jpjm1 
    7765         DO ji = fs_2, fs_jpim1   ! vector opt. 
    78  
    79             hicif(ji,jj) = hicif(ji,jj) - rdt_ice * resto(ji,jj,1) * ( hicif(ji,jj) -  hicif_dta(ji,jj)) 
    80             frld(ji,jj)  = frld(ji,jj)  - rdt_ice * resto(ji,jj,1) * ( frld(ji,jj)  - frld_dta(ji,jj))   
    81  
    82          ENDDO 
    83       ENDDO 
    84  
     66            hicif(ji,jj) = hicif(ji,jj) - rdt_ice * resto(ji,jj,1) * ( hicif(ji,jj) - hicif_dta(ji,jj) ) 
     67            frld(ji,jj)  = frld (ji,jj) - rdt_ice * resto(ji,jj,1) * ( frld(ji,jj)  - frld_dta (ji,jj) )   
     68         END DO 
     69      END DO 
     70      ! 
    8571   END SUBROUTINE lim_dmp 
    86  
    8772 
    8873 
     
    10186      !!      two monthly values. 
    10287      !!       
    103       !! 
    10488      !! ** Action  :   define hicif_dta and frld_dta arrays at time-step kt 
    105       !! 
    106       !! History : 
    107       !!   2.0   !   04-04 (S. Theetten) Original 
    10889      !!---------------------------------------------------------------------- 
    109       !! * Modules used 
    110       USE ioipsl 
    111  
    112       !! * Arguments 
    113       INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
    114  
    115       !! * Local declarations 
    116       INTEGER, PARAMETER ::   jpmois = 12       ! number of month 
    117       
    118       INTEGER ::   & 
    119          imois, iman, itime ,    &  ! temporary integers 
    120          i15, ipi, ipj, ipk         !    "          " 
    121  
    122       INTEGER, DIMENSION(jpmois) ::   istep 
    123       REAL(wp) ::   zxy, zdate0, zdt 
    124       REAL(wp), DIMENSION(jpi,jpj) ::   zlon,zlat 
    125       REAL(wp), DIMENSION(jpk) ::   zlev 
     90      INTEGER, INTENT(in) ::   kt     ! ocean time-step 
     91      ! 
     92      INTEGER  ::   imois, iman, i15          ! temporary integers 
     93      REAL(wp) ::   zxy 
    12694      !!---------------------------------------------------------------------- 
    12795 
    12896      ! 0. Initialization 
    12997      ! ----------------- 
    130       iman  = jpmois 
     98      iman  = INT( raamo ) 
     99!!! better but change the results     i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 
    131100      i15   = nday / 16 
    132101      imois = nmonth + i15 - 1 
    133       IF( imois == 0 )   imois = iman 
    134  
    135       itime = jpmois 
    136       ipi=jpiglo 
    137       ipj=jpjglo 
    138       ipk=1 
    139       zdt=rdt 
    140  
    141       ! 1. First call kt=nit000 
     102      IF( imois == 0 ) imois = iman 
     103       
     104      ! 1. First call kt=nit000: Initialization and Open 
    142105      ! ----------------------- 
    143  
    144106      IF( kt == nit000 ) THEN 
    145107         nice1 = 0 
     
    149111         IF(lwp) WRITE(numout,*) '             NetCDF FORMAT' 
    150112         IF(lwp) WRITE(numout,*) 
    151           
    152113         ! open file 
    153           
    154          CALL flinopen( TRIM(cl_icedata), mig(1), nlci , mjg(1),  nlcj, .FALSE.,  & 
    155             &           ipi, ipj, ipk, zlon, zlat, zlev, itime, istep, zdate0, zdt, numice_dmp ) 
    156  
    157           ! title, dimensions and tests 
    158          IF( itime /= jpmois ) THEN 
    159             IF(lwp) THEN 
    160                WRITE(numout,*) 
    161                WRITE(numout,*) 'problem with time coordinates' 
    162                WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
    163             ENDIF 
    164             STOP 'dta_lim' 
    165          ENDIF 
    166          IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN 
    167             IF(lwp) THEN 
    168                WRITE(numout,*) 
    169                WRITE(numout,*) 'problem with dimensions' 
    170                WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
    171                WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
    172             ENDIF 
    173             STOP 'dta_lim' 
    174          ENDIF 
    175          IF(lwp) WRITE(numout,*) itime,istep,zdate0,zdt,numice_dmp 
    176  
     114         CALL iom_open( 'ice_damping_ATL4.nc', inumice_dmp ) 
    177115      ENDIF 
    178116 
    179117 
    180118      ! 2. Read monthly file 
    181       ! ------------------- 
    182  
     119      ! -------------------- 
    183120      IF( ( kt == nit000 ) .OR. imois /= nice1 ) THEN 
    184  
     121         ! 
    185122         ! Calendar computation 
    186           
    187123         nice1 = imois        ! first file record used  
    188124         nice2 = nice1 + 1    ! last  file record used 
    189125         nice1 = MOD( nice1, iman ) 
     126         nice2 = MOD( nice2, iman ) 
    190127         IF( nice1 == 0 )   nice1 = iman 
    191          nice2 = MOD( nice2, iman ) 
    192128         IF( nice2 == 0 )   nice2 = iman 
    193129         IF(lwp) WRITE(numout,*) 'first record file used nice1 ', nice1 
     
    195131          
    196132         ! Read monthly ice thickness Levitus  
     133         CALL iom_get( inumice_dmp, jpdom_data, 'iicethic', hicif_data(:,:,1), nice1 )  
     134         CALL iom_get( inumice_dmp, jpdom_data, 'iicethic', hicif_data(:,:,2), nice2 )  
    197135          
    198          CALL flinget( numice_dmp, 'iicethic', jpidta, jpjdta, jpk,  & 
    199             &          jpmois, nice1, nice1, mig(1), nlci, mjg(1), nlcj, hicif_data(1:nlci,1:nlcj,1) ) 
    200          CALL flinget( numice_dmp, 'iicethic', jpidta, jpjdta, jpk,  & 
    201             &          jpmois, nice2, nice2, mig(1), nlci, mjg(1), nlcj, hicif_data(1:nlci,1:nlcj,2) ) 
    202           
    203          IF(lwp) WRITE(numout,*) 
    204          IF(lwp) WRITE(numout,*) ' read ice thickness ok' 
    205          IF(lwp) WRITE(numout,*) 
    206  
    207136         ! Read monthly ice thickness Levitus  
    208           
    209          CALL flinget( numice_dmp, 'ileadfra', jpidta, jpjdta, jpk,  & 
    210             &          jpmois, nice1, nice1, mig(1), nlci, mjg(1), nlcj, frld_data(1:nlci,1:nlcj,1) ) 
    211          CALL flinget( numice_dmp, 'ileadfra', jpidta, jpjdta, jpk,  & 
    212             &          jpmois, nice2, nice2, mig(1), nlci, mjg(1), nlcj, frld_data(1:nlci,1:nlcj,2) ) 
     137         CALL iom_get( inumice_dmp, jpdom_data, 'ileadfra', frld_data(:,:,1), nice1 )  
     138         CALL iom_get( inumice_dmp, jpdom_data, 'ileadfra', frld_data(:,:,2), nice2 )  
    213139          
    214140         ! The fraction lead read in the file is in fact the  
     
    216142         frld_data = 1 - frld_data           
    217143          
    218          IF(lwp) WRITE(numout,*) 
    219          IF(lwp) WRITE(numout,*) ' read fraction lead ok' 
    220          IF(lwp) WRITE(numout,*) 
    221  
    222  
    223144         IF(lwp) THEN 
     145            WRITE(numout,*) 
    224146            WRITE(numout,*) ' Ice thickness month ', nice1,' and ', nice2 
    225147            WRITE(numout,*) 
     
    235157         ! 2. At every time step compute ice thickness and fraction lead data 
    236158         ! ------------------------------------------------------------------ 
    237           
    238159         zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 
    239160         hicif_dta(:,:) = (1.-zxy) * hicif_data(:,:,1) + zxy * hicif_data(:,:,2) 
     
    241162 
    242163      ENDIF 
    243  
    244  
     164       
     165      IF( kt == nitend )   CALL iom_close( inumice_dmp ) 
     166      ! 
    245167   END SUBROUTINE dta_lim 
    246168 
     
    250172   !!---------------------------------------------------------------------- 
    251173CONTAINS 
    252    SUBROUTINE lim_dmp(kt)        ! Dummy routine 
     174   SUBROUTINE lim_dmp( kt )        ! Dummy routine 
    253175      WRITE(*,*) 'lim_dmp: You should not see this print! error? ', kt 
    254176   END SUBROUTINE lim_dmp 
     
    256178 
    257179   !!====================================================================== 
    258  
    259180END MODULE limdmp 
Note: See TracChangeset for help on using the changeset viewer.