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 2439 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/LIM_SRC_3/limdia.F90 – NEMO

Ignore:
Timestamp:
2010-11-27T11:26:06+01:00 (13 years ago)
Author:
gm
Message:

v3.3beta: #741 correct 2 small bugs in ice.evolu diag calculation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/LIM_SRC_3/limdia.F90

    r2313 r2439  
    22   !!====================================================================== 
    33   !!                       ***  MODULE limdia   *** 
    4    !!                      diagnostics of ice model  
     4   !!  LIM-3 sea ice model :   diagnostics of ice model  
    55   !!====================================================================== 
    6    !! To add a new field 
    7    !! 1) in lim_dia : add its definition for both hemispheres if wished 
    8    !! 2) add the new titles in lim_dia_init 
     6   !! History :  3.2  ! 2007-01  (M. Vancoppenolle)  Code adapted from LIM-2 
     7   !!             -   ! 2008-03  (M. Vancoppenolle)  add lim_dia_init 
    98   !!---------------------------------------------------------------------- 
    109#if defined key_lim3 
    1110   !!---------------------------------------------------------------------- 
    12    !!   'key_lim3' :                                   LIM3 sea-ice model 
    13    !!---------------------------------------------------------------------- 
    14    !!   lim_dia      : computation of the time evolution of keys var. 
    15    !!   lim_dia_init : initialization and namelist read 
    16    !!---------------------------------------------------------------------- 
    17    !! * Modules used 
    18    USE phycst 
    19    USE in_out_manager 
    20    USE par_ice         ! ice parameters 
    21    USE sbc_ice         ! ice variables 
    22    USE daymod 
    23    USE dom_ice 
    24    USE ice 
    25    USE iceini 
    26    USE limistate 
    27    USE dom_oce 
    28    USE sbc_oce         ! Surface boundary condition: ocean fields 
    29    USE dom_oce 
    30    USE lib_mpp 
    31  
     11   !!   'key_lim3'                                       LIM3 sea-ice model 
     12   !!---------------------------------------------------------------------- 
     13   !!   lim_dia        : computation and output of the time evolution of keys variables 
     14   !!   lim_dia_init   : initialization and namelist read 
     15   !!---------------------------------------------------------------------- 
     16   USE ice             ! LIM-3: sea-ice variable 
     17   USE par_ice         ! LIM-3: ice parameters 
     18!   USE ice_oce         ! LIM-3: ice-ocean share variables 
     19   USE iceini          ! LIM-3: sea-ice initialization 
     20   USE limistate       ! LIM-3: sea-ice initial state 
     21   USE dom_ice         ! LIM-3: sea-ice domain 
     22   USE dom_oce         ! ocean domain 
     23   USE sbc_oce         ! surface boundary condition: ocean fields 
     24   USE daymod          ! model calendar 
     25   USE phycst          ! physical constant 
     26   USE in_out_manager  ! I/O manager 
     27   USE lib_mpp         ! MPP library 
     28    
    3229   IMPLICIT NONE 
    3330   PRIVATE 
    3431 
    35    !! * Routine accessibility 
    3632   PUBLIC lim_dia       ! called by ice_step 
    3733 
    38    !! * Shared module variables 
    39    INTEGER, PUBLIC  ::  & 
    40       ntmoy   = 1 ,     &  !: instantaneous values of ice evolution or averaging ntmoy 
    41       ninfo   = 1          !: frequency of ouputs on file ice_evolu in case of averaging 
    42  
    43    !! * Module variables 
    44    INTEGER, PARAMETER ::   &  ! Parameters for outputs to files "evolu" 
    45       jpinfmx = 100         ,    &  ! maximum number of key variables 
    46       jpchinf = 5           ,    &  ! ??? 
    47       jpchsep = jpchinf + 2         ! ??? 
    48  
    49    INTEGER          ::  & 
    50       nfrinf  = 4    ,  &  ! number of variables written in one line  
    51       nferme ,          &  ! last time step at which the var. are written on file 
    52       nvinfo ,          &  ! number of total variables  
    53       nbvt   ,          &  ! number of time variables 
    54       naveg                ! number of step for accumulation before averaging 
    55  
    56    CHARACTER(len=8) ::  & 
    57       fmtinf  = '1PE13.5 ' ! format of the output values   
    58  
    59    CHARACTER(len=30) :: & 
    60       fmtw  ,           &  ! formats 
    61       fmtr  ,           &  ! ??? 
    62       fmtitr               ! ??? 
    63  
    64    CHARACTER(len=jpchsep), DIMENSION(jpinfmx) ::   & 
    65       titvar               ! title of key variables 
    66  
    67    REAL(wp), DIMENSION(jpinfmx) ::  & 
    68       vinfom               ! temporary working space 
    69    REAL(wp) :: & 
    70       epsi06 = 1.e-06 
    71    REAL(wp), DIMENSION(jpi,jpj) ::   & 
    72       aire                 ! masked grid cell area 
     34   INTEGER, PUBLIC  ::   ntmoy   = 1   !: instantaneous values of ice evolution or averaging ntmoy 
     35   INTEGER, PUBLIC  ::   ninfo   = 1   !: frequency of ouputs on file ice_evolu in case of averaging 
     36 
     37   !                                              !!! Parameters for outputs to files "evolu" 
     38   INTEGER, PARAMETER ::   jpinfmx = 100           ! maximum number of key variables 
     39   INTEGER, PARAMETER ::   jpchinf = 5             ! ??? 
     40   INTEGER, PARAMETER ::   jpchsep = jpchinf + 2   ! ??? 
     41 
     42   INTEGER  ::   nfrinf  = 4         ! number of variables written in one line  
     43   INTEGER  ::   nferme              ! last time step at which the var. are written on file 
     44   INTEGER  ::   nvinfo              ! number of total variables  
     45   INTEGER  ::   nbvt                ! number of time variables 
     46   INTEGER  ::   naveg               ! number of step for accumulation before averaging 
     47   REAL(wp) ::   epsi06 = 1.e-6_wp   ! small number 
     48 
     49   CHARACTER(len= 8) ::   fmtinf = '1PE13.5 '   ! format of the output values   
     50   CHARACTER(len=30) ::   fmtw                  ! formats 
     51   CHARACTER(len=30) ::   fmtr                  ! ??? 
     52   CHARACTER(len=30) ::   fmtitr                ! ??? 
     53 
     54   CHARACTER(len=jpchsep), DIMENSION(jpinfmx) ::   titvar   ! title of key variables 
     55 
     56   REAL(wp), DIMENSION(jpinfmx) ::   vinfom     ! temporary working space 
     57   REAL(wp), DIMENSION(jpi,jpj) ::   aire       ! masked grid cell area 
    7358 
    7459   !! * Substitutions 
     
    7762   !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 
    7863   !! $Id$ 
    79    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    80    !!---------------------------------------------------------------------- 
    81  
    82  
     64   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     65   !!---------------------------------------------------------------------- 
    8366CONTAINS 
    8467 
     
    8972      !! ** Purpose : Computation and outputs on file ice.evolu  
    9073      !!      the temporal evolution of some key variables 
    91       !! 
    92       !! History : 
    93       !!   8.0  !  97-06  (Louvain-La-Neuve)  Original code 
    94       !!   8.5  !  02-09  (C. Ethe , G. Madec )  F90: Free form and module 
    95       !!   9.0  !  05-06  (M. Vancoppenolle LLN) Rehabilitation and fixing a few bugs 
    96       !!           01-07  (M. Vancoppenolle LLN) added new fields + fram strait 
    97       !!                                         export 
    98       !!------------------------------------------------------------------- 
    99       !! * Local variables 
    100       INTEGER  ::   jv,ji,jj,jl ! dummy loop indices 
    101       REAL(wp), DIMENSION(jpinfmx) ::  &  
    102          vinfor           ! temporary working space  
    103       REAL(wp) ::    & 
    104          zshift_date   , & ! date from the minimum ice extent 
    105          zday, zday_min, & ! current day, day of minimum extent 
    106          zafy, zamy,     & ! temporary area of fy and my ice 
    107          zindb 
     74      !!------------------------------------------------------------------- 
     75      INTEGER  ::   jv, ji, jj, jl   ! dummy loop indices 
     76      REAL(wp) ::   zshift_date      ! date from the minimum ice extent 
     77      REAL(wp) ::   zday, zday_min   ! current day, day of minimum extent 
     78      REAL(wp) ::   zafy, zamy       ! temporary area of fy and my ice 
     79      REAL(wp) ::   zindb 
     80      REAL(wp), DIMENSION(jpinfmx) ::   vinfor           ! temporary working space  
    10881      !!------------------------------------------------------------------- 
    10982 
    11083      ! 0) date from the minimum of ice extent 
    11184      !--------------------------------------- 
    112       zday_min = 273.0        ! zday_min = date of minimum extent, here September 30th 
    113       zday = FLOAT(numit-nit000) * rdt_ice / ( 86400.0 * FLOAT(nn_fsbc) ) 
    114       IF (zday.GT.zday_min) THEN  
    115          zshift_date  =  zday - zday_min 
    116       ELSE 
    117          zshift_date  =  zday - (365.0 - zday_min) 
     85      zday_min = 273._wp        ! zday_min = date of minimum extent, here September 30th 
     86      zday = REAL(numit-nit000,wp) * rdt_ice / ( 86400._wp * REAL(nn_fsbc,wp) ) 
     87      ! 
     88      IF( zday > zday_min ) THEN   ;   zshift_date  =  zday - zday_min 
     89      ELSE                         ;   zshift_date  =  zday - (365.0 - zday_min) 
    11890      ENDIF 
    11991 
    12092      IF( numit == nstart )   CALL lim_dia_init   ! initialisation of ice_evolu file       
    12193 
    122       ! temporal diagnostics  
    123       vinfor(1) = REAL(numit) 
     94      vinfor(1) = REAL(numit)       ! time diagnostics  
    12495      vinfor(2) = nyear 
    12596 
    126       ! put everything to zero 
    127       DO jv = nbvt + 1, nvinfo 
    128          vinfor(jv) = 0.0 
     97      DO jv = nbvt + 1, nvinfo      ! put everything to zero 
     98         vinfor(jv) = 0._wp 
    12999      END DO 
    130100 
     
    137107         DO ji = fs_2, fs_jpim1   ! vector opt. 
    138108            IF( tms(ji,jj) == 1 ) THEN 
    139                vinfor(3)  = vinfor(3)  + at_i(ji,jj)*aire(ji,jj) / 1.0e12 !ice area 
    140                IF (at_i(ji,jj).GT.0.15) vinfor(5) = vinfor(5) + aire(ji,jj) / 1.0e12 !ice extent 
    141                vinfor(7)  = vinfor(7)  + vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !ice volume 
    142                vinfor(9)  = vinfor(9)  + vt_s(ji,jj)*aire(ji,jj) / 1.0e12 !snow volume 
    143                vinfor(15) = vinfor(15) + ot_i(ji,jj) *vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !mean age 
    144                vinfor(29) = vinfor(29) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !mean salinity 
     109               vinfor(3)  = vinfor(3)  + at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice area 
     110               IF (at_i(ji,jj).GT.0.15) vinfor(5) = vinfor(5) + aire(ji,jj) * 1.e-12_wp !ice extent 
     111               vinfor(7)  = vinfor(7)  + vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice volume 
     112               vinfor(9)  = vinfor(9)  + vt_s(ji,jj)*aire(ji,jj) * 1.e-12_wp !snow volume 
     113               vinfor(15) = vinfor(15) + ot_i(ji,jj) *vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean age 
     114               vinfor(29) = vinfor(29) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean salinity 
    145115               ! the computation of this diagnostic is not reliable 
    146116               vinfor(31) = vinfor(31) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + &  
    147117                  v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12  
    148                vinfor(53) = vinfor(53) + emps(ji,jj)*aire(ji,jj) / 1.0e12 !salt flux 
    149                vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) / 1.0e12 !brine drainage flux 
    150                vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) / 1.0e12 !equivalent salt flux 
    151                vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12  !SST 
    152                vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12  !SSS 
    153                vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12  ! snow temperature 
    154                vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12       ! ice heat content 
    155                vinfor(69) = vinfor(69) + v_i(ji,jj,1)*aire(ji,jj) / 1.0e12 !ice volume 
    156                vinfor(71) = vinfor(71) + v_i(ji,jj,2)*aire(ji,jj) / 1.0e12 !ice volume 
    157                vinfor(73) = vinfor(73) + v_i(ji,jj,3)*aire(ji,jj) / 1.0e12 !ice volume 
    158                vinfor(75) = vinfor(75) + v_i(ji,jj,4)*aire(ji,jj) / 1.0e12 !ice volume 
    159                vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12 !ice volume 
     118               vinfor(53) = vinfor(53) + emps(ji,jj)*aire(ji,jj) * 1.e-12_wp !salt flux 
     119               vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) * 1.e-12_wp !brine drainage flux 
     120               vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) * 1.e-12_wp !equivalent salt flux 
     121               vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp  !SST 
     122               vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp  !SSS 
     123               vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp  ! snow temperature 
     124               vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp       ! ice heat content 
     125               vinfor(69) = vinfor(69) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12_wp !ice volume 
     126               vinfor(71) = vinfor(71) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12_wp !ice volume 
     127               vinfor(73) = vinfor(73) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12_wp !ice volume 
     128               vinfor(75) = vinfor(75) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12_wp !ice volume 
     129               vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12_wp !ice volume 
    160130               vinfor(79) = 0.0 
    161                vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux 
     131               vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 
    162132            ENDIF 
    163133         END DO 
     
    168138            DO ji = fs_2, fs_jpim1   ! vector opt. 
    169139               IF( tms(ji,jj) == 1 ) THEN 
    170                   vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !undef def ice volume 
     140                  vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 
    171141               ENDIF 
    172142            END DO 
     
    174144      END DO 
    175145 
    176       vinfor(13) = 0.0 
     146      vinfor(13) = 0._wp 
    177147 
    178148      vinfor(15) = vinfor(15) / MAX(vinfor(7),epsi06) ! these have to be divided by total ice volume to have the 
     
    198168            DO ji = fs_2, fs_jpim1   ! vector opt. 
    199169               IF( tms(ji,jj) == 1 ) THEN 
    200                   vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 
    201                   vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 
     170                  vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 
     171                  vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 
    202172               ENDIF 
    203173            END DO 
     
    208178         DO ji = fs_2, fs_jpim1   ! vector opt. 
    209179            IF( tms(ji,jj) == 1 ) THEN 
    210                vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 
    211                vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12  
    212                vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 
    213                vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12  
    214                vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 
    215                vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 
     180               vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp !th growth rates 
     181               vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp  
     182               vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 
     183               vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp  
     184               vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 
     185               vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice ! volume acc in OW 
    216186            ENDIF 
    217187         END DO 
     
    222192            DO ji = fs_2, fs_jpim1   ! vector opt. 
    223193               IF( tms(ji,jj) == 1 ) THEN 
    224                   vinfor(63) = vinfor(63) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 
     194                  vinfor(63) = vinfor(63) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 
    225195               ENDIF 
    226196            END DO 
     
    238208               DO jl = 1, jpl 
    239209                  IF ((o_i(ji,jj,jl) - zshift_date).LT.0.0) THEN 
    240                      vinfor(17) = vinfor(17) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 ! FY ice area 
    241                      vinfor(25) = vinfor(25) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 ! FY ice volume 
    242                      vinfor(49) = vinfor(49) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !FY ice salinity 
     210                     vinfor(17) = vinfor(17) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice area 
     211                     vinfor(25) = vinfor(25) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice volume 
     212                     vinfor(49) = vinfor(49) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 
    243213                     zafy = zafy + a_i(ji,jj,jl) 
    244214                  ENDIF 
    245215                  IF ((o_i(ji,jj,jl) - zshift_date).GT.0.0) THEN 
    246                      vinfor(19) = vinfor(19) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12    ! MY ice area 
    247                      vinfor(27) = vinfor(27) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 ! MY ice volume 
    248                      vinfor(51) = vinfor(51) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !MY ice salinity 
     216                     vinfor(19) = vinfor(19) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp    ! MY ice area 
     217                     vinfor(27) = vinfor(27) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! MY ice volume 
     218                     vinfor(51) = vinfor(51) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !MY ice salinity 
    249219                     zamy = zamy + a_i(ji,jj,jl) 
    250220                  ENDIF 
    251221               END DO 
    252222               IF ((at_i(ji,jj).GT.0.15).AND.(zafy.GT.zamy)) THEN 
    253                   vinfor(21) = vinfor(21) + aire(ji,jj) / 1.0e12 ! Seasonal ice extent 
     223                  vinfor(21) = vinfor(21) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 
    254224               ENDIF 
    255225               IF ((at_i(ji,jj).GT.0.15).AND.(zafy.LE.zamy)) THEN 
    256                   vinfor(23) = vinfor(23) + aire(ji,jj) / 1.0e12 ! Perennial ice extent 
     226                  vinfor(23) = vinfor(23) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 
    257227               ENDIF 
    258228            ENDIF 
     
    274244      DO ji = 134, 138 
    275245         vinfor(83) = vinfor(83) - v_ice(ji,jj) * &  
    276             e1t(ji,jj)*at_i(ji,jj)*rdt_ice / 1.0e12 
     246            e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12_wp 
    277247         vinfor(84) = vinfor(84) - v_ice(ji,jj) * &  
    278             e1t(ji,jj)*vt_i(ji,jj)*rdt_ice / 1.0e12 
     248            e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12_wp 
    279249      END DO 
    280250 
     
    287257         DO ji = fs_2, fs_jpim1   ! vector opt. 
    288258            IF( tms(ji,jj) == 1 ) THEN 
    289                vinfor(4)  = vinfor(4)  + at_i(ji,jj)*aire(ji,jj) / 1.0e12 !ice area 
    290                IF (at_i(ji,jj).GT.0.15) vinfor(6) = vinfor(6) + aire(ji,jj) / 1.0e12 !ice extent 
    291                vinfor(8)  = vinfor(8)  + vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !ice volume 
    292                vinfor(10) = vinfor(10) + vt_s(ji,jj)*aire(ji,jj) / 1.0e12 !snow volume 
    293                vinfor(16) = vinfor(16) + ot_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !mean age 
    294                vinfor(30) = vinfor(30) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12 !mean salinity 
     259               vinfor(4)  = vinfor(4)  + at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice area 
     260               IF (at_i(ji,jj).GT.0.15) vinfor(6) = vinfor(6) + aire(ji,jj) * 1.e-12_wp !ice extent 
     261               vinfor(8)  = vinfor(8)  + vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice volume 
     262               vinfor(10) = vinfor(10) + vt_s(ji,jj)*aire(ji,jj) * 1.e-12_wp !snow volume 
     263               vinfor(16) = vinfor(16) + ot_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean age 
     264               vinfor(30) = vinfor(30) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean salinity 
    295265               ! this diagnostic is not well computed (weighted by vol instead 
    296266               ! of area) 
    297267               vinfor(32) = vinfor(32) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + &  
    298268                  v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12 !ice vel 
    299                vinfor(54) = vinfor(54) + at_i(ji,jj)*emps(ji,jj)*aire(ji,jj) / 1.0e12 ! Total salt flux 
    300                vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) / 1.0e12 ! Brine drainage salt flux 
    301                vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) / 1.0e12 ! Equivalent salt flux 
    302                vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12  !SST 
    303                vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12  !SSS 
    304                vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! snow temperature 
    305                vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! ice enthalpy 
    306                vinfor(70) = vinfor(70) + v_i(ji,jj,1)*aire(ji,jj) / 1.0e12 !ice volume 
    307                vinfor(72) = vinfor(72) + v_i(ji,jj,2)*aire(ji,jj) / 1.0e12 !ice volume 
    308                vinfor(74) = vinfor(74) + v_i(ji,jj,3)*aire(ji,jj) / 1.0e12 !ice volume 
    309                vinfor(76) = vinfor(76) + v_i(ji,jj,4)*aire(ji,jj) / 1.0e12 !ice volume 
    310                vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12 !ice volume 
     269               vinfor(54) = vinfor(54) + at_i(ji,jj)*emps(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Total salt flux 
     270               vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Brine drainage salt flux 
     271               vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Equivalent salt flux 
     272               vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp  !SST 
     273               vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp  !SSS 
     274               vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! snow temperature 
     275               vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! ice enthalpy 
     276               vinfor(70) = vinfor(70) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12_wp !ice volume 
     277               vinfor(72) = vinfor(72) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12_wp !ice volume 
     278               vinfor(74) = vinfor(74) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12_wp !ice volume 
     279               vinfor(76) = vinfor(76) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12_wp !ice volume 
     280               vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12_wp !ice volume 
    311281               vinfor(80) = 0.0 
    312                vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux 
     282               vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 
    313283            ENDIF 
    314284         END DO 
     
    318288         DO jj = 2, njeqm1 
    319289            DO ji = fs_2, fs_jpim1   ! vector opt. 
    320                vinfor(12) = vinfor(12) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !undef def ice volume 
     290               vinfor(12) = vinfor(12) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 
    321291            END DO 
    322292         END DO 
     
    349319            DO ji = fs_2, fs_jpim1   ! vector opt. 
    350320               IF( tms(ji,jj) == 1 ) THEN 
    351                   vinfor(34) = vinfor(34) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 
    352                   vinfor(36) = vinfor(36) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 
     321                  vinfor(34) = vinfor(34) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 
     322                  vinfor(36) = vinfor(36) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 
    353323               ENDIF 
    354324            END DO 
     
    359329         DO ji = fs_2, fs_jpim1   ! vector opt. 
    360330            IF( tms(ji,jj) == 1 ) THEN 
    361                vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 
    362                vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12  
    363                vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 
    364                vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12  
    365                vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 
    366                vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 
     331               vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp !th growth rates 
     332               vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp  
     333               vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 
     334               vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp  
     335               vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 
     336               vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice ! volume acc in OW 
    367337            ENDIF 
    368338         END DO 
    369339      END DO 
    370  
    371340 
    372341      DO jl = 1, jpl 
     
    374343            DO ji = fs_2, fs_jpim1   ! vector opt. 
    375344               IF( tms(ji,jj) == 1 ) THEN 
    376                   vinfor(64) = vinfor(64) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 
     345                  vinfor(64) = vinfor(64) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 
    377346               ENDIF 
    378347            END DO 
     
    386355         DO ji = fs_2, fs_jpim1   ! vector opt. 
    387356            IF( tms(ji,jj) == 1 ) THEN 
    388                zafy = 0.0 
    389                zamy = 0.0 
     357               zafy = 0._wp 
     358               zamy = 0._wp 
    390359               DO jl = 1, jpl 
    391                   IF ((o_i(ji,jj,jl) - zshift_date).LT.0.0) THEN 
    392                      vinfor(18) = vinfor(18) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 ! FY ice area 
    393                      vinfor(26) = vinfor(26) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 ! FY ice volume 
     360                  IF( (o_i(ji,jj,jl) - zshift_date) < 0._wp ) THEN 
     361                     vinfor(18) = vinfor(18) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice area 
     362                     vinfor(26) = vinfor(26) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice volume 
    394363                     zafy = zafy + a_i(ji,jj,jl) 
    395                      vinfor(50) = vinfor(50) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !FY ice salinity 
     364                     vinfor(50) = vinfor(50) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 
    396365                  ENDIF 
    397                   IF ((o_i(ji,jj,jl) - zshift_date).GT.0.0) THEN 
    398                      vinfor(20) = vinfor(20) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12    ! MY ice area 
    399                      vinfor(28) = vinfor(28) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 
    400                      vinfor(52) = vinfor(52) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !FY ice salinity 
     366                  IF( (o_i(ji,jj,jl) - zshift_date) > 0._wp ) THEN 
     367                     vinfor(20) = vinfor(20) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp    ! MY ice area 
     368                     vinfor(28) = vinfor(28) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 
     369                     vinfor(52) = vinfor(52) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 
    401370                     zamy = zamy + a_i(ji,jj,jl) 
    402371                  ENDIF 
    403372               END DO ! jl 
    404373               IF ((at_i(ji,jj).GT.0.15).AND.(zafy.GT.zamy)) THEN 
    405                   vinfor(22) = vinfor(22) + aire(ji,jj) / 1.0e12 ! Seasonal ice extent 
     374                  vinfor(22) = vinfor(22) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 
    406375               ENDIF 
    407376               IF ((at_i(ji,jj).GT.0.15).AND.(zafy.LE.zamy)) THEN 
    408                   vinfor(24) = vinfor(24) + aire(ji,jj) / 1.0e12 ! Perennial ice extent 
     377                  vinfor(24) = vinfor(24) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 
    409378               ENDIF 
    410379            ENDIF ! tms 
     
    427396      naveg = 0 
    428397      DO jv = 1, nvinfo 
    429          vinfom(jv)=0.0 
     398         vinfom(jv) = 0._wp 
    430399      END DO 
    431400      !MV      ENDIF 
    432  
     401      ! 
    433402   END SUBROUTINE lim_dia 
     403 
    434404 
    435405   SUBROUTINE lim_dia_init 
     
    441411      !! 
    442412      !! ** input   : Namelist namicedia 
    443       !! 
    444       !! history : 
    445       !!  8.5  ! 03-08 (C. Ethe) original code 
    446       !!  9.0  ! 08-03 (M. Vancoppenolle) LIM3 
    447       !!------------------------------------------------------------------- 
    448       NAMELIST/namicedia/fmtinf, nfrinf, ninfo, ntmoy 
    449  
    450       INTEGER  ::   jv   ,     &  ! dummy loop indice 
    451          &          ntot ,     & 
    452          &          ndeb ,     & 
    453          &          irecl 
    454  
    455       REAL(wp) ::   zxx0, zxx1    ! temporary scalars 
    456  
     413      !!------------------------------------------------------------------- 
     414      INTEGER  ::   jv    ! dummy loop indice 
     415      INTEGER  ::   ntot , ndeb , irecl   ! local integers 
     416      REAL(wp) ::   zxx0, zxx1    ! local scalars 
    457417      CHARACTER(len=jpchinf) ::   titinf 
    458418      CHARACTER(len=50)      ::   clname 
    459       !!------------------------------------------------------------------- 
    460  
    461  
    462       ! Read Namelist namicedia 
    463       REWIND ( numnam_ice ) 
    464       READ   ( numnam_ice  , namicedia ) 
    465       IF(lwp) THEN 
     419      !! 
     420      NAMELIST/namicedia/fmtinf, nfrinf, ninfo, ntmoy 
     421      !!------------------------------------------------------------------- 
     422      ! 
     423      REWIND( numnam_ice )             ! read namicedia namelist 
     424      READ  ( numnam_ice, namicedia ) 
     425      ! 
     426      IF(lwp) THEN                     ! control print 
    466427         WRITE(numout,*) 
    467428         WRITE(numout,*) 'lim_dia_init : ice parameters for ice diagnostics ' 
     
    473434      ENDIF 
    474435 
    475       ! masked grid cell area 
    476       aire(:,:) = area(:,:) * tms(:,:) 
     436      aire(:,:) = area(:,:) * tms(:,:) * tmask_i(:,:)      ! masked grid cell area (interior domain only) 
    477437 
    478438      ! Titles of ice key variables : 
     
    580540 
    581541      ! opening  "ice_evolu" file 
    582       IF ( lk_mpp ) THEN 
    583          WRITE(clname,FMT="('ice.evolu_',I4.4)") narea-1 
    584       ELSE 
    585          clname = 'ice.evolu' 
     542      IF( lk_mpp ) THEN   ;   WRITE(clname,FMT="('ice.evolu_',I4.4)") narea-1 
     543      ELSE                ;   clname = 'ice.evolu' 
    586544      END IF 
    587545      irecl = ( jpchinf + 1 ) * nvinfo  
    588546      CALL ctl_opn( numevo_ice, clname, 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL',    & 
    589          &         irecl, numout, .TRUE., narea ) 
     547         &         irecl, numout, lwp, narea ) 
    590548 
    591549      !- ecriture de 2 lignes d''entete : 
     
    596554 
    597555      !- ecriture de 2 lignes de titre : 
    598       WRITE(numevo_ice,'(A,I8,A,I8,A,I5)')                                      & 
     556      WRITE(numevo_ice,'(A,I8,A,I8,A,I5)')                 & 
    599557         'Evolution chronologique - Experience '//cexper   & 
    600558         //'   de', ndeb, ' a', nferme, ' pas', ninfo 
    601559      WRITE(numevo_ice,fmtitr) ( titvar(jv), jv = 1, nvinfo ) 
    602560 
    603  
    604561      !--preparation de "titvar" pour l''ecriture parmi les valeurs numeriques : 
    605       DO  jv = 2 , nvinfo 
     562      DO jv = 2 , nvinfo 
    606563         titinf     = titvar(jv)(:jpchinf) 
    607564         titvar(jv) = '  '//titinf 
     
    609566 
    610567      !--Initialisation of the arrays for the accumulation 
    611       DO  jv = 1, nvinfo 
    612          vinfom(jv) = 0. 
     568      DO jv = 1, nvinfo 
     569         vinfom(jv) = 0._wp 
    613570      END DO 
    614571      naveg = 0 
     
    6165731000  FORMAT( 3(A20),4(1x,I6) ) 
    6175741111  FORMAT( 3(F7.1,1X,F7.3,1X),I3,A )   
    618  
     575      ! 
    619576   END SUBROUTINE lim_dia_init 
    620577 
    621578#else 
    622579   !!---------------------------------------------------------------------- 
    623    !!   Default option :                               NO LIM sea-ice model 
     580   !!   Default option :                             NO LIM-3 sea-ice model 
    624581   !!---------------------------------------------------------------------- 
    625582CONTAINS 
Note: See TracChangeset for help on using the changeset viewer.