Changeset 5208 for branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
- Timestamp:
- 2015-04-13T15:08:59+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r4688 r5208 35 35 !!PUBLIC lim_diahsb_rst ! routine called by ice_init.F90 36 36 37 REAL(dp) :: frc_sal, frc_vol ! global forcing trends 38 REAL(dp) :: bg_grme ! global ice growth+melt trends 39 REAL(wp) :: epsi06 = 1.e-6_wp ! small number 37 real(wp) :: frc_sal, frc_vol ! global forcing trends 38 real(wp) :: bg_grme ! global ice growth+melt trends 40 39 41 40 !! * Substitutions … … 58 57 !!--------------------------------------------------------------------------- 59 58 !! 60 REAL(dp) :: zbg_ivo, zbg_svo, zbg_are, zbg_sal ,zbg_tem ,zbg_ihc ,zbg_shc 61 REAL(dp) :: zbg_sfx, zbg_sfx_bri, zbg_sfx_bog, zbg_sfx_bom, zbg_sfx_sum, zbg_sfx_sni, zbg_sfx_opw, zbg_sfx_res, zbg_sfx_dyn 62 REAL(dp) :: zbg_vfx, zbg_vfx_bog, zbg_vfx_opw, zbg_vfx_sni, zbg_vfx_dyn 63 REAL(dp) :: zbg_vfx_bom, zbg_vfx_sum, zbg_vfx_res, zbg_vfx_spr, zbg_vfx_snw, zbg_vfx_sub 64 REAL(dp) :: zbg_hfx_dhc, zbg_hfx_spr 65 REAL(dp) :: zbg_hfx_res, zbg_hfx_sub, zbg_hfx_dyn, zbg_hfx_thd, zbg_hfx_snw, zbg_hfx_out, zbg_hfx_in 66 REAL(dp) :: zbg_hfx_sum, zbg_hfx_bom, zbg_hfx_bog, zbg_hfx_dif, zbg_hfx_opw 67 REAL(dp) :: z_frc_vol, z_frc_sal, z_bg_grme 68 REAL(dp) :: z1_area ! - - 69 REAL(dp) :: zinda, zindb 59 real(wp) :: zbg_ivo, zbg_svo, zbg_are, zbg_sal ,zbg_tem ,zbg_ihc ,zbg_shc 60 real(wp) :: zbg_sfx, zbg_sfx_bri, zbg_sfx_bog, zbg_sfx_bom, zbg_sfx_sum, zbg_sfx_sni, & 61 & zbg_sfx_opw, zbg_sfx_res, zbg_sfx_dyn 62 real(wp) :: zbg_vfx, zbg_vfx_bog, zbg_vfx_opw, zbg_vfx_sni, zbg_vfx_dyn 63 real(wp) :: zbg_vfx_bom, zbg_vfx_sum, zbg_vfx_res, zbg_vfx_spr, zbg_vfx_snw, zbg_vfx_sub 64 real(wp) :: zbg_hfx_dhc, zbg_hfx_spr 65 real(wp) :: zbg_hfx_res, zbg_hfx_sub, zbg_hfx_dyn, zbg_hfx_thd, zbg_hfx_snw, zbg_hfx_out, zbg_hfx_in 66 real(wp) :: zbg_hfx_sum, zbg_hfx_bom, zbg_hfx_bog, zbg_hfx_dif, zbg_hfx_opw 67 real(wp) :: z_frc_vol, z_frc_sal, z_bg_grme 68 real(wp) :: z1_area ! - - 69 REAL(wp) :: ztmp 70 70 !!--------------------------------------------------------------------------- 71 71 IF( nn_timing == 1 ) CALL timing_start('lim_diahsb') … … 74 74 75 75 ! 1/area 76 z1_area = 1. d0/ MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 )77 78 zinda = MAX( 0.d0 , SIGN( 1.d0, glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) )76 z1_area = 1._wp / MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 ) 77 78 rswitch = MAX( 0._wp , SIGN( 1._wp , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 79 79 ! ----------------------- ! 80 80 ! 1 - Content variations ! … … 90 90 91 91 ! Volume 92 zbg_vfx = zinda * glob_sum( emp(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 93 zbg_vfx_bog = zinda * glob_sum( wfx_bog(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 94 zbg_vfx_opw = zinda * glob_sum( wfx_opw(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 95 zbg_vfx_sni = zinda * glob_sum( wfx_sni(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 96 zbg_vfx_dyn = zinda * glob_sum( wfx_dyn(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 97 zbg_vfx_bom = zinda * glob_sum( wfx_bom(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 98 zbg_vfx_sum = zinda * glob_sum( wfx_sum(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 99 zbg_vfx_res = zinda * glob_sum( wfx_res(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 100 zbg_vfx_spr = zinda * glob_sum( wfx_spr(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 101 zbg_vfx_snw = zinda * glob_sum( wfx_snw(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 102 zbg_vfx_sub = zinda * glob_sum( wfx_sub(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 92 ztmp = rswitch * z1_area * r1_rau0 * rday 93 zbg_vfx = ztmp * glob_sum( emp(:,:) * area(:,:) * tms(:,:) ) 94 zbg_vfx_bog = ztmp * glob_sum( wfx_bog(:,:) * area(:,:) * tms(:,:) ) 95 zbg_vfx_opw = ztmp * glob_sum( wfx_opw(:,:) * area(:,:) * tms(:,:) ) 96 zbg_vfx_sni = ztmp * glob_sum( wfx_sni(:,:) * area(:,:) * tms(:,:) ) 97 zbg_vfx_dyn = ztmp * glob_sum( wfx_dyn(:,:) * area(:,:) * tms(:,:) ) 98 zbg_vfx_bom = ztmp * glob_sum( wfx_bom(:,:) * area(:,:) * tms(:,:) ) 99 zbg_vfx_sum = ztmp * glob_sum( wfx_sum(:,:) * area(:,:) * tms(:,:) ) 100 zbg_vfx_res = ztmp * glob_sum( wfx_res(:,:) * area(:,:) * tms(:,:) ) 101 zbg_vfx_spr = ztmp * glob_sum( wfx_spr(:,:) * area(:,:) * tms(:,:) ) 102 zbg_vfx_snw = ztmp * glob_sum( wfx_snw(:,:) * area(:,:) * tms(:,:) ) 103 zbg_vfx_sub = ztmp * glob_sum( wfx_sub(:,:) * area(:,:) * tms(:,:) ) 103 104 104 105 ! Salt 105 zbg_sfx = z inda * glob_sum( sfx(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday106 zbg_sfx_bri = z inda * glob_sum( sfx_bri(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday107 zbg_sfx_res = z inda * glob_sum( sfx_res(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday108 zbg_sfx_dyn = z inda * glob_sum( sfx_dyn(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday109 110 zbg_sfx_bog = z inda * glob_sum( sfx_bog(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday111 zbg_sfx_opw = z inda * glob_sum( sfx_opw(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday112 zbg_sfx_sni = z inda * glob_sum( sfx_sni(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday113 zbg_sfx_bom = z inda * glob_sum( sfx_bom(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday114 zbg_sfx_sum = z inda * glob_sum( sfx_sum(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday106 zbg_sfx = ztmp * glob_sum( sfx(:,:) * area(:,:) * tms(:,:) ) 107 zbg_sfx_bri = ztmp * glob_sum( sfx_bri(:,:) * area(:,:) * tms(:,:) ) 108 zbg_sfx_res = ztmp * glob_sum( sfx_res(:,:) * area(:,:) * tms(:,:) ) 109 zbg_sfx_dyn = ztmp * glob_sum( sfx_dyn(:,:) * area(:,:) * tms(:,:) ) 110 111 zbg_sfx_bog = ztmp * glob_sum( sfx_bog(:,:) * area(:,:) * tms(:,:) ) 112 zbg_sfx_opw = ztmp * glob_sum( sfx_opw(:,:) * area(:,:) * tms(:,:) ) 113 zbg_sfx_sni = ztmp * glob_sum( sfx_sni(:,:) * area(:,:) * tms(:,:) ) 114 zbg_sfx_bom = ztmp * glob_sum( sfx_bom(:,:) * area(:,:) * tms(:,:) ) 115 zbg_sfx_sum = ztmp * glob_sum( sfx_sum(:,:) * area(:,:) * tms(:,:) ) 115 116 116 117 ! Heat budget … … 152 153 ! 3 - Diagnostics writing ! 153 154 ! ----------------------- ! 154 zindb = MAX( 0.d0 , SIGN( 1.d0 , zbg_ivo - epsi06 ) ) 155 ! 155 rswitch = MAX( 0._wp , SIGN( 1._wp , zbg_ivo - epsi06 ) ) 156 ! 157 IF( iom_use('ibgvoltot') ) & 156 158 CALL iom_put( 'ibgvoltot' , zbg_ivo * rhoic * r1_rau0 * 1.e-9 ) ! ice volume (km3 equivalent liquid) 159 IF( iom_use('sbgvoltot') ) & 157 160 CALL iom_put( 'sbgvoltot' , zbg_svo * rhosn * r1_rau0 * 1.e-9 ) ! snw volume (km3 equivalent liquid) 161 IF( iom_use('ibgarea') ) & 158 162 CALL iom_put( 'ibgarea' , zbg_are * 1.e-6 ) ! ice area (km2) 159 CALL iom_put( 'ibgsaline' , zindb * zbg_sal / MAX( zbg_ivo, epsi06 ) ) ! ice saline (psu) 160 CALL iom_put( 'ibgtemper' , zindb * zbg_tem / MAX( zbg_ivo, epsi06 ) ) ! ice temper (C) 163 IF( iom_use('ibgsaline') ) & 164 CALL iom_put( 'ibgsaline' , rswitch * zbg_sal / MAX( zbg_ivo, epsi06 ) ) ! ice saline (psu) 165 IF( iom_use('ibgtemper') ) & 166 CALL iom_put( 'ibgtemper' , rswitch * zbg_tem / MAX( zbg_ivo, epsi06 ) ) ! ice temper (C) 161 167 CALL iom_put( 'ibgheatco' , zbg_ihc ) ! ice heat content (1.e20 J) 162 168 CALL iom_put( 'sbgheatco' , zbg_shc ) ! snw heat content (1.e20 J) 169 IF( iom_use('ibgsaltco') ) & 163 170 CALL iom_put( 'ibgsaltco' , zbg_sal * rhoic * r1_rau0 * 1.e-9 ) ! ice salt content (psu*km3 equivalent liquid) 164 171 … … 203 210 CALL iom_put( 'ibgfrcvol' , frc_vol * 1.e-9 ) ! vol - forcing (km3 equivalent liquid) 204 211 CALL iom_put( 'ibgfrcsfx' , frc_sal * 1.e-9 ) ! sal - forcing (psu*km3 equivalent liquid) 212 IF( iom_use('ibgvolgrm') ) & 205 213 CALL iom_put( 'ibgvolgrm' , bg_grme * r1_rau0 * 1.e-9 ) ! vol growth + melt (km3 equivalent liquid) 206 214 … … 243 251 ! 2 - initial conservation variables ! 244 252 ! ---------------------------------- ! 245 !frc_vol = 0. d0! volume trend due to forcing246 !frc_sal = 0. d0! salt content - - - -247 !bg_grme = 0. d0! ice growth + melt volume trend253 !frc_vol = 0._wp ! volume trend due to forcing 254 !frc_sal = 0._wp ! salt content - - - - 255 !bg_grme = 0._wp ! ice growth + melt volume trend 248 256 ! 249 257 CALL lim_diahsb_rst( nstart, 'READ' ) !* read or initialize all required files … … 279 287 IF(lwp) WRITE(numout,*) ' lim_diahsb at initial state ' 280 288 IF(lwp) WRITE(numout,*) '~~~~~~~' 281 frc_vol = 0. d0282 frc_sal = 0. d0283 bg_grme = 0. d0284 ENDIF 289 frc_vol = 0._wp 290 frc_sal = 0._wp 291 bg_grme = 0._wp 292 ENDIF 285 293 286 294 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file
Note: See TracChangeset
for help on using the changeset viewer.