Changeset 5836 for trunk/NEMOGCM/NEMO
- Timestamp:
- 2015-10-26T15:49:40+01:00 (5 years ago)
- Location:
- trunk/NEMOGCM/NEMO
- Files:
-
- 31 deleted
- 178 edited
- 8 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_2/limdmp_2.F90
r4624 r5836 71 71 CALL fld_read( kt, nn_fsbc, sf_icedmp ) 72 72 ! 73 !CDIR COLLAPSE74 73 hicif(:,:) = MAX( 0._wp, & ! h >= 0 avoid spurious out of physical range 75 74 & hicif(:,:) - rdt_ice * resto_ice(:,:,1) * ( hicif(:,:) - sf_icedmp(jp_hicif)%fnow(:,:,1) ) ) 76 !CDIR COLLAPSE77 75 frld (:,:) = MAX( 0._wp, MIN( 1._wp, & ! 0<= frld<=1 values which blow the run up 78 76 & frld (:,:) - rdt_ice * resto_ice(:,:,1) * ( frld (:,:) - sf_icedmp(jp_frld )%fnow(:,:,1) ) ) ) -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limrhg_2.F90
r5123 r5836 160 160 !------------------------------------------------------------------- 161 161 162 !CDIR NOVERRCHK163 162 DO jj = k_j1 , k_jpj-1 164 !CDIR NOVERRCHK165 163 DO ji = 1 , jpi 166 164 ! only the sinus changes its sign with the hemisphere … … 245 243 ! Computation of free drift field for free slip boundary conditions. 246 244 247 !CDIR NOVERRCHK248 245 DO jj = k_j1, k_jpj-1 249 !CDIR NOVERRCHK250 246 DO ji = 1, fs_jpim1 251 247 !- Rate of strain tensor. … … 401 397 iflag: DO jter = 1 , nbitdr ! Relaxation ! 402 398 ! ! ================ ! 403 !CDIR NOVERRCHK404 399 DO jj = k_j1+1, k_jpj-1 405 !CDIR NOVERRCHK406 400 DO ji = 2, fs_jpim1 ! NO vector opt. 407 401 ! -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r5407 r5836 319 319 ! 320 320 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 321 !CDIR NOVERRCHK 321 ! 322 322 DO jj = 1, jpj !* modulus of ice-ocean relative velocity at I-point 323 !CDIR NOVERRCHK324 323 DO ji = 1, jpi 325 324 zu_i = u_ice(ji,jj) - u_oce(ji,jj) ! ice-ocean relative velocity at I-point … … 328 327 END DO 329 328 END DO 330 !CDIR NOVERRCHK331 329 DO jj = 1, jpjm1 !* update the modulus of stress at ocean surface (T-point) 332 !CDIR NOVERRCHK333 330 DO ji = 1, jpim1 ! NO vector opt. 334 331 ! ! modulus of U_ice-U_oce at T-point … … 383 380 ! 384 381 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 385 !CDIR NOVERRCHK 382 ! 386 383 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity at T-point 387 !CDIR NOVERRCHK388 384 DO ji = fs_2, fs_jpim1 389 385 zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) ! 2*(U_ice-U_oce) at T-point -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r5407 r5836 196 196 !-------------------------------------------------------------------------- 197 197 198 !CDIR NOVERRCHK199 198 DO jj = 1, jpj 200 !CDIR NOVERRCHK201 199 DO ji = 1, jpi 202 200 zthsnice = hsnif(ji,jj) + hicif(ji,jj) -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_lac_2.F90
r3625 r5836 134 134 !--------------------------------------------------------------------- 135 135 136 !CDIR NOVERRCHK137 136 DO ji = kideb , kiut 138 137 iicefr = 1 - MAX( 0, INT( SIGN( 1.5 * zone , zfrl_old(ji) - 1.0 + epsi13 ) ) ) -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
r5429 r5836 97 97 98 98 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 99 psm (:,:) = MAX( pcrh * e1 2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )99 psm (:,:) = MAX( pcrh * e1e2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 100 100 101 101 ! Calculate fluxes and moments between boxes i<-->i+1 … … 282 282 283 283 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 284 psm(:,:) = MAX( pcrh * e1 2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )284 psm(:,:) = MAX( pcrh * e1e2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 285 285 286 286 ! Calculate fluxes and moments between boxes j<-->j+1 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r5183 r5836 185 185 zfs_b = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 186 186 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) & 187 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv )187 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) 188 188 189 189 ! water flux 190 190 zfw_b = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + & 191 191 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) & 192 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv )192 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) 193 193 194 194 ! heat flux 195 195 zft_b = glob_sum( ( hfx_sum(:,:) + hfx_bom(:,:) + hfx_bog(:,:) + hfx_dif(:,:) + hfx_opw(:,:) + hfx_snw(:,:) & 196 196 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) & 197 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv )198 199 zvi_b = glob_sum( SUM( v_i * rhoic + v_s * rhosn, dim=3 ) * e1 2t * tmask(:,:,1) * zconv )200 201 zsmv_b = glob_sum( SUM( smv_i * rhoic , dim=3 ) * e1 2t * tmask(:,:,1) * zconv )197 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) 198 199 zvi_b = glob_sum( SUM( v_i * rhoic + v_s * rhosn, dim=3 ) * e1e2t * tmask(:,:,1) * zconv ) 200 201 zsmv_b = glob_sum( SUM( smv_i * rhoic , dim=3 ) * e1e2t * tmask(:,:,1) * zconv ) 202 202 203 203 zei_b = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) + & 204 204 & SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 ) & 205 ) * e1 2t * tmask(:,:,1) * zconv )205 ) * e1e2t * tmask(:,:,1) * zconv ) 206 206 207 207 ELSEIF( icount == 1 ) THEN … … 210 210 zfs = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 211 211 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) & 212 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv ) - zfs_b212 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) - zfs_b 213 213 214 214 ! water flux 215 215 zfw = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + & 216 216 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) & 217 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv ) - zfw_b217 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) - zfw_b 218 218 219 219 ! heat flux 220 220 zft = glob_sum( ( hfx_sum(:,:) + hfx_bom(:,:) + hfx_bog(:,:) + hfx_dif(:,:) + hfx_opw(:,:) + hfx_snw(:,:) & 221 221 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) & 222 & ) * e1 2t(:,:) * tmask(:,:,1) * zconv ) - zft_b222 & ) * e1e2t(:,:) * tmask(:,:,1) * zconv ) - zft_b 223 223 224 224 ! outputs 225 225 zvi = ( ( glob_sum( SUM( v_i * rhoic + v_s * rhosn, dim=3 ) & 226 & * e1 2t * tmask(:,:,1) * zconv ) - zvi_b ) * r1_rdtice - zfw ) * rday226 & * e1e2t * tmask(:,:,1) * zconv ) - zvi_b ) * r1_rdtice - zfw ) * rday 227 227 228 228 zsmv = ( ( glob_sum( SUM( smv_i * rhoic , dim=3 ) & 229 & * e1 2t * tmask(:,:,1) * zconv ) - zsmv_b ) * r1_rdtice + zfs ) * rday229 & * e1e2t * tmask(:,:,1) * zconv ) - zsmv_b ) * r1_rdtice + zfs ) * rday 230 230 231 231 zei = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) + & 232 232 & SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 ) & 233 & ) * e1 2t * tmask(:,:,1) * zconv ) * r1_rdtice - zei_b * r1_rdtice + zft233 & ) * e1e2t * tmask(:,:,1) * zconv ) * r1_rdtice - zei_b * r1_rdtice + zft 234 234 235 235 ! zvtrp and zetrp must be close to 0 if the advection scheme is conservative 236 zvtrp = glob_sum( ( diag_trp_vi * rhoic + diag_trp_vs * rhosn ) * e1 2t * tmask(:,:,1) * zconv ) * rday237 zetrp = glob_sum( ( diag_trp_ei + diag_trp_es ) * e1 2t * tmask(:,:,1) * zconv )236 zvtrp = glob_sum( ( diag_trp_vi * rhoic + diag_trp_vs * rhosn ) * e1e2t * tmask(:,:,1) * zconv ) * rday 237 zetrp = glob_sum( ( diag_trp_ei + diag_trp_es ) * e1e2t * tmask(:,:,1) * zconv ) 238 238 239 239 zvmin = glob_min( v_i ) … … 242 242 243 243 ! set threshold values and calculate the ice area (+epsi10 to set a threshold > 0 when there is no ice) 244 zarea = glob_sum( SUM( a_i + epsi10, dim=3 ) * e1 2t * zconv ) ! in 1.e9 m2244 zarea = glob_sum( SUM( a_i + epsi10, dim=3 ) * e1e2t * zconv ) ! in 1.e9 m2 245 245 zv_sill = zarea * 2.5e-5 246 246 zs_sill = zarea * 25.e-5 … … 286 286 #if ! defined key_bdy 287 287 ! heat flux 288 zhfx = glob_sum( ( hfx_in - hfx_out - diag_heat - diag_trp_ei - diag_trp_es - hfx_sub ) * e1 2t * tmask(:,:,1) * zconv )288 zhfx = glob_sum( ( hfx_in - hfx_out - diag_heat - diag_trp_ei - diag_trp_es - hfx_sub ) * e1e2t * tmask(:,:,1) * zconv ) 289 289 ! salt flux 290 zsfx = glob_sum( ( sfx + diag_smvi ) * e1 2t * tmask(:,:,1) * zconv ) * rday290 zsfx = glob_sum( ( sfx + diag_smvi ) * e1e2t * tmask(:,:,1) * zconv ) * rday 291 291 ! water flux 292 zvfx = glob_sum( ( wfx_ice + wfx_snw + wfx_spr + wfx_sub + diag_vice + diag_vsnw ) * e1 2t * tmask(:,:,1) * zconv ) * rday292 zvfx = glob_sum( ( wfx_ice + wfx_snw + wfx_spr + wfx_sub + diag_vice + diag_vsnw ) * e1e2t * tmask(:,:,1) * zconv ) * rday 293 293 294 294 ! set threshold values and calculate the ice area (+epsi10 to set a threshold > 0 when there is no ice) 295 zarea = glob_sum( SUM( a_i + epsi10, dim=3 ) * e1 2t * zconv ) ! in 1.e9 m2295 zarea = glob_sum( SUM( a_i + epsi10, dim=3 ) * e1e2t * zconv ) ! in 1.e9 m2 296 296 zv_sill = zarea * 2.5e-5 297 297 zs_sill = zarea * 25.e-5 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limctl.F90
r5167 r5836 306 306 WRITE(numout,*) ' - Cell values ' 307 307 WRITE(numout,*) ' ~~~~~~~~~~~ ' 308 WRITE(numout,*) ' cell area : ', e1 2t(ji,jj)308 WRITE(numout,*) ' cell area : ', e1e2t(ji,jj) 309 309 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 310 310 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) … … 350 350 WRITE(numout,*) ' - Cell values ' 351 351 WRITE(numout,*) ' ~~~~~~~~~~~ ' 352 WRITE(numout,*) ' cell area : ', e1 2t(ji,jj)352 WRITE(numout,*) ' cell area : ', e1e2t(ji,jj) 353 353 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 354 354 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r5215 r5836 71 71 72 72 ! 1/area 73 z1_area = 1._wp / MAX( glob_sum( e1 2t(:,:) * tmask(:,:,1) ), epsi06 )74 75 rswitch = MAX( 0._wp , SIGN( 1._wp , glob_sum( e1 2t(:,:) * tmask(:,:,1) ) - epsi06 ) )73 z1_area = 1._wp / MAX( glob_sum( e1e2t(:,:) * tmask(:,:,1) ), epsi06 ) 74 75 rswitch = MAX( 0._wp , SIGN( 1._wp , glob_sum( e1e2t(:,:) * tmask(:,:,1) ) - epsi06 ) ) 76 76 ! ----------------------- ! 77 77 ! 1 - Content variations ! 78 78 ! ----------------------- ! 79 zbg_ivo = glob_sum( vt_i(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! volume ice80 zbg_svo = glob_sum( vt_s(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! volume snow81 zbg_are = glob_sum( at_i(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! area82 zbg_sal = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e1 2t(:,:) * tmask(:,:,1) ) ! mean salt content83 zbg_tem = glob_sum( ( tm_i(:,:) - rt0 ) * vt_i(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! mean temp content84 85 !zbg_ihc = glob_sum( et_i(:,:) * e1 2t(:,:) * tmask(:,:,1) ) / MAX( zbg_ivo,epsi06 ) ! ice heat content86 !zbg_shc = glob_sum( et_s(:,:) * e1 2t(:,:) * tmask(:,:,1) ) / MAX( zbg_svo,epsi06 ) ! snow heat content79 zbg_ivo = glob_sum( vt_i(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! volume ice 80 zbg_svo = glob_sum( vt_s(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! volume snow 81 zbg_are = glob_sum( at_i(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! area 82 zbg_sal = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * e1e2t(:,:) * tmask(:,:,1) ) ! mean salt content 83 zbg_tem = glob_sum( ( tm_i(:,:) - rt0 ) * vt_i(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! mean temp content 84 85 !zbg_ihc = glob_sum( et_i(:,:) * e1e2t(:,:) * tmask(:,:,1) ) / MAX( zbg_ivo,epsi06 ) ! ice heat content 86 !zbg_shc = glob_sum( et_s(:,:) * e1e2t(:,:) * tmask(:,:,1) ) / MAX( zbg_svo,epsi06 ) ! snow heat content 87 87 88 88 ! Volume 89 89 ztmp = rswitch * z1_area * r1_rau0 * rday 90 zbg_vfx = ztmp * glob_sum( emp(:,:) * e1 2t(:,:) * tmask(:,:,1) )91 zbg_vfx_bog = ztmp * glob_sum( wfx_bog(:,:) * e1 2t(:,:) * tmask(:,:,1) )92 zbg_vfx_opw = ztmp * glob_sum( wfx_opw(:,:) * e1 2t(:,:) * tmask(:,:,1) )93 zbg_vfx_sni = ztmp * glob_sum( wfx_sni(:,:) * e1 2t(:,:) * tmask(:,:,1) )94 zbg_vfx_dyn = ztmp * glob_sum( wfx_dyn(:,:) * e1 2t(:,:) * tmask(:,:,1) )95 zbg_vfx_bom = ztmp * glob_sum( wfx_bom(:,:) * e1 2t(:,:) * tmask(:,:,1) )96 zbg_vfx_sum = ztmp * glob_sum( wfx_sum(:,:) * e1 2t(:,:) * tmask(:,:,1) )97 zbg_vfx_res = ztmp * glob_sum( wfx_res(:,:) * e1 2t(:,:) * tmask(:,:,1) )98 zbg_vfx_spr = ztmp * glob_sum( wfx_spr(:,:) * e1 2t(:,:) * tmask(:,:,1) )99 zbg_vfx_snw = ztmp * glob_sum( wfx_snw(:,:) * e1 2t(:,:) * tmask(:,:,1) )100 zbg_vfx_sub = ztmp * glob_sum( wfx_sub(:,:) * e1 2t(:,:) * tmask(:,:,1) )90 zbg_vfx = ztmp * glob_sum( emp(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 91 zbg_vfx_bog = ztmp * glob_sum( wfx_bog(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 92 zbg_vfx_opw = ztmp * glob_sum( wfx_opw(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 93 zbg_vfx_sni = ztmp * glob_sum( wfx_sni(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 94 zbg_vfx_dyn = ztmp * glob_sum( wfx_dyn(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 95 zbg_vfx_bom = ztmp * glob_sum( wfx_bom(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 96 zbg_vfx_sum = ztmp * glob_sum( wfx_sum(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 97 zbg_vfx_res = ztmp * glob_sum( wfx_res(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 98 zbg_vfx_spr = ztmp * glob_sum( wfx_spr(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 99 zbg_vfx_snw = ztmp * glob_sum( wfx_snw(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 100 zbg_vfx_sub = ztmp * glob_sum( wfx_sub(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 101 101 102 102 ! Salt 103 zbg_sfx = ztmp * glob_sum( sfx(:,:) * e1 2t(:,:) * tmask(:,:,1) )104 zbg_sfx_bri = ztmp * glob_sum( sfx_bri(:,:) * e1 2t(:,:) * tmask(:,:,1) )105 zbg_sfx_res = ztmp * glob_sum( sfx_res(:,:) * e1 2t(:,:) * tmask(:,:,1) )106 zbg_sfx_dyn = ztmp * glob_sum( sfx_dyn(:,:) * e1 2t(:,:) * tmask(:,:,1) )107 108 zbg_sfx_bog = ztmp * glob_sum( sfx_bog(:,:) * e1 2t(:,:) * tmask(:,:,1) )109 zbg_sfx_opw = ztmp * glob_sum( sfx_opw(:,:) * e1 2t(:,:) * tmask(:,:,1) )110 zbg_sfx_sni = ztmp * glob_sum( sfx_sni(:,:) * e1 2t(:,:) * tmask(:,:,1) )111 zbg_sfx_bom = ztmp * glob_sum( sfx_bom(:,:) * e1 2t(:,:) * tmask(:,:,1) )112 zbg_sfx_sum = ztmp * glob_sum( sfx_sum(:,:) * e1 2t(:,:) * tmask(:,:,1) )103 zbg_sfx = ztmp * glob_sum( sfx(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 104 zbg_sfx_bri = ztmp * glob_sum( sfx_bri(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 105 zbg_sfx_res = ztmp * glob_sum( sfx_res(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 106 zbg_sfx_dyn = ztmp * glob_sum( sfx_dyn(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 107 108 zbg_sfx_bog = ztmp * glob_sum( sfx_bog(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 109 zbg_sfx_opw = ztmp * glob_sum( sfx_opw(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 110 zbg_sfx_sni = ztmp * glob_sum( sfx_sni(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 111 zbg_sfx_bom = ztmp * glob_sum( sfx_bom(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 112 zbg_sfx_sum = ztmp * glob_sum( sfx_sum(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 113 113 114 114 ! Heat budget 115 zbg_ihc = glob_sum( et_i(:,:) * e1 2t(:,:) * 1.e-20 )! ice heat content [1.e20 J]116 zbg_shc = glob_sum( et_s(:,:) * e1 2t(:,:) * 1.e-20 )! snow heat content [1.e20 J]117 zbg_hfx_dhc = glob_sum( diag_heat(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]118 zbg_hfx_spr = glob_sum( hfx_spr(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]119 120 zbg_hfx_thd = glob_sum( hfx_thd(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]121 zbg_hfx_dyn = glob_sum( hfx_dyn(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]122 zbg_hfx_res = glob_sum( hfx_res(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]123 zbg_hfx_sub = glob_sum( hfx_sub(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]124 zbg_hfx_snw = glob_sum( hfx_snw(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]125 zbg_hfx_sum = glob_sum( hfx_sum(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]126 zbg_hfx_bom = glob_sum( hfx_bom(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]127 zbg_hfx_bog = glob_sum( hfx_bog(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]128 zbg_hfx_dif = glob_sum( hfx_dif(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]129 zbg_hfx_opw = glob_sum( hfx_opw(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]130 zbg_hfx_out = glob_sum( hfx_out(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]131 zbg_hfx_in = glob_sum( hfx_in(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! [in W]115 zbg_ihc = glob_sum( et_i(:,:) * e1e2t(:,:) ) * 1.e-20 ! ice heat content [1.e20 J] 116 zbg_shc = glob_sum( et_s(:,:) * e1e2t(:,:) ) * 1.e-20 ! snow heat content [1.e20 J] 117 zbg_hfx_dhc = glob_sum( diag_heat(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 118 zbg_hfx_spr = glob_sum( hfx_spr(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 119 120 zbg_hfx_thd = glob_sum( hfx_thd(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 121 zbg_hfx_dyn = glob_sum( hfx_dyn(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 122 zbg_hfx_res = glob_sum( hfx_res(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 123 zbg_hfx_sub = glob_sum( hfx_sub(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 124 zbg_hfx_snw = glob_sum( hfx_snw(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 125 zbg_hfx_sum = glob_sum( hfx_sum(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 126 zbg_hfx_bom = glob_sum( hfx_bom(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 127 zbg_hfx_bog = glob_sum( hfx_bog(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 128 zbg_hfx_dif = glob_sum( hfx_dif(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 129 zbg_hfx_opw = glob_sum( hfx_opw(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 130 zbg_hfx_out = glob_sum( hfx_out(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 131 zbg_hfx_in = glob_sum( hfx_in(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! [in W] 132 132 133 133 ! --------------------------------------------- ! 134 134 ! 2 - Trends due to forcing and ice growth/melt ! 135 135 ! --------------------------------------------- ! 136 z_frc_vol = r1_rau0 * glob_sum( - emp(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! volume fluxes137 z_frc_sal = r1_rau0 * glob_sum( sfx(:,:) * e1 2t(:,:) * tmask(:,:,1) ) ! salt fluxes136 z_frc_vol = r1_rau0 * glob_sum( - emp(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! volume fluxes 137 z_frc_sal = r1_rau0 * glob_sum( sfx(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! salt fluxes 138 138 z_bg_grme = glob_sum( - ( wfx_bog(:,:) + wfx_opw(:,:) + wfx_sni(:,:) + wfx_dyn(:,:) + & 139 139 & wfx_bom(:,:) + wfx_sum(:,:) + wfx_res(:,:) + wfx_snw(:,:) + & 140 & wfx_sub(:,:) ) * e1 2t(:,:) * tmask(:,:,1) ) ! volume fluxes140 & wfx_sub(:,:) ) * e1e2t(:,:) * tmask(:,:,1) ) ! volume fluxes 141 141 ! 142 142 frc_vol = frc_vol + z_frc_vol * rdt_ice -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r5123 r5836 191 191 CALL prt_ctl(tab2d_1=delta_i , clinfo1=' lim_dyn : delta_i :') 192 192 CALL prt_ctl(tab2d_1=strength , clinfo1=' lim_dyn : strength :') 193 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_dyn : cell area :')193 CALL prt_ctl(tab2d_1=e1e2t , clinfo1=' lim_dyn : cell area :') 194 194 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_dyn : at_i :') 195 195 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_dyn : vt_i :') -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r5429 r5836 76 76 DO jj = 2, jpjm1 77 77 DO ji = fs_2 , fs_jpim1 ! vector opt. 78 efact(ji,jj) = ( e2u(ji,jj) + e2u(ji-1,jj) + e1v(ji,jj) + e1v(ji,jj-1) ) * r1_e1 2t(ji,jj)78 efact(ji,jj) = ( e2u(ji,jj) + e2u(ji-1,jj) + e1v(ji,jj) + e1v(ji,jj-1) ) * r1_e1e2t(ji,jj) 79 79 END DO 80 80 END DO … … 107 107 DO jj= 2, jpjm1 ! diffusive trend : divergence of the fluxes 108 108 DO ji = fs_2 , fs_jpim1 ! vector opt. 109 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e1 2t(ji,jj)109 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e1e2t(ji,jj) 110 110 END DO 111 111 END DO … … 149 149 DO jj= 2, jpjm1 ! diffusive trend : divergence of the fluxes 150 150 DO ji = fs_2 , fs_jpim1 ! vector opt. 151 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e1 2t(ji,jj)151 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e1e2t(ji,jj) 152 152 ptab(ji,jj) = ztab0(ji,jj) + 0.5 * ( zdiv(ji,jj) + zdiv0(ji,jj) ) 153 153 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r5202 r5836 377 377 CALL prt_ctl_info(' - Cell values : ') 378 378 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 379 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_itd_me : cell area :')379 CALL prt_ctl(tab2d_1=e1e2t, clinfo1=' lim_itd_me : cell area :') 380 380 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_itd_me : at_i :') 381 381 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_itd_me : vt_i :') -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r5429 r5836 355 355 divu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) & 356 356 & + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) & 357 & ) * r1_e1 2t(ji,jj)357 & ) * r1_e1e2t(ji,jj) 358 358 359 359 zdt(ji,jj) = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj) & 360 360 & - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj) & 361 & ) * r1_e1 2t(ji,jj)361 & ) * r1_e1e2t(ji,jj) 362 362 363 363 ! 364 364 zds(ji,jj) = ( ( u_ice(ji,jj+1) * r1_e1u(ji,jj+1) - u_ice(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj) & 365 365 & + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj) & 366 & ) * r1_e1 2f(ji,jj) * ( 2._wp - fmask(ji,jj,1) ) &366 & ) * r1_e1e2f(ji,jj) * ( 2._wp - fmask(ji,jj,1) ) & 367 367 & * zmask(ji,jj) * zmask(ji,jj+1) * zmask(ji+1,jj) * zmask(ji+1,jj+1) 368 368 … … 386 386 zdst = ( e2u(ji,jj) * v_ice1(ji,jj) - e2u(ji-1,jj ) * v_ice1(ji-1,jj ) & 387 387 & + e1v(ji,jj) * u_ice2(ji,jj) - e1v(ji ,jj-1) * u_ice2(ji ,jj-1) & 388 & ) * r1_e1 2t(ji,jj)388 & ) * r1_e1e2t(ji,jj) 389 389 390 390 delta = SQRT( divu_i(ji,jj)**2 + ( zdt(ji,jj)**2 + zdst**2 ) * usecc2 ) … … 394 394 zddc = ( ( v_ice1(ji,jj+1) * r1_e1u(ji,jj+1) - v_ice1(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj) & 395 395 & + ( u_ice2(ji+1,jj) * r1_e2v(ji+1,jj) - u_ice2(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj) & 396 & ) * r1_e1 2f(ji,jj)396 & ) * r1_e1e2f(ji,jj) 397 397 398 398 zdtc = (- ( v_ice1(ji,jj+1) * r1_e1u(ji,jj+1) - v_ice1(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj) & 399 399 & + ( u_ice2(ji+1,jj) * r1_e2v(ji+1,jj) - u_ice2(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj) & 400 & ) * r1_e1 2f(ji,jj)400 & ) * r1_e1e2f(ji,jj) 401 401 402 402 zddc = SQRT( zddc**2 + ( zdtc**2 + zds(ji,jj)**2 ) * usecc2 ) + rn_creepl … … 423 423 & + ( zs2(ji+1,jj) * e2t(ji+1,jj)**2 - zs2(ji,jj) * e2t(ji,jj)**2 ) * r1_e2u(ji,jj) & 424 424 & + 2.0 * ( zs12(ji,jj) * e1f(ji,jj)**2 - zs12(ji,jj-1) * e1f(ji,jj-1)**2 ) * r1_e1u(ji,jj) & 425 & ) * r1_e1 2u(ji,jj)425 & ) * r1_e1e2u(ji,jj) 426 426 ! contribution of zs1, zs2 and zs12 to zf2 427 427 zf2(ji,jj) = 0.5 * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj) & 428 428 & - ( zs2(ji,jj+1) * e1t(ji,jj+1)**2 - zs2(ji,jj) * e1t(ji,jj)**2 ) * r1_e1v(ji,jj) & 429 429 & + 2.0 * ( zs12(ji,jj) * e2f(ji,jj)**2 - zs12(ji-1,jj) * e2f(ji-1,jj)**2 ) * r1_e2v(ji,jj) & 430 & ) * r1_e1 2v(ji,jj)430 & ) * r1_e1e2v(ji,jj) 431 431 END DO 432 432 END DO … … 607 607 divu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj ) * u_ice(ji-1,jj ) & 608 608 & + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji ,jj-1) * v_ice(ji ,jj-1) & 609 & ) * r1_e1 2t(ji,jj)609 & ) * r1_e1e2t(ji,jj) 610 610 611 611 zdt(ji,jj) = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj) & 612 612 & -( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj) & 613 & ) * r1_e1 2t(ji,jj)613 & ) * r1_e1e2t(ji,jj) 614 614 ! 615 615 ! SB modif because ocean has no slip boundary condition 616 616 zds(ji,jj) = ( ( u_ice(ji,jj+1) * r1_e1u(ji,jj+1) - u_ice(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj) & 617 617 & +( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj) & 618 & ) * r1_e1 2f(ji,jj) * ( 2.0 - fmask(ji,jj,1) ) &618 & ) * r1_e1e2f(ji,jj) * ( 2.0 - fmask(ji,jj,1) ) & 619 619 & * zmask(ji,jj) * zmask(ji,jj+1) * zmask(ji+1,jj) * zmask(ji+1,jj+1) 620 620 621 621 zdst = ( e2u(ji,jj) * v_ice1(ji,jj) - e2u(ji-1,jj ) * v_ice1(ji-1,jj ) & 622 & + e1v(ji,jj) * u_ice2(ji,jj) - e1v(ji ,jj-1) * u_ice2(ji ,jj-1) ) * r1_e1 2t(ji,jj)622 & + e1v(ji,jj) * u_ice2(ji,jj) - e1v(ji ,jj-1) * u_ice2(ji ,jj-1) ) * r1_e1e2t(ji,jj) 623 623 624 624 delta = SQRT( divu_i(ji,jj)**2 + ( zdt(ji,jj)**2 + zdst**2 ) * usecc2 ) … … 637 637 DO ji = fs_2, fs_jpim1 638 638 zdst = ( e2u(ji,jj) * v_ice1(ji,jj) - e2u( ji-1, jj ) * v_ice1(ji-1,jj) & 639 & + e1v(ji,jj) * u_ice2(ji,jj) - e1v( ji , jj-1 ) * u_ice2(ji,jj-1) ) * r1_e1 2t(ji,jj)639 & + e1v(ji,jj) * u_ice2(ji,jj) - e1v( ji , jj-1 ) * u_ice2(ji,jj-1) ) * r1_e1e2t(ji,jj) 640 640 shear_i(ji,jj) = SQRT( zdt(ji,jj) * zdt(ji,jj) + zdst * zdst ) 641 641 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r5407 r5836 325 325 CALL prt_ctl_info(' - Cell values : ') 326 326 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 327 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_thd : cell area :')327 CALL prt_ctl(tab2d_1=e1e2t, clinfo1=' lim_thd : cell area :') 328 328 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_thd : at_i :') 329 329 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_thd : vt_i :') … … 382 382 CALL prt_ctl_info(' - Cell values : ') 383 383 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 384 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_itd_th : cell area :')384 CALL prt_ctl(tab2d_1=e1e2t, clinfo1=' lim_itd_th : cell area :') 385 385 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_itd_th : at_i :') 386 386 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_itd_th : vt_i :') -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r5202 r5836 95 95 ENDIF 96 96 97 zsm(:,:) = e1 2t(:,:)97 zsm(:,:) = e1e2t(:,:) 98 98 99 99 ! !-------------------------------------! … … 162 162 ! transported fields 163 163 !------------------------- 164 z0opw(:,:,1) = ato_i(:,:) * e1 2t(:,:) ! Open water area165 DO jl = 1, jpl 166 z0snw (:,:,jl) = v_s (:,:, jl) * e12t(:,:)! Snow volume167 z0ice(:,:,jl) = v_i (:,:, jl) * e12t(:,:)! Ice volume168 z0ai (:,:,jl) = a_i (:,:, jl) * e12t(:,:)! Ice area169 z0smi (:,:,jl) = smv_i(:,:, jl) * e12t(:,:)! Salt content170 z0oi (:,:,jl) = oa_i (:,:, jl) * e12t(:,:)! Age content171 z0es (:,:,jl) = e_s (:,:,1,jl) * e1 2t(:,:) ! Snow heat content164 z0opw(:,:,1) = ato_i(:,:) * e1e2t(:,:) ! Open water area 165 DO jl = 1, jpl 166 z0snw (:,:,jl) = v_s (:,:, jl) * e1e2t(:,:) ! Snow volume 167 z0ice(:,:,jl) = v_i (:,:, jl) * e1e2t(:,:) ! Ice volume 168 z0ai (:,:,jl) = a_i (:,:, jl) * e1e2t(:,:) ! Ice area 169 z0smi (:,:,jl) = smv_i(:,:, jl) * e1e2t(:,:) ! Salt content 170 z0oi (:,:,jl) = oa_i (:,:, jl) * e1e2t(:,:) ! Age content 171 z0es (:,:,jl) = e_s (:,:,1,jl) * e1e2t(:,:) ! Snow heat content 172 172 DO jk = 1, nlay_i 173 z0ei (:,:,jk,jl) = e_i (:,:,jk,jl) * e1 2t(:,:) ! Ice heat content173 z0ei (:,:,jk,jl) = e_i (:,:,jk,jl) * e1e2t(:,:) ! Ice heat content 174 174 END DO 175 175 END DO … … 263 263 ! Recover the properties from their contents 264 264 !------------------------------------------- 265 ato_i(:,:) = z0opw(:,:,1) * r1_e1 2t(:,:)266 DO jl = 1, jpl 267 v_i (:,:, jl) = z0ice(:,:,jl) * r1_e12t(:,:)268 v_s (:,:, jl) = z0snw(:,:,jl) * r1_e12t(:,:)269 smv_i(:,:, jl) = z0smi(:,:,jl) * r1_e12t(:,:)270 oa_i (:,:, jl) = z0oi (:,:,jl) * r1_e12t(:,:)271 a_i (:,:, jl) = z0ai (:,:,jl) * r1_e12t(:,:)272 e_s (:,:,1,jl) = z0es (:,:,jl) * r1_e1 2t(:,:)265 ato_i(:,:) = z0opw(:,:,1) * r1_e1e2t(:,:) 266 DO jl = 1, jpl 267 v_i (:,:, jl) = z0ice(:,:,jl) * r1_e1e2t(:,:) 268 v_s (:,:, jl) = z0snw(:,:,jl) * r1_e1e2t(:,:) 269 smv_i(:,:, jl) = z0smi(:,:,jl) * r1_e1e2t(:,:) 270 oa_i (:,:, jl) = z0oi (:,:,jl) * r1_e1e2t(:,:) 271 a_i (:,:, jl) = z0ai (:,:,jl) * r1_e1e2t(:,:) 272 e_s (:,:,1,jl) = z0es (:,:,jl) * r1_e1e2t(:,:) 273 273 DO jk = 1, nlay_i 274 e_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1 2t(:,:)274 e_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:) 275 275 END DO 276 276 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r5215 r5836 146 146 CALL prt_ctl_info(' - Cell values : ') 147 147 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 148 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_update1 : cell area :')148 CALL prt_ctl(tab2d_1=e1e2t , clinfo1=' lim_update1 : cell area :') 149 149 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_update1 : at_i :') 150 150 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_update1 : vt_i :') -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r5410 r5836 191 191 CALL prt_ctl_info(' - Cell values : ') 192 192 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 193 CALL prt_ctl(tab2d_1=e1 2t, clinfo1=' lim_update2 : cell area :')193 CALL prt_ctl(tab2d_1=e1e2t , clinfo1=' lim_update2 : cell area :') 194 194 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_update2 : at_i :') 195 195 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_update2 : vt_i :') -
trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_sponge.F90
r5656 r5836 210 210 DO jj = j1,j2-1 211 211 DO ji = i1,i2-1 212 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk)213 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk)212 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * fse3u_n(ji,jj,jk) 213 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * fse3v_n(ji,jj,jk) 214 214 ztu(ji,jj,jk) = zabe1 * ( tsbdiff(ji+1,jj ,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 215 215 ztv(ji,jj,jk) = zabe2 * ( tsbdiff(ji ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) … … 239 239 240 240 IF (.NOT. tabspongedone_tsn(ji,jj)) THEN 241 zbtr = r1_e1 2t(ji,jj) / fse3t_n(ji,jj,jk)241 zbtr = r1_e1e2t(ji,jj) / fse3t_n(ji,jj,jk) 242 242 ! horizontal diffusive trends 243 243 ztsa = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) + ztv(ji,jj,jk) - ztv(ji ,jj-1,jk) ) … … 290 290 DO jj = j1,j2 291 291 DO ji = i1+1,i2 ! vector opt. 292 zbtr = r1_e1 2t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj)292 zbtr = r1_e1e2t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj) 293 293 hdivdiff(ji,jj,jk) = ( e2u(ji ,jj)*fse3u_n(ji ,jj,jk) * ubdiff(ji ,jj,jk) & 294 294 & -e2u(ji-1,jj)*fse3u_n(ji-1,jj,jk) * ubdiff(ji-1,jj,jk) ) * zbtr … … 298 298 DO jj = j1,j2-1 299 299 DO ji = i1,i2 ! vector opt. 300 zbtr = r1_e1 2f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj)300 zbtr = r1_e1e2f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj) 301 301 rotdiff(ji,jj,jk) = (-e1u(ji,jj+1) * ubdiff(ji,jj+1,jk) & 302 302 +e1u(ji,jj ) * ubdiff(ji,jj ,jk) & … … 396 396 DO jj = j1+1,j2 397 397 DO ji = i1,i2 ! vector opt. 398 zbtr = r1_e1 2t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj)398 zbtr = r1_e1e2t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj) 399 399 hdivdiff(ji,jj,jk) = ( e1v(ji,jj ) * fse3v(ji,jj ,jk) * vbdiff(ji,jj ,jk) & 400 400 & -e1v(ji,jj-1) * fse3v(ji,jj-1,jk) * vbdiff(ji,jj-1,jk) ) * zbtr … … 403 403 DO jj = j1,j2 404 404 DO ji = i1,i2-1 ! vector opt. 405 zbtr = r1_e1 2f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj)405 zbtr = r1_e1e2f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj) 406 406 rotdiff(ji,jj,jk) = ( e2v(ji+1,jj) * vbdiff(ji+1,jj,jk) & 407 407 & -e2v(ji ,jj) * vbdiff(ji ,jj,jk) & -
trunk/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90
r5656 r5836 74 74 DO jj = j1,j2-1 75 75 DO ji = i1,i2-1 76 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk)77 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk)76 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * fse3u_n(ji,jj,jk) 77 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * fse3v_n(ji,jj,jk) 78 78 ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 79 79 ztv(ji,jj) = zabe2 * ( trbdiff(ji ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) … … 85 85 86 86 IF (.NOT. tabspongedone_trn(ji,jj)) THEN 87 zbtr = r1_e1 2t(ji,jj) / fse3t(ji,jj,jk)87 zbtr = r1_e1e2t(ji,jj) / fse3t(ji,jj,jk) 88 88 ! horizontal diffusive trends 89 89 ztra = zbtr * ( ztu(ji,jj) - ztu(ji-1,jj ) + ztv(ji,jj) - ztv(ji ,jj-1) ) -
trunk/NEMOGCM/NEMO/OFF_SRC/domrea.F90
r5504 r5836 4 4 !! Ocean initialization : domain initialization 5 5 !!============================================================================== 6 !! History : OPA ! 1990-10 (C. Levy - G. Madec) Original code 7 !! ! 1992-01 (M. Imbard) insert time step initialization 8 !! ! 1996-06 (G. Madec) generalized vertical coordinate 9 !! ! 1997-02 (G. Madec) creation of domwri.F 10 !! ! 2001-05 (E.Durand - G. Madec) insert closed sea 11 !! NEMO 1.0 ! 2002-08 (G. Madec) F90: Free form and module 12 !!---------------------------------------------------------------------- 6 13 7 14 !!---------------------------------------------------------------------- … … 10 17 !! dom_ctl : control print for the ocean domain 11 18 !!---------------------------------------------------------------------- 12 !! * Modules used13 19 USE oce ! 20 USE trc_oce ! shared ocean/biogeochemical variables 14 21 USE dom_oce ! ocean space and time domain 15 22 USE phycst ! physical constants 23 USE domstp ! domain: set the time-step 24 ! 16 25 USE in_out_manager ! I/O manager 17 26 USE lib_mpp ! distributed memory computing library 18 19 USE domstp ! domain: set the time-step20 21 27 USE lbclnk ! lateral boundary condition - MPP exchanges 22 USE trc_oce ! shared ocean/biogeochemical variables23 28 USE wrk_nemo 24 29 … … 26 31 PRIVATE 27 32 28 !! * Routine accessibility 29 PUBLIC dom_rea ! called by opa.F90 33 PUBLIC dom_rea ! called by nemogcm.F90 30 34 31 35 !! * Substitutions … … 33 37 # include "vectopt_loop_substitute.h90" 34 38 !!---------------------------------------------------------------------- 35 !! NEMO/OFF 3. 3 , NEMO Consortium (2010)39 !! NEMO/OFF 3.7 , NEMO Consortium (2015) 36 40 !! $Id$ 37 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 38 42 !!---------------------------------------------------------------------- 39 40 43 CONTAINS 41 44 … … 51 54 !! - dom_stp: defined the model time step 52 55 !! - dom_rea: read the meshmask file if nmsh=1 53 !! 54 !! History : 55 !! ! 90-10 (C. Levy - G. Madec) Original code 56 !! ! 91-11 (G. Madec) 57 !! ! 92-01 (M. Imbard) insert time step initialization 58 !! ! 96-06 (G. Madec) generalized vertical coordinate 59 !! ! 97-02 (G. Madec) creation of domwri.F 60 !! ! 01-05 (E.Durand - G. Madec) insert closed sea 61 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 62 !!---------------------------------------------------------------------- 63 !! * Local declarations 64 INTEGER :: jk ! dummy loop argument 65 INTEGER :: iconf = 0 ! temporary integers 66 !!---------------------------------------------------------------------- 67 56 !!---------------------------------------------------------------------- 57 INTEGER :: jk ! dummy loop index 58 INTEGER :: iconf = 0 ! local integers 59 !!---------------------------------------------------------------------- 60 ! 68 61 IF(lwp) THEN 69 62 WRITE(numout,*) … … 71 64 WRITE(numout,*) '~~~~~~~~' 72 65 ENDIF 73 74 CALL dom_nam ! read namelist ( namrun, namdom , namcla)66 ! 67 CALL dom_nam ! read namelist ( namrun, namdom ) 75 68 CALL dom_zgr ! Vertical mesh and bathymetry option 76 69 CALL dom_grd ! Create a domain file 77 78 !79 ! - ML - Used in dom_vvl_sf_nxt and lateral diffusion routines80 ! but could be usefull in many other routines81 e12t (:,:) = e1t(:,:) * e2t(:,:)82 e1e2t (:,:) = e1t(:,:) * e2t(:,:)83 e12u (:,:) = e1u(:,:) * e2u(:,:)84 e12v (:,:) = e1v(:,:) * e2v(:,:)85 e1 2f (:,:) = e1f(:,:) * e2f(:,:)86 r1_e12t (:,:) = 1._wp / e12t(:,:)87 r1_e12u (:,:) = 1._wp / e12u(:,:)88 r1_e12v (:,:) = 1._wp / e12v(:,:)89 r1_e12f (:,:) = 1._wp / e12f(:,:)90 re2u_e1u(:,:) = e2u(:,:) / e1u(:,:)91 re1v_e2v(:,:) = e1v(:,:) / e2v(:,:)92 ! 93 hu(:,:) = 0._wp 70 ! 71 ! ! associated horizontal metrics 72 ! 73 r1_e1t(:,:) = 1._wp / e1t(:,:) ; r1_e2t (:,:) = 1._wp / e2t(:,:) 74 r1_e1u(:,:) = 1._wp / e1u(:,:) ; r1_e2u (:,:) = 1._wp / e2u(:,:) 75 r1_e1v(:,:) = 1._wp / e1v(:,:) ; r1_e2v (:,:) = 1._wp / e2v(:,:) 76 r1_e1f(:,:) = 1._wp / e1f(:,:) ; r1_e2f (:,:) = 1._wp / e2f(:,:) 77 ! 78 e1e2t (:,:) = e1t(:,:) * e2t(:,:) ; r1_e1e2t(:,:) = 1._wp / e1e2t(:,:) 79 e1e2u (:,:) = e1u(:,:) * e2u(:,:) ; r1_e1e2u(:,:) = 1._wp / e1e2u(:,:) 80 e1e2v (:,:) = e1v(:,:) * e2v(:,:) ; r1_e1e2v(:,:) = 1._wp / e1e2v(:,:) 81 e1e2f (:,:) = e1f(:,:) * e2f(:,:) ; r1_e1e2f(:,:) = 1._wp / e1e2f(:,:) 82 ! 83 e2_e1u(:,:) = e2u(:,:) / e1u(:,:) 84 e1_e2v(:,:) = e1v(:,:) / e2v(:,:) 85 ! 86 hu(:,:) = 0._wp ! Ocean depth at U- and V-points 94 87 hv(:,:) = 0._wp 95 88 DO jk = 1, jpk … … 100 93 hur(:,:) = 1._wp / ( hu(:,:) + 1._wp - umask(:,:,1) ) * umask(:,:,1) 101 94 hvr(:,:) = 1._wp / ( hv(:,:) + 1._wp - vmask(:,:,1) ) * vmask(:,:,1) 102 95 ! 103 96 CALL dom_stp ! Time step 104 97 CALL dom_msk ! Masks 105 98 CALL dom_ctl ! Domain control 106 99 ! 107 100 END SUBROUTINE dom_rea 101 108 102 109 103 SUBROUTINE dom_nam … … 115 109 !! ** input : - namrun namelist 116 110 !! - namdom namelist 117 !! - namcla namelist118 111 !!---------------------------------------------------------------------- 119 112 USE ioipsl 120 INTEGER :: ios ! Local integer output status for namelist read 113 INTEGER :: ios ! Local integer output status for namelist read 114 ! 121 115 NAMELIST/namrun/ cn_ocerst_indir, cn_ocerst_outdir, nn_stocklist, ln_rst_list, & 122 116 & nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl, & … … 130 124 & ppsur, ppa0, ppa1, ppkth, ppacr, ppdzmin, pphmax, ldbletanh, & 131 125 & ppa2, ppkth2, ppacr2 132 NAMELIST/namcla/ nn_cla133 126 #if defined key_netcdf4 134 127 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 178 171 nstocklist = nn_stocklist 179 172 nwrite = nn_write 180 181 173 ! 182 174 ! ! control of output frequency 183 175 IF ( nstock == 0 .OR. nstock > nitend ) THEN … … 275 267 rdth = rn_rdth 276 268 277 REWIND( numnam_ref ) ! Namelist namcla in reference namelist : Cross land advection278 READ ( numnam_ref, namcla, IOSTAT = ios, ERR = 905)279 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in reference namelist', lwp )280 281 REWIND( numnam_cfg ) ! Namelist namcla in configuration namelist : Cross land advection282 READ ( numnam_cfg, namcla, IOSTAT = ios, ERR = 906 )283 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in configuration namelist', lwp )284 IF(lwm) WRITE( numond, namcla )285 286 IF(lwp) THEN287 WRITE(numout,*)288 WRITE(numout,*) ' Namelist namcla'289 WRITE(numout,*) ' cross land advection nn_cla = ', nn_cla290 ENDIF291 292 269 #if defined key_netcdf4 293 270 ! ! NetCDF 4 case ("key_netcdf4" defined) … … 321 298 END SUBROUTINE dom_nam 322 299 300 323 301 SUBROUTINE dom_zgr 324 302 !!---------------------------------------------------------------------- … … 374 352 END SUBROUTINE dom_zgr 375 353 354 376 355 SUBROUTINE dom_ctl 377 356 !!---------------------------------------------------------------------- … … 382 361 !! ** Method : compute and print extrema of masked scale factors 383 362 !! 384 !! History : 385 !! 8.5 ! 02-08 (G. Madec) Original code 386 !!---------------------------------------------------------------------- 387 !! * Local declarations 363 !!---------------------------------------------------------------------- 388 364 INTEGER :: iimi1, ijmi1, iimi2, ijmi2, iima1, ijma1, iima2, ijma2 389 365 INTEGER, DIMENSION(2) :: iloc ! … … 421 397 ijma2 = iloc(2) + njmpp - 1 422 398 ENDIF 423 399 ! 424 400 IF(lwp) THEN 425 401 WRITE(numout,"(14x,'e1t maxi: ',1f10.2,' at i = ',i5,' j= ',i5)") ze1max, iima1, ijma1 … … 428 404 WRITE(numout,"(14x,'e2t mini: ',1f10.2,' at i = ',i5,' j= ',i5)") ze2min, iimi2, ijmi2 429 405 ENDIF 430 406 ! 431 407 END SUBROUTINE dom_ctl 408 432 409 433 410 SUBROUTINE dom_grd … … 538 515 CALL iom_get( inum2, jpdom_data, 'facvolt', facvol ) 539 516 #endif 540 541 517 ! ! horizontal mesh (inum3) 542 518 CALL iom_get( inum3, jpdom_data, 'glamt', glamt ) … … 756 732 !! (min value = 1 over land) 757 733 !!---------------------------------------------------------------------- 758 !759 734 INTEGER :: ji, jj ! dummy loop indices 760 735 REAL(wp), POINTER, DIMENSION(:,:) :: zmbk … … 785 760 END SUBROUTINE zgr_bot_level 786 761 762 787 763 SUBROUTINE dom_msk 788 764 !!--------------------------------------------------------------------- … … 799 775 !! tpol : ??? 800 776 !!---------------------------------------------------------------------- 801 ! 802 INTEGER :: ji, jj, jk ! dummy loop indices 803 INTEGER :: iif, iil, ijf, ijl ! local integers 777 INTEGER :: ji, jj, jk ! dummy loop indices 778 INTEGER :: iif, iil, ijf, ijl ! local integers 804 779 INTEGER, POINTER, DIMENSION(:,:) :: imsk 805 !806 780 !!--------------------------------------------------------------------- 807 781 … … 853 827 ! 3. Ocean/land mask at wu-, wv- and w points 854 828 !---------------------------------------------- 855 wmask (:,:,1) = tmask(:,:,1) ! ????????856 wumask(:,:,1) = umask(:,:,1) ! ????????857 wvmask(:,:,1) = vmask(:,:,1) ! ????????858 DO jk =2,jpk859 wmask (:,:,jk) =tmask(:,:,jk) * tmask(:,:,jk-1)860 wumask(:,:,jk) =umask(:,:,jk) * umask(:,:,jk-1)861 wvmask(:,:,jk) =vmask(:,:,jk) * vmask(:,:,jk-1)829 wmask (:,:,1) = tmask(:,:,1) ! surface value 830 wumask(:,:,1) = umask(:,:,1) 831 wvmask(:,:,1) = vmask(:,:,1) 832 DO jk = 2, jpk ! deeper value 833 wmask (:,:,jk) = tmask(:,:,jk) * tmask(:,:,jk-1) 834 wumask(:,:,jk) = umask(:,:,jk) * umask(:,:,jk-1) 835 wvmask(:,:,jk) = vmask(:,:,jk) * vmask(:,:,jk-1) 862 836 END DO 863 837 ! -
trunk/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
r5768 r5836 26 26 USE trc_oce ! share ocean/biogeo variables 27 27 USE phycst ! physical constants 28 USE ldftra ! lateral diffusivity coefficients 28 29 USE trabbl ! active tracer: bottom boundary layer 29 30 USE ldfslp ! lateral diffusion: iso-neutral slopes 30 USE ldfeiv ! eddy induced velocity coef.31 USE ldftra_oce ! ocean tracer lateral physics32 31 USE zdfmxl ! vertical physics: mixed layer depth 33 32 USE eosbn2 ! equation of state - Brunt Vaisala frequency … … 40 39 USE fldread ! read input fields 41 40 USE timing ! Timing 41 USE wrk_nemo 42 42 43 43 IMPLICIT NONE … … 50 50 LOGICAL :: ln_dynwzv !: vertical velocity read in a file (T) or computed from u/v (F) 51 51 LOGICAL :: ln_dynbbl !: bbl coef read in a file (T) or computed (F) 52 LOGICAL :: ln_degrad !: degradation option enabled or not53 52 LOGICAL :: ln_dynrnf !: read runoff data in file (T) or set to zero (F) 54 53 55 INTEGER , PARAMETER :: jpfld = 21! maximum number of fields to read54 INTEGER , PARAMETER :: jpfld = 15 ! maximum number of fields to read 56 55 INTEGER , SAVE :: jf_tem ! index of temperature 57 56 INTEGER , SAVE :: jf_sal ! index of salinity … … 68 67 INTEGER , SAVE :: jf_ubl ! index of u-bbl coef 69 68 INTEGER , SAVE :: jf_vbl ! index of v-bbl coef 70 INTEGER , SAVE :: jf_ahu ! index of u-diffusivity coef71 INTEGER , SAVE :: jf_ahv ! index of v-diffusivity coef72 INTEGER , SAVE :: jf_ahw ! index of w-diffusivity coef73 INTEGER , SAVE :: jf_eiu ! index of u-eiv74 INTEGER , SAVE :: jf_eiv ! index of v-eiv75 INTEGER , SAVE :: jf_eiw ! index of w-eiv76 69 INTEGER , SAVE :: jf_fmf ! index of downward salt flux 77 70 … … 112 105 !! - interpolates data if needed 113 106 !!---------------------------------------------------------------------- 114 ! 115 USE oce, ONLY: zts => tsa 107 USE oce, ONLY: zts => tsa 116 108 USE oce, ONLY: zuslp => ua , zvslp => va 117 USE oce, ONLY: zwslpi => rotb , zwslpj => rotn118 USE oce, ONLY: zu => ub , zv => vb, zw => hdivb109 USE oce, ONLY: zwslpi => ua_sv , zwslpj => va_sv 110 USE oce, ONLY: zu => ub , zv => vb, zw => rke 119 111 ! 120 112 INTEGER, INTENT(in) :: kt ! ocean time-step index 113 ! 114 ! REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts 115 ! REAL(wp), DIMENSION(jpi,jpj,jpk ) :: zuslp, zvslp, zwslpi, zwslpj 116 ! REAL(wp), DIMENSION(jpi,jpj,jpk ) :: zu, zv, zw 117 ! 121 118 ! 122 119 INTEGER :: ji, jj ! dummy loop indices … … 138 135 CALL fld_read( kt, 1, sf_dyn ) !== read data at kt time step ==! 139 136 ! 140 IF( l k_ldfslp .AND. .NOT.lk_c1d .AND. sf_dyn(jf_tem)%ln_tint ) THEN ! Computes slopes (here avt is used as workspace)137 IF( l_ldfslp .AND. .NOT.lk_c1d .AND. sf_dyn(jf_tem)%ln_tint ) THEN ! Computes slopes (here avt is used as workspace) 141 138 zts(:,:,:,jp_tem) = sf_dyn(jf_tem)%fdta(:,:,:,1) * tmask(:,:,:) ! temperature 142 139 zts(:,:,:,jp_sal) = sf_dyn(jf_sal)%fdta(:,:,:,1) * tmask(:,:,:) ! salinity … … 162 159 ENDIF 163 160 ! 164 IF( l k_ldfslp .AND. .NOT.lk_c1d ) THEN ! Computes slopes (here avt is used as workspace)161 IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN ! Computes slopes (here avt is used as workspace) 165 162 iswap_tem = 0 166 163 IF( kt /= nit000 .AND. ( sf_dyn(jf_tem)%nrec_a(2) - nrecprev_tem ) /= 0 ) iswap_tem = 1 … … 267 264 rnf (:,:) = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! river runoffs 268 265 266 ! ! update eddy diffusivity coeff. and/or eiv coeff. at kt 267 IF( l_ldftra_time .OR. l_ldfeiv_time ) CALL ldf_tra( kt ) 269 268 ! ! bbl diffusive coef 270 269 #if defined key_trabbl && ! defined key_c1d … … 276 275 CALL bbl( kt, nit000, 'TRC') 277 276 END IF 278 #endif279 #if ( ! defined key_degrad && defined key_traldf_c2d && defined key_traldf_eiv ) && ! defined key_c1d280 aeiw(:,:) = sf_dyn(jf_eiw)%fnow(:,:,1) * tmask(:,:,1) ! w-eiv281 ! ! Computes the horizontal values from the vertical value282 DO jj = 2, jpjm1283 DO ji = fs_2, fs_jpim1 ! vector opt.284 aeiu(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji+1,jj ) ) ! Average the diffusive coefficient at u- v- points285 aeiv(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji ,jj+1) ) ! at u- v- points286 END DO287 END DO288 CALL lbc_lnk( aeiu, 'U', 1. ) ; CALL lbc_lnk( aeiv, 'V', 1. ) ! lateral boundary condition289 #endif290 291 #if defined key_degrad && ! defined key_c1d292 ! ! degrad option : diffusive and eiv coef are 3D293 ahtu(:,:,:) = sf_dyn(jf_ahu)%fnow(:,:,:) * umask(:,:,:)294 ahtv(:,:,:) = sf_dyn(jf_ahv)%fnow(:,:,:) * vmask(:,:,:)295 ahtw(:,:,:) = sf_dyn(jf_ahw)%fnow(:,:,:) * tmask(:,:,:)296 # if defined key_traldf_eiv297 aeiu(:,:,:) = sf_dyn(jf_eiu)%fnow(:,:,:) * umask(:,:,:)298 aeiv(:,:,:) = sf_dyn(jf_eiv)%fnow(:,:,:) * vmask(:,:,:)299 aeiw(:,:,:) = sf_dyn(jf_eiw)%fnow(:,:,:) * tmask(:,:,:)300 # endif301 277 #endif 302 278 ! … … 339 315 TYPE(FLD_N), DIMENSION(jpfld) :: slf_d ! array of namelist informations on the fields to read 340 316 TYPE(FLD_N) :: sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf ! informations about the fields to be read 341 TYPE(FLD_N) :: sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl ! " " 342 TYPE(FLD_N) :: sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf ! " " 343 !!---------------------------------------------------------------------- 344 ! 345 NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_degrad, ln_dynrnf, & 317 TYPE(FLD_N) :: sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl, sn_fmf ! " " 318 NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_dynrnf, & 346 319 & sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf, & 347 & sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl, &348 & sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf320 & sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl, sn_fmf 321 !!---------------------------------------------------------------------- 349 322 ! 350 323 REWIND( numnam_ref ) ! Namelist namdta_dyn in reference namelist : Offline: init. of dynamical data … … 365 338 WRITE(numout,*) ' vertical velocity read from file (T) or computed (F) ln_dynwzv = ', ln_dynwzv 366 339 WRITE(numout,*) ' bbl coef read from file (T) or computed (F) ln_dynbbl = ', ln_dynbbl 367 WRITE(numout,*) ' degradation option enabled (T) or not (F) ln_degrad = ', ln_degrad368 340 WRITE(numout,*) ' river runoff option enabled (T) or not (F) ln_dynrnf = ', ln_dynrnf 369 341 WRITE(numout,*) 370 342 ENDIF 371 343 ! 372 IF( ln_degrad .AND. .NOT.lk_degrad ) THEN373 CALL ctl_warn( 'dta_dyn_init: degradation option requires key_degrad activated ; force ln_degrad to false' )374 ln_degrad = .FALSE.375 ENDIF376 344 IF( ln_dynbbl .AND. ( .NOT.lk_trabbl .OR. lk_c1d ) ) THEN 377 345 CALL ctl_warn( 'dta_dyn_init: bbl option requires key_trabbl activated ; force ln_dynbbl to false' ) … … 395 363 ENDIF 396 364 397 ! 398 IF( .NOT.ln_degrad ) THEN ! no degrad option 399 IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN ! eiv & bbl 400 jf_ubl = jfld + 1 ; jf_vbl = jfld + 2 ; jf_eiw = jfld + 3 ; jfld = jf_eiw 401 slf_d(jf_ubl) = sn_ubl ; slf_d(jf_vbl) = sn_vbl ; slf_d(jf_eiw) = sn_eiw 402 ENDIF 403 IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN ! no eiv & bbl 365 IF( ln_dynbbl ) THEN ! eiv & bbl 404 366 jf_ubl = jfld + 1 ; jf_vbl = jfld + 2 ; jfld = jf_vbl 405 367 slf_d(jf_ubl) = sn_ubl ; slf_d(jf_vbl) = sn_vbl 406 ENDIF 407 IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN ! eiv & no bbl 408 jf_eiw = jfld + 1 ; jfld = jf_eiw ; slf_d(jf_eiw) = sn_eiw 409 ENDIF 410 ELSE 411 jf_ahu = jfld + 1 ; jf_ahv = jfld + 2 ; jf_ahw = jfld + 3 ; jfld = jf_ahw 412 slf_d(jf_ahu) = sn_ahu ; slf_d(jf_ahv) = sn_ahv ; slf_d(jf_ahw) = sn_ahw 413 IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN ! eiv & bbl 414 jf_ubl = jfld + 1 ; jf_vbl = jfld + 2 ; 415 slf_d(jf_ubl) = sn_ubl ; slf_d(jf_vbl) = sn_vbl 416 jf_eiu = jfld + 3 ; jf_eiv = jfld + 4 ; jf_eiw = jfld + 5 ; jfld = jf_eiw 417 slf_d(jf_eiu) = sn_eiu ; slf_d(jf_eiv) = sn_eiv ; slf_d(jf_eiw) = sn_eiw 418 ENDIF 419 IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN ! no eiv & bbl 420 jf_ubl = jfld + 1 ; jf_vbl = jfld + 2 ; jfld = jf_vbl 421 slf_d(jf_ubl) = sn_ubl ; slf_d(jf_vbl) = sn_vbl 422 ENDIF 423 IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN ! eiv & no bbl 424 jf_eiu = jfld + 1 ; jf_eiv = jfld + 2 ; jf_eiw = jfld + 3 ; jfld = jf_eiw 425 slf_d(jf_eiu) = sn_eiu ; slf_d(jf_eiv) = sn_eiv ; slf_d(jf_eiw) = sn_eiw 426 ENDIF 427 ENDIF 428 368 ENDIF 369 370 429 371 ALLOCATE( sf_dyn(jfld), STAT=ierr ) ! set sf structure 430 372 IF( ierr > 0 ) THEN … … 452 394 END DO 453 395 ! 454 IF( l k_ldfslp .AND. .NOT.lk_c1d ) THEN ! slopes396 IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN ! slopes 455 397 IF( sf_dyn(jf_tem)%ln_tint ) THEN ! time interpolation 456 398 ALLOCATE( uslpdta (jpi,jpj,jpk,2), vslpdta (jpi,jpj,jpk,2), & … … 511 453 zv = pv(ji ,jj ,jk) * vmask(ji ,jj ,jk) * e1v(ji ,jj ) * fse3v(ji ,jj ,jk) 512 454 zv1 = pv(ji ,jj-1,jk) * vmask(ji ,jj-1,jk) * e1v(ji ,jj-1) * fse3v(ji ,jj-1,jk) 513 zet = 1. / ( e1 t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) )455 zet = 1. / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 514 456 zhdiv(ji,jj,jk) = ( zu - zu1 + zv - zv1 ) * zet 515 457 END DO 516 458 END DO 517 459 END DO 460 ! ! update the horizontal divergence with the runoff inflow 461 IF( ln_dynrnf ) zhdiv(:,:,1) = zhdiv(:,:,1) - rnf(:,:) * r1_rau0 / fse3t(:,:,1) 462 ! 518 463 CALL lbc_lnk( zhdiv, 'T', 1. ) ! Lateral boundary conditions on zhdiv 519 !520 464 ! computation of vertical velocity from the bottom 521 465 pw(:,:,jpk) = 0._wp … … 540 484 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(out) :: pwslpj ! meridional diapycnal slopes 541 485 !!--------------------------------------------------------------------- 542 #if defined key_ldfslp && ! defined key_c1d 543 CALL eos ( pts, rhd, rhop, gdept_0(:,:,:) )544 CALL eos_rab( pts, rab_n ) ! now local thermal/haline expension ratio at T-points545 CALL bn2 ( pts, rab_n, rn2 ) ! now Brunt-Vaisala546 547 ! Partial steps: before Horizontal DErivative548 IF( ln_zps .AND. .NOT. ln_isfcav) &549 & CALL zps_hde ( kt, jpts, pts, gtsu, gtsv, & ! Partial steps: before horizontal gradient550 & rhd, gru , grv ) ! of t, s, rd at the last ocean level551 IF( ln_zps .AND. ln_isfcav) &552 & CALL zps_hde_isf( kt, jpts, pts, gtsu, gtsv, & ! Partial steps for top cell (ISF)553 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , &554 & gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) ! of t, s, rd at the first ocean level555 556 rn2b(:,:,:) = rn2(:,:,:) ! need for zdfmxl557 CALL zdf_mxl( kt ) ! mixed layer depth558 CALL ldf_slp( kt, rhd, rn2 ) ! slopes559 puslp (:,:,:) = uslp (:,:,:)560 pvslp (:,:,:) = vslp (:,:,:)561 pwslpi(:,:,:) = wslpi(:,:,:)562 pwslpj(:,:,:) = wslpj(:,:,:)563 #else 564 puslp (:,:,:) = 0. ! to avoid warning when compiling565 pvslp (:,:,:) = 0.566 pwslpi(:,:,:) = 0.567 pwslpj(:,:,:) = 0.568 #endif 486 IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN ! Computes slopes (here avt is used as workspace) 487 CALL eos ( pts, rhd, rhop, gdept_0(:,:,:) ) 488 CALL eos_rab( pts, rab_n ) ! now local thermal/haline expension ratio at T-points 489 CALL bn2 ( pts, rab_n, rn2 ) ! now Brunt-Vaisala 490 491 ! Partial steps: before Horizontal DErivative 492 IF( ln_zps .AND. .NOT. ln_isfcav) & 493 & CALL zps_hde ( kt, jpts, pts, gtsu, gtsv, & ! Partial steps: before horizontal gradient 494 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 495 IF( ln_zps .AND. ln_isfcav) & 496 & CALL zps_hde_isf( kt, jpts, pts, gtsu, gtsv, & ! Partial steps for top cell (ISF) 497 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 498 & gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) ! of t, s, rd at the first ocean level 499 500 rn2b(:,:,:) = rn2(:,:,:) ! need for zdfmxl 501 CALL zdf_mxl( kt ) ! mixed layer depth 502 CALL ldf_slp( kt, rhd, rn2 ) ! slopes 503 puslp (:,:,:) = uslp (:,:,:) 504 pvslp (:,:,:) = vslp (:,:,:) 505 pwslpi(:,:,:) = wslpi(:,:,:) 506 pwslpj(:,:,:) = wslpj(:,:,:) 507 ELSE 508 puslp (:,:,:) = 0. ! to avoid warning when compiling 509 pvslp (:,:,:) = 0. 510 pwslpi(:,:,:) = 0. 511 pwslpj(:,:,:) = 0. 512 ENDIF 569 513 ! 570 514 END SUBROUTINE dta_dyn_slp -
trunk/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
r5504 r5836 26 26 USE traqsr ! solar radiation penetration (tra_qsr_init routine) 27 27 USE trabbl ! bottom boundary layer (tra_bbl_init routine) 28 USE traldf ! lateral physics (tra_ldf_init routine) 28 29 USE zdfini ! vertical physics: initialization 29 30 USE sbcmod ! surface boundary condition (sbc_init routine) … … 283 284 CALL sbc_init ! Forcings : surface module 284 285 285 #if ! defined key_degrad286 286 CALL ldf_tra_init ! Lateral ocean tracer physics 287 #endif 288 IF( lk_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 287 CALL ldf_eiv_init ! Eddy induced velocity param 288 CALL tra_ldf_init ! lateral mixing 289 IF( l_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 289 290 290 291 CALL tra_qsr_init ! penetrative solar radiation qsr … … 444 445 USE dom_oce, ONLY: dom_oce_alloc 445 446 USE zdf_oce, ONLY: zdf_oce_alloc 446 USE ldftra_oce, ONLY: ldftra_oce_alloc447 447 USE trc_oce, ONLY: trc_oce_alloc 448 448 ! … … 453 453 ierr = ierr + dia_wri_alloc () 454 454 ierr = ierr + dom_oce_alloc () ! ocean domain 455 ierr = ierr + ldftra_oce_alloc() ! ocean lateral physics : tracers456 455 ierr = ierr + zdf_oce_alloc () ! ocean vertical physics 457 456 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/ASM/asmbkg.F90
r5215 r5836 18 18 19 19 !!---------------------------------------------------------------------- 20 !! 'key_asminc' : Switch on the assimilation increment interface21 !!----------------------------------------------------------------------22 20 !! asm_bkg_wri : Write out the background state 23 21 !! asm_trj_wri : Write out the model state trajectory (used with 4D-Var) … … 27 25 USE zdf_oce ! Vertical mixing variables 28 26 USE zdfddm ! Double diffusion mixing parameterization 29 USE ldftra _oce ! Lateral tracer mixing coefficient defined in memory30 USE ldfslp ! Slopes of neutral surfaces27 USE ldftra ! Lateral diffusion: eddy diffusivity coefficients 28 USE ldfslp ! Lateral diffusion: slopes of neutral surfaces 31 29 USE tradmp ! Tracer damping 32 30 #if defined key_zdftke … … 41 39 USE asmpar ! Parameters for the assmilation interface 42 40 USE zdfmxl ! mixed layer depth 43 #if defined key_traldf_c2d44 USE ldfeiv ! eddy induced velocity coef. (ldf_eiv routine)45 #endif46 41 #if defined key_lim2 47 42 USE ice_2 … … 155 150 CALL iom_rstput( kt, nitdin_r, inum, 'sshn' , sshn ) 156 151 #if defined key_lim2 || defined key_lim3 157 IF( ( nn_ice == 2 ) .OR. ( nn_ice == 3 )) THEN158 IF(ALLOCATED(frld)) THEN159 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', 1. 0- frld(:,:) )152 IF( nn_ice == 2 .OR. nn_ice == 3 ) THEN 153 IF( ALLOCATED(frld) ) THEN 154 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', 1._wp - frld(:,:) ) 160 155 ELSE 161 CALL ctl_warn('Ice concentration not written to background as ice variable frld not allocated on this timestep')162 ENDIF156 CALL ctl_warn('Ice concentration not written to background as ice variable frld not allocated on this timestep') 157 ENDIF 163 158 ENDIF 164 159 #endif -
trunk/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r5541 r5836 14 14 15 15 !!---------------------------------------------------------------------- 16 !! 'key_asminc' : Switch on the assimilation increment interface17 !!----------------------------------------------------------------------18 16 !! asm_inc_init : Initialize the increment arrays and IAU weights 19 17 !! calc_date : Compute the calendar date YYYYMMDD on a given step … … 28 26 USE domvvl ! domain: variable volume level 29 27 USE oce ! Dynamics and active tracers defined in memory 30 USE ldfdyn _oce ! ocean dynamics: lateral physics28 USE ldfdyn ! lateral diffusion: eddy viscosity coefficients 31 29 USE eosbn2 ! Equation of state - in situ and potential density 32 30 USE zpshde ! Partial step : Horizontal Derivative … … 56 54 LOGICAL, PUBLIC, PARAMETER :: lk_asminc = .FALSE. !: No assimilation increments 57 55 #endif 58 LOGICAL, PUBLIC :: ln_bkgwri = .FALSE.!: No output of the background state fields59 LOGICAL, PUBLIC :: ln_asmiau = .FALSE.!: No applying forcing with an assimilation increment60 LOGICAL, PUBLIC :: ln_asmdin = .FALSE.!: No direct initialization61 LOGICAL, PUBLIC :: ln_trainc = .FALSE.!: No tracer (T and S) assimilation increments62 LOGICAL, PUBLIC :: ln_dyninc = .FALSE.!: No dynamics (u and v) assimilation increments63 LOGICAL, PUBLIC :: ln_sshinc = .FALSE.!: No sea surface height assimilation increment64 LOGICAL, PUBLIC :: ln_seaiceinc 65 LOGICAL, PUBLIC :: ln_salfix = .FALSE.!: Apply minimum salinity check56 LOGICAL, PUBLIC :: ln_bkgwri !: No output of the background state fields 57 LOGICAL, PUBLIC :: ln_asmiau !: No applying forcing with an assimilation increment 58 LOGICAL, PUBLIC :: ln_asmdin !: No direct initialization 59 LOGICAL, PUBLIC :: ln_trainc !: No tracer (T and S) assimilation increments 60 LOGICAL, PUBLIC :: ln_dyninc !: No dynamics (u and v) assimilation increments 61 LOGICAL, PUBLIC :: ln_sshinc !: No sea surface height assimilation increment 62 LOGICAL, PUBLIC :: ln_seaiceinc !: No sea ice concentration increment 63 LOGICAL, PUBLIC :: ln_salfix !: Apply minimum salinity check 66 64 LOGICAL, PUBLIC :: ln_temnofreeze = .FALSE. !: Don't allow the temperature to drop below freezing 67 INTEGER, PUBLIC :: nn_divdmp 65 INTEGER, PUBLIC :: nn_divdmp !: Apply divergence damping filter nn_divdmp times 68 66 69 67 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: t_bkg , s_bkg !: Background temperature and salinity … … 90 88 !! * Substitutions 91 89 # include "domzgr_substitute.h90" 92 # include "ldfdyn_substitute.h90"93 90 # include "vectopt_loop_substitute.h90" 94 91 !!---------------------------------------------------------------------- … … 139 136 ! Read Namelist nam_asminc : assimilation increment interface 140 137 !----------------------------------------------------------------------- 141 ln_seaiceinc = .FALSE.138 ln_seaiceinc = .FALSE. 142 139 ln_temnofreeze = .FALSE. 143 140 … … 428 425 429 426 IF ( ln_dyninc .AND. nn_divdmp > 0 ) THEN 430 431 CALL wrk_alloc( jpi,jpj,hdiv)432 433 DO 434 427 ! 428 CALL wrk_alloc( jpi,jpj, hdiv ) 429 ! 430 DO jt = 1, nn_divdmp 431 ! 435 432 DO jk = 1, jpkm1 436 437 433 hdiv(:,:) = 0._wp 438 439 434 DO jj = 2, jpjm1 440 435 DO ji = fs_2, fs_jpim1 ! vector opt. … … 444 439 + e1v(ji ,jj ) * fse3v(ji ,jj ,jk) * v_bkginc(ji ,jj ,jk) & 445 440 - e1v(ji ,jj-1) * fse3v(ji ,jj-1,jk) * v_bkginc(ji ,jj-1,jk) ) & 446 / ( e1 t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) )441 / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 447 442 END DO 448 443 END DO 449 450 444 CALL lbc_lnk( hdiv, 'T', 1. ) ! lateral boundary cond. (no sign change) 451 445 ! 452 446 DO jj = 2, jpjm1 453 447 DO ji = fs_2, fs_jpim1 ! vector opt. 454 u_bkginc(ji,jj,jk) = u_bkginc(ji,jj,jk) + 0.2_wp * ( e1 t(ji+1,jj)*e2t(ji+1,jj) * hdiv(ji+1,jj) &455 - e1t(ji ,jj)*e2t(ji ,jj) * hdiv(ji ,jj) ) &456 /e1u(ji,jj) * umask(ji,jj,jk)457 v_bkginc(ji,jj,jk) = v_bkginc(ji,jj,jk) + 0.2_wp * ( e1 t(ji,jj+1)*e2t(ji,jj+1) * hdiv(ji,jj+1) &458 - e1t(ji,jj )*e2t(ji,jj ) * hdiv(ji,jj ) ) &459 /e2v(ji,jj) * vmask(ji,jj,jk)448 u_bkginc(ji,jj,jk) = u_bkginc(ji,jj,jk) + 0.2_wp * ( e1e2t(ji+1,jj) * hdiv(ji+1,jj) & 449 & - e1e2t(ji ,jj) * hdiv(ji ,jj) ) & 450 & * r1_e1u(ji,jj) * umask(ji,jj,jk) 451 v_bkginc(ji,jj,jk) = v_bkginc(ji,jj,jk) + 0.2_wp * ( e1e2t(ji,jj+1) * hdiv(ji,jj+1) & 452 & - e1e2t(ji,jj ) * hdiv(ji,jj ) ) & 453 & * r1_e2v(ji,jj) * vmask(ji,jj,jk) 460 454 END DO 461 455 END DO 462 463 456 END DO 464 457 ! 465 458 END DO 466 467 CALL wrk_dealloc( jpi,jpj,hdiv)468 459 ! 460 CALL wrk_dealloc( jpi,jpj, hdiv ) 461 ! 469 462 ENDIF 470 471 472 463 473 464 !----------------------------------------------------------------------- … … 476 467 477 468 IF ( ln_asmdin ) THEN 478 469 ! 479 470 ALLOCATE( t_bkg(jpi,jpj,jpk) ) 480 471 ALLOCATE( s_bkg(jpi,jpj,jpk) ) … … 482 473 ALLOCATE( v_bkg(jpi,jpj,jpk) ) 483 474 ALLOCATE( ssh_bkg(jpi,jpj) ) 484 485 t_bkg(:,:,:) = 0. 0486 s_bkg(:,:,:) = 0. 0487 u_bkg(:,:,:) = 0. 0488 v_bkg(:,:,:) = 0. 0489 ssh_bkg(:,:) = 0. 0490 475 ! 476 t_bkg(:,:,:) = 0._wp 477 s_bkg(:,:,:) = 0._wp 478 u_bkg(:,:,:) = 0._wp 479 v_bkg(:,:,:) = 0._wp 480 ssh_bkg(:,:) = 0._wp 481 ! 491 482 !-------------------------------------------------------------------- 492 483 ! Read from file the background state at analysis time 493 484 !-------------------------------------------------------------------- 494 485 ! 495 486 CALL iom_open( c_asmdin, inum ) 496 487 ! 497 488 CALL iom_get( inum, 'rdastp', zdate_bkg ) 498 489 ! 499 490 IF(lwp) THEN 500 491 WRITE(numout,*) 501 WRITE(numout,*) 'asm_inc_init : Assimilation background state valid at : ', & 502 & NINT( zdate_bkg ) 492 WRITE(numout,*) 'asm_inc_init : Assimilation background state valid at : ', NINT( zdate_bkg ) 503 493 WRITE(numout,*) '~~~~~~~~~~~~' 504 494 ENDIF 505 495 ! 506 496 IF ( NINT( zdate_bkg ) /= iitdin_date ) & 507 497 & CALL ctl_warn( ' Validity time of assimilation background state does', & 508 498 & ' not agree with Direct Initialization time' ) 509 499 ! 510 500 IF ( ln_trainc ) THEN 511 501 CALL iom_get( inum, jpdom_autoglo, 'tn', t_bkg ) … … 514 504 s_bkg(:,:,:) = s_bkg(:,:,:) * tmask(:,:,:) 515 505 ENDIF 516 506 ! 517 507 IF ( ln_dyninc ) THEN 518 508 CALL iom_get( inum, jpdom_autoglo, 'un', u_bkg ) … … 521 511 v_bkg(:,:,:) = v_bkg(:,:,:) * vmask(:,:,:) 522 512 ENDIF 523 513 ! 524 514 IF ( ln_sshinc ) THEN 525 515 CALL iom_get( inum, jpdom_autoglo, 'sshn', ssh_bkg ) 526 516 ssh_bkg(:,:) = ssh_bkg(:,:) * tmask(:,:,1) 527 517 ENDIF 528 518 ! 529 519 CALL iom_close( inum ) 530 520 ! 531 521 ENDIF 532 522 ! … … 574 564 ! If kt = kit000 - 1 then set the date to the restart date 575 565 IF ( kt == kit000 - 1 ) THEN 576 577 566 kdate = ndastp 578 567 RETURN 579 580 568 ENDIF 581 569 … … 646 634 !! ** Action : 647 635 !!---------------------------------------------------------------------- 648 INTEGER, INTENT(IN) :: kt! Current time step649 ! 650 INTEGER :: ji,jj,jk651 INTEGER :: it636 INTEGER, INTENT(IN) :: kt ! Current time step 637 ! 638 INTEGER :: ji, jj, jk 639 INTEGER :: it 652 640 REAL(wp) :: zincwgt ! IAU weight for current time step 653 641 REAL (wp), DIMENSION(jpi,jpj,jpk) :: fzptnz ! 3d freezing point values 654 642 !!---------------------------------------------------------------------- 655 643 ! 656 644 ! freezing point calculation taken from oc_fz_pt (but calculated for all depths) 657 645 ! used to prevent the applied increments taking the temperature below the local freezing point 658 659 646 DO jk = 1, jpkm1 660 647 CALL eos_fzp( tsn(:,:,jk,jp_sal), fzptnz(:,:,jk), fsdept(:,:,jk) ) 661 648 END DO 662 663 IF ( ln_asmiau ) THEN 664 665 !-------------------------------------------------------------------- 666 ! Incremental Analysis Updating 667 !-------------------------------------------------------------------- 668 649 ! 650 ! !-------------------------------------- 651 IF ( ln_asmiau ) THEN ! Incremental Analysis Updating 652 ! !-------------------------------------- 653 ! 669 654 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 670 655 ! 671 656 it = kt - nit000 + 1 672 657 zincwgt = wgtiau(it) / rdt ! IAU weight for the current time step 673 658 ! 674 659 IF(lwp) THEN 675 660 WRITE(numout,*) … … 677 662 WRITE(numout,*) '~~~~~~~~~~~~' 678 663 ENDIF 679 664 ! 680 665 ! Update the tracer tendencies 681 666 DO jk = 1, jpkm1 … … 700 685 ENDIF 701 686 END DO 702 703 ENDIF 704 687 ! 688 ENDIF 689 ! 705 690 IF ( kt == nitiaufin_r + 1 ) THEN ! For bias crcn to work 706 691 DEALLOCATE( t_bkginc ) 707 692 DEALLOCATE( s_bkginc ) 708 693 ENDIF 709 710 711 ELSEIF ( ln_asmdin ) THEN 712 713 !-------------------------------------------------------------------- 714 ! Direct Initialization 715 !-------------------------------------------------------------------- 716 694 ! !-------------------------------------- 695 ELSEIF ( ln_asmdin ) THEN ! Direct Initialization 696 ! !-------------------------------------- 697 ! 717 698 IF ( kt == nitdin_r ) THEN 718 699 ! 719 700 neuler = 0 ! Force Euler forward step 720 701 ! 721 702 ! Initialize the now fields with the background + increment 722 703 IF (ln_temnofreeze) THEN … … 745 726 !!gm 746 727 747 748 IF( ln_zps .AND. .NOT. lk_c1d .AND. .NOT. ln_isfcav) & 749 & CALL zps_hde ( kt, jpts, tsb, gtsu, gtsv, & ! Partial steps: before horizontal gradient 750 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 751 IF( ln_zps .AND. .NOT. lk_c1d .AND. ln_isfcav) & 752 & CALL zps_hde_isf( nit000, jpts, tsb, gtsu, gtsv, & ! Partial steps for top cell (ISF) 753 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 754 & gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) ! of t, s, rd at the last ocean level 755 756 #if defined key_zdfkpp 757 CALL eos( tsn, rhd, fsdept_n(:,:,:) ) ! Compute rhd 758 !!gm fabien CALL eos( tsn, rhd ) ! Compute rhd 759 #endif 760 728 IF( ln_zps .AND. .NOT. lk_c1d ) THEN ! Partial steps: before horizontal gradient 729 IF(ln_isfcav) THEN ! ocean cavities: top and bottom cells (ISF) 730 CALL zps_hde_isf( nit000, jpts, tsb, gtsu, gtsv, gtui, gtvi, & 731 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 732 & grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) 733 ELSE ! no ocean cavities: bottom cells 734 CALL zps_hde ( kt, jpts, tsb, gtsu, gtsv, & ! 735 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 736 ENDIF 737 ENDIF 738 ! 761 739 DEALLOCATE( t_bkginc ) 762 740 DEALLOCATE( s_bkginc ) … … 767 745 ENDIF 768 746 ! Perhaps the following call should be in step 769 IF 747 IF ( ln_seaiceinc ) CALL seaice_asm_inc ( kt ) ! apply sea ice concentration increment 770 748 ! 771 749 END SUBROUTINE tra_asm_inc … … 788 766 REAL(wp) :: zincwgt ! IAU weight for current time step 789 767 !!---------------------------------------------------------------------- 790 791 IF ( ln_asmiau ) THEN 792 793 !-------------------------------------------------------------------- 794 ! Incremental Analysis Updating 795 !-------------------------------------------------------------------- 796 768 ! 769 ! !-------------------------------------------- 770 IF ( ln_asmiau ) THEN ! Incremental Analysis Updating 771 ! !-------------------------------------------- 772 ! 797 773 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 798 774 ! 799 775 it = kt - nit000 + 1 800 776 zincwgt = wgtiau(it) / rdt ! IAU weight for the current time step 801 777 ! 802 778 IF(lwp) THEN 803 779 WRITE(numout,*) 804 WRITE(numout,*) 'dyn_asm_inc : Dynamics IAU at time step = ', & 805 & kt,' with IAU weight = ', wgtiau(it) 780 WRITE(numout,*) 'dyn_asm_inc : Dynamics IAU at time step = ', kt,' with IAU weight = ', wgtiau(it) 806 781 WRITE(numout,*) '~~~~~~~~~~~~' 807 782 ENDIF 808 783 ! 809 784 ! Update the dynamic tendencies 810 785 DO jk = 1, jpkm1 … … 812 787 va(:,:,jk) = va(:,:,jk) + v_bkginc(:,:,jk) * zincwgt 813 788 END DO 814 789 ! 815 790 IF ( kt == nitiaufin_r ) THEN 816 791 DEALLOCATE( u_bkginc ) 817 792 DEALLOCATE( v_bkginc ) 818 793 ENDIF 819 820 ENDIF 821 822 ELSEIF ( ln_asmdin ) THEN 823 824 !-------------------------------------------------------------------- 825 ! Direct Initialization 826 !-------------------------------------------------------------------- 827 794 ! 795 ENDIF 796 ! !----------------------------------------- 797 ELSEIF ( ln_asmdin ) THEN ! Direct Initialization 798 ! !----------------------------------------- 799 ! 828 800 IF ( kt == nitdin_r ) THEN 829 801 ! 830 802 neuler = 0 ! Force Euler forward step 831 803 ! 832 804 ! Initialize the now fields with the background + increment 833 805 un(:,:,:) = u_bkg(:,:,:) + u_bkginc(:,:,:) 834 806 vn(:,:,:) = v_bkg(:,:,:) + v_bkginc(:,:,:) 835 807 ! 836 808 ub(:,:,:) = un(:,:,:) ! Update before fields 837 809 vb(:,:,:) = vn(:,:,:) 838 810 ! 839 811 DEALLOCATE( u_bkg ) 840 812 DEALLOCATE( v_bkg ) … … 864 836 REAL(wp) :: zincwgt ! IAU weight for current time step 865 837 !!---------------------------------------------------------------------- 866 867 IF ( ln_asmiau ) THEN 868 869 !-------------------------------------------------------------------- 870 ! Incremental Analysis Updating 871 !-------------------------------------------------------------------- 872 838 ! 839 ! !----------------------------------------- 840 IF ( ln_asmiau ) THEN ! Incremental Analysis Updating 841 ! !----------------------------------------- 842 ! 873 843 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 874 844 ! 875 845 it = kt - nit000 + 1 876 846 zincwgt = wgtiau(it) / rdt ! IAU weight for the current time step 877 847 ! 878 848 IF(lwp) THEN 879 849 WRITE(numout,*) … … 882 852 WRITE(numout,*) '~~~~~~~~~~~~' 883 853 ENDIF 884 854 ! 885 855 ! Save the tendency associated with the IAU weighted SSH increment 886 856 ! (applied in dynspg.*) … … 891 861 DEALLOCATE( ssh_bkginc ) 892 862 ENDIF 893 894 ENDIF 895 896 ELSEIF ( ln_asmdin ) THEN 897 898 !-------------------------------------------------------------------- 899 ! Direct Initialization 900 !-------------------------------------------------------------------- 901 863 ! 864 ENDIF 865 ! !----------------------------------------- 866 ELSEIF ( ln_asmdin ) THEN ! Direct Initialization 867 ! !----------------------------------------- 868 ! 902 869 IF ( kt == nitdin_r ) THEN 903 904 neuler = 0 ! Force Euler forward step 905 906 ! Initialize the now fields the background + increment 907 sshn(:,:) = ssh_bkg(:,:) + ssh_bkginc(:,:) 908 909 ! Update before fields 910 sshb(:,:) = sshn(:,:) 911 870 ! 871 neuler = 0 ! Force Euler forward step 872 ! 873 sshn(:,:) = ssh_bkg(:,:) + ssh_bkginc(:,:) ! Initialize the now fields the background + increment 874 ! 875 sshb(:,:) = sshn(:,:) ! Update before fields 876 ! 912 877 IF( lk_vvl ) THEN 913 878 DO jk = 1, jpk … … 915 880 END DO 916 881 ENDIF 917 882 ! 918 883 DEALLOCATE( ssh_bkg ) 919 884 DEALLOCATE( ssh_bkginc ) 920 885 ! 921 886 ENDIF 922 887 ! … … 937 902 !! 938 903 !!---------------------------------------------------------------------- 939 IMPLICIT NONE 940 ! 941 INTEGER, INTENT(in) :: kt ! Current time step 904 INTEGER, INTENT(in) :: kt ! Current time step 942 905 INTEGER, INTENT(in), OPTIONAL :: kindic ! flag for disabling the deallocation 943 906 ! … … 949 912 #endif 950 913 !!---------------------------------------------------------------------- 951 952 IF ( ln_asmiau ) THEN 953 954 !-------------------------------------------------------------------- 955 ! Incremental Analysis Updating 956 !-------------------------------------------------------------------- 957 914 ! 915 ! !----------------------------------------- 916 IF ( ln_asmiau ) THEN ! Incremental Analysis Updating 917 ! !----------------------------------------- 918 ! 958 919 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 959 920 ! 960 921 it = kt - nit000 + 1 961 922 zincwgt = wgtiau(it) ! IAU weight for the current time step 962 923 ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments) 963 924 ! 964 925 IF(lwp) THEN 965 926 WRITE(numout,*) 966 WRITE(numout,*) 'seaice_asm_inc : sea ice conc IAU at time step = ', & 967 & kt,' with IAU weight = ', wgtiau(it) 927 WRITE(numout,*) 'seaice_asm_inc : sea ice conc IAU at time step = ', kt,' with IAU weight = ', wgtiau(it) 968 928 WRITE(numout,*) '~~~~~~~~~~~~' 969 929 ENDIF 970 930 ! 971 931 ! Sea-ice : LIM-3 case (to add) 972 932 ! 973 933 #if defined key_lim2 974 934 ! Sea-ice : LIM-2 case … … 1008 968 1009 969 #if defined key_cice && defined key_asminc 1010 ! Sea-ice : CICE case. Zero ice increment tendency into CICE 1011 ndaice_da(:,:) = 0.0_wp 1012 #endif 1013 1014 ENDIF 1015 1016 ELSEIF ( ln_asmdin ) THEN 1017 1018 !-------------------------------------------------------------------- 1019 ! Direct Initialization 1020 !-------------------------------------------------------------------- 1021 970 ndaice_da(:,:) = 0._wp ! Sea-ice : CICE case. Zero ice increment tendency into CICE 971 #endif 972 973 ENDIF 974 ! !----------------------------------------- 975 ELSEIF ( ln_asmdin ) THEN ! Direct Initialization 976 ! !----------------------------------------- 977 ! 1022 978 IF ( kt == nitdin_r ) THEN 1023 979 ! 1024 980 neuler = 0 ! Force Euler forward step 1025 981 ! 1026 982 ! Sea-ice : LIM-3 case (to add) 1027 983 ! 1028 984 #if defined key_lim2 1029 985 ! Sea-ice : LIM-2 case. … … 1041 997 zhicifinc(:,:) = (zhicifmin - hicif(:,:)) * zincwgt 1042 998 ELSEWHERE 1043 zhicifinc(:,:) = 0. 0_wp999 zhicifinc(:,:) = 0._wp 1044 1000 END WHERE 1045 1001 ! … … 1050 1006 ! seaice salinity balancing (to add) 1051 1007 #endif 1052 1008 ! 1053 1009 #if defined key_cice && defined key_asminc 1054 1010 ! Sea-ice : CICE case. Pass ice increment tendency into CICE 1055 1011 ndaice_da(:,:) = seaice_bkginc(:,:) / rdt 1056 1012 #endif 1057 IF ( .NOT. PRESENT(kindic) ) THEN1058 DEALLOCATE( seaice_bkginc )1059 END IF1060 1013 IF ( .NOT. PRESENT(kindic) ) THEN 1014 DEALLOCATE( seaice_bkginc ) 1015 END IF 1016 ! 1061 1017 ELSE 1062 1018 ! 1063 1019 #if defined key_cice && defined key_asminc 1064 ! Sea-ice : CICE case. Zero ice increment tendency into CICE1065 ndaice_da(:,:) = 0.0_wp 1066 #endif 1067 1020 ndaice_da(:,:) = 0._wp ! Sea-ice : CICE case. Zero ice increment tendency into CICE 1021 1022 #endif 1023 ! 1068 1024 ENDIF 1069 1025 … … 1142 1098 ! 1143 1099 !#endif 1144 1100 ! 1145 1101 ENDIF 1146 1102 ! 1147 1103 END SUBROUTINE seaice_asm_inc 1148 1104 -
trunk/NEMOGCM/NEMO/OPA_SRC/ASM/asmpar.F90
r2287 r5836 6 6 7 7 IMPLICIT NONE 8 9 !! * Routine accessibility10 8 PRIVATE 11 9 12 !! * Shared Modules variables 13 CHARACTER (LEN=40), PUBLIC, PARAMETER :: & 14 & c_asmbkg = 'assim_background_state_Jb', & !: Filename for storing the 15 !: background state for use 16 !: in the Jb term 17 & c_asmdin = 'assim_background_state_DI', & !: Filename for storing the 18 !: background state for direct 19 !: initialization 20 & c_asmtrj = 'assim_trj', & !: Filename for storing the 21 !: reference trajectory 22 & c_asminc = 'assim_background_increments' !: Filename for storing the 23 !: increments to the background 24 !: state 10 CHARACTER(LEN=40), PUBLIC, PARAMETER :: c_asmbkg = 'assim_background_state_Jb' !: Filename for storing the background state 11 ! ! for use in the Jb term 12 CHARACTER(LEN=40), PUBLIC, PARAMETER :: c_asmdin = 'assim_background_state_DI' !: Filename for storing the background state 13 ! ! for direct initialization 14 CHARACTER(LEN=40), PUBLIC, PARAMETER :: c_asmtrj = 'assim_trj' !: Filename for storing the reference trajectory 15 CHARACTER(LEN=40), PUBLIC, PARAMETER :: c_asminc = 'assim_background_increments' !: Filename for storing the increments 16 ! ! to the background state 25 17 26 INTEGER, PUBLIC :: nitbkg_r !: Background time step referenced to nit00027 INTEGER, PUBLIC :: nitdin_r !: Direct Initialization time step referenced to nit00028 INTEGER, PUBLIC :: nitiaustr_r !: IAU starting time step referenced to nit00029 INTEGER, PUBLIC :: nitiaufin_r !: IAU final time step referenced to nit00030 INTEGER, PUBLIC :: nittrjfrq !: Frequency of trajectory output for 4D-VAR18 INTEGER, PUBLIC :: nitbkg_r !: Background time step referenced to nit000 19 INTEGER, PUBLIC :: nitdin_r !: Direct Initialization time step referenced to nit000 20 INTEGER, PUBLIC :: nitiaustr_r !: IAU starting time step referenced to nit000 21 INTEGER, PUBLIC :: nitiaufin_r !: IAU final time step referenced to nit000 22 INTEGER, PUBLIC :: nittrjfrq !: Frequency of trajectory output for 4D-VAR 31 23 32 24 !!---------------------------------------------------------------------- … … 34 26 !! $Id$ 35 27 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 !!---------------------------------------------------------------------- 37 28 !!====================================================================== 38 29 END MODULE asmpar -
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r4699 r5836 8 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 9 9 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 10 !! 3.6 ! 201 2-01 (C. Rousset) add ice boundary conditions for lim310 !! 3.6 ! 2014-01 (C. Rousset) add ice boundary conditions for lim3 11 11 !!---------------------------------------------------------------------- 12 12 #if defined key_bdy … … 22 22 23 23 TYPE, PUBLIC :: OBC_INDEX !: Indices and weights which define the open boundary 24 INTEGER , DIMENSION(jpbgrd) :: nblen25 INTEGER , DIMENSION(jpbgrd) :: nblenrim26 INTEGER , POINTER, DIMENSION(:,:):: nbi27 INTEGER , POINTER, DIMENSION(:,:):: nbj28 INTEGER , POINTER, DIMENSION(:,:):: nbr29 INTEGER , POINTER, DIMENSION(:,:):: nbmap30 REAL(wp) , POINTER, DIMENSION(:,:):: nbw31 REAL(wp) , POINTER, DIMENSION(:,:):: nbd32 REAL(wp) , POINTER, DIMENSION(:,:):: nbdout33 REAL(wp) , POINTER, DIMENSION(:,:):: flagu34 REAL(wp) , POINTER, DIMENSION(:,:):: flagv24 INTEGER , DIMENSION(jpbgrd) :: nblen 25 INTEGER , DIMENSION(jpbgrd) :: nblenrim 26 INTEGER , POINTER, DIMENSION(:,:) :: nbi 27 INTEGER , POINTER, DIMENSION(:,:) :: nbj 28 INTEGER , POINTER, DIMENSION(:,:) :: nbr 29 INTEGER , POINTER, DIMENSION(:,:) :: nbmap 30 REAL(wp), POINTER, DIMENSION(:,:) :: nbw 31 REAL(wp), POINTER, DIMENSION(:,:) :: nbd 32 REAL(wp), POINTER, DIMENSION(:,:) :: nbdout 33 REAL(wp), POINTER, DIMENSION(:,:) :: flagu 34 REAL(wp), POINTER, DIMENSION(:,:) :: flagv 35 35 END TYPE OBC_INDEX 36 36 … … 41 41 42 42 TYPE, PUBLIC :: OBC_DATA !: Storage for external data 43 INTEGER , DIMENSION(2):: nread44 LOGICAL :: ll_ssh45 LOGICAL :: ll_u2d46 LOGICAL :: ll_v2d47 LOGICAL :: ll_u3d48 LOGICAL :: ll_v3d49 LOGICAL :: ll_tem50 LOGICAL :: ll_sal51 REAL(wp), POINTER, DIMENSION(:) 52 REAL(wp), POINTER, DIMENSION(:) 53 REAL(wp), POINTER, DIMENSION(:) 54 REAL(wp), POINTER, DIMENSION(:,:) 55 REAL(wp), POINTER, DIMENSION(:,:) 56 REAL(wp), POINTER, DIMENSION(:,:) 57 REAL(wp), POINTER, DIMENSION(:,:) 43 INTEGER , DIMENSION(2) :: nread 44 LOGICAL :: ll_ssh 45 LOGICAL :: ll_u2d 46 LOGICAL :: ll_v2d 47 LOGICAL :: ll_u3d 48 LOGICAL :: ll_v3d 49 LOGICAL :: ll_tem 50 LOGICAL :: ll_sal 51 REAL(wp), POINTER, DIMENSION(:) :: ssh 52 REAL(wp), POINTER, DIMENSION(:) :: u2d 53 REAL(wp), POINTER, DIMENSION(:) :: v2d 54 REAL(wp), POINTER, DIMENSION(:,:) :: u3d 55 REAL(wp), POINTER, DIMENSION(:,:) :: v3d 56 REAL(wp), POINTER, DIMENSION(:,:) :: tem 57 REAL(wp), POINTER, DIMENSION(:,:) :: sal 58 58 #if defined key_lim2 59 LOGICAL ::ll_frld60 LOGICAL ::ll_hicif61 LOGICAL ::ll_hsnif62 REAL(wp), POINTER, DIMENSION(:) ::frld63 REAL(wp), POINTER, DIMENSION(:) ::hicif64 REAL(wp), POINTER, DIMENSION(:) ::hsnif59 LOGICAL :: ll_frld 60 LOGICAL :: ll_hicif 61 LOGICAL :: ll_hsnif 62 REAL(wp), POINTER, DIMENSION(:) :: frld 63 REAL(wp), POINTER, DIMENSION(:) :: hicif 64 REAL(wp), POINTER, DIMENSION(:) :: hsnif 65 65 #elif defined key_lim3 66 LOGICAL ::ll_a_i67 LOGICAL ::ll_ht_i68 LOGICAL ::ll_ht_s69 REAL , POINTER, DIMENSION(:,:) :: a_i!: now ice leads fraction climatology70 REAL , POINTER, DIMENSION(:,:) :: ht_i!: Now ice thickness climatology71 REAL , POINTER, DIMENSION(:,:) :: ht_s!: now snow thickness66 LOGICAL :: ll_a_i 67 LOGICAL :: ll_ht_i 68 LOGICAL :: ll_ht_s 69 REAL(wp), POINTER, DIMENSION(:,:) :: a_i !: now ice leads fraction climatology 70 REAL(wp), POINTER, DIMENSION(:,:) :: ht_i !: Now ice thickness climatology 71 REAL(wp), POINTER, DIMENSION(:,:) :: ht_s !: now snow thickness 72 72 #endif 73 73 END TYPE OBC_DATA … … 99 99 INTEGER, DIMENSION(jp_bdy) :: nn_tra_dta !: = 0 use the initial state as bdy dta ; 100 100 !: = 1 read it in a NetCDF file 101 LOGICAL , DIMENSION(jp_bdy) :: ln_tra_dmp!: =T Tracer damping102 LOGICAL , DIMENSION(jp_bdy) :: ln_dyn3d_dmp!: =T Baroclinic velocity damping103 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp!: Damping time scale in days104 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp_out!: Damping time scale in days at radiation outflow points101 LOGICAL , DIMENSION(jp_bdy) :: ln_tra_dmp !: =T Tracer damping 102 LOGICAL , DIMENSION(jp_bdy) :: ln_dyn3d_dmp !: =T Baroclinic velocity damping 103 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp !: Damping time scale in days 104 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp_out !: Damping time scale in days at radiation outflow points 105 105 106 106 CHARACTER(len=20), DIMENSION(jp_bdy) :: cn_ice_lim ! Choice of boundary condition for sea ice variables 107 INTEGER , DIMENSION(jp_bdy):: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ;107 INTEGER , DIMENSION(jp_bdy) :: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ; 108 108 !: = 1 read it in a NetCDF file 109 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_tem!: choice of the temperature of incoming sea ice110 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_sal!: choice of the salinity of incoming sea ice111 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_age!: choice of the age of incoming sea ice109 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_tem !: choice of the temperature of incoming sea ice 110 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_sal !: choice of the salinity of incoming sea ice 111 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_age !: choice of the age of incoming sea ice 112 112 ! 113 113 -
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r5656 r5836 59 59 !! 60 60 !!---------------------------------------------------------------------- 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 INTEGER :: ib_bdy ! Loop index 63 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 ! 63 INTEGER :: ib_bdy ! Loop index 64 !!---------------------------------------------------------------------- 65 ! 64 66 #if defined key_lim3 65 67 CALL lim_var_glo2eqv 66 68 #endif 67 69 ! 68 70 DO ib_bdy=1, nb_bdy 69 71 ! 70 72 SELECT CASE( cn_ice_lim(ib_bdy) ) 71 73 CASE('none') … … 76 78 CALL ctl_stop( 'bdy_ice_lim : unrecognised option for open boundaries for ice fields' ) 77 79 END SELECT 78 80 ! 79 81 END DO 80 82 ! 81 83 #if defined key_lim3 82 84 CALL lim_var_zapsmall 83 85 CALL lim_var_agg(1) 84 86 #endif 85 87 ! 86 88 END SUBROUTINE bdy_ice_lim 89 87 90 88 91 SUBROUTINE bdy_ice_frs( idx, dta, kt, ib_bdy ) … … 96 99 !! dimensional baroclinic ocean model with realistic topography. Tellus, 365-382. 97 100 !!------------------------------------------------------------------------------ 98 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices99 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data100 INTEGER, INTENT(in) :: kt ! main time-step counter101 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 102 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 103 INTEGER, INTENT(in) :: kt ! main time-step counter 101 104 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 102 105 ! 103 106 INTEGER :: jpbound ! 0 = incoming ice 104 107 ! ! 1 = outgoing ice 105 108 INTEGER :: jb, jk, jgrd, jl ! dummy loop indices 106 109 INTEGER :: ji, jj, ii, ij ! local scalar … … 111 114 USE ice_2, vt_i => hicm 112 115 #endif 113 114 !!------------------------------------------------------------------------------ 115 ! 116 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 116 !!------------------------------------------------------------------------------ 117 ! 118 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 117 119 ! 118 120 jgrd = 1 ! Everything is at T-points here … … 181 183 ! condition on ice thickness depends on the ice velocity 182 184 ! if velocity is outward (strictly), then ice thickness, volume... must be equal to adjacent values 183 jpbound = 0 ; ii = ji; ij = jj;184 185 jpbound = 0 ; ii = ji ; ij = jj 186 ! 185 187 IF( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) jpbound = 1; ii = ji+1; ij = jj 186 188 IF( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) jpbound = 1; ii = ji-1; ij = jj 187 189 IF( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj+1 188 190 IF( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj-1 189 191 ! 190 192 IF( nn_ice_lim_dta(ib_bdy) == 0 ) jpbound = 0; ii = ji; ij = jj ! case ice boundaries = initial conditions 191 ! do not make state variables dependent on velocity 192 193 193 ! ! do not make state variables dependent on velocity 194 ! 194 195 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ii,ij) - 0.01 ) ) ! 0 if no ice 195 196 ! 196 197 ! concentration and thickness 197 198 a_i (ji,jj,jl) = a_i (ii,ij,jl) * rswitch 198 199 ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * rswitch 199 200 ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * rswitch 200 201 ! 201 202 ! Ice and snow volumes 202 203 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 203 204 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 204 205 ! 205 206 SELECT CASE( jpbound ) 206 207 CASE( 0 ) ! velocity is inward208 207 ! 208 CASE( 0 ) ! velocity is inward 209 ! 209 210 ! Ice salinity, age, temperature 210 211 sm_i(ji,jj,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin … … 218 219 s_i(ji,jj,jk,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin 219 220 END DO 220 221 CASE( 1 ) ! velocity is outward222 221 ! 222 CASE( 1 ) ! velocity is outward 223 ! 223 224 ! Ice salinity, age, temperature 224 225 sm_i(ji,jj,jl) = rswitch * sm_i(ii,ij,jl) + ( 1.0 - rswitch ) * rn_simin … … 232 233 s_i(ji,jj,jk,jl) = rswitch * s_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rn_simin 233 234 END DO 234 235 ! 235 236 END SELECT 236 237 ! if salinity is constant, then overwrite rn_ice_sal 238 IF( nn_icesal == 1 ) THEN 239 sm_i(ji,jj,jl) = rn_icesal 237 ! 238 IF( nn_icesal == 1 ) THEN ! constant salinity : overwrite rn_ice_sal 239 sm_i(ji,jj ,jl) = rn_icesal 240 240 s_i (ji,jj,:,jl) = rn_icesal 241 241 ENDIF 242 242 ! 243 243 ! contents 244 244 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) … … 259 259 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) * r1_nlay_i 260 260 END DO 261 261 ! 262 262 END DO 263 263 ! 264 264 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 265 265 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) … … 267 267 CALL lbc_bdy_lnk( v_i(:,:,jl), 'T', 1., ib_bdy ) 268 268 CALL lbc_bdy_lnk( v_s(:,:,jl), 'T', 1., ib_bdy ) 269 269 ! 270 270 CALL lbc_bdy_lnk( smv_i(:,:,jl), 'T', 1., ib_bdy ) 271 271 CALL lbc_bdy_lnk( sm_i(:,:,jl), 'T', 1., ib_bdy ) … … 280 280 CALL lbc_bdy_lnk(e_i(:,:,jk,jl), 'T', 1., ib_bdy ) 281 281 END DO 282 282 ! 283 283 END DO !jl 284 284 ! 285 285 #endif 286 286 ! 287 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs')287 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') 288 288 ! 289 289 END SUBROUTINE bdy_ice_frs … … 300 300 !! 2013-06 : C. Rousset 301 301 !!------------------------------------------------------------------------------ 302 !!303 302 CHARACTER(len=1), INTENT(in) :: cd_type ! nature of velocity grid-points 303 ! 304 304 INTEGER :: jb, jgrd ! dummy loop indices 305 305 INTEGER :: ji, jj ! local scalar 306 306 INTEGER :: ib_bdy ! Loop index 307 307 REAL(wp) :: zmsk1, zmsk2, zflag 308 !!------------------------------------------------------------------------------308 !!------------------------------------------------------------------------------ 309 309 ! 310 310 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_lim_dyn') … … 313 313 ! 314 314 SELECT CASE( cn_ice_lim(ib_bdy) ) 315 315 ! 316 316 CASE('none') 317 318 317 CYCLE 319 318 ! 320 319 CASE('frs') 321 320 ! 322 321 IF( nn_ice_lim_dta(ib_bdy) == 0 ) CYCLE ! case ice boundaries = initial conditions 323 ! do not change ice velocity (it is only computed by rheology) 324 322 ! ! do not change ice velocity (it is only computed by rheology) 325 323 SELECT CASE ( cd_type ) 326 327 CASE ( 'U' ) 328 324 ! 325 CASE ( 'U' ) 329 326 jgrd = 2 ! u velocity 330 327 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 332 329 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 333 330 zflag = idx_bdy(ib_bdy)%flagu(jb,jgrd) 334 331 ! 335 332 IF ( ABS( zflag ) == 1. ) THEN ! eastern and western boundaries 336 333 ! one of the two zmsk is always 0 (because of zflag) 337 334 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji+1,jj) ) ) ! 0 if no ice 338 335 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji-1,jj) ) ) ! 0 if no ice 339 336 ! 340 337 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 341 338 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & … … 349 346 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01_wp ) ) ! 0 if no ice 350 347 u_ice(ji,jj) = rswitch * u_ice(ji,jj) 351 352 ENDDO 353 348 ! 349 END DO 354 350 CALL lbc_bdy_lnk( u_ice(:,:), 'U', -1., ib_bdy ) 355 351 ! 356 352 CASE ( 'V' ) 357 358 353 jgrd = 3 ! v velocity 359 354 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 361 356 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 362 357 zflag = idx_bdy(ib_bdy)%flagv(jb,jgrd) 363 358 ! 364 359 IF ( ABS( zflag ) == 1. ) THEN ! northern and southern boundaries 365 360 ! one of the two zmsk is always 0 (because of zflag) 366 361 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj+1) ) ) ! 0 if no ice 367 362 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj-1) ) ) ! 0 if no ice 368 363 ! 369 364 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 370 365 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & … … 378 373 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01 ) ) ! 0 if no ice 379 374 v_ice(ji,jj) = rswitch * v_ice(ji,jj) 380 381 ENDDO 382 375 ! 376 END DO 383 377 CALL lbc_bdy_lnk( v_ice(:,:), 'V', -1., ib_bdy ) 384 378 ! 385 379 END SELECT 386 380 ! 387 381 CASE DEFAULT 388 382 CALL ctl_stop( 'bdy_ice_lim_dyn : unrecognised option for open boundaries for ice fields' ) 389 383 END SELECT 390 391 END DO392 384 ! 385 END DO 386 ! 393 387 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_lim_dyn') 394 388 ! 395 389 END SUBROUTINE bdy_ice_lim_dyn 396 390 -
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r5656 r5836 76 76 INTEGER :: ib_bdy, ii, ij, ik, igrd, ib, ir, iseg ! dummy loop indices 77 77 INTEGER :: icount, icountr, ibr_max, ilen1, ibm1 ! local integers 78 INTEGER :: iwe, ies, iso, ino, inum, id_dummy 78 INTEGER :: iwe, ies, iso, ino, inum, id_dummy ! - - 79 79 INTEGER :: igrd_start, igrd_end, jpbdta ! - - 80 80 INTEGER :: jpbdtau, jpbdtas ! - - -
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90
r5643 r5836 15 15 !! 'key_dynspg_flt' filtered free surface 16 16 !!---------------------------------------------------------------------- 17 USE timing ! Timing18 17 USE oce ! ocean dynamics and tracers 19 USE sbcisf ! ice shelf 18 USE bdy_oce ! ocean open boundary conditions 19 USE sbc_oce ! ocean surface boundary conditions 20 20 USE dom_oce ! ocean space and time domain 21 21 USE phycst ! physical constants 22 USE bdy_oce ! ocean open boundary conditions 22 USE sbcisf ! ice shelf 23 ! 24 USE in_out_manager ! I/O manager 23 25 USE lib_mpp ! for mppsum 24 USE in_out_manager ! I/O manager25 USE sbc_oce ! ocean surface boundary conditions26 USE timing ! Timing 27 USE lib_fortran ! Fortran routines library 26 28 27 29 IMPLICIT NONE … … 33 35 # include "domzgr_substitute.h90" 34 36 !!---------------------------------------------------------------------- 35 !! NEMO/OPA 3. 3 , NEMO Consortium (2010)37 !! NEMO/OPA 3.6 , NEMO Consortium (2014) 36 38 !! $Id$ 37 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 78 80 TYPE(OBC_INDEX), POINTER :: idx 79 81 !!----------------------------------------------------------------------------- 80 81 IF( nn_timing == 1 ) CALL timing_start('bdy_vol')82 82 ! 83 IF( nn_timing == 1 ) CALL timing_start('bdy_vol') 84 ! 83 85 IF( ln_vol ) THEN 84 86 ! 85 87 IF( kt == nit000 ) THEN 86 88 IF(lwp) WRITE(numout,*) … … 91 93 ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 92 94 ! ----------------------------------------------------------------------- 93 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 95 !!gm replace these lines : 96 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rau0 94 97 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 98 !!gm by : 99 !!gm z_cflxemp = glob_sum( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rau0 100 !!gm 95 101 96 102 ! Transport through the unstructured open boundary 97 103 ! ------------------------------------------------ 98 zubtpecor = 0. e0104 zubtpecor = 0._wp 99 105 DO ib_bdy = 1, nb_bdy 100 106 idx => idx_bdy(ib_bdy) 101 107 ! 102 108 jgrd = 2 ! cumulate u component contribution first 103 109 DO jb = 1, idx%nblenrim(jgrd) … … 116 122 END DO 117 123 END DO 118 124 ! 119 125 END DO 120 126 IF( lk_mpp ) CALL mpp_sum( zubtpecor ) ! sum over the global domain … … 123 129 ! ------------------------------ 124 130 IF( nn_volctl==1 ) THEN ; zubtpecor = ( zubtpecor - z_cflxemp) / bdysurftot 125 ELSE ; zubtpecor = zubtpecor / bdysurftot131 ELSE ; zubtpecor = zubtpecor / bdysurftot 126 132 END IF 127 133 128 134 ! Correction of the total velocity on the unstructured boundary to respect the mass flux conservation 129 135 ! ------------------------------------------------------------- 130 ztranst = 0. e0136 ztranst = 0._wp 131 137 DO ib_bdy = 1, nb_bdy 132 138 idx => idx_bdy(ib_bdy) 133 139 ! 134 140 jgrd = 2 ! correct u component 135 141 DO jb = 1, idx%nblenrim(jgrd) … … 150 156 END DO 151 157 END DO 152 158 ! 153 159 END DO 154 160 IF( lk_mpp ) CALL mpp_sum( ztranst ) ! sum over the global domain … … 169 175 ! 170 176 END IF ! ln_vol 171 177 ! 172 178 END SUBROUTINE bdy_vol 173 179 -
trunk/NEMOGCM/NEMO/OPA_SRC/C1D/c1d.F90
r5215 r5836 48 48 !!---------------------------------------------------------------------- 49 49 ! 50 51 50 REWIND( numnam_ref ) ! Namelist namc1d in reference namelist : Tracer advection scheme 52 51 READ ( numnam_ref, namc1d, IOSTAT = ios, ERR = 901) … … 57 56 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc1d in configuration namelist', lwp ) 58 57 IF(lwm) WRITE ( numond, namc1d ) 59 60 58 ! 61 59 IF(lwp) THEN ! Control print … … 69 67 ENDIF 70 68 ! 71 !72 69 END SUBROUTINE c1d_init 73 70 … … 77 74 !!---------------------------------------------------------------------- 78 75 USE par_kind ! kind parameters 79 80 76 LOGICAL, PUBLIC, PARAMETER :: lk_c1d = .FALSE. !: 1D config. flag de-activated 81 77 REAL(wp) :: rn_lat1d, rn_lon1d 82 78 LOGICAL , PUBLIC :: ln_c1d_locpt = .FALSE. 83 84 79 CONTAINS 85 86 80 SUBROUTINE c1d_init ! Dummy routine 87 81 END SUBROUTINE c1d_init 88 89 82 #endif 90 83 -
trunk/NEMOGCM/NEMO/OPA_SRC/C1D/step_c1d.F90
r5412 r5836 82 82 IF( lk_zdftke ) CALL zdf_tke( kstp ) ! TKE closure scheme for Kz 83 83 IF( lk_zdfgls ) CALL zdf_gls( kstp ) ! GLS closure scheme for Kz 84 IF( lk_zdfkpp ) CALL zdf_kpp( kstp ) ! KPP closure scheme for Kz85 84 IF( lk_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) 86 85 avt (:,:,:) = rn_avt0 * tmask(:,:,:) … … 93 92 ENDIF 94 93 IF( ln_zdfevd ) CALL zdf_evd( kstp ) ! enhanced vertical eddy diffusivity 95 96 94 IF( lk_zdftmx ) CALL zdf_tmx( kstp ) ! tidal vertical mixing 97 98 IF( lk_zdfddm .AND. .NOT. lk_zdfkpp ) & 99 & CALL zdf_ddm( kstp ) ! double diffusive mixing 100 95 IF( lk_zdfddm ) CALL zdf_ddm( kstp ) ! double diffusive mixing 101 96 CALL zdf_mxl( kstp ) ! mixed layer depth 102 97 … … 128 123 IF( ln_traqsr ) CALL tra_qsr( kstp ) ! penetrative solar radiation qsr 129 124 IF( ln_tradmp ) CALL tra_dmp( kstp ) ! internal damping trends- tracers 130 IF( lk_zdfkpp ) CALL tra_kpp( kstp ) ! KPP non-local tracer fluxes131 125 CALL tra_zdf( kstp ) ! vertical mixing 132 126 CALL eos( tsn, rhd, rhop, gdept_0(:,:,:) ) ! now potential density for zdfmxl -
trunk/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90
r5217 r5836 11 11 !! other variables needed to be passed to TOP 12 12 !!---------------------------------------------------------------------- 13 USE oce ! ocean dynamics and tracers14 USE dom_oce ! ocean space and time domain15 USE ldftra_oce ! ocean active tracers: lateral physics16 USE sbc_oce ! Surface boundary condition: ocean fields17 USE zdf_oce ! vertical physics: ocean fields18 USE zdfddm ! vertical physics: double diffusion19 USE lbclnk ! ocean lateral boundary conditions (or mpp link)20 USE in_out_manager ! I/O manager21 USE timing ! preformance summary22 USE wrk_nemo ! working array23 13 USE crs 24 14 USE crsdom 25 15 USE crslbclnk 26 USE iom 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE sbc_oce ! Surface boundary condition: ocean fields 19 USE zdf_oce ! vertical physics: ocean fields 20 USE ldftra ! ocean active tracers: lateral diffusivity & EIV coefficients 21 USE zdfddm ! vertical physics: double diffusion 22 ! 23 USE in_out_manager ! I/O manager 24 USE iom ! 25 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 26 USE timing ! preformance summary 27 USE wrk_nemo ! working array 27 28 28 29 IMPLICIT NONE … … 30 31 31 32 PUBLIC crs_fld ! routines called by step.F90 32 33 33 34 34 !! * Substitutions … … 37 37 # include "vectopt_loop_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 !! NEMO/OPA 3. 3 , NEMO Consortium (2010)39 !! NEMO/OPA 3.7 , NEMO Consortium (2015) 40 40 !! $Id$ 41 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 56 56 !! ** Method : 57 57 !!---------------------------------------------------------------------- 58 !! 59 60 INTEGER, INTENT( in ) :: kt ! ocean time-step index 61 !! 62 INTEGER :: ji, jj, jk ! dummy loop indices 63 !! 64 REAL(wp), POINTER, DIMENSION(:,:,:) :: zfse3t, zfse3u, zfse3v, zfse3w ! 3D workspace for e3 65 REAL(wp), POINTER, DIMENSION(:,:,:) :: zt, zs 66 REAL(wp), POINTER, DIMENSION(:,:,:) :: zt_crs, zs_crs ! 67 REAL(wp) :: z2dcrsu, z2dcrsv 68 !! 69 !!---------------------------------------------------------------------- 58 INTEGER, INTENT(in) :: kt ! ocean time-step index 59 ! 60 INTEGER :: ji, jj, jk ! dummy loop indices 61 REAL(wp) :: z2dcrsu, z2dcrsv ! local scalars 62 ! 63 REAL(wp), POINTER, DIMENSION(:,:,:) :: zfse3t, zfse3u, zfse3v, zfse3w ! 3D workspace for e3 64 REAL(wp), POINTER, DIMENSION(:,:,:) :: zt, zt_crs 65 REAL(wp), POINTER, DIMENSION(:,:,:) :: zs, zs_crs 66 !!---------------------------------------------------------------------- 70 67 ! 71 72 68 IF( nn_timing == 1 ) CALL timing_start('crs_fld') 73 69 74 70 ! Initialize arrays 75 CALL wrk_alloc( jpi, jpj, jpk,zfse3t, zfse3w )76 CALL wrk_alloc( jpi, jpj, jpk,zfse3u, zfse3v )77 CALL wrk_alloc( jpi, jpj, jpk, zt, zs)71 CALL wrk_alloc( jpi,jpj,jpk, zfse3t, zfse3w ) 72 CALL wrk_alloc( jpi,jpj,jpk, zfse3u, zfse3v ) 73 CALL wrk_alloc( jpi,jpj,jpk, zt , zs ) 78 74 ! 79 75 CALL wrk_alloc( jpi_crs, jpj_crs, jpk, zt_crs, zs_crs ) … … 169 165 CALL iom_put( "eken", rke_crs ) 170 166 171 ! Horizontal divergence ( following OPA_SRC/DYN/div cur.F90 )167 ! Horizontal divergence ( following OPA_SRC/DYN/divhor.F90 ) 172 168 DO jk = 1, jpkm1 173 169 DO ji = 2, jpi_crsm1 -
trunk/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90
r5215 r5836 7 7 !!---------------------------------------------------------------------- 8 8 9 USE timing ! Timing 9 !!---------------------------------------------------------------------- 10 !! crs_init : 11 !!---------------------------------------------------------------------- 12 USE par_kind, ONLY: wp 10 13 USE par_oce ! For parameter jpi,jpj,jphgr_msh 11 14 USE dom_oce ! For parameters in par_oce (jperio, lk_vvl) 12 USE crs ! Coarse grid domain15 USE crs ! Coarse grid domain 13 16 USE phycst, ONLY: omega, rad ! physical constants 14 USE wrk_nemo15 USE in_out_manager16 USE par_kind, ONLY: wp17 USE iom18 17 USE crsdom 19 18 USE crsdomwri 20 19 USE crslbclnk 20 ! 21 USE iom 22 USE in_out_manager 21 23 USE lib_mpp 24 USE wrk_nemo 25 USE timing ! Timing 22 26 23 27 IMPLICIT NONE 24 28 PRIVATE 25 29 26 PUBLIC crs_init30 PUBLIC crs_init ! called by nemogcm.F90 module 27 31 28 32 !! * Substitutions 29 33 # include "domzgr_substitute.h90" 30 34 !!---------------------------------------------------------------------- 31 35 !! $Id$ 36 !!---------------------------------------------------------------------- 32 37 CONTAINS 33 38 … … 65 70 !! - Read in pertinent data ? 66 71 !!------------------------------------------------------------------- 67 !! Local variables68 72 INTEGER :: ji,jj,jk ! dummy indices 69 73 INTEGER :: ierr ! allocation error status … … 183 187 184 188 ! 185 CALL wrk_alloc( jpi, jpj, jpk,zfse3t, zfse3u, zfse3v, zfse3w )189 CALL wrk_alloc( jpi,jpj,jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 186 190 ! 187 191 zfse3t(:,:,:) = fse3t(:,:,:) … … 200 204 ! 3.d.3 Vertical scale factors 201 205 ! 202 203 204 206 CALL crs_dom_e3( e1t, e2t, zfse3t, e1e2w_crs, 'T', tmask, e3t_crs, e3t_max_crs) 205 207 CALL crs_dom_e3( e1u, e2u, zfse3u, e2e3u_crs, 'U', umask, e3u_crs, e3u_max_crs) … … 207 209 CALL crs_dom_e3( e1t, e2t, zfse3w, e1e2w_crs, 'W', tmask, e3w_crs, e3w_max_crs) 208 210 209 ! Re set 0 toe3t_0 or e3w_0211 ! Replace 0 by e3t_0 or e3w_0 210 212 DO jk = 1, jpk 211 213 DO ji = 1, jpi_crs … … 247 249 ENDIF 248 250 249 !--------------------------------------------------------- 250 ! 7. Finish and clean-up 251 !--------------------------------------------------------- 252 CALL wrk_dealloc(jpi, jpj, jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 253 254 251 !--------------------------------------------------------- 252 ! 7. Finish and clean-up 253 !--------------------------------------------------------- 254 CALL wrk_dealloc( jpi,jpj,jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 255 ! 255 256 END SUBROUTINE crs_init 256 257 257 258 !!====================================================================== 258 259 259 END MODULE crsini -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
r5253 r5836 7 7 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA 8 8 !!---------------------------------------------------------------------- 9 #if defined key_diaar5 || defined key_esopa9 #if defined key_diaar5 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_diaar5' : activate ar5 diagnotics … … 237 237 IF( dia_ar5_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 238 238 239 area(:,:) = e1 t(:,:) *e2t(:,:) * tmask_i(:,:)239 area(:,:) = e1e2t(:,:) * tmask_i(:,:) 240 240 241 241 area_tot = SUM( area(:,:) ) ; IF( lk_mpp ) CALL mpp_sum( area_tot ) -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90
r5506 r5836 74 74 a_salb = 0.e0 ! valeur de sal au debut de la simulation 75 75 ! sshb used because diafwb called after tranxt (i.e. after the swap) 76 a_sshb = SUM( e1 t(:,:) *e2t(:,:) * sshb(:,:) * tmask_i(:,:) )76 a_sshb = SUM( e1e2t(:,:) * sshb(:,:) * tmask_i(:,:) ) 77 77 IF( lk_mpp ) CALL mpp_sum( a_sshb ) ! sum over the global domain 78 78 … … 80 80 DO jj = 2, jpjm1 81 81 DO ji = fs_2, fs_jpim1 ! vector opt. 82 zwei = e1 t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)82 zwei = e1e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 83 83 a_salb = a_salb + ( tsb(ji,jj,jk,jp_sal) - zsm0 ) * zwei 84 84 END DO … … 88 88 ENDIF 89 89 90 a_fwf = SUM( e1 t(:,:) *e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) )90 a_fwf = SUM( e1e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) ) 91 91 IF( lk_mpp ) CALL mpp_sum( a_fwf ) ! sum over the global domain 92 92 … … 98 98 zfwfnew = 0.e0 99 99 ! Mean sea level at nitend 100 a_sshn = SUM( e1 t(:,:) *e2t(:,:) * sshn(:,:) * tmask_i(:,:) )100 a_sshn = SUM( e1e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 101 101 IF( lk_mpp ) CALL mpp_sum( a_sshn ) ! sum over the global domain 102 zarea = SUM( e1 t(:,:) *e2t(:,:) * tmask_i(:,:) )102 zarea = SUM( e1e2t(:,:) * tmask_i(:,:) ) 103 103 IF( lk_mpp ) CALL mpp_sum( zarea ) ! sum over the global domain 104 104 … … 106 106 DO jj = 2, jpjm1 107 107 DO ji = fs_2, fs_jpim1 ! vector opt. 108 zwei = e1 t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)108 zwei = e1e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 109 109 a_saln = a_saln + ( tsn(ji,jj,jk,jp_sal) - zsm0 ) * zwei 110 110 zvol = zvol + zwei -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diahth.F90
r5363 r5836 8 8 !! ! 1997-08 (G. Madec) optimization 9 9 !! ! 1999-07 (E. Guilyardi) hd28 + heat content 10 !! 8.5! 2002-06 (G. Madec) F90: Free form and module11 !! NEMO3.2 ! 2009-07 (S. Masson) hc300 bugfix + cleaning + add new diag12 !!---------------------------------------------------------------------- 13 #if defined key_diahth || defined key_esopa10 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 11 !! 3.2 ! 2009-07 (S. Masson) hc300 bugfix + cleaning + add new diag 12 !!---------------------------------------------------------------------- 13 #if defined key_diahth 14 14 !!---------------------------------------------------------------------- 15 15 !! 'key_diahth' : thermocline depth diag. -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r5566 r5836 17 17 !! ! 2005-11 (V. Garnier) Surface pressure gradient organization 18 18 !! 3.2 ! 2008-11 (B. Lemaire) creation from old diawri 19 !! 3.7 ! 2014-01 (G. Madec) remove eddy induced velocity from no-IOM output 20 !! ! change name of output variables in dia_wri_state 19 21 !!---------------------------------------------------------------------- 20 22 … … 27 29 USE dynadv, ONLY: ln_dynadv_vec 28 30 USE zdf_oce ! ocean vertical physics 29 USE ldftra_oce ! ocean active tracers: lateral physics 30 USE ldfdyn_oce ! ocean dynamics: lateral physics 31 USE traldf_iso_grif, ONLY : psix_eiv, psiy_eiv 31 USE ldftra ! lateral physics: eddy diffusivity coef. 32 32 USE sol_oce ! solver variables 33 33 USE sbc_oce ! Surface boundary condition: ocean fields … … 232 232 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 233 233 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 234 z2d(:,:) = rau0 * e1 2t(:,:)234 z2d(:,:) = rau0 * e1e2t(:,:) 235 235 DO jk = 1, jpk 236 236 z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:) … … 247 247 DO jj = 2, jpjm1 ! sst gradient 248 248 DO ji = fs_2, fs_jpim1 ! vector opt. 249 zztmp 250 zztmpx = ( tsn(ji+1,jj ,1,jp_tem) - zztmp ) / e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) / e1u(ji-1,jj)251 zztmpy = ( tsn(ji ,jj+1,1,jp_tem) - zztmp ) / e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) / e2v(ji,jj-1)249 zztmp = tsn(ji,jj,1,jp_tem) 250 zztmpx = ( tsn(ji+1,jj,1,jp_tem) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) * r1_e1u(ji-1,jj) 251 zztmpy = ( tsn(ji,jj+1,1,jp_tem) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) * r1_e2v(ji,jj-1) 252 252 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 253 253 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) … … 401 401 !! Each nwrite time step, output the instantaneous or mean fields 402 402 !!---------------------------------------------------------------------- 403 !! 404 INTEGER, INTENT( in ) :: kt ! ocean time-step index 405 !! 403 INTEGER, INTENT( in ) :: kt ! ocean time-step index 404 ! 406 405 LOGICAL :: ll_print = .FALSE. ! =T print and flush numout 407 406 CHARACTER (len=40) :: clhstnam, clop, clmx ! local names … … 412 411 INTEGER :: jn, ierror ! local integers 413 412 REAL(wp) :: zsto, zout, zmax, zjulian, zdt ! local scalars 414 ! !413 ! 415 414 REAL(wp), POINTER, DIMENSION(:,:) :: zw2d ! 2D workspace 416 415 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d ! 3D workspace … … 419 418 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 420 419 ! 421 CALL wrk_alloc( jpi ,jpj , zw2d )422 IF ( ln_traldf_gdia .OR. lk_vvl ) call wrk_alloc( jpi , jpj ,jpk , zw3d )420 CALL wrk_alloc( jpi,jpj , zw2d ) 421 IF( lk_vvl ) CALL wrk_alloc( jpi,jpj,jpk , zw3d ) 423 422 ! 424 423 ! Output the initial state and forcings … … 657 656 658 657 clmx ="l_max(only(x))" ! max index on a period 659 CALL histdef( nid_T, "sobowlin", "Bowl Index" , "W-point", & ! bowl INDEX660 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clmx, zsto, zout )658 ! CALL histdef( nid_T, "sobowlin", "Bowl Index" , "W-point", & ! bowl INDEX 659 ! & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clmx, zsto, zout ) 661 660 #if defined key_diahth 662 661 CALL histdef( nid_T, "sothedep", "Thermocline Depth" , "m" , & ! hth … … 682 681 CALL histdef( nid_U, "vozocrtx", "Zonal Current" , "m/s" , & ! un 683 682 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout ) 684 IF( ln_traldf_gdia ) THEN685 CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current" , "m/s" , & ! u_eiv686 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )687 ELSE688 #if defined key_diaeiv689 CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current" , "m/s" , & ! u_eiv690 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )691 #endif692 END IF693 683 ! !!! nid_U : 2D 694 684 CALL histdef( nid_U, "sozotaux", "Wind Stress along i-axis" , "N/m2" , & ! utau … … 700 690 CALL histdef( nid_V, "vomecrty", "Meridional Current" , "m/s" , & ! vn 701 691 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout ) 702 IF( ln_traldf_gdia ) THEN703 CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current" , "m/s" , & ! v_eiv704 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )705 ELSE706 #if defined key_diaeiv707 CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current" , "m/s" , & ! v_eiv708 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )709 #endif710 END IF711 692 ! !!! nid_V : 2D 712 693 CALL histdef( nid_V, "sometauy", "Wind Stress along j-axis" , "N/m2" , & ! vtau … … 718 699 CALL histdef( nid_W, "vovecrtz", "Vertical Velocity" , "m/s" , & ! wn 719 700 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 720 IF( ln_traldf_gdia ) THEN721 CALL histdef( nid_W, "voveeivw", "Vertical EIV Velocity" , "m/s" , & ! w_eiv722 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )723 ELSE724 #if defined key_diaeiv725 CALL histdef( nid_W, "voveeivw", "Vertical EIV Velocity" , "m/s" , & ! w_eiv726 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )727 #endif728 END IF729 701 CALL histdef( nid_W, "votkeavt", "Vertical Eddy Diffusivity" , "m2/s" , & ! avt 730 702 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) … … 737 709 ENDIF 738 710 ! !!! nid_W : 2D 739 #if defined key_traldf_c2d740 CALL histdef( nid_W, "soleahtw", "lateral eddy diffusivity" , "m2/s" , & ! ahtw741 & jpi, jpj, nh_W, 1 , 1, 1 , - 99, 32, clop, zsto, zout )742 # if defined key_traldf_eiv743 CALL histdef( nid_W, "soleaeiw", "eddy induced vel. coeff. at w-point", "m2/s", & ! aeiw744 & jpi, jpj, nh_W, 1 , 1, 1 , - 99, 32, clop, zsto, zout )745 # endif746 #endif747 748 711 CALL histend( nid_W, snc4chunks=snc4set ) 749 712 … … 853 816 854 817 CALL histwrite( nid_U, "vozocrtx", it, un , ndim_U , ndex_U ) ! i-current 855 IF( ln_traldf_gdia ) THEN856 IF (.not. ALLOCATED(psix_eiv))THEN857 ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr )858 IF( lk_mpp ) CALL mpp_sum ( ierr )859 IF( ierr > 0 ) CALL ctl_stop('STOP', 'diawri: unable to allocate psi{x,y}_eiv')860 psix_eiv(:,:,:) = 0.0_wp861 psiy_eiv(:,:,:) = 0.0_wp862 ENDIF863 DO jk=1,jpkm1864 zw3d(:,:,jk) = (psix_eiv(:,:,jk+1) - psix_eiv(:,:,jk))/fse3u(:,:,jk) ! u_eiv = -dpsix/dz865 END DO866 zw3d(:,:,jpk) = 0._wp867 CALL histwrite( nid_U, "vozoeivu", it, zw3d, ndim_U , ndex_U ) ! i-eiv current868 ELSE869 #if defined key_diaeiv870 CALL histwrite( nid_U, "vozoeivu", it, u_eiv, ndim_U , ndex_U ) ! i-eiv current871 #endif872 ENDIF873 818 CALL histwrite( nid_U, "sozotaux", it, utau , ndim_hU, ndex_hU ) ! i-wind stress 874 819 875 820 CALL histwrite( nid_V, "vomecrty", it, vn , ndim_V , ndex_V ) ! j-current 876 IF( ln_traldf_gdia ) THEN877 DO jk=1,jpk-1878 zw3d(:,:,jk) = (psiy_eiv(:,:,jk+1) - psiy_eiv(:,:,jk))/fse3v(:,:,jk) ! v_eiv = -dpsiy/dz879 END DO880 zw3d(:,:,jpk) = 0._wp881 CALL histwrite( nid_V, "vomeeivv", it, zw3d, ndim_V , ndex_V ) ! j-eiv current882 ELSE883 #if defined key_diaeiv884 CALL histwrite( nid_V, "vomeeivv", it, v_eiv, ndim_V , ndex_V ) ! j-eiv current885 #endif886 ENDIF887 821 CALL histwrite( nid_V, "sometauy", it, vtau , ndim_hV, ndex_hV ) ! j-wind stress 888 822 889 823 CALL histwrite( nid_W, "vovecrtz", it, wn , ndim_T, ndex_T ) ! vert. current 890 IF( ln_traldf_gdia ) THEN891 DO jk=1,jpk-1892 DO jj = 2, jpjm1893 DO ji = fs_2, fs_jpim1 ! vector opt.894 zw3d(ji,jj,jk) = (psiy_eiv(ji,jj,jk) - psiy_eiv(ji,jj-1,jk))/e2v(ji,jj) + &895 & (psix_eiv(ji,jj,jk) - psix_eiv(ji-1,jj,jk))/e1u(ji,jj) ! w_eiv = dpsiy/dy + dpsiy/dx896 END DO897 END DO898 END DO899 zw3d(:,:,jpk) = 0._wp900 CALL histwrite( nid_W, "voveeivw", it, zw3d , ndim_T, ndex_T ) ! vert. eiv current901 ELSE902 # if defined key_diaeiv903 CALL histwrite( nid_W, "voveeivw", it, w_eiv , ndim_T, ndex_T ) ! vert. eiv current904 # endif905 ENDIF906 824 CALL histwrite( nid_W, "votkeavt", it, avt , ndim_T, ndex_T ) ! T vert. eddy diff. coef. 907 825 CALL histwrite( nid_W, "votkeavm", it, avmu , ndim_T, ndex_T ) ! T vert. eddy visc. coef. … … 909 827 CALL histwrite( nid_W, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T ) ! S vert. eddy diff. coef. 910 828 ENDIF 911 #if defined key_traldf_c2d912 CALL histwrite( nid_W, "soleahtw", it, ahtw , ndim_hT, ndex_hT ) ! lateral eddy diff. coef.913 # if defined key_traldf_eiv914 CALL histwrite( nid_W, "soleaeiw", it, aeiw , ndim_hT, ndex_hT ) ! EIV coefficient at w-point915 # endif916 #endif917 829 918 830 ! 3. Close all files … … 925 837 ENDIF 926 838 ! 927 CALL wrk_dealloc( jpi , jpj, zw2d )928 IF ( ln_traldf_gdia .OR. lk_vvl ) callwrk_dealloc( jpi , jpj , jpk , zw3d )839 CALL wrk_dealloc( jpi , jpj , zw2d ) 840 IF( lk_vvl ) CALL wrk_dealloc( jpi , jpj , jpk , zw3d ) 929 841 ! 930 842 IF( nn_timing == 1 ) CALL timing_stop('dia_wri') … … 958 870 !!---------------------------------------------------------------------- 959 871 ! 960 ! IF( nn_timing == 1 ) CALL timing_start('dia_wri_state') ! not sure this works for routines not called in first timestep961 962 872 ! 0. Initialisation 963 873 ! ----------------- … … 1018 928 CALL histdef( id_i, "vovvldep", "T point depth" , "m" , & ! t-point depth 1019 929 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1020 END 930 ENDIF 1021 931 1022 932 #if defined key_lim2 … … 1042 952 CALL histwrite( id_i, "vomecrty", kt, vn , jpi*jpj*jpk, idex ) ! now j-velocity 1043 953 CALL histwrite( id_i, "vovecrtz", kt, wn , jpi*jpj*jpk, idex ) ! now k-velocity 1044 CALL histwrite( id_i, "sowaflup", kt, (emp-rnf ), jpi*jpj , idex ) ! freshwater budget954 CALL histwrite( id_i, "sowaflup", kt, emp-rnf , jpi*jpj , idex ) ! freshwater budget 1045 955 CALL histwrite( id_i, "sohefldo", kt, qsr + qns , jpi*jpj , idex ) ! total heat flux 1046 956 CALL histwrite( id_i, "soshfldo", kt, qsr , jpi*jpj , idex ) ! solar heat flux … … 1060 970 ENDIF 1061 971 #endif 1062 1063 ! IF( nn_timing == 1 ) CALL timing_stop('dia_wri_state') ! not sure this works for routines not called in first timestep1064 972 ! 1065 1066 973 END SUBROUTINE dia_wri_state 1067 974 !!====================================================================== -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/closea.F90
r5506 r5836 71 71 !! =2 put at location runoff 72 72 !!---------------------------------------------------------------------- 73 INTEGER :: jc 74 INTEGER :: isrow! local index75 !!---------------------------------------------------------------------- 76 73 INTEGER :: jc ! dummy loop indices 74 INTEGER :: isrow ! local index 75 !!---------------------------------------------------------------------- 76 ! 77 77 IF(lwp) WRITE(numout,*) 78 78 IF(lwp) WRITE(numout,*)'dom_clo : closed seas ' 79 79 IF(lwp) WRITE(numout,*)'~~~~~~~' 80 80 ! 81 81 ! initial values 82 82 ncsnr(:) = 1 ; ncsi1(:) = 1 ; ncsi2(:) = 1 ; ncsir(:,:) = 1 83 83 ncstt(:) = 0 ; ncsj1(:) = 1 ; ncsj2(:) = 1 ; ncsjr(:,:) = 1 84 84 ! 85 85 ! set the closed seas (in data domain indices) 86 86 ! ------------------- 87 87 ! 88 88 IF( cp_cfg == "orca" ) THEN 89 89 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r5123 r5836 7 7 !! History : 1.0 ! 2005-10 (A. Beckmann, G. Madec) reactivate s-coordinate 8 8 !! 3.3 ! 2010-11 (G. Madec) add mbk. arrays associated to the deepest ocean level 9 !! 4.0! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation9 !! 3.4 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 10 10 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Add arrays associated 11 11 !! to the optimization of BDY communications 12 !! 3.7 ! 2015-11 (G. Madec) introduce surface and scale factor ratio 12 13 !!---------------------------------------------------------------------- 13 14 … … 20 21 21 22 IMPLICIT NONE 22 PUBLIC ! allows the acces to par_oce when dom_oce is used 23 ! ! exception to coding rules... to be suppressed ??? 23 PUBLIC ! allows the acces to par_oce when dom_oce is used (exception to coding rules) 24 24 25 25 PUBLIC dom_oce_alloc ! Called from nemogcm.F90 … … 107 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: r2dtra !: = 2*rdttra except at nit000 (=rdttra) if neuler=0 108 108 109 ! !!* Namelist namcla : cross land advection110 INTEGER, PUBLIC :: nn_cla !: =1 cross land advection for exchanges through some straits (ORCA2)111 112 109 !!---------------------------------------------------------------------- 113 110 !! space domain parameters … … 158 155 !! horizontal curvilinear coordinate and scale factors 159 156 !! --------------------------------------------------------------------- 160 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: glamt, glamu !: longitude of t-, u-, v- and f-points (degre) 161 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: glamv, glamf !: 162 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: gphit, gphiu !: latitude of t-, u-, v- and f-points (degre) 163 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: gphiv, gphif !: 164 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1t, e2t, r1_e1t, r1_e2t !: horizontal scale factors and inverse at t-point (m) 165 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1u, e2u, r1_e1u, r1_e2u !: horizontal scale factors and inverse at u-point (m) 166 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1v, e2v, r1_e1v, r1_e2v !: horizontal scale factors and inverse at v-point (m) 167 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1f, e2f, r1_e1f, r1_e2f !: horizontal scale factors and inverse at f-point (m) 168 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2t !: surface at t-point (m2) 169 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ff !: coriolis factor (2.*omega*sin(yphi) ) (s-1) 157 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: glamt , glamu, glamv , glamf !: longitude at t, u, v, f-points [degree] 158 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: gphit , gphiu, gphiv , gphif !: latitude at t, u, v, f-points [degree] 159 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1t , e2t , r1_e1t, r1_e2t !: t-point horizontal scale factors [m] 160 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1u , e2u , r1_e1u, r1_e2u !: horizontal scale factors at u-point [m] 161 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1v , e2v , r1_e1v, r1_e2v !: horizontal scale factors at v-point [m] 162 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1f , e2f , r1_e1f, r1_e2f !: horizontal scale factors at f-point [m] 163 ! 164 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2t , r1_e1e2t !: associated metrics at t-point 165 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2u , r1_e1e2u , e2_e1u !: associated metrics at u-point 166 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2v , r1_e1e2v , e1_e2v !: associated metrics at v-point 167 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2f , r1_e1e2f !: associated metrics at f-point 168 ! 169 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ff !: coriolis factor [1/s] 170 170 171 171 !!---------------------------------------------------------------------- … … 216 216 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht_0 !: reference depth at t- points (meters) 217 217 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_0 , hv_0 !: reference depth at u- and v-points (meters) 218 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: re2u_e1u !: scale factor coeffs at u points (e2u/e1u)219 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: re1v_e2v !: scale factor coeffs at v points (e1v/e2v)220 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e12t , r1_e12t !: horizontal cell surface and inverse at t points221 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e12u , r1_e12u !: horizontal cell surface and inverse at u points222 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e12v , r1_e12v !: horizontal cell surface and inverse at v points223 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e12f , r1_e12f !: horizontal cell surface and inverse at f points224 218 225 219 INTEGER, PUBLIC :: nla10 !: deepest W level Above ~10m (nlb10 - 1) … … 265 259 266 260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: tpol, fpol !: north fold mask (jperio= 3 or 4) 267 268 #if defined key_noslip_accurate269 INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: npcoa !: ???270 INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nicoa, njcoa !: ???271 #endif272 261 273 262 !!---------------------------------------------------------------------- … … 333 322 INTEGER FUNCTION dom_oce_alloc() 334 323 !!---------------------------------------------------------------------- 335 INTEGER, DIMENSION(1 2) :: ierr324 INTEGER, DIMENSION(13) :: ierr 336 325 !!---------------------------------------------------------------------- 337 326 ierr(:) = 0 … … 346 335 & tpol(jpiglo) , fpol(jpiglo) , STAT=ierr(2) ) 347 336 ! 348 ALLOCATE( glamt(jpi,jpj) , gphit(jpi,jpj) , e1t(jpi,jpj) , e2t(jpi,jpj) , r1_e1t(jpi,jpj) , r1_e2t(jpi,jpj) , & 349 & glamu(jpi,jpj) , gphiu(jpi,jpj) , e1u(jpi,jpj) , e2u(jpi,jpj) , r1_e1u(jpi,jpj) , r1_e2u(jpi,jpj) , & 350 & glamv(jpi,jpj) , gphiv(jpi,jpj) , e1v(jpi,jpj) , e2v(jpi,jpj) , r1_e1v(jpi,jpj) , r1_e2v(jpi,jpj) , & 351 & glamf(jpi,jpj) , gphif(jpi,jpj) , e1f(jpi,jpj) , e2f(jpi,jpj) , r1_e1f(jpi,jpj) , r1_e2f(jpi,jpj) , & 352 & e1e2t(jpi,jpj) , ff (jpi,jpj) , STAT=ierr(3) ) 337 ALLOCATE( glamt(jpi,jpj) , glamu(jpi,jpj) , glamv(jpi,jpj) , glamf(jpi,jpj) , & 338 & gphit(jpi,jpj) , gphiu(jpi,jpj) , gphiv(jpi,jpj) , gphif(jpi,jpj) , & 339 & e1t (jpi,jpj) , e2t (jpi,jpj) , r1_e1t(jpi,jpj) , r1_e2t(jpi,jpj) , & 340 & e1u (jpi,jpj) , e2u (jpi,jpj) , r1_e1u(jpi,jpj) , r1_e2u(jpi,jpj) , & 341 & e1v (jpi,jpj) , e2v (jpi,jpj) , r1_e1v(jpi,jpj) , r1_e2v(jpi,jpj) , & 342 & e1f (jpi,jpj) , e2f (jpi,jpj) , r1_e1f(jpi,jpj) , r1_e2f(jpi,jpj) , & 343 & e1e2t(jpi,jpj) , r1_e1e2t(jpi,jpj) , & 344 & e1e2u(jpi,jpj) , r1_e1e2u(jpi,jpj) , e2_e1u(jpi,jpj) , & 345 & e1e2v(jpi,jpj) , r1_e1e2v(jpi,jpj) , e1_e2v(jpi,jpj) , & 346 & e1e2f(jpi,jpj) , r1_e1e2f(jpi,jpj) , & 347 & ff (jpi,jpj) , STAT=ierr(3) ) 353 348 ! 354 349 ALLOCATE( gdep3w_0(jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0 (jpi,jpj,jpk) , & … … 364 359 & gdept_b (jpi,jpj,jpk) ,gdepw_b(jpi,jpj,jpk) , e3w_b (jpi,jpj,jpk) , & 365 360 & e3t_a (jpi,jpj,jpk) , e3u_a (jpi,jpj,jpk) , e3v_a (jpi,jpj,jpk) , & 366 & ehu_a (jpi,jpj) , ehv_a(jpi,jpj), &367 & ehur_a (jpi,jpj) , ehvr_a(jpi,jpj), &368 & ehu_b (jpi,jpj) , ehv_b(jpi,jpj), &369 & ehur_b (jpi,jpj) , ehvr_b(jpi,jpj), STAT=ierr(5) )361 & ehu_a (jpi,jpj) , ehv_a (jpi,jpj), & 362 & ehur_a (jpi,jpj) , ehvr_a(jpi,jpj), & 363 & ehu_b (jpi,jpj) , ehv_b (jpi,jpj), & 364 & ehur_b (jpi,jpj) , ehvr_b(jpi,jpj), STAT=ierr(5) ) 370 365 #endif 371 366 ! 372 ALLOCATE( hu (jpi,jpj) , hur (jpi,jpj) , hu_0(jpi,jpj) , ht_0 (jpi,jpj) , & 373 & hv (jpi,jpj) , hvr (jpi,jpj) , hv_0(jpi,jpj) , ht (jpi,jpj) , & 374 & re2u_e1u(jpi,jpj) , re1v_e2v(jpi,jpj) , & 375 & e12t (jpi,jpj) , r1_e12t (jpi,jpj) , & 376 & e12u (jpi,jpj) , r1_e12u (jpi,jpj) , & 377 & e12v (jpi,jpj) , r1_e12v (jpi,jpj) , & 378 & e12f (jpi,jpj) , r1_e12f (jpi,jpj) , STAT=ierr(6) ) 367 ALLOCATE( hu(jpi,jpj) , hur(jpi,jpj) , hu_0(jpi,jpj) , ht_0(jpi,jpj) , & 368 & hv(jpi,jpj) , hvr(jpi,jpj) , hv_0(jpi,jpj) , ht (jpi,jpj) , STAT=ierr(6) ) 379 369 ! 380 370 ALLOCATE( gdept_1d(jpk) , gdepw_1d(jpk) , & … … 387 377 & scosrf(jpi,jpj) , scobot(jpi,jpj) , & 388 378 & hifv (jpi,jpj) , hiff (jpi,jpj) , & 389 & hift (jpi,jpj) , hifu (jpi,jpj) , rx1 379 & hift (jpi,jpj) , hifu (jpi,jpj) , rx1(jpi,jpj) , STAT=ierr(8) ) 390 380 391 381 ALLOCATE( mbathy(jpi,jpj) , bathy(jpi,jpj) , & 392 382 & tmask_i(jpi,jpj) , umask_i(jpi,jpj), vmask_i(jpi,jpj), fmask_i(jpi,jpj), & 393 & bmask (jpi,jpj), &383 & bmask (jpi,jpj) , & 394 384 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv(jpi,jpj) , STAT=ierr(9) ) 395 385 396 386 ! (ISF) Allocation of basic array 397 ALLOCATE( misfdep(jpi,jpj) , risfdep(jpi,jpj), &398 & mikt(jpi,jpj), miku(jpi,jpj), mikv(jpi,jpj) , &399 & mikf(jpi,jpj), ssmask(jpi,jpj), STAT=ierr(10) )387 ALLOCATE( misfdep(jpi,jpj) , risfdep(jpi,jpj), & 388 & mikt(jpi,jpj), miku(jpi,jpj), mikv(jpi,jpj) , & 389 & mikf(jpi,jpj), ssmask(jpi,jpj), STAT=ierr(10) ) 400 390 401 391 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk), & … … 403 393 404 394 ALLOCATE( wmask(jpi,jpj,jpk) , wumask(jpi,jpj,jpk), wvmask(jpi,jpj,jpk) , STAT=ierr(12) ) 405 406 #if defined key_noslip_accurate407 ALLOCATE( npcoa(4,jpk), nicoa(2*(jpi+jpj),4,jpk), njcoa(2*(jpi+jpj),4,jpk), STAT=ierr(12) )408 #endif409 395 ! 410 396 dom_oce_alloc = MAXVAL(ierr) -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90
r5363 r5836 19 19 !! dom_nam : read and contral domain namelists 20 20 !! dom_ctl : control print for the ocean domain 21 !! dom_stiff : diagnose maximum grid stiffness/hydrostatic consistency (s-coordinate) 21 22 !!---------------------------------------------------------------------- 22 23 USE oce ! ocean variables … … 25 26 USE phycst ! physical constants 26 27 USE closea ! closed seas 27 USE in_out_manager ! I/O manager28 USE lib_mpp ! distributed memory computing library29 30 28 USE domhgr ! domain: set the horizontal mesh 31 29 USE domzgr ! domain: set the vertical mesh … … 36 34 USE c1d ! 1D vertical configuration 37 35 USE dyncor_c1d ! Coriolis term (c1d case) (cor_c1d routine) 36 ! 37 USE in_out_manager ! I/O manager 38 USE lib_mpp ! distributed memory computing library 39 USE lbclnk ! ocean lateral boundary condition (or mpp link) 38 40 USE timing ! Timing 39 USE lbclnk ! ocean lateral boundary condition (or mpp link)40 41 41 42 IMPLICIT NONE … … 81 82 ENDIF 82 83 ! 83 CALL dom_nam ! read namelist ( namrun, namdom , namcla)84 CALL dom_nam ! read namelist ( namrun, namdom ) 84 85 CALL dom_clo ! Closed seas and lake 85 86 CALL dom_hgr ! Horizontal mesh … … 88 89 IF( ln_sco ) CALL dom_stiff ! Maximum stiffness ratio/hydrostatic consistency 89 90 ! 90 ht_0(:,:) = 0. 0_wp! Reference ocean depth at T-points91 hu_0(:,:) = 0. 0_wp! Reference ocean depth at U-points92 hv_0(:,:) = 0. 0_wp! Reference ocean depth at V-points91 ht_0(:,:) = 0._wp ! Reference ocean depth at T-points 92 hu_0(:,:) = 0._wp ! Reference ocean depth at U-points 93 hv_0(:,:) = 0._wp ! Reference ocean depth at V-points 93 94 DO jk = 1, jpk 94 95 ht_0(:,:) = ht_0(:,:) + e3t_0(:,:,jk) * tmask(:,:,jk) … … 97 98 END DO 98 99 ! 99 IF( lk_vvl )CALL dom_vvl_init ! Vertical variable mesh100 IF( lk_vvl ) CALL dom_vvl_init ! Vertical variable mesh 100 101 ! 101 102 IF( lk_c1d ) CALL cor_c1d ! 1D configuration: Coriolis set at T-point … … 131 132 !! ** input : - namrun namelist 132 133 !! - namdom namelist 133 !! - namcla namelist134 134 !! - namnc4 namelist ! "key_netcdf4" only 135 135 !!---------------------------------------------------------------------- … … 146 146 & ppsur, ppa0, ppa1, ppkth, ppacr, ppdzmin, pphmax, ldbletanh, & 147 147 & ppa2, ppkth2, ppacr2 148 NAMELIST/namcla/ nn_cla149 148 #if defined key_netcdf4 150 149 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 155 154 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run 156 155 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 157 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in reference namelist', lwp )156 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in reference namelist', lwp ) 158 157 159 158 REWIND( numnam_cfg ) ! Namelist namrun in configuration namelist : Parameters of the run 160 159 READ ( numnam_cfg, namrun, IOSTAT = ios, ERR = 902 ) 161 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in configuration namelist', lwp )160 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in configuration namelist', lwp ) 162 161 IF(lwm) WRITE ( numond, namrun ) 163 162 ! … … 251 250 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdom in configuration namelist', lwp ) 252 251 IF(lwm) WRITE ( numond, namdom ) 253 252 ! 254 253 IF(lwp) THEN 255 254 WRITE(numout,*) … … 293 292 WRITE(numout,*) ' ppacr2 = ', ppacr2 294 293 ENDIF 295 294 ! 296 295 ntopo = nn_bathy ! conversion DOCTOR names into model names (this should disappear soon) 297 296 e3zps_min = rn_e3zps_min … … 304 303 rdtmax = rn_rdtmin 305 304 rdth = rn_rdth 306 307 REWIND( numnam_ref ) ! Namelist namcla in reference namelist : Cross land advection308 READ ( numnam_ref, namcla, IOSTAT = ios, ERR = 905)309 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in reference namelist', lwp )310 311 REWIND( numnam_cfg ) ! Namelist namcla in configuration namelist : Cross land advection312 READ ( numnam_cfg, namcla, IOSTAT = ios, ERR = 906 )313 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcla in configuration namelist', lwp )314 IF(lwm) WRITE( numond, namcla )315 316 IF(lwp) THEN317 WRITE(numout,*)318 WRITE(numout,*) ' Namelist namcla'319 WRITE(numout,*) ' cross land advection nn_cla = ', nn_cla320 ENDIF321 IF ( nn_cla .EQ. 1 ) THEN322 IF ( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2323 CONTINUE324 ELSE325 CALL ctl_stop( 'STOP', 'Cross land advation iplemented only for ORCA2 configuration: cp_cfg = "orca" and jp_cfg = 2 ' )326 ENDIF327 ENDIF328 305 329 306 #if defined key_netcdf4 … … 409 386 END SUBROUTINE dom_ctl 410 387 388 411 389 SUBROUTINE dom_stiff 412 390 !!---------------------------------------------------------------------- … … 427 405 REAL(wp), DIMENSION(4) :: zr1 428 406 !!---------------------------------------------------------------------- 429 rx1(:,:) = 0. e0430 zrxmax = 0. e0431 zr1(:) = 0. e0432 407 rx1(:,:) = 0._wp 408 zrxmax = 0._wp 409 zr1(:) = 0._wp 410 ! 433 411 DO ji = 2, jpim1 434 412 DO jj = 2, jpjm1 … … 455 433 END DO 456 434 END DO 457 458 435 CALL lbc_lnk( rx1, 'T', 1. ) 459 460 zrxmax = MAXVAL( rx1)461 436 ! 437 zrxmax = MAXVAL( rx1 ) 438 ! 462 439 IF( lk_mpp ) CALL mpp_max( zrxmax ) ! max over the global domain 463 440 ! 464 441 IF(lwp) THEN 465 442 WRITE(numout,*) … … 467 444 WRITE(numout,*) '~~~~~~~~~' 468 445 ENDIF 469 446 ! 470 447 END SUBROUTINE dom_stiff 471 472 473 448 474 449 !!====================================================================== -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90
r5656 r5836 14 14 !! use of parameters in par_CONFIG-Rxx.h90, not in namelist 15 15 !! - ! 2004-05 (A. Koch-Larrouy) Add Gyre configuration 16 !! 4.0 ! 2011-02 (G. Madec) add cell surface (e1e2t) 16 !! 3.7 ! 2015-09 (G. Madec, S. Flavoni) add cell surface and their inverse 17 !! add optional read of e1e2u & e1e2v 17 18 !!---------------------------------------------------------------------- 18 19 … … 23 24 USE dom_oce ! ocean space and time domain 24 25 USE phycst ! physical constants 26 USE domwri ! write 'meshmask.nc' & 'coordinate_e1e2u_v.nc' files 27 ! 25 28 USE in_out_manager ! I/O manager 26 29 USE lib_mpp ! MPP library … … 35 38 36 39 !!---------------------------------------------------------------------- 37 !! NEMO/OPA 4.0 , NEMO Consortium (2011)40 !! NEMO/OPA 3.7 , NEMO Consortium (2014) 38 41 !! $Id$ 39 42 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 106 109 REAL(wp) :: zphi1, zsin_alpha, zim05, zjm05 107 110 INTEGER :: isrow ! index for ORCA1 starting row 108 111 INTEGER :: ie1e2u_v ! fag for u- & v-surface read in coordinate file or not 109 112 !!---------------------------------------------------------------------- 110 113 ! … … 122 125 WRITE(numout,*) ' meridional grid-spacing (meters) ppe2_m = ', ppe2_m 123 126 ENDIF 124 125 126 SELECT CASE( jphgr_msh ) ! type of horizontal mesh127 128 CASE ( 0 ) ! curvilinear coordinate on the sphere read in coordinate.nc file129 127 ! 128 ! 129 SELECT CASE( jphgr_msh ) ! type of horizontal mesh 130 ! 131 CASE ( 0 ) !== read in coordinate.nc file ==! 132 ! 130 133 IF(lwp) WRITE(numout,*) 131 134 IF(lwp) WRITE(numout,*) ' curvilinear coordinate on the sphere read in "coordinate" file' 132 133 CALL hgr_read ! Defaultl option : NetCDF file 134 135 ! ! ===================== 136 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2 configuration 137 ! ! ===================== 138 IF( nn_cla == 0 ) THEN 139 ! 140 ii0 = 139 ; ii1 = 140 ! Gibraltar Strait (e2u = 20 km) 141 ij0 = 102 ; ij1 = 102 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 142 IF(lwp) WRITE(numout,*) 143 IF(lwp) WRITE(numout,*) ' orca_r2: Gibraltar : e2u reduced to 20 km' 144 ! 145 ii0 = 160 ; ii1 = 160 ! Bab el Mandeb (e2u = 18 km) 146 ij0 = 88 ; ij1 = 88 ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 18.e3 147 e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3 148 IF(lwp) WRITE(numout,*) 149 IF(lwp) WRITE(numout,*) ' orca_r2: Bab el Mandeb: e2u reduced to 30 km' 150 IF(lwp) WRITE(numout,*) ' e1v reduced to 18 km' 151 ENDIF 152 153 ii0 = 145 ; ii1 = 146 ! Danish Straits (e2u = 10 km) 154 ij0 = 116 ; ij1 = 116 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 155 IF(lwp) WRITE(numout,*) 156 IF(lwp) WRITE(numout,*) ' orca_r2: Danish Straits : e2u reduced to 10 km' 157 ! 135 ! 136 ie1e2u_v = 0 ! set to unread e1e2u and e1e2v 137 ! 138 CALL hgr_read( ie1e2u_v ) ! read the coordinate.nc file 139 ! 140 IF( ie1e2u_v == 0 ) THEN ! e1e2u and e1e2v have not been read: compute them 141 ! ! e2u and e1v does not include a reduction in some strait: apply reduction 142 e1e2u (:,:) = e1u(:,:) * e2u(:,:) 143 e1e2v (:,:) = e1v(:,:) * e2v(:,:) 158 144 ENDIF 159 160 ! ! ===================== 161 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 162 ! ! ===================== 163 ! This dirty section will be suppressed by simplification process: all this will come back in input files 164 ! Currently these hard-wired indices relate to configuration with 165 ! extend grid (jpjglo=332) 166 ! which had a grid-size of 362x292. 167 ! 168 isrow = 332 - jpjglo 169 ! 170 ii0 = 282 ; ii1 = 283 ! Gibraltar Strait (e2u = 20 km) 171 ij0 = 241 - isrow ; ij1 = 241 - isrow ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 172 IF(lwp) WRITE(numout,*) 173 IF(lwp) WRITE(numout,*) ' orca_r1: Gibraltar : e2u reduced to 20 km' 174 175 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait (e2u = 10 km) 176 ij0 = 248 - isrow ; ij1 = 248 - isrow ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 177 IF(lwp) WRITE(numout,*) 178 IF(lwp) WRITE(numout,*) ' orca_r1: Bhosporus : e2u reduced to 10 km' 179 180 ii0 = 44 ; ii1 = 44 ! Lombok Strait (e1v = 13 km) 181 ij0 = 164 - isrow ; ij1 = 165 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 182 IF(lwp) WRITE(numout,*) 183 IF(lwp) WRITE(numout,*) ' orca_r1: Lombok : e1v reduced to 10 km' 184 185 ii0 = 48 ; ii1 = 48 ! Sumba Strait (e1v = 8 km) [closed from bathy_11 on] 186 ij0 = 164 - isrow ; ij1 = 165 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 8.e3 187 IF(lwp) WRITE(numout,*) 188 IF(lwp) WRITE(numout,*) ' orca_r1: Sumba : e1v reduced to 8 km' 189 190 ii0 = 53 ; ii1 = 53 ! Ombai Strait (e1v = 13 km) 191 ij0 = 164 - isrow ; ij1 = 165 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 192 IF(lwp) WRITE(numout,*) 193 IF(lwp) WRITE(numout,*) ' orca_r1: Ombai : e1v reduced to 13 km' 194 195 ii0 = 56 ; ii1 = 56 ! Timor Passage (e1v = 20 km) 196 ij0 = 164 - isrow ; ij1 = 145 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 197 IF(lwp) WRITE(numout,*) 198 IF(lwp) WRITE(numout,*) ' orca_r1: Timor Passage : e1v reduced to 20 km' 199 200 ii0 = 55 ; ii1 = 55 ! West Halmahera Strait (e1v = 30 km) 201 ij0 = 181 - isrow ; ij1 = 182 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3 202 IF(lwp) WRITE(numout,*) 203 IF(lwp) WRITE(numout,*) ' orca_r1: W Halmahera : e1v reduced to 30 km' 204 205 ii0 = 58 ; ii1 = 58 ! East Halmahera Strait (e1v = 50 km) 206 ij0 = 181 - isrow ; ij1 = 182 - isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 50.e3 207 IF(lwp) WRITE(numout,*) 208 IF(lwp) WRITE(numout,*) ' orca_r1: E Halmahera : e1v reduced to 50 km' 209 ! 210 ! 211 ENDIF 212 213 ! ! ====================== 214 IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN ! ORCA R05 configuration 215 ! ! ====================== 216 ii0 = 563 ; ii1 = 564 ! Gibraltar Strait (e2u = 20 km) 217 ij0 = 327 ; ij1 = 327 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 218 IF(lwp) WRITE(numout,*) 219 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Gibraltar Strait' 220 ! 221 ii0 = 627 ; ii1 = 628 ! Bosphore Strait (e2u = 10 km) 222 ij0 = 343 ; ij1 = 343 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 223 IF(lwp) WRITE(numout,*) 224 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Bosphore Strait' 225 ! 226 ii0 = 93 ; ii1 = 94 ! Sumba Strait (e2u = 40 km) 227 ij0 = 232 ; ij1 = 232 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 40.e3 228 IF(lwp) WRITE(numout,*) 229 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Sumba Strait' 230 ! 231 ii0 = 103 ; ii1 = 103 ! Ombai Strait (e2u = 15 km) 232 ij0 = 232 ; ij1 = 232 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 15.e3 233 IF(lwp) WRITE(numout,*) 234 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Ombai Strait' 235 ! 236 ii0 = 15 ; ii1 = 15 ! Palk Strait (e2u = 10 km) 237 ij0 = 270 ; ij1 = 270 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 238 IF(lwp) WRITE(numout,*) 239 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Palk Strait' 240 ! 241 ii0 = 87 ; ii1 = 87 ! Lombok Strait (e1v = 10 km) 242 ij0 = 232 ; ij1 = 233 ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 243 IF(lwp) WRITE(numout,*) 244 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e1v at the Lombok Strait' 245 ! 246 ! 247 ii0 = 662 ; ii1 = 662 ! Bab el Mandeb (e1v = 25 km) 248 ij0 = 276 ; ij1 = 276 ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 25.e3 249 IF(lwp) WRITE(numout,*) 250 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e1v at the Bab el Mandeb' 251 ! 252 ENDIF 253 254 255 ! N.B. : General case, lat and long function of both i and j indices: 256 ! e1t(ji,jj) = ra * rad * SQRT( ( cos( rad*gphit(ji,jj) ) * fsdila( zti, ztj ) )**2 & 257 ! + ( fsdiph( zti, ztj ) )**2 ) 258 ! e1u(ji,jj) = ra * rad * SQRT( ( cos( rad*gphiu(ji,jj) ) * fsdila( zui, zuj ) )**2 & 259 ! + ( fsdiph( zui, zuj ) )**2 ) 260 ! e1v(ji,jj) = ra * rad * SQRT( ( cos( rad*gphiv(ji,jj) ) * fsdila( zvi, zvj ) )**2 & 261 ! + ( fsdiph( zvi, zvj ) )**2 ) 262 ! e1f(ji,jj) = ra * rad * SQRT( ( cos( rad*gphif(ji,jj) ) * fsdila( zfi, zfj ) )**2 & 263 ! + ( fsdiph( zfi, zfj ) )**2 ) 264 ! 265 ! e2t(ji,jj) = ra * rad * SQRT( ( cos( rad*gphit(ji,jj) ) * fsdjla( zti, ztj ) )**2 & 266 ! + ( fsdjph( zti, ztj ) )**2 ) 267 ! e2u(ji,jj) = ra * rad * SQRT( ( cos( rad*gphiu(ji,jj) ) * fsdjla( zui, zuj ) )**2 & 268 ! + ( fsdjph( zui, zuj ) )**2 ) 269 ! e2v(ji,jj) = ra * rad * SQRT( ( cos( rad*gphiv(ji,jj) ) * fsdjla( zvi, zvj ) )**2 & 270 ! + ( fsdjph( zvi, zvj ) )**2 ) 271 ! e2f(ji,jj) = ra * rad * SQRT( ( cos( rad*gphif(ji,jj) ) * fsdjla( zfi, zfj ) )**2 & 272 ! + ( fsdjph( zfi, zfj ) )**2 ) 273 274 275 CASE ( 1 ) ! geographical mesh on the sphere with regular grid-spacing 276 145 ! 146 CASE ( 1 ) !== geographical mesh on the sphere with regular (in degree) grid-spacing ==! 147 ! 277 148 IF(lwp) WRITE(numout,*) 278 149 IF(lwp) WRITE(numout,*) ' geographical mesh on the sphere with regular grid-spacing' 279 150 IF(lwp) WRITE(numout,*) ' given by ppe1_deg and ppe2_deg' 280 151 ! 281 152 DO jj = 1, jpj 282 153 DO ji = 1, jpi 283 zti = FLOAT( ji - 1 + nimpp - 1 ) ; ztj = FLOAT( jj - 1 + njmpp - 1 )284 zui = FLOAT( ji - 1 + nimpp - 1 ) + 0.5 ; zuj = FLOAT( jj - 1 + njmpp - 1 )285 zvi = FLOAT( ji - 1 + nimpp - 1 ) ; zvj = FLOAT( jj - 1 + njmpp - 1 ) + 0.5286 zfi = FLOAT( ji - 1 + nimpp - 1 ) + 0.5 ; zfj = FLOAT( jj - 1 + njmpp - 1 ) + 0.5154 zti = REAL( ji - 1 + nimpp - 1 ) ; ztj = REAL( jj - 1 + njmpp - 1 ) 155 zui = REAL( ji - 1 + nimpp - 1 ) + 0.5 ; zuj = REAL( jj - 1 + njmpp - 1 ) 156 zvi = REAL( ji - 1 + nimpp - 1 ) ; zvj = REAL( jj - 1 + njmpp - 1 ) + 0.5 157 zfi = REAL( ji - 1 + nimpp - 1 ) + 0.5 ; zfj = REAL( jj - 1 + njmpp - 1 ) + 0.5 287 158 ! Longitude 288 159 glamt(ji,jj) = ppglam0 + ppe1_deg * zti … … 307 178 END DO 308 179 END DO 309 310 311 CASE ( 2:3 ) ! f- or beta-plane with regular grid-spacing 312 180 ! 181 CASE ( 2:3 ) !== f- or beta-plane with regular grid-spacing ==! 182 ! 313 183 IF(lwp) WRITE(numout,*) 314 184 IF(lwp) WRITE(numout,*) ' f- or beta-plane with regular grid-spacing' 315 185 IF(lwp) WRITE(numout,*) ' given by ppe1_m and ppe2_m' 316 186 ! 317 187 ! Position coordinates (in kilometers) 318 188 ! ========== 319 glam0 = 0. e0189 glam0 = 0._wp 320 190 gphi0 = - ppe2_m * 1.e-3 321 191 ! 322 192 #if defined key_agrif 323 193 IF ( cp_cfg == 'eel' .AND. jp_cfg == 6 ) THEN ! for EEL6 configuration only … … 332 202 DO jj = 1, jpj 333 203 DO ji = 1, jpi 334 glamt(ji,jj) = glam0 + ppe1_m * 1.e-3 * ( FLOAT( ji - 1 + nimpp - 1 ) )335 glamu(ji,jj) = glam0 + ppe1_m * 1.e-3 * ( FLOAT( ji - 1 + nimpp - 1 ) + 0.5 )204 glamt(ji,jj) = glam0 + ppe1_m * 1.e-3 * ( REAL( ji - 1 + nimpp - 1 ) ) 205 glamu(ji,jj) = glam0 + ppe1_m * 1.e-3 * ( REAL( ji - 1 + nimpp - 1 ) + 0.5 ) 336 206 glamv(ji,jj) = glamt(ji,jj) 337 207 glamf(ji,jj) = glamu(ji,jj) 338 339 gphit(ji,jj) = gphi0 + ppe2_m * 1.e-3 * ( FLOAT( jj - 1 + njmpp - 1 ) )208 ! 209 gphit(ji,jj) = gphi0 + ppe2_m * 1.e-3 * ( REAL( jj - 1 + njmpp - 1 ) ) 340 210 gphiu(ji,jj) = gphit(ji,jj) 341 gphiv(ji,jj) = gphi0 + ppe2_m * 1.e-3 * ( FLOAT( jj - 1 + njmpp - 1 ) + 0.5 )211 gphiv(ji,jj) = gphi0 + ppe2_m * 1.e-3 * ( REAL( jj - 1 + njmpp - 1 ) + 0.5 ) 342 212 gphif(ji,jj) = gphiv(ji,jj) 343 213 END DO 344 214 END DO 345 215 ! 346 216 ! Horizontal scale factors (in meters) 347 217 ! ====== … … 350 220 e1v(:,:) = ppe1_m ; e2v(:,:) = ppe2_m 351 221 e1f(:,:) = ppe1_m ; e2f(:,:) = ppe2_m 352 353 CASE ( 4 ) ! geographical mesh on the sphere, isotropic MERCATOR type354 222 ! 223 CASE ( 4 ) !== geographical mesh on the sphere, isotropic MERCATOR type ==! 224 ! 355 225 IF(lwp) WRITE(numout,*) 356 226 IF(lwp) WRITE(numout,*) ' geographical mesh on the sphere, MERCATOR type' 357 227 IF(lwp) WRITE(numout,*) ' longitudinal/latitudinal spacing given by ppe1_deg' 358 228 IF ( ppgphi0 == -90 ) CALL ctl_stop( ' Mercator grid cannot start at south pole !!!! ' ) 359 229 ! 360 230 ! Find index corresponding to the equator, given the grid spacing e1_deg 361 231 ! and the (approximate) southern latitude ppgphi0. … … 365 235 ijeq = ABS( 180./rpi * LOG( COS( zarg ) / SIN( zarg ) ) / ppe1_deg ) 366 236 IF( ppgphi0 > 0 ) ijeq = -ijeq 367 237 ! 368 238 IF(lwp) WRITE(numout,*) ' Index of the equator on the MERCATOR grid:', ijeq 369 239 ! 370 240 DO jj = 1, jpj 371 241 DO ji = 1, jpi 372 zti = FLOAT( ji - 1 + nimpp - 1 ) ; ztj = FLOAT( jj - ijeq + njmpp - 1 )373 zui = FLOAT( ji - 1 + nimpp - 1 ) + 0.5 ; zuj = FLOAT( jj - ijeq + njmpp - 1 )374 zvi = FLOAT( ji - 1 + nimpp - 1 ) ; zvj = FLOAT( jj - ijeq + njmpp - 1 ) + 0.5375 zfi = FLOAT( ji - 1 + nimpp - 1 ) + 0.5 ; zfj = FLOAT( jj - ijeq + njmpp - 1 ) + 0.5242 zti = REAL( ji - 1 + nimpp - 1 ) ; ztj = REAL( jj - ijeq + njmpp - 1 ) 243 zui = REAL( ji - 1 + nimpp - 1 ) + 0.5 ; zuj = REAL( jj - ijeq + njmpp - 1 ) 244 zvi = REAL( ji - 1 + nimpp - 1 ) ; zvj = REAL( jj - ijeq + njmpp - 1 ) + 0.5 245 zfi = REAL( ji - 1 + nimpp - 1 ) + 0.5 ; zfj = REAL( jj - ijeq + njmpp - 1 ) + 0.5 376 246 ! Longitude 377 247 glamt(ji,jj) = ppglam0 + ppe1_deg * zti … … 396 266 END DO 397 267 END DO 398 399 CASE ( 5 ) ! beta-plane with regular grid-spacing and rotated domain(GYRE configuration)400 268 ! 269 CASE ( 5 ) !== beta-plane with regular grid-spacing and rotated domain ==! (GYRE configuration) 270 ! 401 271 IF(lwp) WRITE(numout,*) 402 272 IF(lwp) WRITE(numout,*) ' beta-plane with regular grid-spacing and rotated domain (GYRE configuration)' 403 273 IF(lwp) WRITE(numout,*) ' given by ppe1_m and ppe2_m' 404 274 ! 405 275 ! Position coordinates (in kilometers) 406 276 ! ========== 407 277 ! 408 278 ! angle 45deg and ze1=106.e+3 / jp_cfg forced -> zlam1 = -85deg, zphi1 = 29degN 409 zlam1 = -85 410 zphi1 = 29279 zlam1 = -85._wp 280 zphi1 = 29._wp 411 281 ! resolution in meters 412 ze1 = 106000. / FLOAT(jp_cfg)282 ze1 = 106000. / REAL( jp_cfg , wp ) 413 283 ! benchmark: forced the resolution to be about 100 km 414 IF( nbench /= 0 ) ze1 = 106000. e0415 zsin_alpha = - SQRT( 2. ) / 2.416 zcos_alpha = SQRT( 2. ) / 2.284 IF( nbench /= 0 ) ze1 = 106000._wp 285 zsin_alpha = - SQRT( 2._wp ) * 0.5_wp 286 zcos_alpha = SQRT( 2._wp ) * 0.5_wp 417 287 ze1deg = ze1 / (ra * rad) 418 IF( nbench /= 0 ) ze1deg = ze1deg / FLOAT(jp_cfg)! benchmark: keep the lat/+lon419 ! ! at the right jp_cfg resolution420 glam0 = zlam1 + zcos_alpha * ze1deg * FLOAT( jpjglo-2)421 gphi0 = zphi1 + zsin_alpha * ze1deg * FLOAT( jpjglo-2)422 288 IF( nbench /= 0 ) ze1deg = ze1deg / REAL( jp_cfg , wp ) ! benchmark: keep the lat/+lon 289 ! ! at the right jp_cfg resolution 290 glam0 = zlam1 + zcos_alpha * ze1deg * REAL( jpjglo-2 , wp ) 291 gphi0 = zphi1 + zsin_alpha * ze1deg * REAL( jpjglo-2 , wp ) 292 ! 423 293 IF( nprint==1 .AND. lwp ) THEN 424 294 WRITE(numout,*) ' ze1', ze1, 'cosalpha', zcos_alpha, 'sinalpha', zsin_alpha 425 295 WRITE(numout,*) ' ze1deg', ze1deg, 'glam0', glam0, 'gphi0', gphi0 426 296 ENDIF 427 297 ! 428 298 DO jj = 1, jpj 429 DO ji = 1, jpi430 zim1 = FLOAT( ji + nimpp - 1 ) - 1. ; zim05 = FLOAT( ji + nimpp - 1 ) - 1.5431 zjm1 = FLOAT( jj + njmpp - 1 ) - 1. ; zjm05 = FLOAT( jj + njmpp - 1 ) - 1.5432 433 glamf(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha434 gphif(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha435 436 glamt(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha437 gphit(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha438 439 glamu(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha440 gphiu(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha441 442 glamv(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha443 gphiv(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha444 END DO445 446 299 DO ji = 1, jpi 300 zim1 = REAL( ji + nimpp - 1 ) - 1. ; zim05 = REAL( ji + nimpp - 1 ) - 1.5 301 zjm1 = REAL( jj + njmpp - 1 ) - 1. ; zjm05 = REAL( jj + njmpp - 1 ) - 1.5 302 ! 303 glamf(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha 304 gphif(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha 305 ! 306 glamt(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha 307 gphit(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha 308 ! 309 glamu(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha 310 gphiu(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha 311 ! 312 glamv(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha 313 gphiv(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha 314 END DO 315 END DO 316 ! 447 317 ! Horizontal scale factors (in meters) 448 318 ! ====== … … 451 321 e1v(:,:) = ze1 ; e2v(:,:) = ze1 452 322 e1f(:,:) = ze1 ; e2f(:,:) = ze1 453 323 ! 454 324 CASE DEFAULT 455 325 WRITE(ctmp1,*) ' bad flag value for jphgr_msh = ', jphgr_msh 456 326 CALL ctl_stop( ctmp1 ) 457 327 ! 458 328 END SELECT 459 329 460 ! T-cell surface 461 ! -------------- 462 e1e2t(:,:) = e1t(:,:) * e2t(:,:) 463 464 ! Useful shortcuts (JC: note the duplicated e2e2t array ! Need some cleaning) 465 ! --------------------------------------------------------------------------- 466 e12t (:,:) = e1t(:,:) * e2t(:,:) 467 e12u (:,:) = e1u(:,:) * e2u(:,:) 468 e12v (:,:) = e1v(:,:) * e2v(:,:) 469 e12f (:,:) = e1f(:,:) * e2f(:,:) 470 r1_e12t (:,:) = 1._wp / e12t(:,:) 471 r1_e12u (:,:) = 1._wp / e12u(:,:) 472 r1_e12v (:,:) = 1._wp / e12v(:,:) 473 r1_e12f (:,:) = 1._wp / e12f(:,:) 474 re2u_e1u(:,:) = e2u(:,:) / e1u(:,:) 475 re1v_e2v(:,:) = e1v(:,:) / e2v(:,:) 476 r1_e1t (:,:) = 1._wp / e1t(:,:) 477 r1_e1u (:,:) = 1._wp / e1u(:,:) 478 r1_e1v (:,:) = 1._wp / e1v(:,:) 479 r1_e1f (:,:) = 1._wp / e1f(:,:) 480 r1_e2t (:,:) = 1._wp / e2t(:,:) 481 r1_e2u (:,:) = 1._wp / e2u(:,:) 482 r1_e2v (:,:) = 1._wp / e2v(:,:) 483 r1_e2f (:,:) = 1._wp / e2f(:,:) 484 485 ! Control printing : Grid informations (if not restart) 486 ! ---------------- 487 488 IF( lwp .AND. .NOT.ln_rstart ) THEN 330 ! associated horizontal metrics 331 ! ----------------------------- 332 ! 333 r1_e1t(:,:) = 1._wp / e1t(:,:) ; r1_e2t (:,:) = 1._wp / e2t(:,:) 334 r1_e1u(:,:) = 1._wp / e1u(:,:) ; r1_e2u (:,:) = 1._wp / e2u(:,:) 335 r1_e1v(:,:) = 1._wp / e1v(:,:) ; r1_e2v (:,:) = 1._wp / e2v(:,:) 336 r1_e1f(:,:) = 1._wp / e1f(:,:) ; r1_e2f (:,:) = 1._wp / e2f(:,:) 337 ! 338 e1e2t (:,:) = e1t(:,:) * e2t(:,:) ; r1_e1e2t(:,:) = 1._wp / e1e2t(:,:) 339 e1e2f (:,:) = e1f(:,:) * e2f(:,:) ; r1_e1e2f(:,:) = 1._wp / e1e2f(:,:) 340 IF( jphgr_msh /= 0 ) THEN ! e1e2u and e1e2v have not been set: compute them 341 e1e2u (:,:) = e1u(:,:) * e2u(:,:) 342 e1e2v (:,:) = e1v(:,:) * e2v(:,:) 343 ENDIF 344 r1_e1e2u(:,:) = 1._wp / e1e2u(:,:) ! compute their invert in both cases 345 r1_e1e2v(:,:) = 1._wp / e1e2v(:,:) 346 ! 347 e2_e1u(:,:) = e2u(:,:) / e1u(:,:) 348 e1_e2v(:,:) = e1v(:,:) / e2v(:,:) 349 350 IF( lwp .AND. .NOT.ln_rstart ) THEN ! Control print : Grid informations (if not restart) 489 351 WRITE(numout,*) 490 352 WRITE(numout,*) ' longitude and e1 scale factors' … … 496 358 9300 FORMAT( 1x, i4, f8.2,1x, f8.2,1x, f8.2,1x, f8.2, 1x, & 497 359 f19.10, 1x, f19.10, 1x, f19.10, 1x, f19.10 ) 498 360 ! 499 361 WRITE(numout,*) 500 362 WRITE(numout,*) ' latitude and e2 scale factors' … … 506 368 ENDIF 507 369 508 509 IF( nprint == 1 .AND. lwp ) THEN510 WRITE(numout,*) ' e1u e2u '511 CALL prihre( e1u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )512 CALL prihre( e2u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )513 WRITE(numout,*) ' e1v e2v '514 CALL prihre( e1v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )515 CALL prihre( e2v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )516 WRITE(numout,*) ' e1f e2f '517 CALL prihre( e1f,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )518 CALL prihre( e2f,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )519 ENDIF520 521 370 522 371 ! ================= ! … … 525 374 526 375 SELECT CASE( jphgr_msh ) ! type of horizontal mesh 527 376 ! 528 377 CASE ( 0, 1, 4 ) ! mesh on the sphere 529 378 ! 530 379 ff(:,:) = 2. * omega * SIN( rad * gphif(:,:) ) 531 380 ! 532 381 CASE ( 2 ) ! f-plane at ppgphi0 533 382 ! 534 383 ff(:,:) = 2. * omega * SIN( rad * ppgphi0 ) 535 384 ! 536 385 IF(lwp) WRITE(numout,*) ' f-plane: Coriolis parameter = constant = ', ff(1,1) 537 386 ! 538 387 CASE ( 3 ) ! beta-plane 539 388 ! 540 389 zbeta = 2. * omega * COS( rad * ppgphi0 ) / ra ! beta at latitude ppgphi0 541 zphi0 = ppgphi0 - FLOAT( jpjglo/2) * ppe2_m / ( ra * rad ) ! latitude of the first row F-points542 390 zphi0 = ppgphi0 - REAL( jpjglo/2) * ppe2_m / ( ra * rad ) ! latitude of the first row F-points 391 ! 543 392 #if defined key_agrif 544 393 IF ( cp_cfg == 'eel' .AND. jp_cfg == 6 ) THEN ! for EEL6 configuration only 545 394 IF( .NOT. Agrif_Root() ) THEN 546 zphi0 = ppgphi0 - FLOAT( Agrif_Parent(jpjglo)/2)*Agrif_Parent(ppe2_m) & 547 & / (ra * rad) 395 zphi0 = ppgphi0 - REAL( Agrif_Parent(jpjglo)/2)*Agrif_Parent(ppe2_m) / (ra * rad) 548 396 ENDIF 549 397 ENDIF 550 398 #endif 551 399 zf0 = 2. * omega * SIN( rad * zphi0 ) ! compute f0 1st point south 552 400 ! 553 401 ff(:,:) = ( zf0 + zbeta * gphif(:,:) * 1.e+3 ) ! f = f0 +beta* y ( y=0 at south) 554 402 ! 555 403 IF(lwp) THEN 556 404 WRITE(numout,*) … … 565 413 IF(lwp) WRITE(numout,*) ' Coriolis parameter varies globally from ', zminff,' to ', zmaxff 566 414 END IF 567 415 ! 568 416 CASE ( 5 ) ! beta-plane and rotated domain (gyre configuration) 569 417 ! 570 418 zbeta = 2. * omega * COS( rad * ppgphi0 ) / ra ! beta at latitude ppgphi0 571 zphi0 = 15. e0! latitude of the first row F-points419 zphi0 = 15._wp ! latitude of the first row F-points 572 420 zf0 = 2. * omega * SIN( rad * zphi0 ) ! compute f0 1st point south 573 421 ! 574 422 ff(:,:) = ( zf0 + zbeta * ABS( gphif(:,:) - zphi0 ) * rad * ra ) ! f = f0 +beta* y ( y=0 at south) 575 423 ! 576 424 IF(lwp) THEN 577 425 WRITE(numout,*) … … 579 427 WRITE(numout,*) ' Coriolis parameter varies in this processor from ', ff(nldi,nldj),' to ', ff(nldi,nlej) 580 428 ENDIF 581 429 ! 582 430 IF( lk_mpp ) THEN 583 431 zminff=ff(nldi,nldj) … … 587 435 IF(lwp) WRITE(numout,*) ' Coriolis parameter varies globally from ', zminff,' to ', zmaxff 588 436 END IF 589 437 ! 590 438 END SELECT 591 439 … … 596 444 597 445 IF( nperio == 2 ) THEN 598 znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / FLOAT( jpi )446 znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / REAL( jpi ) 599 447 IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 600 448 ENDIF … … 605 453 606 454 607 SUBROUTINE hgr_read 455 SUBROUTINE hgr_read( ke1e2u_v ) 608 456 !!--------------------------------------------------------------------- 609 457 !! *** ROUTINE hgr_read *** 610 458 !! 611 !! ** Purpose : Read a coordinate file in NetCDF format 612 !! 613 !! ** Method : The mesh file has been defined trough a analytical 614 !! or semi-analytical method. It is read in a NetCDF file. 615 !! 459 !! ** Purpose : Read a coordinate file in NetCDF format using IOM 460 !! 616 461 !!---------------------------------------------------------------------- 617 462 USE iom 618 463 !! 464 INTEGER, INTENT( inout ) :: ke1e2u_v ! fag: e1e2u & e1e2v read in coordinate file (=1) or not (=0) 465 ! 619 466 INTEGER :: inum ! temporary logical unit 620 467 !!---------------------------------------------------------------------- 621 468 ! 622 469 IF(lwp) THEN 623 470 WRITE(numout,*) … … 625 472 WRITE(numout,*) '~~~~~~~~ jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpk = ', jpk 626 473 ENDIF 627 474 ! 628 475 CALL iom_open( 'coordinates', inum ) 629 476 ! 630 477 CALL iom_get( inum, jpdom_data, 'glamt', glamt, lrowattr=ln_use_jattr ) 631 478 CALL iom_get( inum, jpdom_data, 'glamu', glamu, lrowattr=ln_use_jattr ) 632 479 CALL iom_get( inum, jpdom_data, 'glamv', glamv, lrowattr=ln_use_jattr ) 633 480 CALL iom_get( inum, jpdom_data, 'glamf', glamf, lrowattr=ln_use_jattr ) 634 481 ! 635 482 CALL iom_get( inum, jpdom_data, 'gphit', gphit, lrowattr=ln_use_jattr ) 636 483 CALL iom_get( inum, jpdom_data, 'gphiu', gphiu, lrowattr=ln_use_jattr ) 637 484 CALL iom_get( inum, jpdom_data, 'gphiv', gphiv, lrowattr=ln_use_jattr ) 638 485 CALL iom_get( inum, jpdom_data, 'gphif', gphif, lrowattr=ln_use_jattr ) 639 640 CALL iom_get( inum, jpdom_data, 'e1t', e1t, lrowattr=ln_use_jattr ) 641 CALL iom_get( inum, jpdom_data, 'e1u', e1u, lrowattr=ln_use_jattr ) 642 CALL iom_get( inum, jpdom_data, 'e1v', e1v, lrowattr=ln_use_jattr ) 643 CALL iom_get( inum, jpdom_data, 'e1f', e1f, lrowattr=ln_use_jattr ) 644 645 CALL iom_get( inum, jpdom_data, 'e2t', e2t, lrowattr=ln_use_jattr ) 646 CALL iom_get( inum, jpdom_data, 'e2u', e2u, lrowattr=ln_use_jattr ) 647 CALL iom_get( inum, jpdom_data, 'e2v', e2v, lrowattr=ln_use_jattr ) 648 CALL iom_get( inum, jpdom_data, 'e2f', e2f, lrowattr=ln_use_jattr ) 649 486 ! 487 CALL iom_get( inum, jpdom_data, 'e1t' , e1t , lrowattr=ln_use_jattr ) 488 CALL iom_get( inum, jpdom_data, 'e1u' , e1u , lrowattr=ln_use_jattr ) 489 CALL iom_get( inum, jpdom_data, 'e1v' , e1v , lrowattr=ln_use_jattr ) 490 CALL iom_get( inum, jpdom_data, 'e1f' , e1f , lrowattr=ln_use_jattr ) 491 ! 492 CALL iom_get( inum, jpdom_data, 'e2t' , e2t , lrowattr=ln_use_jattr ) 493 CALL iom_get( inum, jpdom_data, 'e2u' , e2u , lrowattr=ln_use_jattr ) 494 CALL iom_get( inum, jpdom_data, 'e2v' , e2v , lrowattr=ln_use_jattr ) 495 CALL iom_get( inum, jpdom_data, 'e2f' , e2f , lrowattr=ln_use_jattr ) 496 ! 497 IF( iom_varid( inum, 'e1e2u', ldstop = .FALSE. ) > 0 ) THEN 498 IF(lwp) WRITE(numout,*) 'hgr_read : e1e2u & e1e2v read in coordinates file' 499 CALL iom_get( inum, jpdom_data, 'e1e2u' , e1e2u , lrowattr=ln_use_jattr ) 500 CALL iom_get( inum, jpdom_data, 'e1e2v' , e1e2v , lrowattr=ln_use_jattr ) 501 ke1e2u_v = 1 502 ELSE 503 ke1e2u_v = 0 504 ENDIF 505 ! 650 506 CALL iom_close( inum ) 651 507 508 !!gm THIS is TO BE REMOVED !!!!!!! 509 652 510 ! need to be define for the extended grid south of -80S 653 511 ! some point are undefined but you need to have e1 and e2 .NE. 0 … … 676 534 e2f=1.0e2 677 535 END WHERE 536 !!gm end 678 537 679 538 END SUBROUTINE hgr_read -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r5552 r5836 17 17 !! - ! 2005-11 (V. Garnier) Surface pressure gradient organization 18 18 !! 3.2 ! 2009-07 (R. Benshila) Suppression of rigid-lid option 19 !! 3.6 ! 2015-05 (P. Mathiot) ISF: add wmask,wumask and wvmask 19 20 !!---------------------------------------------------------------------- 20 21 21 22 !!---------------------------------------------------------------------- 22 23 !! dom_msk : compute land/ocean mask 23 !! dom_msk_nsa : update land/ocean mask when no-slip accurate option is used.24 24 !!---------------------------------------------------------------------- 25 25 USE oce ! ocean dynamics and tracers … … 36 36 37 37 PUBLIC dom_msk ! routine called by inidom.F90 38 PUBLIC dom_msk_alloc ! routine called by nemogcm.F9039 38 40 39 ! !!* Namelist namlbc : lateral boundary condition * … … 42 41 LOGICAL, PUBLIC :: ln_vorlat ! consistency of vorticity boundary condition 43 42 ! with analytical eqs. 44 45 46 INTEGER, ALLOCATABLE, SAVE, DIMENSION(:,:) :: icoord ! Workspace for dom_msk_nsa()47 43 48 44 !! * Substitutions … … 54 50 !!---------------------------------------------------------------------- 55 51 CONTAINS 56 57 INTEGER FUNCTION dom_msk_alloc()58 !!---------------------------------------------------------------------59 !! *** FUNCTION dom_msk_alloc ***60 !!---------------------------------------------------------------------61 dom_msk_alloc = 062 #if defined key_noslip_accurate63 ALLOCATE(icoord(jpi*jpj*jpk,3), STAT=dom_msk_alloc)64 #endif65 IF( dom_msk_alloc /= 0 ) CALL ctl_warn('dom_msk_alloc: failed to allocate icoord array')66 !67 END FUNCTION dom_msk_alloc68 69 52 70 53 SUBROUTINE dom_msk … … 129 112 !! tmask_i : interior ocean mask 130 113 !!---------------------------------------------------------------------- 131 ! 132 INTEGER :: ji, jj, jk ! dummy loop indices 114 INTEGER :: ji, jj, jk ! dummy loop indices 133 115 INTEGER :: iif, iil, ii0, ii1, ii ! local integers 134 116 INTEGER :: ijf, ijl, ij0, ij1 ! - - … … 199 181 END DO 200 182 201 !!gm ????202 #if defined key_zdfkpp203 IF( cp_cfg == 'orca' ) THEN204 IF( jp_cfg == 2 ) THEN ! land point on Bab el Mandeb zonal section205 ij0 = 87 ; ij1 = 88206 ii0 = 160 ; ii1 = 161207 tmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0._wp208 ELSE209 IF(lwp) WRITE(numout,*)210 IF(lwp) WRITE(numout,cform_war)211 IF(lwp) WRITE(numout,*)212 IF(lwp) WRITE(numout,*)' A mask must be applied on Bab el Mandeb strait'213 IF(lwp) WRITE(numout,*)' in case of ORCAs configurations'214 IF(lwp) WRITE(numout,*)' This is a problem which is not yet solved'215 IF(lwp) WRITE(numout,*)216 ENDIF217 ENDIF218 #endif219 !!gm end220 221 183 ! Interior domain mask (used for global sum) 222 184 ! -------------------- … … 284 246 ! 3. Ocean/land mask at wu-, wv- and w points 285 247 !---------------------------------------------- 286 &nb