Changeset 5167 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
- Timestamp:
- 2015-03-24T18:35:00+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r5123 r5167 22 22 USE lib_mpp ! MPP library 23 23 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 24 USE sbc_oce , ONLY : sfx ! Surface boundary condition: ocean fields 24 25 25 26 IMPLICIT NONE … … 30 31 PUBLIC lim_cons_check 31 32 PUBLIC lim_cons_hsm 33 PUBLIC lim_cons_final 32 34 33 35 !!---------------------------------------------------------------------- … … 167 169 REAL(wp) :: zvi, zsmv, zei, zfs, zfw, zft 168 170 REAL(wp) :: zvmin, zamin, zamax 169 REAL(wp) :: zconv 170 171 zconv = 1.e-9 171 REAL(wp) :: zvtrp, zetrp 172 REAL(wp), PARAMETER :: zconv = 1.e-9 172 173 173 174 IF( icount == 0 ) THEN … … 187 188 zvi_b = glob_sum( SUM( v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * e12t(:,:) * tmask(:,:,1) ) 188 189 189 zsmv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) )190 zsmv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) * rhoic ) 190 191 191 192 zei_b = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) + & … … 210 211 & * e12t(:,:) * tmask(:,:,1) ) - zvi_b ) * r1_rdtice - zfw 211 212 212 zsmv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) ) - zsmv_b ) * r1_rdtice + ( zfs * r1_rhoic )213 zsmv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e12t(:,:) * tmask(:,:,1) * rhoic ) - zsmv_b ) * r1_rdtice + zfs 213 214 214 215 zei = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) + & … … 216 217 & ) * e12t(:,:) * tmask(:,:,1) * zconv ) * r1_rdtice - zei_b * r1_rdtice + zft 217 218 219 zvtrp = glob_sum( ( diag_trp_vi * rhoic + diag_trp_vs * rhosn ) * e12t(:,:) * tmask(:,:,1) ) 220 zetrp = glob_sum( ( diag_trp_ei + diag_trp_es ) * e12t(:,:) * tmask(:,:,1) * zconv ) 218 221 zvmin = glob_min( v_i ) 219 222 zamax = glob_max( SUM( a_i, dim=3 ) ) 220 223 zamin = glob_min( a_i ) 224 221 225 222 226 IF(lwp) THEN 223 IF ( ABS( zvi ) > 1.e-4) WRITE(numout,*) 'violation volume [kg/day] (',cd_routine,') = ',(zvi * rday)224 IF ( ABS( zsmv ) > 1.e-4 ) WRITE(numout,*) 'violation saline [psu*m3/day] (',cd_routine,') = ',(zsmv * rday)225 IF ( ABS( zei ) > 1.e-4) WRITE(numout,*) 'violation enthalpy [GW] (',cd_routine,') = ',(zei)226 IF ( zvmin < -epsi10 ) WRITE(numout,*) 'violation v_i<0 [m] (',cd_routine,') = ',(zvmin)227 IF ( ABS( zvi * rday ) > 0.5 * 1.e9 ) WRITE(numout,*) 'violation volume [kg/day] (',cd_routine,') = ',(zvi * rday) 228 IF ( ABS( zsmv * rday ) > 5. * 1.e9 ) WRITE(numout,*) 'violation saline [psu*kg/day] (',cd_routine,') = ',(zsmv * rday) 229 IF ( ABS( zei ) > 2. * 1.e9 ) WRITE(numout,*) 'violation enthalpy [GW] (',cd_routine,') = ',(zei) 230 IF ( zvmin < -epsi10 ) WRITE(numout,*) 'violation v_i<0 [m] (',cd_routine,') = ',(zvmin) 227 231 IF( cd_routine /= 'limtrp' .AND. cd_routine /= 'limitd_me' .AND. zamax > rn_amax+epsi10 ) THEN 228 WRITE(numout,*) 'violation a_i>amax (',cd_routine,') = ',zamax232 WRITE(numout,*) 'violation a_i>amax (',cd_routine,') = ',zamax 229 233 ENDIF 230 IF ( zamin < -epsi10 ) WRITE(numout,*) 'violation a_i<0 (',cd_routine,') = ',zamin 234 IF ( zamin < -epsi10 ) WRITE(numout,*) 'violation a_i<0 (',cd_routine,') = ',zamin 235 IF( cd_routine == 'limtrp' .AND. ABS( zvtrp * rday ) > 0.5*1.e9 ) THEN 236 WRITE(numout,*) 'violation vtrp [kg/day] (',cd_routine,') = ',(zvtrp * rday) 237 WRITE(numout,*) 'violation etrp [GW] (',cd_routine,') = ',(zetrp ) 238 ENDIF 231 239 ENDIF 232 240 … … 234 242 235 243 END SUBROUTINE lim_cons_hsm 244 245 SUBROUTINE lim_cons_final( cd_routine ) 246 CHARACTER(len=*), INTENT(in) :: cd_routine ! name of the routine 247 REAL(wp) :: zhfx, zsfx, zvfx 248 REAL(wp), PARAMETER :: zconv = 1.e-9 249 250 zhfx = glob_sum( ( hfx_in - hfx_out - diag_heat - diag_trp_ei - diag_trp_es - hfx_sub ) * e12t(:,:) * tmask(:,:,1) * zconv ) 251 zsfx = glob_sum( ( sfx + diag_smvi ) * e12t(:,:) * tmask(:,:,1) ) * rday 252 zvfx = glob_sum( ( wfx_ice + wfx_snw + wfx_spr + wfx_sub + diag_vice + diag_vsnw ) * e12t(:,:) * tmask(:,:,1) ) * rday 253 254 ! if error > 1 mm / 100 years over the Arctic Basin 255 IF( ABS( zvfx ) > 0.5 * 1.e9 ) WRITE(numout,*) 'violation vfx [kg/day] (',cd_routine,') = ',(zvfx) 256 ! if error > 1 mm / 100 years over the Arctic Basin (ice with latent heat = 3e6 J/kg) 257 IF( ABS( zhfx ) > 2. * 1.e9 ) WRITE(numout,*) 'violation hfx [GW] (',cd_routine,') = ',(zhfx) 258 ! if error > 1 mm / 100 years over the Arctic Basin (ice of salinity = 10 pss) 259 IF( ABS( zsfx ) > 5. * 1.e9 ) WRITE(numout,*) 'violation sfx [psu*kg/day] (',cd_routine,') = ',(zsfx) 260 261 END SUBROUTINE lim_cons_final 236 262 237 263 #else
Note: See TracChangeset
for help on using the changeset viewer.