Changeset 10473 for branches/UKMO
- Timestamp:
- 2019-01-08T18:02:36+01:00 (5 years ago)
- Location:
- branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM
- Files:
-
- 1 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/CONFIG/SHARED/field_def.xml
r5517 r10473 374 374 <field id="uocet" long_name="ocean transport along i-axis times temperature (CRS)" unit="degC*m/s" grid_ref="grid_U_3D" /> 375 375 <field id="uoces" long_name="ocean transport along i-axis times salinity (CRS)" unit="1e-3*m/s" grid_ref="grid_U_3D" /> 376 <field id="ustokes" long_name="Stokes Drift Velocity i-axis" standard_name="StokesDrift_x_velocity" unit="m/s" grid_ref="grid_U_3D" /> 377 <field id="ustokes_e3u" long_name="Stokes Drift Velocity i-axis (thickness weighted)" unit="m/s" grid_ref="grid_U_3D" > ustokes * e3u </field> 376 378 377 379 <!-- variables available with MLE --> … … 409 411 <field id="vocet" long_name="ocean transport along j-axis times temperature (CRS)" unit="degC*m/s" grid_ref="grid_V_3D" /> 410 412 <field id="voces" long_name="ocean transport along j-axis times salinity (CRS)" unit="1e-3*m/s" grid_ref="grid_V_3D" /> 413 <field id="vstokes" long_name="Stokes Drift Velocity j-axis" standard_name="StokesDrift_y_velocity" unit="m/s" grid_ref="grid_V_3D" /> 414 <field id="vstokes_e3v" long_name="Stokes Drift Velocity j-axis (thickness weighted)" unit="m/s" grid_ref="grid_V_3D" > vstokes * e3v </field> 411 415 412 416 <!-- variables available with MLE --> … … 437 441 <field id="woce" long_name="ocean vertical velocity" standard_name="upward_sea_water_velocity" unit="m/s" /> 438 442 <field id="wocetr_eff" long_name="effective ocean vertical transport" unit="m3/s" /> 443 <field id="wstokes" long_name="Stokes Drift vertical velocity" standard_name="upward_StokesDrift_velocity" unit="m/s" /> 439 444 440 445 <!-- woce_eiv: available with key_traldf_eiv and key_diaeiv --> -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/CONFIG/SHARED/namelist_ref
r10268 r10473 264 264 ! =1 global mean of e-p-r set to zero at each time step 265 265 ! =2 annual global mean of e-p-r set to zero 266 ln_wave = .false. ! Activate coupling with wave (either Stokes Drift or Drag coefficient, or both) (T => fill namsbc_wave) 267 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => fill namsbc_wave) 268 ln_sdw = .false. ! Computation of 3D stokes drift (T => fill namsbc_wave) 266 ln_wave = .false. ! Activate coupling with wave (T => fill namsbc_wave) 267 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => ln_wave=.true. & fill namsbc_wave) 268 ln_sdw = .false. ! Read 2D Surf Stokes Drift & Computation of 3D stokes drift (T => ln_wave=.true. & fill namsbc_wave) 269 ln_tauoc= .false. ! Activate ocean stress modified by external wave induced stress (T => ln_wave=.true. & fill namsbc_wave) 270 ln_stcor= .false. ! Activate Stokes Coriolis term (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave 269 271 nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , 270 272 ! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) … … 363 365 sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' 364 366 sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' 367 sn_snd_crtw = 'none' , 'no' , '' , '' , 'U,V' 368 sn_snd_ifrac = 'none' , 'no' , '' , '' , '' 369 sn_snd_wlev = 'none' , 'no' , '' , '' , '' 365 370 ! receive 366 371 sn_rcv_w10m = 'none' , 'no' , '' , '' , '' … … 374 379 sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' 375 380 sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' 381 sn_rcv_hsig = 'none' , 'no' , '' , '' , '' 382 sn_rcv_iceflx = 'none' , 'no' , '' , '' , '' 383 sn_rcv_mslp = 'none' , 'no' , '' , '' , '' 384 sn_rcv_phioc = 'none' , 'no' , '' , '' , '' 385 sn_rcv_sdrfx = 'none' , 'no' , '' , '' , '' 386 sn_rcv_sdrfy = 'none' , 'no' , '' , '' , '' 387 sn_rcv_wper = 'none' , 'no' , '' , '' , '' 388 sn_rcv_wnum = 'none' , 'no' , '' , '' , '' 389 sn_rcv_wstrf = 'none' , 'no' , '' , '' , '' 390 sn_rcv_wdrag = 'none' , 'no' , '' , '' , '' 376 391 ! 377 392 nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 921 936 ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping 922 937 nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T 938 ln_zdfqiao = .false. ! Enhanced wave vertical mixing Qiao (2010) (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave) 923 939 / 924 940 !----------------------------------------------------------------------- … … 988 1004 rn_hsro = 0.02 ! Minimum surface roughness 989 1005 rn_frac_hs = 1.3 ! Fraction of wave height as roughness (if nn_z0_met=2) 990 nn_z0_met = 2 ! Method for surface roughness computation (0/1/2) 1006 nn_z0_met = 2 ! Method for surface roughness computation (0/1/2/3) 1007 ! ! =3 requires ln_wave=T 991 1008 nn_bc_surf = 1 ! surface condition (0/1=Dir/Neum) 992 1009 nn_bc_bot = 1 ! bottom condition (0/1=Dir/Neum) … … 1273 1290 / 1274 1291 !----------------------------------------------------------------------- 1275 &namsbc_wave ! External fields from wave model 1292 &namsbc_wave ! External fields from wave model (ln_wave=T) 1276 1293 !----------------------------------------------------------------------- 1277 1294 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 1278 1295 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 1279 sn_cdg = 'cd g_wave' , 1 , 'drag_coeff' , .true. , .false. , 'daily' , '' , '' , ''1296 sn_cdg = 'cdw_wave' , 1 , 'drag_coeff' , .true. , .false. , 'daily' , '' , '' , '' 1280 1297 sn_usd = 'sdw_wave' , 1 , 'u_sd2d' , .true. , .false. , 'daily' , '' , '' , '' 1281 1298 sn_vsd = 'sdw_wave' , 1 , 'v_sd2d' , .true. , .false. , 'daily' , '' , '' , '' 1282 sn_wn = 'sdw_wave' , 1 , 'wave_num' , .true. , .false. , 'daily' , '' , '' , '' 1283 ! 1284 cn_dir_cdg = './' ! root directory for the location of drag coefficient files 1299 sn_hsw = 'sdw_wave' , 1 , 'hs' , .true. , .false. , 'daily' , '' , '' , '' 1300 sn_wmp = 'sdw_wave' , 1 , 'wmp' , .true. , .false. , 'daily' , '' , '' , '' 1301 sn_wnum = 'sdw_wave' , 1 , 'wave_num' , .true. , .false. , 'daily' , '' , '' , '' 1302 sn_tauoc = 'sdw_wave' , 1 , 'wave_stress', .true. , .false. , 'daily' , '' , '' , '' 1303 ! 1304 cn_dir = './' ! root directory for the location of drag coefficient files 1285 1305 / 1286 1306 !----------------------------------------------------------------------- -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/CONFIG/cfg.txt
r8058 r10473 11 11 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 12 12 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 13 GYRE_LONG OPA_SRC -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r8561 r10473 41 41 USE zdfddm ! vertical physics: double diffusion 42 42 USE diahth ! thermocline diagnostics 43 USE sbcwave ! wave parameters 43 44 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 44 45 USE in_out_manager ! I/O manager … … 709 710 CALL histdef( nid_U, "vozocrtx", "Zonal Current" , "m/s" , & ! un 710 711 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout ) 712 IF( ln_wave .AND. ln_sdw) THEN 713 CALL histdef( nid_U, "sdzocrtx", "Stokes Drift Zonal Current" , "m/s" , & ! usd 714 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout ) 715 ENDIF 711 716 IF( ln_traldf_gdia ) THEN 712 717 CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current" , "m/s" , & ! u_eiv … … 727 732 CALL histdef( nid_V, "vomecrty", "Meridional Current" , "m/s" , & ! vn 728 733 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout ) 734 IF( ln_wave .AND. ln_sdw) THEN 735 CALL histdef( nid_V, "sdmecrty", "Stokes Drift Meridional Current" , "m/s" , & ! vsd 736 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout ) 737 ENDIF 729 738 IF( ln_traldf_gdia ) THEN 730 739 CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current" , "m/s" , & ! v_eiv … … 763 772 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 764 773 ENDIF 774 775 IF( ln_wave .AND. ln_sdw) THEN 776 CALL histdef( nid_W, "sdvecrtz", "Stokes Drift Vertical Current" , "m/s" , & ! wsd 777 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 778 ENDIF 765 779 ! !!! nid_W : 2D 766 780 #if defined key_traldf_c2d … … 943 957 #endif 944 958 959 IF( ln_wave .AND. ln_sdw ) THEN 960 CALL histwrite( nid_U, "sdzocrtx", it, usd , ndim_U , ndex_U ) ! i-StokesDrift-current 961 CALL histwrite( nid_V, "sdmecrty", it, vsd , ndim_V , ndex_V ) ! j-StokesDrift-current 962 CALL histwrite( nid_W, "sdvecrtz", it, wsd , ndim_T , ndex_T ) ! StokesDrift vert. current 963 ENDIF 964 945 965 ! 3. Close all files 946 966 ! --------------------------------------- … … 1048 1068 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1049 1069 END IF 1070 ! 1071 IF( ln_wave .AND. ln_sdw ) THEN 1072 CALL histdef( id_i, "sdzocrtx", "Stokes Drift Zonal", "m/s" , & ! StokesDrift zonal current 1073 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1074 CALL histdef( id_i, "sdmecrty", "Stokes Drift Merid", "m/s" , & ! StokesDrift meridonal current 1075 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1076 CALL histdef( id_i, "sdvecrtz", "Stokes Drift Vert", "m/s" , & ! StokesDrift vertical current 1077 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1078 ENDIF 1050 1079 1051 1080 #if defined key_lim2 … … 1081 1110 CALL histwrite( id_i, "vovvle3t", kt, fse3t_n (:,:,:), jpi*jpj*jpk, idex )! T-cell thickness 1082 1111 END IF 1112 1113 IF( ln_wave .AND. ln_sdw ) THEN 1114 CALL histwrite( id_i, "sdzocrtx", kt, usd , jpi*jpj*jpk, idex) ! now StokesDrift i-velocity 1115 CALL histwrite( id_i, "sdmecrty", kt, vsd , jpi*jpj*jpk, idex) ! now StokesDrift j-velocity 1116 CALL histwrite( id_i, "sdvecrtz", kt, wsd , jpi*jpj*jpk, idex) ! now StokesDrift k-velocity 1117 ENDIF 1083 1118 1084 1119 ! 3. Close the file -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r10268 r10473 11 11 !! 3.5 ! 2013-07 (J. Chanut) Switch to Forward-backward time stepping 12 12 !! 3.6 ! 2013-11 (A. Coward) Update for z-tilde compatibility 13 !! - ! 2016-12 (G. Madec, E. Clementi) update for Stoke-Drift divergence 13 14 !!--------------------------------------------------------------------- 14 15 #if defined key_dynspg_ts || defined key_esopa … … 31 32 USE sbctide ! tides 32 33 USE updtide ! tide potential 34 USE sbcwave ! surface wave 35 ! 33 36 USE lib_mpp ! distributed memory computing library 34 37 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 333 336 END DO 334 337 END DO 338 339 !!gm Question here when removing the Vertically integrated trends, we remove the vertically integrated NL trends on momentum.... 340 !!gm Is it correct to do so ? I think so... 341 342 335 343 ! !* barotropic Coriolis trends (vorticity scheme dependent) 336 344 ! ! -------------------------------------------------------- … … 462 470 & + fwfisf(:,:) + fwfisf_b(:,:) ) 463 471 ENDIF 472 ! 473 IF( ln_sdw ) THEN ! Stokes drift divergence added if necessary 474 zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 475 ENDIF 476 ! 464 477 #if defined key_asminc 465 478 ! ! Include the IAU weighted SSH increment -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r8058 r10473 16 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 18 !! - ! 2016-12 (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) 18 19 !!---------------------------------------------------------------------- 19 20 … … 32 33 USE trd_oce ! trends: ocean variables 33 34 USE trddyn ! trend manager: dynamics 35 USE sbcwave ! Surface Waves (add Stokes-Coriolis force) 36 USE sbc_oce , ONLY : ln_stcor ! use Stoke-Coriolis force 37 ! 34 38 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 35 39 USE prtctl ! Print control … … 91 95 ! 92 96 CASE ( -1 ) ! esopa: test all possibility with control print 93 CALL vor_ene( kt, ntot, u a, va )97 CALL vor_ene( kt, ntot, un, vn, ua, va ) 94 98 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 95 99 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 96 CALL vor_ens( kt, ntot, u a, va )100 CALL vor_ens( kt, ntot, un, vn, ua, va ) 97 101 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 98 102 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 100 104 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 101 105 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 102 CALL vor_een( kt, ntot, u a, va )106 CALL vor_een( kt, ntot, un, vn, ua, va ) 103 107 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 104 108 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 108 112 ztrdu(:,:,:) = ua(:,:,:) 109 113 ztrdv(:,:,:) = va(:,:,:) 110 CALL vor_ene( kt, nrvm, u a, va )! relative vorticity or metric trend114 CALL vor_ene( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 111 115 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 112 116 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 114 118 ztrdu(:,:,:) = ua(:,:,:) 115 119 ztrdv(:,:,:) = va(:,:,:) 116 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend120 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 117 121 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 118 122 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 119 123 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 120 124 ELSE 121 CALL vor_ene( kt, ntot, ua, va ) ! total vorticity 125 CALL vor_ene( kt, ntot, un, vn, ua, va ) ! total vorticity trend 126 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 122 127 ENDIF 123 128 ! … … 126 131 ztrdu(:,:,:) = ua(:,:,:) 127 132 ztrdv(:,:,:) = va(:,:,:) 128 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend133 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 129 134 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 130 135 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 132 137 ztrdu(:,:,:) = ua(:,:,:) 133 138 ztrdv(:,:,:) = va(:,:,:) 134 CALL vor_ens( kt, ncor, u a, va )! planetary vorticity trend139 CALL vor_ens( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 135 140 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 136 141 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 137 142 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 138 143 ELSE 139 CALL vor_ens( kt, ntot, ua, va ) ! total vorticity 144 CALL vor_ens( kt, ntot, un, vn, ua, va ) ! total vorticity 145 IF( ln_stcor ) CALL vor_ens( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 140 146 ENDIF 141 147 ! … … 144 150 ztrdu(:,:,:) = ua(:,:,:) 145 151 ztrdv(:,:,:) = va(:,:,:) 146 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend (ens)152 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend (ens) 147 153 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 148 154 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 150 156 ztrdu(:,:,:) = ua(:,:,:) 151 157 ztrdv(:,:,:) = va(:,:,:) 152 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend (ene)158 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend (ene) 153 159 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 154 160 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 155 161 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 156 162 ELSE 157 CALL vor_mix( kt ) ! total vorticity (mix=ens-ene) 163 CALL vor_ens( kt, nrvm, un , vn , ua, va ) ! relative vorticity or metric trend (ens) 164 CALL vor_ene( kt, ncor, un , vn , ua, va ) ! planetary vorticity trend (ene) 165 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 158 166 ENDIF 159 167 ! … … 162 170 ztrdu(:,:,:) = ua(:,:,:) 163 171 ztrdv(:,:,:) = va(:,:,:) 164 CALL vor_een( kt, nrvm, u a, va )! relative vorticity or metric trend172 CALL vor_een( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 165 173 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 166 174 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 168 176 ztrdu(:,:,:) = ua(:,:,:) 169 177 ztrdv(:,:,:) = va(:,:,:) 170 CALL vor_een( kt, ncor, u a, va )! planetary vorticity trend178 CALL vor_een( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 171 179 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 172 180 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 173 181 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 174 182 ELSE 175 CALL vor_een( kt, ntot, ua, va ) ! total vorticity 183 CALL vor_een( kt, ntot, un, vn, ua, va ) ! total vorticity 184 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 176 185 ENDIF 177 186 ! … … 189 198 190 199 191 SUBROUTINE vor_ene( kt, kvor, pu a, pva )200 SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 192 201 !!---------------------------------------------------------------------- 193 202 !! *** ROUTINE vor_ene *** … … 214 223 !!---------------------------------------------------------------------- 215 224 ! 216 INTEGER , INTENT(in ) :: kt ! ocean time-step index 217 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 218 ! ! =nrvm (relative vorticity or metric) 219 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 220 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 225 INTEGER , INTENT(in ) :: kt ! ocean time-step index 226 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 227 ! ! =nrvm (relative vorticity or metric) 228 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 229 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 230 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 221 231 ! 222 232 INTEGER :: ji, jj, jk ! dummy loop indices … … 250 260 DO jj = 1, jpjm1 251 261 DO ji = 1, fs_jpim1 ! vector opt. 252 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &253 & - ( un(ji ,jj+1,jk) + un(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &262 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 263 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 254 264 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) 255 265 END DO … … 260 270 DO ji = 1, fs_jpim1 ! vector opt. 261 271 zwz(ji,jj) = ( ff (ji,jj) & 262 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &263 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &272 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 273 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 264 274 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 265 275 & ) … … 270 280 IF( ln_sco ) THEN 271 281 zwz(:,:) = zwz(:,:) / fse3f(:,:,jk) 272 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)273 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)282 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * pun(:,:,jk) 283 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * pvn(:,:,jk) 274 284 ELSE 275 zwx(:,:) = e2u(:,:) * un(:,:,jk)276 zwy(:,:) = e1v(:,:) * vn(:,:,jk)285 zwx(:,:) = e2u(:,:) * pun(:,:,jk) 286 zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 277 287 ENDIF 278 288 … … 418 428 419 429 420 SUBROUTINE vor_ens( kt, kvor, pu a, pva )430 SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 421 431 !!---------------------------------------------------------------------- 422 432 !! *** ROUTINE vor_ens *** … … 443 453 !!---------------------------------------------------------------------- 444 454 ! 445 INTEGER , INTENT(in ) :: kt ! ocean time-step index 446 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 447 ! ! =nrvm (relative vorticity or metric) 448 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 449 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 455 INTEGER , INTENT(in ) :: kt ! ocean time-step index 456 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 457 ! ! =nrvm (relative vorticity or metric) 458 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 459 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 460 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 450 461 ! 451 462 INTEGER :: ji, jj, jk ! dummy loop indices … … 479 490 DO jj = 1, jpjm1 480 491 DO ji = 1, fs_jpim1 ! vector opt. 481 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &482 & - ( un(ji ,jj+1,jk) + un(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &492 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 493 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 483 494 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) 484 495 END DO … … 489 500 DO ji = 1, fs_jpim1 ! vector opt. 490 501 zwz(ji,jj) = ( ff (ji,jj) & 491 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &492 & - ( un(ji ,jj+1,jk) + un(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &502 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 503 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 493 504 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 494 505 & ) … … 501 512 DO ji = 1, jpi ! it causes optimization problems on NEC in auto-tasking 502 513 zwz(ji,jj) = zwz(ji,jj) / fse3f(ji,jj,jk) 503 zwx(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk)504 zwy(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk)514 zwx(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) * pun(ji,jj,jk) 515 zwy(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) * pvn(ji,jj,jk) 505 516 END DO 506 517 END DO … … 508 519 DO jj = 1, jpj ! caution: don't use (:,:) for this loop 509 520 DO ji = 1, jpi ! it causes optimization problems on NEC in auto-tasking 510 zwx(ji,jj) = e2u(ji,jj) * un(ji,jj,jk)511 zwy(ji,jj) = e1v(ji,jj) * vn(ji,jj,jk)521 zwx(ji,jj) = e2u(ji,jj) * pun(ji,jj,jk) 522 zwy(ji,jj) = e1v(ji,jj) * pvn(ji,jj,jk) 512 523 END DO 513 524 END DO … … 536 547 537 548 538 SUBROUTINE vor_een( kt, kvor, pu a, pva )549 SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 539 550 !!---------------------------------------------------------------------- 540 551 !! *** ROUTINE vor_een *** … … 554 565 !!---------------------------------------------------------------------- 555 566 ! 556 INTEGER , INTENT(in ) :: kt ! ocean time-step index 557 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 558 ! ! =nrvm (relative vorticity or metric) 559 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 560 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 567 INTEGER , INTENT(in ) :: kt ! ocean time-step index 568 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 569 ! ! =nrvm (relative vorticity or metric) 570 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 571 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 572 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 561 573 !! 562 574 INTEGER :: ji, jj, jk ! dummy loop indices … … 604 616 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 605 617 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 606 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = 4.0_wp / ze3 618 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = 4.0_wp / ze3 619 ELSE ; ze3f(ji,jj,jk) = 0._wp 620 ENDIF 607 621 END DO 608 622 END DO … … 616 630 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 617 631 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 618 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = zmsk / ze3 632 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = zmsk / ze3 633 ELSE ; ze3f(ji,jj,jk) = 0._wp 634 ENDIF 619 635 END DO 620 636 END DO … … 643 659 DO jj = 1, jpjm1 644 660 DO ji = 1, fs_jpim1 ! vector opt. 645 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &646 & - ( un(ji ,jj+1,jk) + un(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &661 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 662 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 647 663 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) * ze3f(ji,jj,jk) 648 664 END DO … … 655 671 DO ji = 1, fs_jpim1 ! vector opt. 656 672 zwz(ji,jj) = ( ff (ji,jj) & 657 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &658 & - ( un(ji ,jj+1,jk) + un(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) &673 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 674 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 659 675 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 660 676 & ) * ze3f(ji,jj,jk) … … 664 680 END SELECT 665 681 666 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)667 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)682 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * pun(:,:,jk) 683 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * pvn(:,:,jk) 668 684 669 685 ! Compute and add the vorticity term trend -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r10392 r10473 81 81 INTEGER :: nsnd ! total number of fields sent 82 82 INTEGER :: ncplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 83 INTEGER, PUBLIC, PARAMETER :: nmaxfld=5 0! Maximum number of coupling fields83 INTEGER, PUBLIC, PARAMETER :: nmaxfld=55 ! Maximum number of coupling fields 84 84 INTEGER, PUBLIC, PARAMETER :: nmaxcat=5 ! Maximum number of coupling fields 85 85 INTEGER, PUBLIC, PARAMETER :: nmaxcpl=5 ! Maximum number of coupling fields -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r10392 r10473 65 65 LOGICAL , PUBLIC :: ln_cdgw !: true if neutral drag coefficient from wave model 66 66 LOGICAL , PUBLIC :: ln_sdw !: true if 3d stokes drift from wave model 67 LOGICAL , PUBLIC :: ln_tauoc !: true if normalized stress from wave is used 68 LOGICAL , PUBLIC :: ln_stcor !: true if Stokes-Coriolis term is used 67 69 ! 68 70 LOGICAL , PUBLIC :: ln_icebergs !: Icebergs -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r8058 r10473 737 737 738 738 !! Neutral coefficients at 10m: 739 IF( ln_ cdgw ) THEN ! wave drag case739 IF( ln_wave .AND. ln_cdgw ) THEN ! wave drag case 740 740 cdn_wave(:,:) = cdn_wave(:,:) + rsmall * ( 1._wp - tmask(:,:,1) ) 741 741 ztmp0 (:,:) = cdn_wave(:,:) … … 783 783 END IF 784 784 785 IF( ln_ cdgw ) THEN ! surface wave case785 IF( ln_wave .AND. ln_cdgw ) THEN ! surface wave case 786 786 sqrt_Cd = vkarmn / ( vkarmn / sqrt_Cd_n10 - zpsi_m_u ) 787 787 Cd = sqrt_Cd * sqrt_Cd -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_mfs.F90
r8058 r10473 24 24 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 25 25 USE prtctl ! Print control 26 USE sbcwave,ONLY : cdn_wave !wave module27 26 28 27 IMPLICIT NONE -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r10396 r10473 23 23 USE sbcapr 24 24 USE sbcdcy ! surface boundary condition: diurnal cycle 25 USE sbcwave ! surface boundary condition: waves 25 26 USE phycst ! physical constants 26 27 #if defined key_lim3 … … 108 109 INTEGER, PARAMETER :: jpr_e3t1st = 41 ! first T level thickness 109 110 INTEGER, PARAMETER :: jpr_fraqsr = 42 ! fraction of solar net radiation absorbed in the first ocean level 110 INTEGER, PARAMETER :: jprcv = 42 ! total number of fields received 111 INTEGER, PARAMETER :: jpr_mslp = 43 ! mean sea level pressure 112 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 113 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 114 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 115 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 116 INTEGER, PARAMETER :: jpr_wper = 48 ! Mean wave period 117 INTEGER, PARAMETER :: jpr_wnum = 49 ! Mean wavenumber 118 INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves 119 INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient 120 INTEGER, PARAMETER :: jprcv = 51 ! total number of fields received 111 121 112 122 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 138 148 INTEGER, PARAMETER :: jps_e3t1st = 27 ! first level depth (vvl) 139 149 INTEGER, PARAMETER :: jps_fraqsr = 28 ! fraction of solar net radiation absorbed in the first ocean level 140 INTEGER, PARAMETER :: jpsnd = 28 ! total number of fields sended 150 INTEGER, PARAMETER :: jps_ficet = 29 ! total ice fraction 151 INTEGER, PARAMETER :: jps_ocxw = 30 ! currents on grid 1 152 INTEGER, PARAMETER :: jps_ocyw = 31 ! currents on grid 2 153 INTEGER, PARAMETER :: jps_wlev = 32 ! water level 154 INTEGER, PARAMETER :: jpsnd = 32 ! total number of fields sent 141 155 142 156 ! !!** namelist namsbc_cpl ** … … 152 166 ! Received from the atmosphere ! 153 167 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 154 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2 168 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp 169 ! Send to waves 170 TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev 171 ! Received from waves 172 TYPE(FLD_C) :: sn_rcv_hsig,sn_rcv_phioc,sn_rcv_sdrfx,sn_rcv_sdrfy,sn_rcv_wper,sn_rcv_wnum,sn_rcv_wstrf,sn_rcv_wdrag 155 173 ! Other namelist parameters ! 156 174 INTEGER :: nn_cplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 164 182 165 183 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: albedo_oce_mix ! ocean albedo sent to atmosphere (mix clear/overcast sky) 184 185 REAL(wp) :: rpref = 101000._wp ! reference atmospheric pressure[N/m2] 186 REAL(wp) :: r1_grau ! = 1.e0 / (grav * rau0 166 187 167 188 INTEGER , ALLOCATABLE, SAVE, DIMENSION( :) :: nrcvinfo ! OASIS info argument … … 182 203 !! *** FUNCTION sbc_cpl_alloc *** 183 204 !!---------------------------------------------------------------------- 184 INTEGER :: ierr( 3)205 INTEGER :: ierr(4) 185 206 !!---------------------------------------------------------------------- 186 207 ierr(:) = 0 … … 195 216 ALLOCATE( xcplmask(jpi,jpj,0:3) , STAT=ierr(3) ) 196 217 ! 218 IF( .NOT. ln_apr_dyn ) ALLOCATE( ssh_ib(jpi,jpj), ssh_ibb(jpi,jpj), apr(jpi, jpj), STAT=ierr(4) ) 219 197 220 sbc_cpl_alloc = MAXVAL( ierr ) 198 221 IF( lk_mpp ) CALL mpp_sum ( sbc_cpl_alloc ) … … 221 244 REAL(wp), POINTER, DIMENSION(:,:) :: zacs, zaos 222 245 !! 223 NAMELIST/namsbc_cpl/ sn_snd_temp, sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2, & 224 & sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr, & 225 & sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , sn_rcv_iceflx, & 226 & sn_rcv_co2 , nn_cplmodel , ln_usecplmask 246 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick , sn_snd_crt , sn_snd_co2, & 247 & sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr, & 248 & sn_snd_ifrac, sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc , & 249 & sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf , & 250 & sn_rcv_wdrag, sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 251 & sn_rcv_iceflx,sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp 227 252 !!--------------------------------------------------------------------- 228 253 ! … … 265 290 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 266 291 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' 292 WRITE(numout,*)' significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' 293 WRITE(numout,*)' wave to oce energy flux = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')' 294 WRITE(numout,*)' Surface Stokes drift grid u = ', TRIM(sn_rcv_sdrfx%cldes ), ' (', TRIM(sn_rcv_sdrfx%clcat ), ')' 295 WRITE(numout,*)' Surface Stokes drift grid v = ', TRIM(sn_rcv_sdrfy%cldes ), ' (', TRIM(sn_rcv_sdrfy%clcat ), ')' 296 WRITE(numout,*)' Mean wave period = ', TRIM(sn_rcv_wper%cldes ), ' (', TRIM(sn_rcv_wper%clcat ), ')' 297 WRITE(numout,*)' Mean wave number = ', TRIM(sn_rcv_wnum%cldes ), ' (', TRIM(sn_rcv_wnum%clcat ), ')' 298 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 299 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 267 300 WRITE(numout,*)' sent fields (multiple ice categories)' 268 301 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' 269 302 WRITE(numout,*)' albedo = ', TRIM(sn_snd_alb%cldes ), ' (', TRIM(sn_snd_alb%clcat ), ')' 270 303 WRITE(numout,*)' ice/snow thickness = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' 304 WRITE(numout,*)' total ice fraction = ', TRIM(sn_snd_ifrac%cldes ), ' (', TRIM(sn_snd_ifrac%clcat ), ')' 271 305 WRITE(numout,*)' surface current = ', TRIM(sn_snd_crt%cldes ), ' (', TRIM(sn_snd_crt%clcat ), ')' 272 306 WRITE(numout,*)' - referential = ', sn_snd_crt%clvref … … 274 308 WRITE(numout,*)' - mesh = ', sn_snd_crt%clvgrd 275 309 WRITE(numout,*)' oce co2 flux = ', TRIM(sn_snd_co2%cldes ), ' (', TRIM(sn_snd_co2%clcat ), ')' 310 WRITE(numout,*)' water level = ', TRIM(sn_snd_wlev%cldes ), ' (', TRIM(sn_snd_wlev%clcat ), ')' 311 WRITE(numout,*)' mean sea level pressure = ', TRIM(sn_rcv_mslp%cldes ), ' (', TRIM(sn_rcv_mslp%clcat ), ')' 312 WRITE(numout,*)' surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat ), ')' 313 WRITE(numout,*)' - referential = ', sn_snd_crtw%clvref 314 WRITE(numout,*)' - orientation = ', sn_snd_crtw%clvor 315 WRITE(numout,*)' - mesh = ', sn_snd_crtw%clvgrd 276 316 WRITE(numout,*)' nn_cplmodel = ', nn_cplmodel 277 317 WRITE(numout,*)' ln_usecplmask = ', ln_usecplmask … … 312 352 ! 313 353 ! Vectors: change of sign at north fold ONLY if on the local grid 354 IF( TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM(sn_rcv_tau%cldes ) == 'oce and ice') THEN ! avoid working with the atmospheric fields if they are not coupled 314 355 IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' ) srcv(jpr_otx1:jpr_itz2)%nsgn = -1. 315 356 … … 383 424 srcv(jpr_ity1)%clgrid = 'V' ! i.e. it is always at U- & V-points for i- & j-comp. resp. 384 425 ENDIF 426 ENDIF 385 427 386 428 ! ! ------------------------- ! … … 479 521 ! ! ------------------------- ! 480 522 srcv(jpr_co2 )%clname = 'O_AtmCO2' ; IF( TRIM(sn_rcv_co2%cldes ) == 'coupled' ) srcv(jpr_co2 )%laction = .TRUE. 523 524 ! ! ------------------------- ! 525 ! ! Mean Sea Level Pressure ! 526 ! ! ------------------------- ! 527 srcv(jpr_mslp)%clname = 'O_MSLP' ; IF( TRIM(sn_rcv_mslp%cldes ) == 'coupled' ) srcv(jpr_mslp)%laction = .TRUE. 528 481 529 ! ! ------------------------- ! 482 530 ! ! topmelt and botmelt ! … … 492 540 srcv(jpr_topm:jpr_botm)%laction = .TRUE. 493 541 ENDIF 542 ! ! ------------------------- ! 543 ! ! Wave breaking ! 544 ! ! ------------------------- ! 545 srcv(jpr_hsig)%clname = 'O_Hsigwa' ! significant wave height 546 IF( TRIM(sn_rcv_hsig%cldes ) == 'coupled' ) THEN 547 srcv(jpr_hsig)%laction = .TRUE. 548 cpl_hsig = .TRUE. 549 ENDIF 550 srcv(jpr_phioc)%clname = 'O_PhiOce' ! wave to ocean energy 551 IF( TRIM(sn_rcv_phioc%cldes ) == 'coupled' ) THEN 552 srcv(jpr_phioc)%laction = .TRUE. 553 cpl_phioc = .TRUE. 554 ENDIF 555 srcv(jpr_sdrftx)%clname = 'O_Sdrfx' ! Stokes drift in the u direction 556 IF( TRIM(sn_rcv_sdrfx%cldes ) == 'coupled' ) THEN 557 srcv(jpr_sdrftx)%laction = .TRUE. 558 cpl_sdrftx = .TRUE. 559 ENDIF 560 srcv(jpr_sdrfty)%clname = 'O_Sdrfy' ! Stokes drift in the v direction 561 IF( TRIM(sn_rcv_sdrfy%cldes ) == 'coupled' ) THEN 562 srcv(jpr_sdrfty)%laction = .TRUE. 563 cpl_sdrfty = .TRUE. 564 ENDIF 565 srcv(jpr_wper)%clname = 'O_WPer' ! mean wave period 566 IF( TRIM(sn_rcv_wper%cldes ) == 'coupled' ) THEN 567 srcv(jpr_wper)%laction = .TRUE. 568 cpl_wper = .TRUE. 569 ENDIF 570 srcv(jpr_wnum)%clname = 'O_WNum' ! mean wave number 571 IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' ) THEN 572 srcv(jpr_wnum)%laction = .TRUE. 573 cpl_wnum = .TRUE. 574 ENDIF 575 srcv(jpr_wstrf)%clname = 'O_WStrf' ! stress fraction adsorbed by the wave 576 IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' ) THEN 577 srcv(jpr_wstrf)%laction = .TRUE. 578 cpl_wstrf = .TRUE. 579 ENDIF 580 srcv(jpr_wdrag)%clname = 'O_WDrag' ! neutral surface drag coefficient 581 IF( TRIM(sn_rcv_wdrag%cldes ) == 'coupled' ) THEN 582 srcv(jpr_wdrag)%laction = .TRUE. 583 cpl_wdrag = .TRUE. 584 ENDIF 585 ! 494 586 ! ! ------------------------------- ! 495 587 ! ! OPA-SAS coupling - rcv by opa ! … … 646 738 ! ! ------------------------- ! 647 739 ssnd(jps_fice)%clname = 'OIceFrc' 740 ssnd(jps_ficet)%clname = 'OIceFrcT' 648 741 ssnd(jps_hice)%clname = 'OIceTck' 649 742 ssnd(jps_hsnw)%clname = 'OSnwTck' … … 654 747 ENDIF 655 748 749 IF (TRIM( sn_snd_ifrac%cldes ) == 'coupled') ssnd(jps_ficet)%laction = .TRUE. 750 656 751 SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 657 752 CASE( 'none' ) ! nothing to do … … 674 769 ssnd(jps_ocy1)%clname = 'O_OCury1' ; ssnd(jps_ivy1)%clname = 'O_IVely1' 675 770 ssnd(jps_ocz1)%clname = 'O_OCurz1' ; ssnd(jps_ivz1)%clname = 'O_IVelz1' 771 ssnd(jps_ocxw)%clname = 'O_OCurxw' 772 ssnd(jps_ocyw)%clname = 'O_OCuryw' 676 773 ! 677 774 ssnd(jps_ocx1:jps_ivz1)%nsgn = -1. ! vectors: change of the sign at the north fold … … 694 791 END SELECT 695 792 793 ssnd(jps_ocxw:jps_ocyw)%nsgn = -1. ! vectors: change of the sign at the north fold 794 795 IF( sn_snd_crtw%clvgrd == 'U,V' ) THEN 796 ssnd(jps_ocxw)%clgrid = 'U' ; ssnd(jps_ocyw)%clgrid = 'V' 797 ELSE IF( sn_snd_crtw%clvgrd /= 'T' ) THEN 798 CALL ctl_stop( 'sn_snd_crtw%clvgrd must be equal to T' ) 799 ENDIF 800 IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) ssnd(jps_ocxw:jps_ocyw)%nsgn = 1. 801 SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 802 CASE( 'none' ) ; ssnd(jps_ocxw:jps_ocyw)%laction = .FALSE. 803 CASE( 'oce only' ) ; ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE. 804 CASE( 'weighted oce and ice' ) ! nothing to do 805 CASE( 'mixed oce-ice' ) ; ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE. 806 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crtw%cldes' ) 807 END SELECT 808 696 809 ! ! ------------------------- ! 697 810 ! ! CO2 flux ! 698 811 ! ! ------------------------- ! 699 812 ssnd(jps_co2)%clname = 'O_CO2FLX' ; IF( TRIM(sn_snd_co2%cldes) == 'coupled' ) ssnd(jps_co2 )%laction = .TRUE. 813 814 ! ! ------------------------- ! 815 ! ! Sea surface height ! 816 ! ! ------------------------- ! 817 ssnd(jps_wlev)%clname = 'O_Wlevel' ; IF( TRIM(sn_snd_wlev%cldes) == 'coupled' ) ssnd(jps_wlev)%laction = .TRUE. 700 818 701 819 ! ! ------------------------------- ! … … 792 910 IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 ) & 793 911 & CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 794 ncpl_qsr_freq = 86400 / ncpl_qsr_freq912 IF( ln_dm2dc .AND. ln_cpl ) ncpl_qsr_freq = 86400 / ncpl_qsr_freq 795 913 796 914 CALL wrk_dealloc( jpi,jpj, zacs, zaos ) … … 846 964 !! emp upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 847 965 !!---------------------------------------------------------------------- 966 USE zdf_oce, ONLY : ln_zdfqiao 967 848 968 INTEGER, INTENT(in) :: kt ! ocean model time step index 849 969 INTEGER, INTENT(in) :: k_fsbc ! frequency of sbc (-> ice model) computation … … 1028 1148 IF( srcv(jpr_co2)%laction ) atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 1029 1149 #endif 1150 ! 1151 ! ! ========================= ! 1152 ! ! Mean Sea Level Pressure ! (taum) 1153 ! ! ========================= ! 1154 ! 1155 IF( srcv(jpr_mslp)%laction ) THEN ! UKMO SHELF effect of atmospheric pressure on SSH 1156 IF( kt /= nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) !* Swap of ssh_ib fields 1157 1158 r1_grau = 1.e0 / (grav * rau0) !* constant for optimization 1159 ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau ! equivalent ssh (inverse barometer) 1160 apr (:,:) = frcv(jpr_mslp)%z3(:,:,1) !atmospheric pressure 1161 1162 IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) ! correct this later (read from restart if possible) 1163 END IF 1164 ! 1165 IF( ln_sdw ) THEN ! Stokes Drift correction activated 1166 ! ! ========================= ! 1167 ! ! Stokes drift u ! 1168 ! ! ========================= ! 1169 IF( srcv(jpr_sdrftx)%laction ) ut0sd(:,:) = frcv(jpr_sdrftx)%z3(:,:,1) 1170 ! 1171 ! ! ========================= ! 1172 ! ! Stokes drift v ! 1173 ! ! ========================= ! 1174 IF( srcv(jpr_sdrfty)%laction ) vt0sd(:,:) = frcv(jpr_sdrfty)%z3(:,:,1) 1175 ! 1176 ! ! ========================= ! 1177 ! ! Wave mean period ! 1178 ! ! ========================= ! 1179 IF( srcv(jpr_wper)%laction ) wmp(:,:) = frcv(jpr_wper)%z3(:,:,1) 1180 ! 1181 ! ! ========================= ! 1182 ! ! Significant wave height ! 1183 ! ! ========================= ! 1184 IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1) 1185 ! 1186 ! ! ========================= ! 1187 ! ! Vertical mixing Qiao ! 1188 ! ! ========================= ! 1189 IF( srcv(jpr_wnum)%laction .AND. ln_zdfqiao ) wnum(:,:) = frcv(jpr_wnum)%z3(:,:,1) 1190 1191 ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 1192 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction & 1193 .OR. srcv(jpr_hsig)%laction ) & 1194 CALL sbc_stokes() 1195 ENDIF 1196 ! ! ========================= ! 1197 ! ! Stress adsorbed by waves ! 1198 ! ! ========================= ! 1199 IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 1200 1201 ! ! ========================= ! 1202 ! ! Wave drag coefficient ! 1203 ! ! ========================= ! 1204 IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 1030 1205 1031 1206 ! Fields received by SAS when OASIS coupling … … 2101 2276 ENDIF 2102 2277 ! 2278 ! ! ------------------------- ! 2279 ! ! Surface current to waves ! 2280 ! ! ------------------------- ! 2281 IF( ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN 2282 ! 2283 ! j+1 j -----V---F 2284 ! surface velocity always sent from T point ! | 2285 ! j | T U 2286 ! | | 2287 ! j j-1 -I-------| 2288 ! (for I) | | 2289 ! i-1 i i 2290 ! i i+1 (for I) 2291 SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 2292 CASE( 'oce only' ) ! C-grid ==> T 2293 DO jj = 2, jpjm1 2294 DO ji = fs_2, fs_jpim1 ! vector opt. 2295 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) 2296 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji , jj-1,1) ) 2297 END DO 2298 END DO 2299 CASE( 'weighted oce and ice' ) 2300 SELECT CASE ( cp_ice_msh ) 2301 CASE( 'C' ) ! Ocean and Ice on C-grid ==> T 2302 DO jj = 2, jpjm1 2303 DO ji = fs_2, fs_jpim1 ! vector opt. 2304 zotx1(ji,jj) = 0.5 * ( un (ji,jj,1) + un (ji-1,jj ,1) ) * zfr_l(ji,jj) 2305 zoty1(ji,jj) = 0.5 * ( vn (ji,jj,1) + vn (ji ,jj-1,1) ) * zfr_l(ji,jj) 2306 zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * fr_i(ji,jj) 2307 zity1(ji,jj) = 0.5 * ( v_ice(ji,jj ) + v_ice(ji ,jj-1 ) ) * fr_i(ji,jj) 2308 END DO 2309 END DO 2310 CASE( 'I' ) ! Ocean on C grid, Ice on I-point (B-grid) ==> T 2311 DO jj = 2, jpjm1 2312 DO ji = 2, jpim1 ! NO vector opt. 2313 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) 2314 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) 2315 zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1) & 2316 & + u_ice(ji+1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2317 zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1) & 2318 & + v_ice(ji+1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2319 END DO 2320 END DO 2321 CASE( 'F' ) ! Ocean on C grid, Ice on F-point (B-grid) ==> T 2322 DO jj = 2, jpjm1 2323 DO ji = 2, jpim1 ! NO vector opt. 2324 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) 2325 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) 2326 zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1) & 2327 & + u_ice(ji-1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2328 zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1) & 2329 & + v_ice(ji-1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2330 END DO 2331 END DO 2332 END SELECT 2333 CALL lbc_lnk( zitx1, 'T', -1. ) ; CALL lbc_lnk( zity1, 'T', -1. ) 2334 CASE( 'mixed oce-ice' ) 2335 SELECT CASE ( cp_ice_msh ) 2336 CASE( 'C' ) ! Ocean and Ice on C-grid ==> T 2337 DO jj = 2, jpjm1 2338 DO ji = fs_2, fs_jpim1 ! vector opt. 2339 zotx1(ji,jj) = 0.5 * ( un (ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) & 2340 & + 0.5 * ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * fr_i(ji,jj) 2341 zoty1(ji,jj) = 0.5 * ( vn (ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) & 2342 & + 0.5 * ( v_ice(ji,jj ) + v_ice(ji ,jj-1 ) ) * fr_i(ji,jj) 2343 END DO 2344 END DO 2345 CASE( 'I' ) ! Ocean on C grid, Ice on I-point (B-grid) ==> T 2346 DO jj = 2, jpjm1 2347 DO ji = 2, jpim1 ! NO vector opt. 2348 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) & 2349 & + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1) & 2350 & + u_ice(ji+1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2351 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) & 2352 & + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1) & 2353 & + v_ice(ji+1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2354 END DO 2355 END DO 2356 CASE( 'F' ) ! Ocean on C grid, Ice on F-point (B-grid) ==> T 2357 DO jj = 2, jpjm1 2358 DO ji = 2, jpim1 ! NO vector opt. 2359 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) & 2360 & + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1) & 2361 & + u_ice(ji-1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2362 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) & 2363 & + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1) & 2364 & + v_ice(ji-1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2365 END DO 2366 END DO 2367 END SELECT 2368 END SELECT 2369 CALL lbc_lnk( zotx1, ssnd(jps_ocxw)%clgrid, -1. ) ; CALL lbc_lnk( zoty1, ssnd(jps_ocyw)%clgrid, -1. ) 2370 ! 2371 ! 2372 IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) THEN ! Rotation of the components 2373 ! ! Ocean component 2374 CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->e', ztmp1 ) ! 1st component 2375 CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->n', ztmp2 ) ! 2nd component 2376 zotx1(:,:) = ztmp1(:,:) ! overwrite the components 2377 zoty1(:,:) = ztmp2(:,:) 2378 IF( ssnd(jps_ivx1)%laction ) THEN ! Ice component 2379 CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 ) ! 1st component 2380 CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 ) ! 2nd component 2381 zitx1(:,:) = ztmp1(:,:) ! overwrite the components 2382 zity1(:,:) = ztmp2(:,:) 2383 ENDIF 2384 ENDIF 2385 ! 2386 ! ! spherical coordinates to cartesian -> 2 components to 3 components 2387 ! IF( TRIM( sn_snd_crtw%clvref ) == 'cartesian' ) THEN 2388 ! ztmp1(:,:) = zotx1(:,:) ! ocean currents 2389 ! ztmp2(:,:) = zoty1(:,:) 2390 ! CALL oce2geo ( ztmp1, ztmp2, 'T', zotx1, zoty1, zotz1 ) 2391 ! ! 2392 ! IF( ssnd(jps_ivx1)%laction ) THEN ! ice velocities 2393 ! ztmp1(:,:) = zitx1(:,:) 2394 ! ztmp1(:,:) = zity1(:,:) 2395 ! CALL oce2geo ( ztmp1, ztmp2, 'T', zitx1, zity1, zitz1 ) 2396 ! ENDIF 2397 ! ENDIF 2398 ! 2399 IF( ssnd(jps_ocxw)%laction ) CALL cpl_snd( jps_ocxw, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info ) ! ocean x current 1st grid 2400 IF( ssnd(jps_ocyw)%laction ) CALL cpl_snd( jps_ocyw, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info ) ! ocean y current 1st grid 2401 ! 2402 ENDIF 2403 ! 2404 IF( ssnd(jps_ficet)%laction ) THEN 2405 CALL cpl_snd( jps_ficet, isec, RESHAPE ( fr_i, (/jpi,jpj,1/) ), info ) 2406 END IF 2407 ! ! ------------------------- ! 2408 ! ! Water levels to waves ! 2409 ! ! ------------------------- ! 2410 IF( ssnd(jps_wlev)%laction ) THEN 2411 IF( ln_apr_dyn ) THEN 2412 IF( kt /= nit000 ) THEN 2413 ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2414 ELSE 2415 ztmp1(:,:) = sshb(:,:) 2416 ENDIF 2417 ELSE 2418 ztmp1(:,:) = sshn(:,:) 2419 ENDIF 2420 CALL cpl_snd( jps_wlev , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 2421 END IF 2103 2422 ! 2104 2423 ! Fields sent by OPA to SAS when doing OPA<->SAS coupling -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r10394 r10473 89 89 & ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc , ln_rnf , & 90 90 & ln_ssr , nn_isf , nn_fwb, ln_cdgw , ln_wave , ln_sdw , & 91 & nn_lsm, nn_limflx , nn_components, ln_cpl91 & ln_tauoc , ln_stcor , nn_lsm, nn_limflx , nn_components, ln_cpl 92 92 INTEGER :: ios 93 93 INTEGER :: ierr, ierr0, ierr1, ierr2, ierr3, jpm … … 132 132 WRITE(numout,*) ' ocean-atmosphere coupled formulation ln_cpl = ', ln_cpl 133 133 WRITE(numout,*) ' forced-coupled mixed formulation ln_mixcpl = ', ln_mixcpl 134 WRITE(numout,*) ' wave physics ln_wave = ', ln_wave 135 WRITE(numout,*) ' Stokes drift corr. to vert. velocity ln_sdw = ', ln_sdw 136 WRITE(numout,*) ' wave modified ocean stress ln_tauoc = ', ln_tauoc 137 WRITE(numout,*) ' Stokes coriolis term ln_stcor = ', ln_stcor 138 WRITE(numout,*) ' neutral drag coefficient (CORE, MFS) ln_cdgw = ', ln_cdgw 134 139 WRITE(numout,*) ' OASIS coupling (with atm or sas) lk_oasis = ', lk_oasis 135 140 WRITE(numout,*) ' components of your executable nn_components = ', nn_components … … 216 221 217 222 IF ( ln_wave ) THEN 218 !Activated wave module but neither drag nor stokes drift activated219 IF ( .NOT.(ln_cdgw .OR. ln_sdw ) ) THEN220 CALL ctl_warn( 'Ask for wave coupling but nor drag coefficient (ln_cdgw=F) neither stokes drift activated (ln_sdw=F)' )221 !drag coefficient read from wave model definable only with mfs bulk formulae and core223 !Activated wave module but neither drag nor stokes drift activated 224 IF ( .NOT.(ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) ) THEN 225 CALL ctl_warn( 'Ask for wave coupling but ln_cdgw=F, ln_sdw=F, ln_tauoc=F, ln_stcor=F') 226 !drag coefficient read from wave model definable only with mfs bulk formulae and core 222 227 ELSEIF (ln_cdgw .AND. .NOT.(ln_blk_mfs .OR. ln_blk_core) ) THEN 223 228 CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core') 229 ELSEIF (ln_stcor .AND. .NOT. ln_sdw) THEN 230 CALL ctl_stop( 'Stokes-Coriolis term calculated only if activated Stokes Drift ln_sdw=T') 224 231 ENDIF 225 232 ELSE 226 IF ( ln_cdgw .OR. ln_sdw ) & 227 & CALL ctl_stop('Not Activated Wave Module (ln_wave=F) but & 228 & asked coupling with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ') 233 IF ( ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) & 234 & CALL ctl_stop( 'Not Activated Wave Module (ln_wave=F) but asked coupling ', & 235 & 'with drag coefficient (ln_cdgw =T) ' , & 236 & 'or Stokes Drift (ln_sdw=T) ' , & 237 & 'or ocean stress modification due to waves (ln_tauoc=T) ', & 238 & 'or Stokes-Coriolis term (ln_stcori=T)' ) 229 239 ENDIF 230 240 ! ! Choice of the Surface Boudary Condition (set nsbc) … … 307 317 308 318 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation 319 ! 320 IF( ln_wave ) CALL sbc_wave_init ! surface wave initialisation 321 ! 309 322 310 323 END SUBROUTINE sbc_init … … 386 399 IF( ln_mixcpl ) CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! forced-coupled mixed formulation after forcing 387 400 401 IF ( ln_wave .AND. ln_tauoc) THEN ! Wave stress subctracted 402 utau(:,:) = utau(:,:)*tauoc_wave(:,:) 403 vtau(:,:) = vtau(:,:)*tauoc_wave(:,:) 404 taum(:,:) = taum(:,:)*tauoc_wave(:,:) 405 ! 406 SELECT CASE( nsbc ) 407 CASE( 0,1,2,3,5,-1 ) ; 408 IF(lwp .AND. kt == nit000 ) WRITE(numout,*) 'WARNING: You are subtracting the wave stress to the ocean. & 409 & If not requested select ln_tauoc=.false' 410 END SELECT 411 ! 412 END IF 388 413 389 414 ! !== Misc. Options ==! -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r8058 r10473 4 4 !! Wave module 5 5 !!====================================================================== 6 !! History : 3.3.1 ! 2011-09 (Adani M) Original code: Drag Coefficient 7 !! : 3.4 ! 2012-10 (Adani M) Stokes Drift 8 !!---------------------------------------------------------------------- 9 USE iom ! I/O manager library 10 USE in_out_manager ! I/O manager 11 USE lib_mpp ! distribued memory computing library 12 USE fldread ! read input fields 13 USE oce 14 USE sbc_oce ! Surface boundary condition: ocean fields 15 USE domvvl 16 17 18 !!---------------------------------------------------------------------- 19 !! sbc_wave : read drag coefficient from wave model in netcdf files 20 !!---------------------------------------------------------------------- 6 !! History : 3.3 ! 2011-09 (Adani M) Original code: Drag Coefficient 7 !! : 3.4 ! 2012-10 (Adani M) Stokes Drift 8 !! 3.6 ! 2014-09 (Clementi E, Oddo P)New Stokes Drift Computation 9 !! - ! 2016-12 (G. Madec, E. Clementi) update Stoke drift computation 10 !! + add sbc_wave_ini routine 11 !!---------------------------------------------------------------------- 12 13 !!---------------------------------------------------------------------- 14 !! sbc_stokes : calculate 3D Stokes-drift velocities 15 !! sbc_wave : wave data from wave model in netcdf files 16 !! sbc_wave_init : initialisation fo surface waves 17 !!---------------------------------------------------------------------- 18 USE oce ! ocean variables 19 USE sbc_oce ! Surface boundary condition: ocean fields 20 USE zdf_oce, ONLY : ln_zdfqiao 21 USE bdy_oce ! open boundary condition variables 22 USE domvvl ! domain: variable volume layers 23 ! 24 USE iom ! I/O manager library 25 USE in_out_manager ! I/O manager 26 USE lib_mpp ! distribued memory computing library 27 USE fldread ! read input fields 28 USE wrk_nemo ! 29 USE phycst ! physical constants 21 30 22 31 IMPLICIT NONE 23 32 PRIVATE 24 33 25 PUBLIC sbc_wave ! routine called in sbc_blk_core or sbc_blk_mfs 34 PUBLIC sbc_stokes ! routine called in sbccpl 35 PUBLIC sbc_wave ! routine called in sbcmod 36 PUBLIC sbc_wave_init ! routine called in sbcmod 26 37 27 INTEGER , PARAMETER :: jpfld = 3 ! maximum number of files to read for srokes drift 28 INTEGER , PARAMETER :: jp_usd = 1 ! index of stokes drift (i-component) (m/s) at T-point 29 INTEGER , PARAMETER :: jp_vsd = 2 ! index of stokes drift (j-component) (m/s) at T-point 30 INTEGER , PARAMETER :: jp_wn = 3 ! index of wave number (1/m) at T-point 31 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_cd ! structure of input fields (file informations, fields read) Drag Coefficient 32 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sd ! structure of input fields (file informations, fields read) Stokes Drift 33 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:) :: cdn_wave 34 REAL(wp),ALLOCATABLE,DIMENSION (:,:) :: usd2d,vsd2d,uwavenum,vwavenum 35 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:) :: usd3d,vsd3d,wsd3d 38 ! Variables checking if the wave parameters are coupled (if not, they are read from file) 39 LOGICAL, PUBLIC :: cpl_hsig = .FALSE. 40 LOGICAL, PUBLIC :: cpl_phioc = .FALSE. 41 LOGICAL, PUBLIC :: cpl_sdrftx = .FALSE. 42 LOGICAL, PUBLIC :: cpl_sdrfty = .FALSE. 43 LOGICAL, PUBLIC :: cpl_wper = .FALSE. 44 LOGICAL, PUBLIC :: cpl_wnum = .FALSE. 45 LOGICAL, PUBLIC :: cpl_wstrf = .FALSE. 46 LOGICAL, PUBLIC :: cpl_wdrag = .FALSE. 47 48 INTEGER :: jpfld ! number of files to read for stokes drift 49 INTEGER :: jp_usd ! index of stokes drift (i-component) (m/s) at T-point 50 INTEGER :: jp_vsd ! index of stokes drift (j-component) (m/s) at T-point 51 INTEGER :: jp_hsw ! index of significant wave hight (m) at T-point 52 INTEGER :: jp_wmp ! index of mean wave period (s) at T-point 53 54 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_cd ! structure of input fields (file informations, fields read) Drag Coefficient 55 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sd ! structure of input fields (file informations, fields read) Stokes Drift 56 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_wn ! structure of input fields (file informations, fields read) wave number for Qiao 57 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tauoc ! structure of input fields (file informations, fields read) normalized wave stress into the ocean 58 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: cdn_wave !: 59 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: hsw, wmp, wnum !: 60 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: tauoc_wave !: 61 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: tsd2d !: 62 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: div_sd !: barotropic stokes drift divergence 63 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: ut0sd, vt0sd !: surface Stokes drift velocities at t-point 64 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: usd , vsd , wsd !: Stokes drift velocities at u-, v- & w-points, resp. 36 65 37 66 !! * Substitutions 38 # include " domzgr_substitute.h90"67 # include "vectopt_loop_substitute.h90" 39 68 !!---------------------------------------------------------------------- 40 69 !! NEMO/OPA 4.0 , NEMO Consortium (2011) … … 44 73 CONTAINS 45 74 75 SUBROUTINE sbc_stokes( ) 76 !!--------------------------------------------------------------------- 77 !! *** ROUTINE sbc_stokes *** 78 !! 79 !! ** Purpose : compute the 3d Stokes Drift according to Breivik et al., 80 !! 2014 (DOI: 10.1175/JPO-D-14-0020.1) 81 !! 82 !! ** Method : - Calculate Stokes transport speed 83 !! - Calculate horizontal divergence 84 !! - Integrate the horizontal divergenze from the bottom 85 !! ** action 86 !!--------------------------------------------------------------------- 87 INTEGER :: jj, ji, jk ! dummy loop argument 88 INTEGER :: ik ! local integer 89 REAL(wp) :: ztransp, zfac, ztemp 90 REAL(wp) :: zdep_u, zdep_v, zkh_u, zkh_v, zda_u, zda_v 91 REAL(wp), DIMENSION(:,:) , POINTER :: zk_t, zk_u, zk_v, zu0_sd, zv0_sd ! 2D workspace 92 REAL(wp), DIMENSION(:,:,:), POINTER :: ze3divh ! 3D workspace 93 94 !!--------------------------------------------------------------------- 95 ! 96 97 CALL wrk_alloc( jpi,jpj,jpk, ze3divh ) 98 CALL wrk_alloc( jpi,jpj, zk_t, zk_u, zk_v, zu0_sd, zv0_sd ) 99 ! 100 zfac = 2.0_wp * rpi / 16.0_wp 101 DO jj = 1, jpj ! exp. wave number at t-point (Eq. (19) in Breivick et al. (2014) ) 102 DO ji = 1, jpi 103 ! Stokes drift velocity estimated from Hs and Tmean 104 ztransp = zfac * hsw(ji,jj)*hsw(ji,jj) / MAX( wmp(ji,jj), 0.0000001_wp ) 105 ! Stokes surface speed 106 tsd2d(ji,jj) = SQRT( ut0sd(ji,jj)*ut0sd(ji,jj) + vt0sd(ji,jj)*vt0sd(ji,jj)) 107 ! Wavenumber scale 108 zk_t(ji,jj) = ABS( tsd2d(ji,jj) ) / MAX( ABS( 5.97_wp*ztransp ), 0.0000001_wp ) 109 END DO 110 END DO 111 DO jj = 1, jpjm1 ! exp. wave number & Stokes drift velocity at u- & v-points 112 DO ji = 1, jpim1 113 zk_u(ji,jj) = 0.5_wp * ( zk_t(ji,jj) + zk_t(ji+1,jj) ) 114 zk_v(ji,jj) = 0.5_wp * ( zk_t(ji,jj) + zk_t(ji,jj+1) ) 115 ! 116 zu0_sd(ji,jj) = 0.5_wp * ( ut0sd(ji,jj) + ut0sd(ji+1,jj) ) 117 zv0_sd(ji,jj) = 0.5_wp * ( vt0sd(ji,jj) + vt0sd(ji,jj+1) ) 118 END DO 119 END DO 120 ! 121 ! !== horizontal Stokes Drift 3D velocity ==! 122 DO jk = 1, jpkm1 123 DO jj = 2, jpjm1 124 DO ji = 2, jpim1 125 zdep_u = 0.5_wp * ( gdept_n(ji,jj,jk) + gdept_n(ji+1,jj,jk) ) 126 zdep_v = 0.5_wp * ( gdept_n(ji,jj,jk) + gdept_n(ji,jj+1,jk) ) 127 ! 128 zkh_u = zk_u(ji,jj) * zdep_u ! k * depth 129 zkh_v = zk_v(ji,jj) * zdep_v 130 ! ! Depth attenuation 131 zda_u = EXP( -2.0_wp*zkh_u ) / ( 1.0_wp + 8.0_wp*zkh_u ) 132 zda_v = EXP( -2.0_wp*zkh_v ) / ( 1.0_wp + 8.0_wp*zkh_v ) 133 ! 134 usd(ji,jj,jk) = zda_u * zk_u(ji,jj) * umask(ji,jj,jk) 135 vsd(ji,jj,jk) = zda_v * zk_v(ji,jj) * vmask(ji,jj,jk) 136 END DO 137 END DO 138 END DO 139 CALL lbc_lnk( usd(:,:,:), 'U', vsd(:,:,:), 'V', -1. ) 140 ! 141 ! !== vertical Stokes Drift 3D velocity ==! 142 ! 143 DO jk = 1, jpkm1 ! Horizontal e3*divergence 144 DO jj = 2, jpj 145 DO ji = fs_2, jpi 146 ze3divh(ji,jj,jk) = ( e2u(ji ,jj) * e3u_n(ji ,jj,jk) * usd(ji, jj,jk) & 147 & - e2u(ji-1,jj) * e3u_n(ji-1,jj,jk) * usd(ji-1,jj,jk) & 148 & + e1v(ji,jj ) * e3v_n(ji,jj ,jk) * vsd(ji,jj ,jk) & 149 & - e1v(ji,jj-1) * e3v_n(ji,jj-1,jk) * vsd(ji,jj-1,jk) ) * r1_e12t(ji,jj) 150 END DO 151 END DO 152 END DO 153 ! 154 IF( .NOT. AGRIF_Root() ) THEN 155 IF( nbondi == 1 .OR. nbondi == 2 ) ze3divh(nlci-1, : ,:) = 0._wp ! east 156 IF( nbondi == -1 .OR. nbondi == 2 ) ze3divh( 2 , : ,:) = 0._wp ! west 157 IF( nbondj == 1 .OR. nbondj == 2 ) ze3divh( : ,nlcj-1,:) = 0._wp ! north 158 IF( nbondj == -1 .OR. nbondj == 2 ) ze3divh( : , 2 ,:) = 0._wp ! south 159 ENDIF 160 ! 161 CALL lbc_lnk( ze3divh, 'T', 1. ) 162 ! 163 IF( .NOT. lk_vvl ) THEN ; ik = 1 ! none zero velocity through the sea surface 164 ELSE ; ik = 2 ! w=0 at the surface (set one for all in sbc_wave_init) 165 ENDIF 166 DO jk = jpkm1, ik, -1 ! integrate from the bottom the hor. divergence (NB: at k=jpk w is always zero) 167 wsd(:,:,jk) = wsd(:,:,jk+1) - ze3divh(:,:,jk) 168 END DO 169 #if defined key_bdy 170 IF( lk_bdy ) THEN 171 DO jk = 1, jpkm1 172 wsd(:,:,jk) = wsd(:,:,jk) * bdytmask(:,:) 173 END DO 174 ENDIF 175 #endif 176 ! !== Horizontal divergence of barotropic Stokes transport ==! 177 div_sd(:,:) = 0._wp 178 DO jk = 1, jpkm1 ! 179 div_sd(:,:) = div_sd(:,:) + ze3divh(:,:,jk) 180 END DO 181 ! 182 CALL iom_put( "ustokes", usd ) 183 CALL iom_put( "vstokes", vsd ) 184 CALL iom_put( "wstokes", wsd ) 185 ! 186 CALL wrk_dealloc( jpi,jpj,jpk, ze3divh ) 187 CALL wrk_dealloc( jpi,jpj, zk_t, zk_u, zk_v, zu0_sd, zv0_sd ) 188 ! 189 END SUBROUTINE sbc_stokes 190 191 46 192 SUBROUTINE sbc_wave( kt ) 47 193 !!--------------------------------------------------------------------- 48 !! *** ROUTINE sbc_ apr***49 !! 50 !! ** Purpose : read drag coefficientfrom wave model in netcdf files.194 !! *** ROUTINE sbc_wave *** 195 !! 196 !! ** Purpose : read wave parameters from wave model in netcdf files. 51 197 !! 52 198 !! ** Method : - Read namelist namsbc_wave 53 199 !! - Read Cd_n10 fields in netcdf files 54 200 !! - Read stokes drift 2d in netcdf files 55 !! - Read wave number in netcdf files 56 !! - Compute 3d stokes drift using monochromatic 57 !! ** action : 58 !! 59 !!--------------------------------------------------------------------- 60 USE oce, ONLY : un,vn,hdivn,rotn 61 USE divcur 62 USE wrk_nemo 63 #if defined key_bdy 64 USE bdy_oce, ONLY : bdytmask 65 #endif 66 INTEGER, INTENT( in ) :: kt ! ocean time step 67 INTEGER :: ierror ! return error code 68 INTEGER :: ifpr, jj,ji,jk 69 INTEGER :: ios ! Local integer output status for namelist read 70 REAL(wp),DIMENSION(:,:,:),POINTER :: udummy,vdummy,hdivdummy,rotdummy 71 REAL :: z2dt,z1_2dt 72 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist informations on the fields to read 201 !! - Read wave number in netcdf files 202 !! - Compute 3d stokes drift using Breivik et al.,2014 203 !! formulation 204 !! ** action 205 !!--------------------------------------------------------------------- 206 INTEGER, INTENT(in ) :: kt ! ocean time step 207 !!--------------------------------------------------------------------- 208 ! 209 IF( ln_cdgw .AND. .NOT. cpl_wdrag ) THEN !== Neutral drag coefficient ==! 210 CALL fld_read( kt, nn_fsbc, sf_cd ) ! read from external forcing 211 cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 212 ENDIF 213 214 IF( ln_tauoc .AND. .NOT. cpl_wstrf ) THEN !== Wave induced stress ==! 215 CALL fld_read( kt, nn_fsbc, sf_tauoc ) ! read wave norm stress from external forcing 216 tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1) 217 ENDIF 218 219 IF( ln_sdw ) THEN !== Computation of the 3d Stokes Drift ==! 220 ! 221 IF( jpfld > 0 ) THEN ! Read from file only if the field is not coupled 222 CALL fld_read( kt, nn_fsbc, sf_sd ) ! read wave parameters from external forcing 223 IF( jp_hsw > 0 ) hsw (:,:) = sf_sd(jp_hsw)%fnow(:,:,1) ! significant wave height 224 IF( jp_wmp > 0 ) wmp (:,:) = sf_sd(jp_wmp)%fnow(:,:,1) ! wave mean period 225 IF( jp_usd > 0 ) ut0sd(:,:) = sf_sd(jp_usd)%fnow(:,:,1) ! 2D zonal Stokes Drift at T point 226 IF( jp_vsd > 0 ) vt0sd(:,:) = sf_sd(jp_vsd)%fnow(:,:,1) ! 2D meridional Stokes Drift at T point 227 ENDIF 228 ! 229 ! Read also wave number if needed, so that it is available in coupling routines 230 IF( ln_zdfqiao .AND. .NOT.cpl_wnum ) THEN 231 CALL fld_read( kt, nn_fsbc, sf_wn ) ! read wave parameters from external forcing 232 wnum(:,:) = sf_wn(1)%fnow(:,:,1) 233 ENDIF 234 235 ! !== Computation of the 3d Stokes Drift ==! 236 ! 237 IF( jpfld == 4 ) CALL sbc_stokes() ! Calculate only if required fields are read 238 ! ! In coupled wave model-NEMO case the call is done after coupling 239 ! 240 ENDIF 241 ! 242 END SUBROUTINE sbc_wave 243 244 245 SUBROUTINE sbc_wave_init 246 !!--------------------------------------------------------------------- 247 !! *** ROUTINE sbc_wave_init *** 248 !! 249 !! ** Purpose : read wave parameters from wave model in netcdf files. 250 !! 251 !! ** Method : - Read namelist namsbc_wave 252 !! - Read Cd_n10 fields in netcdf files 253 !! - Read stokes drift 2d in netcdf files 254 !! - Read wave number in netcdf files 255 !! - Compute 3d stokes drift using Breivik et al.,2014 256 !! formulation 257 !! ** action 258 !!--------------------------------------------------------------------- 259 INTEGER :: ierror, ios ! local integer 260 INTEGER :: ifpr 261 !! 73 262 CHARACTER(len=100) :: cn_dir ! Root directory for location of drag coefficient files 74 TYPE(FLD_N) :: sn_cdg, sn_usd, sn_vsd, sn_wn ! informations about the fields to be read 75 !!--------------------------------------------------------------------- 76 NAMELIST/namsbc_wave/ sn_cdg, cn_dir, sn_usd, sn_vsd, sn_wn 77 !!--------------------------------------------------------------------- 78 79 !!---------------------------------------------------------------------- 80 ! 81 ! 82 ! ! -------------------- ! 83 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 84 ! ! -------------------- ! 85 REWIND( numnam_ref ) ! Namelist namsbc_wave in reference namelist : File for drag coeff. from wave model 86 READ ( numnam_ref, namsbc_wave, IOSTAT = ios, ERR = 901) 87 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_wave in reference namelist', lwp ) 88 89 REWIND( numnam_cfg ) ! Namelist namsbc_wave in configuration namelist : File for drag coeff. from wave model 90 READ ( numnam_cfg, namsbc_wave, IOSTAT = ios, ERR = 902 ) 91 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_wave in configuration namelist', lwp ) 92 IF(lwm) WRITE ( numond, namsbc_wave ) 93 ! 94 95 IF ( ln_cdgw ) THEN 263 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: slf_i ! array of namelist informations on the fields to read 264 TYPE(FLD_N) :: sn_cdg, sn_usd, sn_vsd, & 265 & sn_hsw, sn_wmp, sn_wnum, sn_tauoc ! informations about the fields to be read 266 ! 267 NAMELIST/namsbc_wave/ sn_cdg, cn_dir, sn_usd, sn_vsd, sn_hsw, sn_wmp, sn_wnum, sn_tauoc 268 !!--------------------------------------------------------------------- 269 ! 270 REWIND( numnam_ref ) ! Namelist namsbc_wave in reference namelist : File for drag coeff. from wave model 271 READ ( numnam_ref, namsbc_wave, IOSTAT = ios, ERR = 901) 272 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_wave in reference namelist', lwp ) 273 274 REWIND( numnam_cfg ) ! Namelist namsbc_wave in configuration namelist : File for drag coeff. from wave model 275 READ ( numnam_cfg, namsbc_wave, IOSTAT = ios, ERR = 902 ) 276 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_wave in configuration namelist', lwp ) 277 IF(lwm) WRITE ( numond, namsbc_wave ) 278 ! 279 IF( ln_cdgw ) THEN 280 IF( .NOT. cpl_wdrag ) THEN 96 281 ALLOCATE( sf_cd(1), STAT=ierror ) !* allocate and fill sf_wave with sn_cdg 97 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave : unable to allocate sf_wave structure' )282 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave_init: unable to allocate sf_wave structure' ) 98 283 ! 99 284 ALLOCATE( sf_cd(1)%fnow(jpi,jpj,1) ) 100 285 IF( sn_cdg%ln_tint ) ALLOCATE( sf_cd(1)%fdta(jpi,jpj,1,2) ) 101 CALL fld_fill( sf_cd, (/ sn_cdg /), cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 102 ALLOCATE( cdn_wave(jpi,jpj) ) 103 cdn_wave(:,:) = 0.0 104 ENDIF 105 IF ( ln_sdw ) THEN 106 slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; slf_i(jp_wn) = sn_wn 107 ALLOCATE( sf_sd(3), STAT=ierror ) !* allocate and fill sf_wave with sn_cdg 108 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 286 CALL fld_fill( sf_cd, (/ sn_cdg /), cn_dir, 'sbc_wave_init', 'Wave module ', 'namsbc_wave' ) 287 ENDIF 288 ALLOCATE( cdn_wave(jpi,jpj) ) 289 ENDIF 290 291 IF( ln_tauoc ) THEN 292 IF( .NOT. cpl_wstrf ) THEN 293 ALLOCATE( sf_tauoc(1), STAT=ierror ) !* allocate and fill sf_wave with sn_tauoc 294 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave_init: unable to allocate sf_wave structure' ) 295 ! 296 ALLOCATE( sf_tauoc(1)%fnow(jpi,jpj,1) ) 297 IF( sn_tauoc%ln_tint ) ALLOCATE( sf_tauoc(1)%fdta(jpi,jpj,1,2) ) 298 CALL fld_fill( sf_tauoc, (/ sn_tauoc /), cn_dir, 'sbc_wave_init', 'Wave module', 'namsbc_wave' ) 299 ENDIF 300 ALLOCATE( tauoc_wave(jpi,jpj) ) 301 ENDIF 302 303 IF( ln_sdw ) THEN ! Find out how many fields have to be read from file if not coupled 304 jpfld=0 305 jp_usd=0 ; jp_vsd=0 ; jp_hsw=0 ; jp_wmp=0 306 IF( .NOT. cpl_sdrftx ) THEN 307 jpfld = jpfld + 1 308 jp_usd = jpfld 309 ENDIF 310 IF( .NOT. cpl_sdrfty ) THEN 311 jpfld = jpfld + 1 312 jp_vsd = jpfld 313 ENDIF 314 IF( .NOT. cpl_hsig ) THEN 315 jpfld = jpfld + 1 316 jp_hsw = jpfld 317 ENDIF 318 IF( .NOT. cpl_wper ) THEN 319 jpfld = jpfld + 1 320 jp_wmp = jpfld 321 ENDIF 322 323 ! Read from file only the non-coupled fields 324 IF( jpfld > 0 ) THEN 325 ALLOCATE( slf_i(jpfld) ) 326 IF( jp_usd > 0 ) slf_i(jp_usd) = sn_usd 327 IF( jp_vsd > 0 ) slf_i(jp_vsd) = sn_vsd 328 IF( jp_hsw > 0 ) slf_i(jp_hsw) = sn_hsw 329 IF( jp_wmp > 0 ) slf_i(jp_wmp) = sn_wmp 330 ALLOCATE( sf_sd(jpfld), STAT=ierror ) !* allocate and fill sf_sd with stokes drift 331 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave_init: unable to allocate sf_wave structure' ) 109 332 ! 110 333 DO ifpr= 1, jpfld … … 112 335 IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf_sd(ifpr)%fdta(jpi,jpj,1,2) ) 113 336 END DO 114 CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 115 ALLOCATE( usd2d(jpi,jpj),vsd2d(jpi,jpj),uwavenum(jpi,jpj),vwavenum(jpi,jpj) ) 116 ALLOCATE( usd3d(jpi,jpj,jpk),vsd3d(jpi,jpj,jpk),wsd3d(jpi,jpj,jpk) ) 117 usd2d(:,:) = 0.0 ; vsd2d(:,:) = 0.0 ; uwavenum(:,:) = 0.0 ; vwavenum(:,:) = 0.0 118 usd3d(:,:,:) = 0.0 ;vsd3d(:,:,:) = 0.0 ; wsd3d(:,:,:) = 0.0 119 ENDIF 120 ENDIF 121 ! 122 ! 123 IF ( ln_cdgw ) THEN 124 CALL fld_read( kt, nn_fsbc, sf_cd ) !* read drag coefficient from external forcing 125 cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 126 ENDIF 127 IF ( ln_sdw ) THEN 128 CALL fld_read( kt, nn_fsbc, sf_sd ) !* read drag coefficient from external forcing 129 130 ! Interpolate wavenumber, stokes drift into the grid_V and grid_V 131 !------------------------------------------------- 132 133 DO jj = 1, jpjm1 134 DO ji = 1, jpim1 135 uwavenum(ji,jj)=0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 136 & + sf_sd(3)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 137 138 vwavenum(ji,jj)=0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 139 & + sf_sd(3)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 140 141 usd2d(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(1)%fnow(ji,jj,1) * tmask(ji,jj,1) & 142 & + sf_sd(1)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 143 144 vsd2d(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(2)%fnow(ji,jj,1) * tmask(ji,jj,1) & 145 & + sf_sd(2)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 146 END DO 147 END DO 148 149 !Computation of the 3d Stokes Drift 150 DO jk = 1, jpk 151 DO jj = 1, jpj-1 152 DO ji = 1, jpi-1 153 usd3d(ji,jj,jk) = usd2d(ji,jj)*exp(2.0*uwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji+1,jj ,jk)))) 154 vsd3d(ji,jj,jk) = vsd2d(ji,jj)*exp(2.0*vwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji ,jj+1,jk)))) 155 END DO 156 END DO 157 usd3d(jpi,:,jk) = usd2d(jpi,:)*exp( 2.0*uwavenum(jpi,:)*(-gdept_0(jpi,:,jk)) ) 158 vsd3d(:,jpj,jk) = vsd2d(:,jpj)*exp( 2.0*vwavenum(:,jpj)*(-gdept_0(:,jpj,jk)) ) 159 END DO 160 161 CALL wrk_alloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 162 163 udummy(:,:,:)=un(:,:,:) 164 vdummy(:,:,:)=vn(:,:,:) 165 hdivdummy(:,:,:)=hdivn(:,:,:) 166 rotdummy(:,:,:)=rotn(:,:,:) 167 un(:,:,:)=usd3d(:,:,:) 168 vn(:,:,:)=vsd3d(:,:,:) 169 CALL div_cur(kt) 170 ! !------------------------------! 171 ! ! Now Vertical Velocity ! 172 ! !------------------------------! 173 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog) 174 175 z1_2dt = 1.e0 / z2dt 176 DO jk = jpkm1, 1, -1 ! integrate from the bottom the hor. divergence 177 ! - ML - need 3 lines here because replacement of fse3t by its expression yields too long lines otherwise 178 wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - fse3t_n(:,:,jk) * hdivn(:,:,jk) & 179 & - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) ) & 180 & * tmask(:,:,jk) * z1_2dt 181 #if defined key_bdy 182 wsd3d(:,:,jk) = wsd3d(:,:,jk) * bdytmask(:,:) 183 #endif 184 END DO 185 hdivn(:,:,:)=hdivdummy(:,:,:) 186 rotn(:,:,:)=rotdummy(:,:,:) 187 vn(:,:,:)=vdummy(:,:,:) 188 un(:,:,:)=udummy(:,:,:) 189 CALL wrk_dealloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 190 ENDIF 191 END SUBROUTINE sbc_wave 192 337 ! 338 CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave_init', 'Wave module ', 'namsbc_wave' ) 339 ENDIF 340 ALLOCATE( usd (jpi,jpj,jpk), vsd (jpi,jpj,jpk), wsd(jpi,jpj,jpk) ) 341 ALLOCATE( hsw (jpi,jpj) , wmp (jpi,jpj) ) 342 ALLOCATE( ut0sd(jpi,jpj) , vt0sd(jpi,jpj) ) 343 ALLOCATE( div_sd(jpi,jpj) ) 344 ALLOCATE( tsd2d (jpi,jpj) ) 345 usd(:,:,:) = 0._wp 346 vsd(:,:,:) = 0._wp 347 wsd(:,:,:) = 0._wp 348 ! Wave number needed only if ln_zdfqiao=T 349 IF( ln_zdfqiao .AND. .NOT.cpl_wnum ) THEN 350 ALLOCATE( sf_wn(1), STAT=ierror ) !* allocate and fill sf_wave with sn_wnum 351 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave_init: unable toallocate sf_wave structure' ) 352 ALLOCATE( sf_wn(1)%fnow(jpi,jpj,1) ) 353 IF( sn_wnum%ln_tint ) ALLOCATE( sf_wn(1)%fdta(jpi,jpj,1,2) ) 354 CALL fld_fill( sf_wn, (/ sn_wnum /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 355 ENDIF 356 ALLOCATE( wnum(jpi,jpj) ) 357 ENDIF 358 ! 359 END SUBROUTINE sbc_wave_init 360 193 361 !!====================================================================== 194 362 END MODULE sbcwave -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r8058 r10473 6 6 !! History : 2.0 ! 2005-11 (G. Madec) Original code 7 7 !! 3.3 ! 2010-09 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport 8 !! 3.6 ! 2015-06 (E. Clementi) Addition of Stokes drift in case of wave coupling 8 9 !! 4.0 ! 2011-06 (G. Madec) Addition of Mixed Layer Eddy parameterisation 9 10 !!---------------------------------------------------------------------- … … 34 35 USE timing ! Timing 35 36 USE sbc_oce 36 USE diaptr ! Poleward heat transport 37 37 USE sbcwave ! wave module 38 USE sbc_oce ! surface boundary condition: ocean 39 USE diaptr ! Poleward heat transport 38 40 39 41 IMPLICIT NONE … … 85 87 CALL wrk_alloc( jpi, jpj, jpk, zun, zvn, zwn ) 86 88 ! ! set time step 89 zun(:,:,:) = 0.0 90 zvn(:,:,:) = 0.0 91 zwn(:,:,:) = 0.0 92 ! 87 93 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 88 94 r2dtra(:) = rdttra(:) ! = rdtra (restarting with Euler time stepping) … … 94 100 ! 95 101 ! !== effective transport ==! 96 DO jk = 1, jpkm1 97 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only 98 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 99 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * wn(:,:,jk) 100 END DO 102 IF(ln_wave .AND. ln_sdw) THEN 103 DO jk = 1, jpkm1 ! eulerian transport + Stokes Drift 104 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * ( un(:,:,jk) + usd(:,:,jk) ) 105 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * ( vn(:,:,jk) + vsd(:,:,jk) ) 106 zwn(:,:,jk) = e1e2t(:,:) * ( wn(:,:,jk) + wsd(:,:,jk) ) 107 END DO 108 ELSE 109 DO jk = 1, jpkm1 110 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only 111 zvn(:,:,jk) = e1v (:,:) * fse3v(:,:,jk) * vn(:,:,jk) 112 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) 113 END DO 114 ENDIF 101 115 ! 102 116 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r8058 r10473 35 35 INTEGER , PUBLIC :: nn_npc !: non penetrative convective scheme call frequency 36 36 INTEGER , PUBLIC :: nn_npcp !: non penetrative convective scheme print frequency 37 LOGICAL , PUBLIC :: ln_zdfqiao !: Enhanced wave vertical mixing Qiao(2010) formulation flag 37 38 38 39 -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r8058 r10473 24 24 USE phycst ! physical constants 25 25 USE zdfmxl ! mixed layer 26 USE sbcwave , ONLY: hsw ! significant wave height 27 ! 26 28 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 27 29 USE lib_mpp ! MPP manager … … 197 199 zdep(:,:) = 30.*TANH(2.*0.3/(28.*SQRT(MAX(ustars2(:,:),rsmall)))) ! Wave age (eq. 10) 198 200 zhsro(:,:) = MAX(rsbc_zs2 * ustars2(:,:) * zdep(:,:)**1.5, rn_hsro) ! zhsro = rn_frac_hs * Hsw (eq. 11) 199 ! 201 CASE ( 3 ) ! Roughness given by the wave model (coupled or read in file) 202 zhsro(:,:) = hsw(:,:) 200 203 END SELECT 201 204 … … 909 912 910 913 ! !* Check of some namelist values 911 IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'bad flag: nn_bc_surf is 0 or 1' ) 912 IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'bad flag: nn_bc_surf is 0 or 1' ) 913 IF( nn_z0_met < 0 .OR. nn_z0_met > 2 ) CALL ctl_stop( 'bad flag: nn_z0_met is 0, 1 or 2' ) 914 IF( nn_stab_func < 0 .OR. nn_stab_func > 3 ) CALL ctl_stop( 'bad flag: nn_stab_func is 0, 1, 2 and 3' ) 915 IF( nn_clos < 0 .OR. nn_clos > 3 ) CALL ctl_stop( 'bad flag: nn_clos is 0, 1, 2 or 3' ) 914 IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 915 IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 916 IF( nn_z0_met < 0 .OR. nn_z0_met > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_z0_met is 0, 1, 2 or 3' ) 917 IF( nn_z0_met == 3 .AND. .NOT.ln_wave ) CALL ctl_stop( 'zdf_gls_init: nn_z0_met=3 requires ln_wave=T' ) 918 IF( nn_stab_func < 0 .OR. nn_stab_func > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_stab_func is 0, 1, 2 and 3' ) 919 IF( nn_clos < 0 .OR. nn_clos > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_clos is 0, 1, 2 or 3' ) 916 920 917 921 SELECT CASE ( nn_clos ) !* set the parameters for the chosen closure -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r8058 r10473 53 53 INTEGER :: ios 54 54 !! 55 NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & 56 & ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp 55 NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & 56 & ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp, & 57 & ln_zdfqiao 57 58 !!---------------------------------------------------------------------- 58 59 … … 83 84 WRITE(numout,*) ' npc call frequency nn_npc = ', nn_npc 84 85 WRITE(numout,*) ' npc print frequency nn_npcp = ', nn_npcp 86 WRITE(numout,*) ' Qiao formulation flag ln_zdfqiao=', ln_zdfqiao 85 87 ENDIF 86 88 -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/step.F90
r10394 r10473 25 25 !! 3.4 ! 2011-04 (G. Madec, C. Ethe) Merge of dtatem and dtasal 26 26 !! ! 2012-07 (J. Simeon, G. Madec, C. Ethe) Online coarsening of outputs 27 !! 3.6 ! 2014-10 (E. Clementi, P. Oddo) Add Qiao vertical mixing in case of waves 27 28 !! 3.7 ! 2014-04 (F. Roquet, G. Madec) New equations of state 28 29 !!---------------------------------------------------------------------- … … 72 73 !! -8- Outputs and diagnostics 73 74 !!---------------------------------------------------------------------- 74 INTEGER :: j k! dummy loop indice75 INTEGER :: ji,jj,jk ! dummy loop indice 75 76 INTEGER :: indic ! error indicator if < 0 76 77 INTEGER :: kcall ! optional integer argument (dom_vvl_sf_nxt) … … 132 133 IF( lk_zdftke ) CALL zdf_tke( kstp ) ! TKE closure scheme for Kz 133 134 IF( lk_zdfgls ) CALL zdf_gls( kstp ) ! GLS closure scheme for Kz 135 IF( ln_zdfqiao ) CALL zdf_qiao( kstp ) ! Qiao vertical mixing 136 ! 134 137 IF( lk_zdfkpp ) CALL zdf_kpp( kstp ) ! KPP closure scheme for Kz 135 138 IF( lk_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/step_oce.F90
r8561 r10473 29 29 USE sbctide ! Tide initialisation 30 30 USE sbcapr ! surface boundary condition: ssh_ib required by bdydta 31 USE sbcwave ! Wave intialisation 31 32 32 33 USE traqsr ! solar radiation penetration (tra_qsr routine) … … 86 87 USE zdfric ! Richardson vertical mixing (zdf_ric routine) 87 88 USE zdfmxl ! Mixed-layer depth (zdf_mxl routine) 89 USE zdfqiao !Qiao module wave induced mixing (zdf_qiao routine 88 90 89 91 USE zpshde ! partial step: hor. derivative (zps_hde routine) -
branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/SETTE/sette.sh
r5588 r10473 88 88 # 89 89 # Compiler among those in NEMOGCM/ARCH 90 COMPILER=X64_ADA 91 export BATCH_COMMAND_PAR="llsubmit" 90 module load cray-netcdf-hdf5parallel 91 COMPILER=XC40_METO 92 export BATCH_COMMAND_PAR="qsub 92 93 export BATCH_COMMAND_SEQ=$BATCH_COMMAND_PAR 93 94 export INTERACT_FLAG="no"
Note: See TracChangeset
for help on using the changeset viewer.