Changeset 508 for trunk/NEMO/LIM_SRC/limdia.F90
- Timestamp:
- 2006-10-03T17:58:55+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC/limdia.F90
r247 r508 4 4 !! diagnostics of ice model 5 5 !!====================================================================== 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 !!------------------------------------------------------------------- 6 10 #if defined key_ice_lim 7 11 !!---------------------------------------------------------------------- 8 12 !! 'key_ice_lim' : LIM sea-ice model 13 !!---------------------------------------------------------------------- 9 14 !!---------------------------------------------------------------------- 10 15 !! lim_dia : computation of the time evolution of keys var. 11 16 !! lim_dia_init : initialization and namelist read 12 17 !!---------------------------------------------------------------------- 13 !! * Modules used14 18 USE phycst ! 15 19 USE par_ice ! ice parameters … … 18 22 USE dom_ice ! 19 23 USE ice ! 20 USE iceini !21 24 USE limistate ! 22 25 USE in_out_manager ! I/O manager … … 25 28 PRIVATE 26 29 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 36 34 INTEGER, PARAMETER :: & ! Parameters for outputs to files "evolu" 37 35 jpinfmx = 100 , & ! maximum number of key variables … … 46 44 naveg ! number of step for accumulation before averaging 47 45 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 56 51 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 63 55 64 56 !! * Substitutions … … 67 59 !! LIM 2.0, UCL-LOCEAN-IPSL (2005) 68 60 !! $Header$ 69 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt61 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 70 62 !!---------------------------------------------------------------------- 71 63 72 64 CONTAINS 73 65 74 SUBROUTINE lim_dia 66 SUBROUTINE lim_dia( kt ) 75 67 !!-------------------------------------------------------------------- 76 68 !! *** ROUTINE lim_dia *** … … 78 70 !! ** Purpose : Computation and outputs on file ice.evolu 79 71 !! the temporal evolution of some key variables 72 !!------------------------------------------------------------------- 73 INTEGER, INTENT(in) :: kt ! number of iteration 80 74 !! 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 84 82 !!------------------------------------------------------------------- 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 108 92 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 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 ) ) 138 122 139 123 … … 170 154 171 155 ! oututs on file ice_evolu 172 IF( MOD( numit, ninfo ) == 0 ) THEN156 IF( MOD( kt + nfice - 1, ninfo ) == 0 ) THEN 173 157 WRITE(numevo_ice,fmtw) ( titvar(jv), vinfom(jv)/naveg, jv = 1, nvinfo ) 174 158 naveg = 0 … … 177 161 END DO 178 162 ENDIF 179 163 ! 180 164 END SUBROUTINE lim_dia 181 165 … … 189 173 !! 190 174 !! ** input : Namelist namicedia 191 !!192 !! history :193 !! 8.5 ! 03-08 (C. Ethe) original code194 175 !!------------------------------------------------------------------- 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 195 182 NAMELIST/namicedia/fmtinf, nfrinf, ninfo, ntmoy 196 197 INTEGER :: jv , & ! dummy loop indice198 & ntot , &199 & ndeb , &200 & irecl201 202 INTEGER :: nv ! indice of variable203 204 REAL(wp) :: zxx0, zxx1 ! temporary scalars205 206 CHARACTER(len=jpchinf) :: titinf207 183 !!------------------------------------------------------------------- 208 184 … … 210 186 REWIND ( numnam_ice ) 211 187 READ ( numnam_ice , namicedia ) 188 212 189 IF(lwp) THEN 213 190 WRITE(numout,*) … … 228 205 nv = nv + 1 229 206 titvar(nv) = 'T yr' ! time step in years 230 nv = nv + 1 231 207 232 208 nbvt = nv - 1 233 209 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) 261 224 262 225 nvinfo = nv 263 226 264 227 ! Definition et Ecriture de l'entete : nombre d'enregistrements 265 ndeb = ( n start- 1 ) / ninfo266 IF( n start== 1 ) ndeb = -1267 268 nferme = ( n start - 1 + nitrun) / ninfo228 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 269 232 ntot = nferme - ndeb 270 233 ndeb = ninfo * ( 1 + ndeb ) … … 288 251 289 252 !- 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)') & 291 254 'Evolution chronologique - Experience '//cexper & 292 255 //' de', ndeb, ' a', nferme, ' pas', ninfo … … 308 271 1000 FORMAT( 3(A20),4(1x,I6) ) 309 272 1111 FORMAT( 3(F7.1,1X,F7.3,1X),I3,A ) 310 273 ! 311 274 END SUBROUTINE lim_dia_init 312 275
Note: See TracChangeset
for help on using the changeset viewer.