Changeset 4990 for trunk/NEMOGCM/NEMO/OPA_SRC/DIA
- Timestamp:
- 2014-12-15T17:42:49+01:00 (9 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/DIA
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
r4313 r4990 104 104 zbotpres(:,:) = zbotpres(:,:) + fse3t(:,:,jk) * zrhd(:,:,jk) 105 105 END DO 106 IF( .NOT.lk_vvl ) zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 106 IF( .NOT.lk_vvl ) THEN 107 DO ji=1,jpi 108 DO jj=1,jpj 109 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 110 END DO 111 END DO 112 END IF 107 113 ! 108 114 zarho = SUM( area(:,:) * zbotpres(:,:) ) … … 120 126 zbotpres(:,:) = zbotpres(:,:) + fse3t(:,:,jk) * zrhd(:,:,jk) 121 127 END DO 122 IF( .NOT.lk_vvl ) zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 128 IF( .NOT.lk_vvl ) THEN 129 DO ji=1,jpi 130 DO jj=1,jpj 131 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 132 END DO 133 END DO 134 END IF 123 135 ! 124 136 zarho = SUM( area(:,:) * zbotpres(:,:) ) … … 145 157 END DO 146 158 IF( .NOT.lk_vvl ) THEN 147 ztemp = ztemp + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_tem) ) 148 zsal = zsal + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_sal) ) 159 DO ji=1,jpi 160 DO jj=1,jpj 161 ztemp = ztemp + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_tem) 162 zsal = zsal + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_sal) 163 END DO 164 END DO 149 165 ENDIF 150 166 IF( lk_mpp ) THEN -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90
r4147 r4990 7 7 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 8 8 !! 9.0 ! 05-11 (V. Garnier) Surface pressure gradient organization 9 !!---------------------------------------------------------------------- 10 #if ! defined key_coupled 11 9 !!---------------------------------------------------------------------- 12 10 !!---------------------------------------------------------------------- 13 11 !! Only for ORCA2 ORCA1 and ORCA025 … … 29 27 30 28 PUBLIC dia_fwb ! routine called by step.F90 31 32 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .TRUE. !: fresh water budget flag33 29 34 30 REAL(wp) :: a_fwf , & … … 453 449 END SUBROUTINE dia_fwb 454 450 455 #else456 !!----------------------------------------------------------------------457 !! Default option : Dummy Module458 !!----------------------------------------------------------------------459 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .FALSE. !: fresh water budget flag460 CONTAINS461 SUBROUTINE dia_fwb( kt ) ! Empty routine462 WRITE(*,*) 'dia_fwb: : You should not have seen this print! error?', kt463 END SUBROUTINE dia_fwb464 #endif465 466 451 !!====================================================================== 467 452 END MODULE diafwb -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaharm.F90
r4683 r4990 193 193 & +(1.-MOD(jc,2))* ft(jh) *SIN(ana_freq(jh)*ztime + vt(jh) + ut(jh))) 194 194 195 DO jj = 1, 196 DO ji = 1, 195 DO jj = 1,jpj 196 DO ji = 1,jpi 197 197 ! Elevation 198 ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*sshn(ji,jj) *tmask (ji,jj,1)198 ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*sshn(ji,jj) *tmask_i(ji,jj) 199 199 #if defined key_dynspg_ts 200 ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)*hur(ji,jj)*umask (ji,jj,1)201 ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)*hvr(ji,jj)*vmask (ji,jj,1)200 ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)*hur(ji,jj)*umask_i(ji,jj) 201 ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)*hvr(ji,jj)*vmask_i(ji,jj) 202 202 #endif 203 203 END DO … … 294 294 X1 = ana_amp(ji,jj,jh,1) 295 295 X2 =-ana_amp(ji,jj,jh,2) 296 out_eta(ji,jj,jh ) = X1 * tmask (ji,jj,1)297 out_eta(ji,jj,jh+nb_ana) = X2 * tmask (ji,jj,1)296 out_eta(ji,jj,jh ) = X1 * tmask_i(ji,jj) 297 out_eta(ji,jj,jh+nb_ana) = X2 * tmask_i(ji,jj) 298 298 END DO 299 299 END DO … … 326 326 DO ji = 1, jpi 327 327 DO jh = 1, nb_ana 328 X1 329 X2 330 out_u(ji,jj, jh ) = X1 * umask(ji,jj,1)331 out_u(ji,jj,nb_ana+jh) = X2 * umask (ji,jj,1)332 END 333 END 334 END 328 X1= ana_amp(ji,jj,jh,1) 329 X2=-ana_amp(ji,jj,jh,2) 330 out_u(ji,jj, jh) = X1 * umask_i(ji,jj) 331 out_u(ji,jj,nb_ana+jh) = X2 * umask_i(ji,jj) 332 ENDDO 333 ENDDO 334 ENDDO 335 335 336 336 ! vbar: … … 362 362 X1=ana_amp(ji,jj,jh,1) 363 363 X2=-ana_amp(ji,jj,jh,2) 364 out_v(ji,jj, jh)=X1 * vmask(ji,jj,1)365 out_v(ji,jj,nb_ana+jh)=X2 * vmask (ji,jj,1)364 out_v(ji,jj, jh)=X1 * vmask_i(ji,jj) 365 out_v(ji,jj,nb_ana+jh)=X2 * vmask_i(ji,jj) 366 366 END DO 367 367 END DO -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r4624 r4990 9 9 10 10 !!---------------------------------------------------------------------- 11 !! dia_hsb : Diagnose the conservation of ocean heat and salt contents, and volume 12 !! dia_hsb_rst : Read or write DIA file in restart file 13 !! dia_hsb_init : Initialization of the conservation diagnostic 14 !!---------------------------------------------------------------------- 11 15 USE oce ! ocean dynamics and tracers 12 16 USE dom_oce ! ocean space and time domain 13 17 USE phycst ! physical constants 14 18 USE sbc_oce ! surface thermohaline fluxes 15 USE in_out_manager ! I/O manager 19 USE sbcrnf ! river runoff 20 USE sbcisf ! ice shelves 16 21 USE domvvl ! vertical scale factors 17 22 USE traqsr ! penetrative solar radiation 18 23 USE trabbc ! bottom boundary condition 19 USE lib_mpp ! distributed memory computing library20 24 USE trabbc ! bottom boundary condition 21 25 USE bdy_par ! (for lk_bdy) 26 USE restart ! ocean restart 27 ! 28 USE iom ! I/O manager 29 USE in_out_manager ! I/O manager 30 USE lib_fortran ! glob_sum 31 USE lib_mpp ! distributed memory computing library 22 32 USE timing ! preformance summary 23 USE iom ! I/O manager 24 USE lib_fortran ! glob_sum 25 USE restart ! ocean restart 26 USE wrk_nemo ! work arrays 27 USE sbcrnf ! river runoffd 33 USE wrk_nemo ! work arrays 28 34 29 35 IMPLICIT NONE … … 36 42 LOGICAL, PUBLIC :: ln_diahsb !: check the heat and salt budgets 37 43 38 REAL(dp) :: surf_tot ! 39 REAL(dp) :: frc_t , frc_s , frc_v ! global forcing trends 40 REAL(dp) :: frc_wn_t , frc_wn_s ! global forcing trends 41 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: surf , ssh_ini ! 42 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini, sc_loc_ini, e3t_ini ! 43 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini 44 REAL(wp) :: surf_tot ! ocean surface 45 REAL(wp) :: frc_t, frc_s, frc_v ! global forcing trends 46 REAL(wp) :: frc_wn_t, frc_wn_s ! global forcing trends 47 ! 48 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: surf , ssh_ini ! 49 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini ! 50 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini, sc_loc_ini, e3t_ini ! 44 51 45 52 !! * Substitutions 46 53 # include "domzgr_substitute.h90" 47 54 # include "vectopt_loop_substitute.h90" 48 49 55 !!---------------------------------------------------------------------- 50 56 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 52 58 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 59 !!---------------------------------------------------------------------- 54 55 60 CONTAINS 56 61 … … 67 72 !!--------------------------------------------------------------------------- 68 73 INTEGER, INTENT(in) :: kt ! ocean time-step index 69 !! 70 INTEGER :: jk ! dummy loop indice 71 REAL(dp) :: zdiff_hc , zdiff_sc ! heat and salt content variations 72 REAL(dp) :: zdiff_hc1 , zdiff_sc1 ! - - - - - - - - 73 REAL(dp) :: zdiff_v1 , zdiff_v2 ! volume variation 74 REAL(dp) :: zerr_hc1 , zerr_sc1 ! heat and salt content misfit 75 REAL(dp) :: zvol_tot ! volume 76 REAL(dp) :: z_frc_trd_t , z_frc_trd_s ! - - 77 REAL(dp) :: z_frc_trd_v ! - - 78 REAL(dp) :: z_wn_trd_t , z_wn_trd_s ! - - 79 REAL(dp) :: z_ssh_hc , z_ssh_sc ! - - 74 ! 75 INTEGER :: ji, jj, jk ! dummy loop indice 76 REAL(wp) :: zdiff_hc , zdiff_sc ! heat and salt content variations 77 REAL(wp) :: zdiff_hc1 , zdiff_sc1 ! - - - - 78 REAL(wp) :: zdiff_v1 , zdiff_v2 ! volume variation 79 REAL(wp) :: zerr_hc1 , zerr_sc1 ! heat and salt content misfit 80 REAL(wp) :: zvol_tot ! volume 81 REAL(wp) :: z_frc_trd_t , z_frc_trd_s ! - - 82 REAL(wp) :: z_frc_trd_v ! - - 83 REAL(wp) :: z_wn_trd_t , z_wn_trd_s ! - - 84 REAL(wp) :: z_ssh_hc , z_ssh_sc ! - - 85 REAL(wp), DIMENSION(:,:), POINTER :: z2d0, z2d1 80 86 !!--------------------------------------------------------------------------- 81 87 IF( nn_timing == 1 ) CALL timing_start('dia_hsb') 82 88 CALL wrk_alloc( jpi,jpj, z2d0, z2d1 ) 89 ! 90 tsn(:,:,:,1) = tsn(:,:,:,1) * tmask(:,:,:) ; tsb(:,:,:,1) = tsb(:,:,:,1) * tmask(:,:,:) ; 91 tsn(:,:,:,2) = tsn(:,:,:,2) * tmask(:,:,:) ; tsb(:,:,:,2) = tsb(:,:,:,2) * tmask(:,:,:) ; 83 92 ! ------------------------- ! 84 93 ! 1 - Trends due to forcing ! 85 94 ! ------------------------- ! 86 z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) ) * surf(:,:) ) ! volume fluxes87 z_frc_trd_t = glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes88 z_frc_trd_s = glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes95 z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 96 z_frc_trd_t = glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 97 z_frc_trd_s = glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes 89 98 ! Add runoff heat & salt input 90 99 IF( ln_rnf ) z_frc_trd_t = z_frc_trd_t + glob_sum( rnf_tsc(:,:,jp_tem) * surf(:,:) ) 91 100 IF( ln_rnf_sal) z_frc_trd_s = z_frc_trd_s + glob_sum( rnf_tsc(:,:,jp_sal) * surf(:,:) ) 101 ! Add geothermal ice shelf 102 IF( nn_isf .GE. 1 ) THEN 103 z_frc_trd_t = z_frc_trd_t & 104 & + glob_sum( ( risf_tsc(:,:,jp_tem) - rdivisf * fwfisf(:,:) * (-1.9) * r1_rau0 ) * surf(:,:) ) 105 z_frc_trd_s = z_frc_trd_s + (1.0_wp - rdivisf) * glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 106 ENDIF 92 107 93 108 ! Add penetrative solar radiation … … 97 112 ! 98 113 IF( .NOT. lk_vvl ) THEN 99 z_wn_trd_t = - glob_sum( surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_tem) ) 100 z_wn_trd_s = - glob_sum( surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_sal) ) 114 z2d0=0.0_wp ; z2d1=0.0_wp 115 DO ji=1,jpi 116 DO jj=1,jpj 117 z2d0(ji,jj) = surf(ji,jj) * wn(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_tem) 118 z2d1(ji,jj) = surf(ji,jj) * wn(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_sal) 119 ENDDO 120 ENDDO 121 z_wn_trd_t = - glob_sum( z2d0 ) 122 z_wn_trd_s = - glob_sum( z2d1 ) 101 123 ENDIF 102 124 … … 113 135 ! 2 - Content variations ! 114 136 ! ------------------------ ! 115 zdiff_v2 = 0. d0116 zdiff_hc = 0. d0117 zdiff_sc = 0. d0137 zdiff_v2 = 0._wp 138 zdiff_hc = 0._wp 139 zdiff_sc = 0._wp 118 140 119 141 ! volume variation (calculated with ssh) … … 122 144 ! heat & salt content variation (associated with ssh) 123 145 IF( .NOT. lk_vvl ) THEN 124 z_ssh_hc = glob_sum( surf(:,:) * ( tsn(:,:,1,jp_tem) * sshn(:,:) - ssh_hc_loc_ini(:,:) ) ) 125 z_ssh_sc = glob_sum( surf(:,:) * ( tsn(:,:,1,jp_sal) * sshn(:,:) - ssh_sc_loc_ini(:,:) ) ) 146 z2d0 = 0._wp ; z2d1 = 0._wp 147 DO ji = 1, jpi 148 DO jj = 1, jpj 149 z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) - ssh_hc_loc_ini(ji,jj) ) 150 z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) - ssh_sc_loc_ini(ji,jj) ) 151 END DO 152 END DO 153 z_ssh_hc = glob_sum( z2d0 ) 154 z_ssh_sc = glob_sum( z2d1 ) 126 155 ENDIF 127 156 … … 153 182 ! 3 - Diagnostics writing ! 154 183 ! ----------------------- ! 155 zvol_tot = 0.d0 ! total ocean volume184 zvol_tot = 0._wp ! total ocean volume (calculated with scale factors) 156 185 DO jk = 1, jpkm1 157 186 zvol_tot = zvol_tot + glob_sum( surf(:,:) * tmask(:,:,jk) * fse3t_n(:,:,jk) ) 158 187 END DO 188 189 !!gm to be added ? 190 ! IF( .NOT. lk_vvl ) THEN ! fixed volume, add the ssh contribution 191 ! zvol_tot = zvol_tot + glob_sum( surf(:,:) * sshn(:,:) ) 192 ! ENDIF 193 !!gm end 194 159 195 160 196 IF( lk_vvl ) THEN … … 183 219 IF( lrst_oce ) CALL dia_hsb_rst( kt, 'WRITE' ) 184 220 221 CALL wrk_dealloc( jpi,jpj, z2d0, z2d1 ) 222 185 223 IF( nn_timing == 1 ) CALL timing_stop('dia_hsb') 186 !224 ! 187 225 END SUBROUTINE dia_hsb 188 226 189 190 SUBROUTINE dia_hsb_init191 !!---------------------------------------------------------------------------192 !! *** ROUTINE dia_hsb ***193 !!194 !! ** Purpose: Initialization for the heat salt volume budgets195 !!196 !! ** Method : Compute initial heat content, salt content and volume197 !!198 !! ** Action : - Compute initial heat content, salt content and volume199 !! - Initialize forcing trends200 !! - Compute coefficients for conversion201 !!---------------------------------------------------------------------------202 INTEGER :: jk ! dummy loop indice203 INTEGER :: ierror ! local integer204 !!205 NAMELIST/namhsb/ ln_diahsb206 !207 INTEGER :: ios208 !!----------------------------------------------------------------------209 210 IF(lwp) THEN211 WRITE(numout,*)212 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets'213 WRITE(numout,*) '~~~~~~~~ '214 ENDIF215 216 REWIND( numnam_ref ) ! Namelist namhsb in reference namelist217 READ ( numnam_ref, namhsb, IOSTAT = ios, ERR = 901)218 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namhsb in reference namelist', lwp )219 220 REWIND( numnam_cfg ) ! Namelist namhsb in configuration namelist221 READ ( numnam_cfg, namhsb, IOSTAT = ios, ERR = 902 )222 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namhsb in configuration namelist', lwp )223 IF(lwm) WRITE ( numond, namhsb )224 225 !226 IF(lwp) THEN ! Control print227 WRITE(numout,*)228 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets'229 WRITE(numout,*) '~~~~~~~~~~~~'230 WRITE(numout,*) ' Namelist namhsb : set hsb parameters'231 WRITE(numout,*) ' Switch for hsb diagnostic (T) or not (F) ln_diahsb = ', ln_diahsb232 WRITE(numout,*)233 ENDIF234 235 IF( .NOT. ln_diahsb ) RETURN236 ! IF( .NOT. lk_mpp_rep ) &237 ! CALL ctl_stop (' Your global mpp_sum if performed in single precision - 64 bits -', &238 ! & ' whereas the global sum to be precise must be done in double precision ',&239 ! & ' please add key_mpp_rep')240 241 ! ------------------- !242 ! 1 - Allocate memory !243 ! ------------------- !244 ALLOCATE( hc_loc_ini(jpi,jpj,jpk), sc_loc_ini(jpi,jpj,jpk), &245 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror )246 IF( ierror > 0 ) THEN247 CALL ctl_stop( 'dia_hsb: unable to allocate hc_loc_ini' ) ; RETURN248 ENDIF249 250 IF(.NOT. lk_vvl ) ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror )251 IF( ierror > 0 ) THEN252 CALL ctl_stop( 'dia_hsb: unable to allocate hc_loc_ini' ) ; RETURN253 ENDIF254 255 ! ----------------------------------------------- !256 ! 2 - Time independant variables and file opening !257 ! ----------------------------------------------- !258 IF(lwp) WRITE(numout,*) "dia_hsb: heat salt volume budgets activated"259 IF(lwp) WRITE(numout,*) '~~~~~~~'260 surf(:,:) = e1t(:,:) * e2t(:,:) * tmask(:,:,1) * tmask_i(:,:) ! masked surface grid cell area261 surf_tot = glob_sum( surf(:,:) ) ! total ocean surface area262 263 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb does not take open boundary fluxes into account' )264 !265 ! ---------------------------------- !266 ! 4 - initial conservation variables !267 ! ---------------------------------- !268 CALL dia_hsb_rst( nit000, 'READ' ) !* read or initialize all required files269 !270 END SUBROUTINE dia_hsb_init271 227 272 228 SUBROUTINE dia_hsb_rst( kt, cdrw ) … … 281 237 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 282 238 ! 283 INTEGER :: j k !284 INTEGER :: id1 ! local integers239 INTEGER :: ji, jj, jk ! dummy loop indices 240 INTEGER :: id1 ! local integers 285 241 !!---------------------------------------------------------------------- 286 242 ! … … 317 273 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * fse3t_n(:,:,jk) ! initial salt content 318 274 END DO 319 frc_v = 0. d0! volume trend due to forcing320 frc_t = 0. d0! heat content - - - -321 frc_s = 0. d0! salt content - - - -275 frc_v = 0._wp ! volume trend due to forcing 276 frc_t = 0._wp ! heat content - - - - 277 frc_s = 0._wp ! salt content - - - - 322 278 IF( .NOT. lk_vvl ) THEN 323 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh 324 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh 325 frc_wn_t = 0.d0 ! initial heat content misfit due to free surface 326 frc_wn_s = 0.d0 ! initial salt content misfit due to free surface 279 DO ji=1,jpi 280 DO jj=1,jpj 281 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh 282 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh 283 ENDDO 284 ENDDO 285 frc_wn_t = 0._wp ! initial heat content misfit due to free surface 286 frc_wn_s = 0._wp ! initial salt content misfit due to free surface 327 287 ENDIF 328 288 ENDIF … … 354 314 END SUBROUTINE dia_hsb_rst 355 315 316 317 SUBROUTINE dia_hsb_init 318 !!--------------------------------------------------------------------------- 319 !! *** ROUTINE dia_hsb *** 320 !! 321 !! ** Purpose: Initialization for the heat salt volume budgets 322 !! 323 !! ** Method : Compute initial heat content, salt content and volume 324 !! 325 !! ** Action : - Compute initial heat content, salt content and volume 326 !! - Initialize forcing trends 327 !! - Compute coefficients for conversion 328 !!--------------------------------------------------------------------------- 329 INTEGER :: jk ! dummy loop indice 330 INTEGER :: ierror ! local integer 331 INTEGER :: ios 332 ! 333 NAMELIST/namhsb/ ln_diahsb 334 !!---------------------------------------------------------------------- 335 336 IF(lwp) THEN 337 WRITE(numout,*) 338 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets' 339 WRITE(numout,*) '~~~~~~~~ ' 340 ENDIF 341 342 REWIND( numnam_ref ) ! Namelist namhsb in reference namelist 343 READ ( numnam_ref, namhsb, IOSTAT = ios, ERR = 901) 344 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namhsb in reference namelist', lwp ) 345 346 REWIND( numnam_cfg ) ! Namelist namhsb in configuration namelist 347 READ ( numnam_cfg, namhsb, IOSTAT = ios, ERR = 902 ) 348 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namhsb in configuration namelist', lwp ) 349 IF(lwm) WRITE ( numond, namhsb ) 350 351 ! 352 IF(lwp) THEN ! Control print 353 WRITE(numout,*) 354 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets' 355 WRITE(numout,*) '~~~~~~~~~~~~' 356 WRITE(numout,*) ' Namelist namhsb : set hsb parameters' 357 WRITE(numout,*) ' Switch for hsb diagnostic (T) or not (F) ln_diahsb = ', ln_diahsb 358 WRITE(numout,*) 359 ENDIF 360 361 IF( .NOT. ln_diahsb ) RETURN 362 ! IF( .NOT. lk_mpp_rep ) & 363 ! CALL ctl_stop (' Your global mpp_sum if performed in single precision - 64 bits -', & 364 ! & ' whereas the global sum to be precise must be done in double precision ',& 365 ! & ' please add key_mpp_rep') 366 367 ! ------------------- ! 368 ! 1 - Allocate memory ! 369 ! ------------------- ! 370 ALLOCATE( hc_loc_ini(jpi,jpj,jpk), sc_loc_ini(jpi,jpj,jpk), & 371 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror ) 372 IF( ierror > 0 ) THEN 373 CALL ctl_stop( 'dia_hsb: unable to allocate hc_loc_ini' ) ; RETURN 374 ENDIF 375 376 IF(.NOT. lk_vvl ) ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror ) 377 IF( ierror > 0 ) THEN 378 CALL ctl_stop( 'dia_hsb: unable to allocate hc_loc_ini' ) ; RETURN 379 ENDIF 380 381 ! ----------------------------------------------- ! 382 ! 2 - Time independant variables and file opening ! 383 ! ----------------------------------------------- ! 384 IF(lwp) WRITE(numout,*) "dia_hsb: heat salt volume budgets activated" 385 IF(lwp) WRITE(numout,*) '~~~~~~~' 386 surf(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) ! masked surface grid cell area 387 surf_tot = glob_sum( surf(:,:) ) ! total ocean surface area 388 389 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb does not take open boundary fluxes into account' ) 390 ! 391 ! ---------------------------------- ! 392 ! 4 - initial conservation variables ! 393 ! ---------------------------------- ! 394 CALL dia_hsb_rst( nit000, 'READ' ) !* read or initialize all required files 395 ! 396 END SUBROUTINE dia_hsb_init 397 356 398 !!====================================================================== 357 399 END MODULE diahsb -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
r4624 r4990 505 505 btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) ) ! Indo-Pacific basin 506 506 WHERE( gphit(:,:) < -30._wp) ; btm30(:,:) = 0._wp ! mask out Southern Ocean 507 ELSE WHERE ; btm30(:,:) = tmask(:,:,1)507 ELSE WHERE ; btm30(:,:) = ssmask(:,:) 508 508 END WHERE 509 509 ENDIF … … 573 573 !!-------------------------------------------------------------------- 574 574 ! 575 CALL wrk_alloc( jpj , zphi , zfoo )576 CALL wrk_alloc( jpj , jpk , z_1)575 CALL wrk_alloc( jpj , zphi , zfoo ) 576 CALL wrk_alloc( jpj , jpk , z_1 ) 577 577 578 578 ! define time axis -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r4840 r4990 44 44 USE in_out_manager ! I/O manager 45 45 USE diadimg ! dimg direct access file format output 46 USE diaar5, ONLY : lk_diaar547 46 USE iom 48 47 USE ioipsl … … 88 87 INTEGER, DIMENSION(2) :: ierr 89 88 !!---------------------------------------------------------------------- 90 !91 89 ierr = 0 92 !93 90 ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) , & 94 91 & ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) , & … … 131 128 !! 132 129 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 133 REAL(wp), POINTER, DIMENSION(:,:) :: z2ds ! 2D workspace134 130 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d ! 3D workspace 135 131 !!---------------------------------------------------------------------- … … 137 133 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 138 134 ! 139 CALL wrk_alloc( jpi , jpj , z2d , z2ds)135 CALL wrk_alloc( jpi , jpj , z2d ) 140 136 CALL wrk_alloc( jpi , jpj, jpk , z3d ) 141 137 ! … … 149 145 z3d(:,:,:) = tsn(:,:,:,jp_tem) * fse3t_n(:,:,:) 150 146 CALL iom_put( "toce" , z3d ) ! heat content 151 CALL iom_put( "sst" , z3d(:,:,1) ) ! sea surface heat content 152 z3d(:,:,1) = tsn(:,:,1,jp_tem) * z3d(:,:,1) 153 CALL iom_put( "sst2" , z3d(:,:,1) ) ! sea surface content of squared temperature 147 DO jj = 1, jpj 148 DO ji = 1, jpi 149 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * fse3t_n(ji,jj,mikt(ji,jj)) 150 END DO 151 END DO 152 CALL iom_put( "sst" , z2d(:,:) ) ! sea surface heat content 153 DO jj = 1, jpj 154 DO ji = 1, jpi 155 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem)**2 * fse3t_n(ji,jj,mikt(ji,jj)) 156 END DO 157 END DO 158 CALL iom_put( "sst2" , z2d(:,:) ) ! sea surface content of squared temperature 154 159 z3d(:,:,:) = tsn(:,:,:,jp_sal) * fse3t_n(:,:,:) 155 160 CALL iom_put( "soce" , z3d ) ! salinity content 156 CALL iom_put( "sss" , z3d(:,:,1) ) ! sea surface salinity content 157 z3d(:,:,1) = tsn(:,:,1,jp_sal) * z3d(:,:,1) 158 CALL iom_put( "sss2" , z3d(:,:,1) ) ! sea surface content of squared salinity 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * fse3t_n(ji,jj,mikt(ji,jj)) 164 END DO 165 END DO 166 CALL iom_put( "sss" , z2d(:,:) ) ! sea surface salinity content 167 DO jj = 1, jpj 168 DO ji = 1, jpi 169 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal)**2 * fse3t_n(ji,jj,mikt(ji,jj)) 170 END DO 171 END DO 172 CALL iom_put( "sss2" , z2d(:,:) ) ! sea surface content of squared salinity 159 173 ELSE 160 CALL iom_put( "toce" , tsn(:,:,:,jp_tem) ) ! temperature 161 CALL iom_put( "sst" , tsn(:,:,1,jp_tem) ) ! sea surface temperature 162 CALL iom_put( "sst2" , tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) ) ! square of sea surface temperature 174 CALL iom_put( "toce" , tsn(:,:,:,jp_tem) ) ! temperature 175 IF ( iom_use("sst") ) THEN 176 DO jj = 1, jpj 177 DO ji = 1, jpi 178 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) 179 END DO 180 END DO 181 CALL iom_put( "sst" , z2d(:,:) ) ! sea surface temperature 182 ENDIF 183 IF ( iom_use("sst2") ) CALL iom_put( "sst2" , z2d(:,:) * z2d(:,:) ) ! square of sea surface temperature 163 184 CALL iom_put( "soce" , tsn(:,:,:,jp_sal) ) ! salinity 164 CALL iom_put( "sss" , tsn(:,:,1,jp_sal) ) ! sea surface salinity 165 CALL iom_put( "sss2" , tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) ) ! square of sea surface salinity 185 IF ( iom_use("sss") ) THEN 186 DO jj = 1, jpj 187 DO ji = 1, jpi 188 z2d(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) 189 END DO 190 END DO 191 CALL iom_put( "sss" , z2d(:,:) ) ! sea surface salinity 192 ENDIF 193 CALL iom_put( "sss2" , z2d(:,:) * z2d(:,:) ) ! square of sea surface salinity 166 194 END IF 167 195 IF( lk_vvl .AND. (.NOT. ln_dynadv_vec) ) THEN 168 CALL iom_put( "uoce" , u n(:,:,:) * fse3u_n(:,:,:) ) ! i-transport169 CALL iom_put( "voce" , v n(:,:,:) * fse3v_n(:,:,:) ) ! j-transport196 CALL iom_put( "uoce" , umask(:,:,:) * un(:,:,:) * fse3u_n(:,:,:) ) ! i-transport 197 CALL iom_put( "voce" , vmask(:,:,:) * vn(:,:,:) * fse3v_n(:,:,:) ) ! j-transport 170 198 ELSE 171 CALL iom_put( "uoce" , un ) ! i-current 172 CALL iom_put( "voce" , vn ) ! j-current 173 END IF 199 CALL iom_put( "uoce" , umask(:,:,:) * un(:,:,:) ) ! i-current 200 CALL iom_put( "voce" , vmask(:,:,:) * vn(:,:,:) ) ! j-current 201 IF ( iom_use("ssu") ) THEN 202 DO jj = 1, jpj 203 DO ji = 1, jpi 204 z2d(ji,jj) = un(ji,jj,miku(ji,jj)) 205 END DO 206 END DO 207 CALL iom_put( "ssu" , z2d ) ! i-current 208 ENDIF 209 IF ( iom_use("ssv") ) THEN 210 DO jj = 1, jpj 211 DO ji = 1, jpi 212 z2d(ji,jj) = vn(ji,jj,mikv(ji,jj)) 213 END DO 214 END DO 215 CALL iom_put( "ssv" , z2d ) ! j-current 216 ENDIF 217 ENDIF 174 218 CALL iom_put( "avt" , avt ) ! T vert. eddy diff. coef. 175 219 CALL iom_put( "avm" , avmu ) ! T vert. eddy visc. coef. … … 178 222 ENDIF 179 223 180 DO jj = 2, jpjm1 ! sst gradient 181 DO ji = fs_2, fs_jpim1 ! vector opt. 182 zztmp = tsn(ji,jj,1,jp_tem) 183 zztmpx = ( tsn(ji+1,jj ,1,jp_tem) - zztmp ) / e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) / e1u(ji-1,jj ) 184 zztmpy = ( tsn(ji ,jj+1,1,jp_tem) - zztmp ) / e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) / e2v(ji ,jj-1) 185 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 186 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) 187 END DO 188 END DO 189 CALL lbc_lnk( z2d, 'T', 1. ) 190 CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient 191 !CDIR NOVERRCHK 192 z2d(:,:) = SQRT( z2d(:,:) ) 193 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 194 224 IF ( iom_use("sstgrad2") .OR. iom_use("sstgrad2") ) THEN 225 DO jj = 2, jpjm1 ! sst gradient 226 DO ji = fs_2, fs_jpim1 ! vector opt. 227 zztmp = tsn(ji,jj,1,jp_tem) 228 zztmpx = ( tsn(ji+1,jj ,1,jp_tem) - zztmp ) / e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) / e1u(ji-1,jj ) 229 zztmpy = ( tsn(ji ,jj+1,1,jp_tem) - zztmp ) / e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) / e2v(ji ,jj-1) 230 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 231 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) 232 END DO 233 END DO 234 CALL lbc_lnk( z2d, 'T', 1. ) 235 CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient 236 !CDIR NOVERRCHK< 237 z2d(:,:) = SQRT( z2d(:,:) ) 238 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 239 ENDIF 240 195 241 ! clem: heat and salt content 196 z2d(:,:) = 0._wp 197 z2ds(:,:) = 0._wp 198 DO jk = 1, jpkm1 199 DO jj = 2, jpjm1 200 DO ji = fs_2, fs_jpim1 ! vector opt. 201 z2d(ji,jj) = z2d(ji,jj) + rau0 * rcp * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 202 z2ds(ji,jj) = z2ds(ji,jj) + rau0 * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 203 END DO 204 END DO 205 END DO 206 CALL lbc_lnk( z2d, 'T', 1. ) 207 CALL lbc_lnk( z2ds, 'T', 1. ) 208 CALL iom_put( "heatc", z2d ) ! vertically integrated heat content (J/m2) 209 CALL iom_put( "saltc", z2ds ) ! vertically integrated salt content (PSU*kg/m2) 210 211 ! 212 rke(:,:,jk) = 0._wp ! kinetic energy 213 DO jk = 1, jpkm1 214 DO jj = 2, jpjm1 215 DO ji = fs_2, fs_jpim1 ! vector opt. 216 zztmp = 1._wp / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 217 zztmpx = 0.5 * ( un(ji-1,jj,jk) * un(ji-1,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) & 218 & + un(ji ,jj,jk) * un(ji ,jj,jk) * e2u(ji ,jj) * fse3u(ji ,jj,jk) ) & 219 & * zztmp 220 ! 221 zztmpy = 0.5 * ( vn(ji,jj-1,jk) * vn(ji,jj-1,jk) * e1v(ji,jj-1) * fse3v(ji,jj-1,jk) & 222 & + vn(ji,jj ,jk) * vn(ji,jj ,jk) * e1v(ji,jj ) * fse3v(ji,jj ,jk) ) & 223 & * zztmp 224 ! 225 rke(ji,jj,jk) = 0.5_wp * ( zztmpx + zztmpy ) 226 ! 242 IF( iom_use("heatc") ) THEN 243 z2d(:,:) = 0._wp 244 DO jk = 1, jpkm1 245 DO jj = 2, jpjm1 246 DO ji = fs_2, fs_jpim1 ! vector opt. 247 z2d(ji,jj) = z2d(ji,jj) + fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 248 END DO 249 END DO 250 END DO 251 CALL lbc_lnk( z2d, 'T', 1. ) 252 CALL iom_put( "heatc", (rau0 * rcp) * z2d ) ! vertically integrated heat content (J/m2) 253 ENDIF 254 255 IF( iom_use("saltc") ) THEN 256 z2d(:,:) = 0._wp 257 DO jk = 1, jpkm1 258 DO jj = 2, jpjm1 259 DO ji = fs_2, fs_jpim1 ! vector opt. 260 z2d(ji,jj) = z2d(ji,jj) + fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 261 END DO 262 END DO 263 END DO 264 CALL lbc_lnk( z2d, 'T', 1. ) 265 CALL iom_put( "saltc", rau0 * z2d ) ! vertically integrated salt content (PSU*kg/m2) 266 ENDIF 267 ! 268 IF ( iom_use("eken") ) THEN 269 rke(:,:,jk) = 0._wp ! kinetic energy 270 DO jk = 1, jpkm1 271 DO jj = 2, jpjm1 272 DO ji = fs_2, fs_jpim1 ! vector opt. 273 zztmp = 1._wp / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 274 zztmpx = 0.5 * ( un(ji-1,jj,jk) * un(ji-1,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) & 275 & + un(ji ,jj,jk) * un(ji ,jj,jk) * e2u(ji ,jj) * fse3u(ji ,jj,jk) ) & 276 & * zztmp 277 ! 278 zztmpy = 0.5 * ( vn(ji,jj-1,jk) * vn(ji,jj-1,jk) * e1v(ji,jj-1) * fse3v(ji,jj-1,jk) & 279 & + vn(ji,jj ,jk) * vn(ji,jj ,jk) * e1v(ji,jj ) * fse3v(ji,jj ,jk) ) & 280 & * zztmp 281 ! 282 rke(ji,jj,jk) = 0.5_wp * ( zztmpx + zztmpy ) 283 ! 284 ENDDO 227 285 ENDDO 228 286 ENDDO 229 ENDDO230 CALL lbc_lnk( rke, 'T', 1. )231 CALL iom_put( "eken", rke )232 233 IF( lk_diaar5) THEN287 CALL lbc_lnk( rke, 'T', 1. ) 288 CALL iom_put( "eken", rke ) 289 ENDIF 290 291 IF( iom_use("u_masstr") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 234 292 z3d(:,:,jpk) = 0.e0 235 293 DO jk = 1, jpkm1 … … 237 295 END DO 238 296 CALL iom_put( "u_masstr", z3d ) ! mass transport in i-direction 239 240 zztmp = 0.5 * rcp 297 ENDIF 298 299 IF( iom_use("u_heattr") ) THEN 241 300 z2d(:,:) = 0.e0 242 z2ds(:,:) = 0.e0243 301 DO jk = 1, jpkm1 244 302 DO jj = 2, jpjm1 245 303 DO ji = fs_2, fs_jpim1 ! vector opt. 246 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 247 z2ds(ji,jj) = z2ds(ji,jj) + z3d(ji,jj,jk) * 0.5_wp * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 304 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 248 305 END DO 249 306 END DO 250 307 END DO 251 308 CALL lbc_lnk( z2d, 'U', -1. ) 252 CALL lbc_lnk( z2ds, 'U', -1. ) 253 CALL iom_put( "u_heattr", z2d ) ! heat transport in i-direction 254 CALL iom_put( "u_salttr", z2ds ) ! salt transport in i-direction 255 309 CALL iom_put( "u_heattr", (0.5 * rcp) * z2d ) ! heat transport in i-direction 310 ENDIF 311 312 IF( iom_use("u_salttr") ) THEN 313 z2d(:,:) = 0.e0 314 DO jk = 1, jpkm1 315 DO jj = 2, jpjm1 316 DO ji = fs_2, fs_jpim1 ! vector opt. 317 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 318 END DO 319 END DO 320 END DO 321 CALL lbc_lnk( z2d, 'U', -1. ) 322 CALL iom_put( "u_salttr", 0.5 * z2d ) ! heat transport in i-direction 323 ENDIF 324 325 326 IF( iom_use("v_masstr") .OR. iom_use("v_heattr") .OR. iom_use("v_salttr") ) THEN 256 327 z3d(:,:,jpk) = 0.e0 257 328 DO jk = 1, jpkm1 … … 259 330 END DO 260 331 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction 261 332 ENDIF 333 334 IF( iom_use("v_heattr") ) THEN 262 335 z2d(:,:) = 0.e0 263 z2ds(:,:) = 0.e0264 336 DO jk = 1, jpkm1 265 337 DO jj = 2, jpjm1 266 338 DO ji = fs_2, fs_jpim1 ! vector opt. 267 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 268 z2ds(ji,jj) = z2ds(ji,jj) + z3d(ji,jj,jk) * 0.5_wp * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 339 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 269 340 END DO 270 341 END DO 271 342 END DO 272 343 CALL lbc_lnk( z2d, 'V', -1. ) 273 CALL lbc_lnk( z2ds, 'V', -1. ) 274 CALL iom_put( "v_heattr", z2d ) ! heat transport in j-direction 275 CALL iom_put( "v_salttr", z2ds ) ! salt transport in j-direction 276 ENDIF 277 ! 278 CALL wrk_dealloc( jpi , jpj , z2d , z2ds ) 344 CALL iom_put( "v_heattr", (0.5 * rcp) * z2d ) ! heat transport in j-direction 345 ENDIF 346 347 IF( iom_use("v_salttr") ) THEN 348 z2d(:,:) = 0.e0 349 DO jk = 1, jpkm1 350 DO jj = 2, jpjm1 351 DO ji = fs_2, fs_jpim1 ! vector opt. 352 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 353 END DO 354 END DO 355 END DO 356 CALL lbc_lnk( z2d, 'V', -1. ) 357 CALL iom_put( "v_salttr", 0.5 * z2d ) ! heat transport in j-direction 358 ENDIF 359 ! 360 CALL wrk_dealloc( jpi , jpj , z2d ) 279 361 CALL wrk_dealloc( jpi , jpj, jpk , z3d ) 280 362 ! … … 539 621 ENDIF 540 622 541 #if ! defined key_coupled 542 CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping" , "W/m2" , & ! qrp 543 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 544 CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping" , "Kg/m2/s", & ! erp 545 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 546 CALL histdef( nid_T, "sosafldp", "Surface salt flux: damping" , "Kg/m2/s", & ! erp * sn 547 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 548 #endif 549 550 551 552 #if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 ) 553 CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping" , "W/m2" , & ! qrp 554 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 555 CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping" , "Kg/m2/s", & ! erp 556 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 557 CALL histdef( nid_T, "sosafldp", "Surface salt flux: Damping" , "Kg/m2/s", & ! erp * sn 558 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 559 #endif 623 IF( .NOT. lk_cpl ) THEN 624 CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping" , "W/m2" , & ! qrp 625 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 626 CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping" , "Kg/m2/s", & ! erp 627 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 628 CALL histdef( nid_T, "sosafldp", "Surface salt flux: damping" , "Kg/m2/s", & ! erp * sn 629 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 630 ENDIF 631 632 IF( lk_cpl .AND. nn_ice <= 1 ) THEN 633 CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping" , "W/m2" , & ! qrp 634 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 635 CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping" , "Kg/m2/s", & ! erp 636 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 637 CALL histdef( nid_T, "sosafldp", "Surface salt flux: Damping" , "Kg/m2/s", & ! erp * sn 638 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 639 ENDIF 640 560 641 clmx ="l_max(only(x))" ! max index on a period 561 642 CALL histdef( nid_T, "sobowlin", "Bowl Index" , "W-point", & ! bowl INDEX … … 572 653 #endif 573 654 574 #if defined key_coupled 575 # if defined key_lim3 576 Must be adapted to LIM3 577 # endif 578 # if defined key_lim2 579 CALL histdef( nid_T,"soicetem" , "Ice Surface Temperature" , "K" , & ! tn_ice 580 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 581 CALL histdef( nid_T,"soicealb" , "Ice Albedo" , "[0,1]" , & ! alb_ice 582 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 583 # endif 584 #endif 655 IF( lk_cpl .AND. nn_ice == 2 ) THEN 656 CALL histdef( nid_T,"soicetem" , "Ice Surface Temperature" , "K" , & ! tn_ice 657 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 658 CALL histdef( nid_T,"soicealb" , "Ice Albedo" , "[0,1]" , & ! alb_ice 659 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 660 ENDIF 585 661 586 662 CALL histend( nid_T, snc4chunks=snc4set ) … … 673 749 ENDIF 674 750 675 ! Write fields on T grid676 751 IF( lk_vvl ) THEN 677 752 CALL histwrite( nid_T, "votemper", it, tsn(:,:,:,jp_tem) * fse3t_n(:,:,:) , ndim_T , ndex_T ) ! heat content … … 684 759 CALL histwrite( nid_T, "sosstsst", it, tsn(:,:,1,jp_tem) , ndim_hT, ndex_hT ) ! sea surface temperature 685 760 CALL histwrite( nid_T, "sosaline", it, tsn(:,:,1,jp_sal) , ndim_hT, ndex_hT ) ! sea surface salinity 686 687 761 ENDIF 688 762 IF( lk_vvl ) THEN … … 734 808 ENDIF 735 809 736 #if ! defined key_coupled 737 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping 738 CALL histwrite( nid_T, "sowafldp", it, erp , ndim_hT, ndex_hT ) ! freshwater flux damping 739 IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 740 CALL histwrite( nid_T, "sosafldp", it, zw2d , ndim_hT, ndex_hT ) ! salt flux damping 741 #endif 742 #if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 ) 743 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping 744 CALL histwrite( nid_T, "sowafldp", it, erp , ndim_hT, ndex_hT ) ! freshwater flux damping 810 IF( .NOT. lk_cpl ) THEN 811 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping 812 CALL histwrite( nid_T, "sowafldp", it, erp , ndim_hT, ndex_hT ) ! freshwater flux damping 745 813 IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 746 CALL histwrite( nid_T, "sosafldp", it, zw2d , ndim_hT, ndex_hT ) ! salt flux damping 747 #endif 748 zw2d(:,:) = FLOAT( nmln(:,:) ) * tmask(:,:,1) 749 CALL histwrite( nid_T, "sobowlin", it, zw2d , ndim_hT, ndex_hT ) ! ??? 814 CALL histwrite( nid_T, "sosafldp", it, zw2d , ndim_hT, ndex_hT ) ! salt flux damping 815 ENDIF 816 IF( lk_cpl .AND. nn_ice <= 1 ) THEN 817 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping 818 CALL histwrite( nid_T, "sowafldp", it, erp , ndim_hT, ndex_hT ) ! freshwater flux damping 819 IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 820 CALL histwrite( nid_T, "sosafldp", it, zw2d , ndim_hT, ndex_hT ) ! salt flux damping 821 ENDIF 822 ! zw2d(:,:) = FLOAT( nmln(:,:) ) * tmask(:,:,1) 823 ! CALL histwrite( nid_T, "sobowlin", it, zw2d , ndim_hT, ndex_hT ) ! ??? 750 824 751 825 #if defined key_diahth … … 756 830 #endif 757 831 758 #if defined key_coupled 759 # if defined key_lim3 760 Must be adapted for LIM3 761 CALL histwrite( nid_T, "soicetem", it, tn_ice , ndim_hT, ndex_hT ) ! surf. ice temperature 762 CALL histwrite( nid_T, "soicealb", it, alb_ice , ndim_hT, ndex_hT ) ! ice albedo 763 # endif 764 # if defined key_lim2 765 CALL histwrite( nid_T, "soicetem", it, tn_ice(:,:,1) , ndim_hT, ndex_hT ) ! surf. ice temperature 766 CALL histwrite( nid_T, "soicealb", it, alb_ice(:,:,1), ndim_hT, ndex_hT ) ! ice albedo 767 # endif 768 #endif 769 ! Write fields on U grid 832 IF( lk_cpl .AND. nn_ice == 2 ) THEN 833 CALL histwrite( nid_T, "soicetem", it, tn_ice(:,:,1) , ndim_hT, ndex_hT ) ! surf. ice temperature 834 CALL histwrite( nid_T, "soicealb", it, alb_ice(:,:,1), ndim_hT, ndex_hT ) ! ice albedo 835 ENDIF 836 770 837 CALL histwrite( nid_U, "vozocrtx", it, un , ndim_U , ndex_U ) ! i-current 771 838 IF( ln_traldf_gdia ) THEN … … 789 856 CALL histwrite( nid_U, "sozotaux", it, utau , ndim_hU, ndex_hU ) ! i-wind stress 790 857 791 ! Write fields on V grid792 858 CALL histwrite( nid_V, "vomecrty", it, vn , ndim_V , ndex_V ) ! j-current 793 859 IF( ln_traldf_gdia ) THEN … … 804 870 CALL histwrite( nid_V, "sometauy", it, vtau , ndim_hV, ndex_hV ) ! j-wind stress 805 871 806 ! Write fields on W grid807 872 CALL histwrite( nid_W, "vovecrtz", it, wn , ndim_T, ndex_T ) ! vert. current 808 873 IF( ln_traldf_gdia ) THEN
Note: See TracChangeset
for help on using the changeset viewer.