- Timestamp:
- 2010-11-27T11:26:06+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/LIM_SRC_3/limdia.F90
r2313 r2439 2 2 !!====================================================================== 3 3 !! *** MODULE limdia *** 4 !! 4 !! LIM-3 sea ice model : diagnostics of ice model 5 5 !!====================================================================== 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 9 8 !!---------------------------------------------------------------------- 10 9 #if defined key_lim3 11 10 !!---------------------------------------------------------------------- 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 32 29 IMPLICIT NONE 33 30 PRIVATE 34 31 35 !! * Routine accessibility36 32 PUBLIC lim_dia ! called by ice_step 37 33 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 73 58 74 59 !! * Substitutions … … 77 62 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 78 63 !! $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 !!---------------------------------------------------------------------- 83 66 CONTAINS 84 67 … … 89 72 !! ** Purpose : Computation and outputs on file ice.evolu 90 73 !! 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 108 81 !!------------------------------------------------------------------- 109 82 110 83 ! 0) date from the minimum of ice extent 111 84 !--------------------------------------- 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) 118 90 ENDIF 119 91 120 92 IF( numit == nstart ) CALL lim_dia_init ! initialisation of ice_evolu file 121 93 122 ! temporal diagnostics 123 vinfor(1) = REAL(numit) 94 vinfor(1) = REAL(numit) ! time diagnostics 124 95 vinfor(2) = nyear 125 96 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 129 99 END DO 130 100 … … 137 107 DO ji = fs_2, fs_jpim1 ! vector opt. 138 108 IF( tms(ji,jj) == 1 ) THEN 139 vinfor(3) = vinfor(3) + at_i(ji,jj)*aire(ji,jj) / 1.0e12!ice area140 IF (at_i(ji,jj).GT.0.15) vinfor(5) = vinfor(5) + aire(ji,jj) / 1.0e12!ice extent141 vinfor(7) = vinfor(7) + vt_i(ji,jj)*aire(ji,jj) / 1.0e12!ice volume142 vinfor(9) = vinfor(9) + vt_s(ji,jj)*aire(ji,jj) / 1.0e12!snow volume143 vinfor(15) = vinfor(15) + ot_i(ji,jj) *vt_i(ji,jj)*aire(ji,jj) / 1.0e12!mean age144 vinfor(29) = vinfor(29) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12!mean salinity109 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 145 115 ! the computation of this diagnostic is not reliable 146 116 vinfor(31) = vinfor(31) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 147 117 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 flux149 vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) / 1.0e12!brine drainage flux150 vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) / 1.0e12!equivalent salt flux151 vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12!SST152 vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12!SSS153 vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12! snow temperature154 vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12! ice heat content155 vinfor(69) = vinfor(69) + v_i(ji,jj,1)*aire(ji,jj) / 1.0e12!ice volume156 vinfor(71) = vinfor(71) + v_i(ji,jj,2)*aire(ji,jj) / 1.0e12!ice volume157 vinfor(73) = vinfor(73) + v_i(ji,jj,3)*aire(ji,jj) / 1.0e12!ice volume158 vinfor(75) = vinfor(75) + v_i(ji,jj,4)*aire(ji,jj) / 1.0e12!ice volume159 vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12!ice volume118 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 160 130 vinfor(79) = 0.0 161 vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) / 1.0e12! mass flux131 vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 162 132 ENDIF 163 133 END DO … … 168 138 DO ji = fs_2, fs_jpim1 ! vector opt. 169 139 IF( tms(ji,jj) == 1 ) THEN 170 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12!undef def ice volume140 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 171 141 ENDIF 172 142 END DO … … 174 144 END DO 175 145 176 vinfor(13) = 0. 0146 vinfor(13) = 0._wp 177 147 178 148 vinfor(15) = vinfor(15) / MAX(vinfor(7),epsi06) ! these have to be divided by total ice volume to have the … … 198 168 DO ji = fs_2, fs_jpim1 ! vector opt. 199 169 IF( tms(ji,jj) == 1 ) THEN 200 vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12!ice volume201 vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12!ice volume170 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 202 172 ENDIF 203 173 END DO … … 208 178 DO ji = fs_2, fs_jpim1 ! vector opt. 209 179 IF( tms(ji,jj) == 1 ) THEN 210 vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12!th growth rates211 vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12212 vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12213 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12214 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12215 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12/ rdt_ice ! volume acc in OW180 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 216 186 ENDIF 217 187 END DO … … 222 192 DO ji = fs_2, fs_jpim1 ! vector opt. 223 193 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.0e12194 vinfor(63) = vinfor(63) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 225 195 ENDIF 226 196 END DO … … 238 208 DO jl = 1, jpl 239 209 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 area241 vinfor(25) = vinfor(25) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12! FY ice volume242 vinfor(49) = vinfor(49) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12!FY ice salinity210 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 243 213 zafy = zafy + a_i(ji,jj,jl) 244 214 ENDIF 245 215 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 area247 vinfor(27) = vinfor(27) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12! MY ice volume248 vinfor(51) = vinfor(51) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12!MY ice salinity216 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 249 219 zamy = zamy + a_i(ji,jj,jl) 250 220 ENDIF 251 221 END DO 252 222 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 extent223 vinfor(21) = vinfor(21) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 254 224 ENDIF 255 225 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 extent226 vinfor(23) = vinfor(23) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 257 227 ENDIF 258 228 ENDIF … … 274 244 DO ji = 134, 138 275 245 vinfor(83) = vinfor(83) - v_ice(ji,jj) * & 276 e1t(ji,jj)*at_i(ji,jj)*rdt_ice / 1.0e12246 e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12_wp 277 247 vinfor(84) = vinfor(84) - v_ice(ji,jj) * & 278 e1t(ji,jj)*vt_i(ji,jj)*rdt_ice / 1.0e12248 e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12_wp 279 249 END DO 280 250 … … 287 257 DO ji = fs_2, fs_jpim1 ! vector opt. 288 258 IF( tms(ji,jj) == 1 ) THEN 289 vinfor(4) = vinfor(4) + at_i(ji,jj)*aire(ji,jj) / 1.0e12!ice area290 IF (at_i(ji,jj).GT.0.15) vinfor(6) = vinfor(6) + aire(ji,jj) / 1.0e12!ice extent291 vinfor(8) = vinfor(8) + vt_i(ji,jj)*aire(ji,jj) / 1.0e12!ice volume292 vinfor(10) = vinfor(10) + vt_s(ji,jj)*aire(ji,jj) / 1.0e12!snow volume293 vinfor(16) = vinfor(16) + ot_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12!mean age294 vinfor(30) = vinfor(30) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) / 1.0e12!mean salinity259 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 295 265 ! this diagnostic is not well computed (weighted by vol instead 296 266 ! of area) 297 267 vinfor(32) = vinfor(32) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 298 268 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 flux300 vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) / 1.0e12! Brine drainage salt flux301 vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) / 1.0e12! Equivalent salt flux302 vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12!SST303 vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12!SSS304 vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12! snow temperature305 vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12! ice enthalpy306 vinfor(70) = vinfor(70) + v_i(ji,jj,1)*aire(ji,jj) / 1.0e12!ice volume307 vinfor(72) = vinfor(72) + v_i(ji,jj,2)*aire(ji,jj) / 1.0e12!ice volume308 vinfor(74) = vinfor(74) + v_i(ji,jj,3)*aire(ji,jj) / 1.0e12!ice volume309 vinfor(76) = vinfor(76) + v_i(ji,jj,4)*aire(ji,jj) / 1.0e12!ice volume310 vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12!ice volume269 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 311 281 vinfor(80) = 0.0 312 vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) / 1.0e12! mass flux282 vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 313 283 ENDIF 314 284 END DO … … 318 288 DO jj = 2, njeqm1 319 289 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 volume290 vinfor(12) = vinfor(12) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 321 291 END DO 322 292 END DO … … 349 319 DO ji = fs_2, fs_jpim1 ! vector opt. 350 320 IF( tms(ji,jj) == 1 ) THEN 351 vinfor(34) = vinfor(34) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12!ice volume352 vinfor(36) = vinfor(36) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12!ice volume321 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 353 323 ENDIF 354 324 END DO … … 359 329 DO ji = fs_2, fs_jpim1 ! vector opt. 360 330 IF( tms(ji,jj) == 1 ) THEN 361 vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12!th growth rates362 vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12363 vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12364 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12365 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12366 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12/ rdt_ice ! volume acc in OW331 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 367 337 ENDIF 368 338 END DO 369 339 END DO 370 371 340 372 341 DO jl = 1, jpl … … 374 343 DO ji = fs_2, fs_jpim1 ! vector opt. 375 344 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.0e12345 vinfor(64) = vinfor(64) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 377 346 ENDIF 378 347 END DO … … 386 355 DO ji = fs_2, fs_jpim1 ! vector opt. 387 356 IF( tms(ji,jj) == 1 ) THEN 388 zafy = 0. 0389 zamy = 0. 0357 zafy = 0._wp 358 zamy = 0._wp 390 359 DO jl = 1, jpl 391 IF ((o_i(ji,jj,jl) - zshift_date).LT.0.0) THEN392 vinfor(18) = vinfor(18) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12! FY ice area393 vinfor(26) = vinfor(26) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12! FY ice volume360 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 394 363 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 salinity364 vinfor(50) = vinfor(50) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 396 365 ENDIF 397 IF ((o_i(ji,jj,jl) - zshift_date).GT.0.0) THEN398 vinfor(20) = vinfor(20) + a_i(ji,jj,jl)*aire(ji,jj) / 1.0e12! MY ice area399 vinfor(28) = vinfor(28) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12400 vinfor(52) = vinfor(52) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12!FY ice salinity366 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 401 370 zamy = zamy + a_i(ji,jj,jl) 402 371 ENDIF 403 372 END DO ! jl 404 373 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 extent374 vinfor(22) = vinfor(22) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 406 375 ENDIF 407 376 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 extent377 vinfor(24) = vinfor(24) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 409 378 ENDIF 410 379 ENDIF ! tms … … 427 396 naveg = 0 428 397 DO jv = 1, nvinfo 429 vinfom(jv) =0.0398 vinfom(jv) = 0._wp 430 399 END DO 431 400 !MV ENDIF 432 401 ! 433 402 END SUBROUTINE lim_dia 403 434 404 435 405 SUBROUTINE lim_dia_init … … 441 411 !! 442 412 !! ** 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 457 417 CHARACTER(len=jpchinf) :: titinf 458 418 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 466 427 WRITE(numout,*) 467 428 WRITE(numout,*) 'lim_dia_init : ice parameters for ice diagnostics ' … … 473 434 ENDIF 474 435 475 ! masked grid cell area 476 aire(:,:) = area(:,:) * tms(:,:) 436 aire(:,:) = area(:,:) * tms(:,:) * tmask_i(:,:) ! masked grid cell area (interior domain only) 477 437 478 438 ! Titles of ice key variables : … … 580 540 581 541 ! 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' 586 544 END IF 587 545 irecl = ( jpchinf + 1 ) * nvinfo 588 546 CALL ctl_opn( numevo_ice, clname, 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', & 589 & irecl, numout, .TRUE., narea )547 & irecl, numout, lwp, narea ) 590 548 591 549 !- ecriture de 2 lignes d''entete : … … 596 554 597 555 !- 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)') & 599 557 'Evolution chronologique - Experience '//cexper & 600 558 //' de', ndeb, ' a', nferme, ' pas', ninfo 601 559 WRITE(numevo_ice,fmtitr) ( titvar(jv), jv = 1, nvinfo ) 602 560 603 604 561 !--preparation de "titvar" pour l''ecriture parmi les valeurs numeriques : 605 DO 562 DO jv = 2 , nvinfo 606 563 titinf = titvar(jv)(:jpchinf) 607 564 titvar(jv) = ' '//titinf … … 609 566 610 567 !--Initialisation of the arrays for the accumulation 611 DO 612 vinfom(jv) = 0. 568 DO jv = 1, nvinfo 569 vinfom(jv) = 0._wp 613 570 END DO 614 571 naveg = 0 … … 616 573 1000 FORMAT( 3(A20),4(1x,I6) ) 617 574 1111 FORMAT( 3(F7.1,1X,F7.3,1X),I3,A ) 618 575 ! 619 576 END SUBROUTINE lim_dia_init 620 577 621 578 #else 622 579 !!---------------------------------------------------------------------- 623 !! Default option : NO LIMsea-ice model580 !! Default option : NO LIM-3 sea-ice model 624 581 !!---------------------------------------------------------------------- 625 582 CONTAINS
Note: See TracChangeset
for help on using the changeset viewer.