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/limdia.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/limdia.F90

    r247 r508  
    44   !!                      diagnostics of ice model  
    55   !!====================================================================== 
     6   !! History :   8.0  !  97-06  (Louvain-La-Neuve)  Original code 
     7   !!             8.5  !  02-09  (C. Ethe , G. Madec )  F90: Free form and module 
     8   !!             9.0  !  06-08  (S. Masson)  change frequency output control 
     9   !!------------------------------------------------------------------- 
    610#if defined key_ice_lim 
    711   !!---------------------------------------------------------------------- 
    812   !!   'key_ice_lim' :                                   LIM sea-ice model 
     13   !!---------------------------------------------------------------------- 
    914   !!---------------------------------------------------------------------- 
    1015   !!   lim_dia      : computation of the time evolution of keys var. 
    1116   !!   lim_dia_init : initialization and namelist read 
    1217   !!---------------------------------------------------------------------- 
    13    !! * Modules used 
    1418   USE phycst          !  
    1519   USE par_ice         ! ice parameters 
     
    1822   USE dom_ice         ! 
    1923   USE ice             ! 
    20    USE iceini          ! 
    2124   USE limistate       ! 
    2225   USE in_out_manager  ! I/O manager 
     
    2528   PRIVATE 
    2629 
    27    !! * Routine accessibility 
    28    PUBLIC lim_dia       ! called by ice_step 
    29  
    30    !! * Shared module variables 
    31    INTEGER, PUBLIC  ::  &  !: 
    32       ntmoy   = 1 ,     &  !: instantaneous values of ice evolution or averaging ntmoy 
    33       ninfo   = 1          !: frequency of ouputs on file ice_evolu in case of averaging 
    34  
    35    !! * Module variables 
     30   PUBLIC               lim_dia            ! called by ice_step 
     31   INTEGER, PUBLIC ::   ntmoy   = 1 ,   &  !: instantaneous values of ice evolution or averaging ntmoy 
     32      &                 ninfo   = 1        !: frequency of ouputs on file ice_evolu in case of averaging 
     33 
    3634   INTEGER, PARAMETER ::   &  ! Parameters for outputs to files "evolu" 
    3735      jpinfmx = 100         ,    &  ! maximum number of key variables 
     
    4644      naveg                ! number of step for accumulation before averaging 
    4745 
    48    CHARACTER(len=8) ::   & 
    49       fmtinf  = '1PE13.5 ' ! format of the output values   
    50    CHARACTER(len=30) ::   & 
    51       fmtw  ,           &  ! formats 
    52       fmtr  ,           &  ! ??? 
    53       fmtitr               ! ??? 
    54    CHARACTER(len=jpchsep), DIMENSION(jpinfmx) ::   & 
    55       titvar               ! title of key variables 
     46   CHARACTER(len= 8) ::   fmtinf  = '1PE13.5 ' ! format of the output values   
     47   CHARACTER(len=30) ::   fmtw  ,           &  ! formats 
     48      &                   fmtr  ,           &  ! ??? 
     49      &                   fmtitr               ! ??? 
     50   CHARACTER(len=jpchsep), DIMENSION(jpinfmx) ::   titvar               ! title of key variables 
    5651  
    57    REAL(wp) ::   & 
    58       epsi06 = 1.e-06      ! ??? 
    59    REAL(wp), DIMENSION(jpinfmx) ::  & 
    60       vinfom               ! temporary working space 
    61    REAL(wp), DIMENSION(jpi,jpj) ::   & 
    62       aire                 ! masked grid cell area 
     52   REAL(wp)                     ::   epsi06 = 1.e-06      ! ??? 
     53   REAL(wp), DIMENSION(jpinfmx) ::   vinfom               ! temporary working space 
     54   REAL(wp), DIMENSION(jpi,jpj) ::   aire                 ! masked grid cell area 
    6355 
    6456   !! * Substitutions 
     
    6759   !!   LIM 2.0,  UCL-LOCEAN-IPSL (2005)  
    6860   !! $Header$  
    69    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     61   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    7062   !!---------------------------------------------------------------------- 
    7163 
    7264CONTAINS 
    7365 
    74    SUBROUTINE lim_dia 
     66   SUBROUTINE lim_dia( kt ) 
    7567      !!-------------------------------------------------------------------- 
    7668      !!                  ***  ROUTINE lim_dia  *** 
     
    7870      !! ** Purpose : Computation and outputs on file ice.evolu  
    7971      !!      the temporal evolution of some key variables 
     72      !!------------------------------------------------------------------- 
     73      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    8074      !! 
    81       !! History : 
    82       !!   8.0  !  97-06  (Louvain-La-Neuve)  Original code 
    83       !!   8.5  !  02-09  (C. Ethe , G. Madec )  F90: Free form and module 
     75      INTEGER  ::   jv,ji, jj   ! dummy loop indices 
     76      INTEGER  ::   nv          ! indice of variable  
     77      REAL(wp) ::   zarea    , zldarea  ,    &  ! sea-ice and leads area 
     78         &          zextent15, zextent85,    &  ! sea-ice extent (15% and 85%) 
     79         &          zicevol  , zsnwvol  ,    &  ! sea-ice and snow volume volume 
     80         &          zicespd                     ! sea-ice velocity 
     81      REAL(wp), DIMENSION(jpinfmx) ::   vinfor  ! temporary working space  
    8482      !!------------------------------------------------------------------- 
    85       !! * Local variables 
    86        INTEGER  ::   jv,ji, jj   ! dummy loop indices 
    87        INTEGER  ::   nv          ! indice of variable  
    88        REAL(wp), DIMENSION(jpinfmx) ::  &  
    89           vinfor           ! temporary working space  
    90        REAL(wp) ::    & 
    91           zarea    ,    &  ! sea ice area 
    92           zldarea  ,    &  ! leads area 
    93           zextent15,    &  ! sea ice extent (15%) 
    94           zextent85,    &  ! sea ice extent (85%) 
    95           zicevol  ,    &  ! sea ice volume 
    96           zsnwvol  ,    &  ! snow volume over sea ice 
    97           zicespd          ! sea ice velocity 
    98        !!------------------------------------------------------------------- 
    99  
    100        IF( numit == nstart )   CALL lim_dia_init   ! initialisation of ice_evolu file       
    101  
    102        ! computation of key variables at each time step    
    103  
    104        nv = 1  
    105        vinfor(nv) = REAL( numit ) 
    106        nv = nv + 1 
    107        vinfor(nv) = nyear 
     83 
     84      IF( kt == nit000 )   CALL lim_dia_init   ! initialisation of ice_evolu file       
     85 
     86      ! computation of key variables at each time step    
     87 
     88      nv = 1  
     89      vinfor(nv) = REAL( kt + nfice - 1 ) 
     90      nv = nv + 1 
     91      vinfor(nv) = nyear 
    10892  
    109        DO jv = nbvt + 1, nvinfo 
    110           vinfor(jv) = 0.e0 
    111        END DO 
    112  
    113        zextent15 = 0.e0 
    114        zextent85 = 0.e0 
    115        ! variables in northern Hemis 
    116        DO jj = njeq, jpjm1 
    117           DO ji = fs_2, fs_jpim1   ! vector opt. 
    118              IF( tms(ji,jj) == 1 ) THEN 
    119                 zarea = ( 1.0 - frld(ji,jj) ) * aire(ji,jj) 
    120                 IF (frld(ji,jj) <= 0.15 ) zextent15 = aire(ji,jj)     
    121                 IF (frld(ji,jj) <= 0.85 ) zextent85 = aire(ji,jj)    
    122                 zldarea = zarea   / MAX( ( 1 - frld(ji,jj) ) , epsi06 ) 
    123                 zicevol = zarea   * hicif(ji,jj) 
    124                 zsnwvol = zarea   * hsnif(ji,jj) 
    125                 zicespd = zicevol * ( u_ice(ji,jj) * u_ice(ji,jj)   & 
    126                    &                + v_ice(ji,jj) * v_ice(ji,jj) ) 
    127                 vinfor(nv+ 1) = vinfor(nv+ 1) + zarea 
    128                 vinfor(nv+ 3) = vinfor(nv+ 3) + zextent15 
    129                 vinfor(nv+ 5) = vinfor(nv+ 5) + zextent85 
    130                 vinfor(nv+ 7) = vinfor(nv+ 7) + zldarea 
    131                 vinfor(nv+ 9) = vinfor(nv+ 9) + zicevol 
    132                 vinfor(nv+11) = vinfor(nv+11) + zsnwvol 
    133                 vinfor(nv+13) = vinfor(nv+13) + zicespd 
    134              ENDIF 
    135           END DO 
    136        END DO 
    137        vinfor(nv+13) = SQRT( vinfor(nv+13) / MAX( vinfor(nv+9) , epsi06 ) ) 
     93      DO jv = nbvt + 1, nvinfo 
     94         vinfor(jv) = 0.e0 
     95      END DO 
     96 
     97      zextent15 = 0.e0 
     98      zextent85 = 0.e0 
     99      ! variables in northern Hemis 
     100      DO jj = njeq, jpjm1 
     101         DO ji = fs_2, fs_jpim1   ! vector opt. 
     102            IF( tms(ji,jj) == 1 ) THEN 
     103               zarea = ( 1.0 - frld(ji,jj) ) * aire(ji,jj) 
     104               IF (frld(ji,jj) <= 0.15 ) zextent15 = aire(ji,jj)     
     105               IF (frld(ji,jj) <= 0.85 ) zextent85 = aire(ji,jj)    
     106               zldarea = zarea   / MAX( ( 1 - frld(ji,jj) ) , epsi06 ) 
     107               zicevol = zarea   * hicif(ji,jj) 
     108               zsnwvol = zarea   * hsnif(ji,jj) 
     109               zicespd = zicevol * ( u_ice(ji,jj) * u_ice(ji,jj)   & 
     110                  &                + v_ice(ji,jj) * v_ice(ji,jj) ) 
     111               vinfor(nv+ 1) = vinfor(nv+ 1) + zarea 
     112               vinfor(nv+ 3) = vinfor(nv+ 3) + zextent15 
     113               vinfor(nv+ 5) = vinfor(nv+ 5) + zextent85 
     114               vinfor(nv+ 7) = vinfor(nv+ 7) + zldarea 
     115               vinfor(nv+ 9) = vinfor(nv+ 9) + zicevol 
     116               vinfor(nv+11) = vinfor(nv+11) + zsnwvol 
     117               vinfor(nv+13) = vinfor(nv+13) + zicespd 
     118            ENDIF 
     119         END DO 
     120      END DO 
     121      vinfor(nv+13) = SQRT( vinfor(nv+13) / MAX( vinfor(nv+9) , epsi06 ) ) 
    138122 
    139123 
     
    170154     
    171155       ! oututs on file ice_evolu     
    172        IF( MOD( numit , ninfo ) == 0 ) THEN 
     156       IF( MOD( kt + nfice - 1, ninfo ) == 0 ) THEN 
    173157          WRITE(numevo_ice,fmtw) ( titvar(jv), vinfom(jv)/naveg, jv = 1, nvinfo ) 
    174158          naveg = 0 
     
    177161          END DO 
    178162       ENDIF 
    179    
     163       ! 
    180164    END SUBROUTINE lim_dia 
    181165  
     
    189173       !! 
    190174       !! ** input   : Namelist namicedia 
    191        !! 
    192        !! history : 
    193        !!  8.5  ! 03-08 (C. Ethe) original code 
    194175       !!------------------------------------------------------------------- 
     176       CHARACTER(len=jpchinf) ::   titinf 
     177       INTEGER  ::   jv            ! dummy loop indice 
     178       INTEGER  ::   ntot , ndeb , irecl 
     179       INTEGER  ::   nv            ! indice of variable  
     180       REAL(wp) ::   zxx0, zxx1    ! temporary scalars 
     181 
    195182       NAMELIST/namicedia/fmtinf, nfrinf, ninfo, ntmoy 
    196  
    197        INTEGER  ::   jv   ,     &  ! dummy loop indice 
    198           &          ntot ,     & 
    199           &          ndeb ,     & 
    200           &          irecl 
    201  
    202        INTEGER  ::   nv            ! indice of variable  
    203  
    204        REAL(wp) ::   zxx0, zxx1    ! temporary scalars 
    205  
    206        CHARACTER(len=jpchinf) ::   titinf 
    207183       !!------------------------------------------------------------------- 
    208184 
     
    210186       REWIND ( numnam_ice ) 
    211187       READ   ( numnam_ice  , namicedia ) 
     188        
    212189       IF(lwp) THEN 
    213190          WRITE(numout,*) 
     
    228205       nv = nv + 1 
    229206       titvar(nv) = 'T yr'  ! time step in years 
    230        nv = nv + 1 
    231  
     207        
    232208       nbvt = nv - 1 
    233209 
    234        titvar(nv) = 'AEFN' ! sea ice area in the northern Hemisp.(10^12 km2) 
    235        nv = nv + 1 
    236        titvar(nv) = 'AEFS' ! sea ice area in the southern Hemisp.(10^12 km2) 
    237        nv = nv + 1 
    238        titvar(nv) = 'A15N'  ! sea ice extent (15%) in the northern Hemisp.(10^12 km2) 
    239        nv = nv + 1 
    240        titvar(nv) = 'A15S'  ! sea ice extent (15%) in the southern Hemisp.(10^12 km2) 
    241        nv = nv + 1 
    242        titvar(nv) = 'A85N'  ! sea ice extent (85%) in the northern Hemisp.(10^12 km2) 
    243        nv = nv + 1 
    244        titvar(nv) = 'A85S'  ! sea ice extent (85%) in the southern Hemisp.(10^12 km2) 
    245        nv = nv + 1 
    246        titvar(nv) = 'ALEN'  ! leads area in the northern Hemisp.(10^12 km2) 
    247        nv = nv + 1 
    248        titvar(nv) = 'ALES'  ! leads area in the southern Hemisp.(10^12 km2) 
    249        nv = nv + 1 
    250        titvar(nv) = 'VOLN'  ! sea ice volume in the northern Hemisp.(10^3 km3) 
    251        nv = nv + 1 
    252        titvar(nv) = 'VOLS'  ! sea ice volume in the southern Hemisp.(10^3 km3) 
    253        nv = nv + 1 
    254        titvar(nv) = 'VONN'  ! snow volume over sea ice in the northern Hemisp.(10^3 km3) 
    255        nv = nv + 1 
    256        titvar(nv) = 'VONS'  ! snow volume over sea ice in the southern Hemisp.(10^3 km3) 
    257        nv = nv + 1 
    258        titvar(nv) = 'ECGN'  ! mean sea ice velocity in the northern Hemisp.(m/s) 
    259        nv = nv + 1 
    260        titvar(nv) = 'ECGS'  ! mean sea ice velocity in the southern Hemisp.(m/s) 
     210       nv = nv + 1   ;   titvar(nv) = 'AEFN' ! sea ice area in the northern Hemisp.(10^12 km2) 
     211       nv = nv + 1   ;   titvar(nv) = 'AEFS' ! sea ice area in the southern Hemisp.(10^12 km2) 
     212       nv = nv + 1   ;   titvar(nv) = 'A15N'  ! sea ice extent (15%) in the northern Hemisp.(10^12 km2) 
     213       nv = nv + 1   ;   titvar(nv) = 'A15S'  ! sea ice extent (15%) in the southern Hemisp.(10^12 km2) 
     214       nv = nv + 1   ;   titvar(nv) = 'A85N'  ! sea ice extent (85%) in the northern Hemisp.(10^12 km2) 
     215       nv = nv + 1   ;   titvar(nv) = 'A85S'  ! sea ice extent (85%) in the southern Hemisp.(10^12 km2) 
     216       nv = nv + 1   ;   titvar(nv) = 'ALEN'  ! leads area in the northern Hemisp.(10^12 km2) 
     217       nv = nv + 1   ;   titvar(nv) = 'ALES'  ! leads area in the southern Hemisp.(10^12 km2) 
     218       nv = nv + 1   ;   titvar(nv) = 'VOLN'  ! sea ice volume in the northern Hemisp.(10^3 km3) 
     219       nv = nv + 1   ;   titvar(nv) = 'VOLS'  ! sea ice volume in the southern Hemisp.(10^3 km3) 
     220       nv = nv + 1   ;   titvar(nv) = 'VONN'  ! snow volume over sea ice in the northern Hemisp.(10^3 km3) 
     221       nv = nv + 1   ;   titvar(nv) = 'VONS'  ! snow volume over sea ice in the southern Hemisp.(10^3 km3) 
     222       nv = nv + 1   ;   titvar(nv) = 'ECGN'  ! mean sea ice velocity in the northern Hemisp.(m/s) 
     223       nv = nv + 1   ;   titvar(nv) = 'ECGS'  ! mean sea ice velocity in the southern Hemisp.(m/s) 
    261224 
    262225       nvinfo = nv 
    263226 
    264227       ! Definition et Ecriture de l'entete : nombre d'enregistrements  
    265        ndeb   = ( nstart - 1 ) / ninfo 
    266        IF( nstart == 1 ) ndeb = -1 
    267  
    268        nferme = ( nstart - 1 + nitrun) / ninfo 
     228       ndeb   = ( nit000 - 1 + nfice - 1 ) / ninfo 
     229       IF( nit000 - 1 + nfice == 1 ) ndeb = -1 
     230 
     231       nferme = ( nitend + nfice - 1 ) / ninfo ! nit000 - 1 + nfice - 1 + nitend - nit000 + 1 
    269232       ntot   = nferme - ndeb 
    270233       ndeb   = ninfo * ( 1 + ndeb ) 
     
    288251 
    289252       !- ecriture de 2 lignes de titre : 
    290        WRITE(numevo_ice,'(A,I8,A,I8,A,I5)')                                      & 
     253       WRITE(numevo_ice,'(A,I8,A,I8,A,I5)')                 & 
    291254          'Evolution chronologique - Experience '//cexper   & 
    292255          //'   de', ndeb, ' a', nferme, ' pas', ninfo 
     
    3082711000   FORMAT( 3(A20),4(1x,I6) ) 
    3092721111   FORMAT( 3(F7.1,1X,F7.3,1X),I3,A )   
    310  
     273      ! 
    311274    END SUBROUTINE lim_dia_init 
    312275 
Note: See TracChangeset for help on using the changeset viewer.