Changeset 12101
- Timestamp:
- 2019-12-06T18:45:39+01:00 (4 years ago)
- Location:
- utils/tools_UKMO_MERGE_2019
- Files:
-
- 46 deleted
- 5 edited
- 50 copied
Legend:
- Unmodified
- Added
- Removed
-
utils/tools_UKMO_MERGE_2019/DOMAINcfg/namelist_cfg
r9051 r12101 1 1 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 !! NEMO/O PA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref2 !! NEMO/OCE : Configuration namelist_cfg used to overwrite defaults value defined in namelist_ref 3 3 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4 ! 4 !! NEMO/OCE : 1 - Domain & run manager (namrun, namcfg, namdom, namzgr, namzgr_sco ) 5 !! 2 - diagnostics (namnc4) 6 !! 3 - miscellaneous (nammpp, namctl) 7 !! 8 !! namelist skeleton : egrep -E '(^/ *$|^! *$|^ *$|&nam.*|!---.*|!! .*|!!==.*|!!>>>.*)' namelist_ref > namelist_skl 9 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5 10 !----------------------------------------------------------------------- 6 11 &namrun ! parameters of the run 7 12 !----------------------------------------------------------------------- 8 nn_no = 0 ! job number (no more used...) 9 cn_exp = "domaincfg" ! experience name 10 nn_it000 = 1 ! first time step 11 nn_itend = 75 ! last time step (std 5475) 13 / 14 !----------------------------------------------------------------------- 15 &namdom ! space and time domain (bathymetry, mesh, timestep) 16 !----------------------------------------------------------------------- 12 17 / 13 18 !----------------------------------------------------------------------- 14 19 &namcfg ! parameters of the configuration 15 20 !----------------------------------------------------------------------- 16 !17 ln_e3_dep = .true. ! =T : e3=dk[depth] in discret sens.18 ! ! ===>>> will become the only possibility in v4.019 ! ! =F : e3 analytical derivative of depth function20 ! ! only there for backward compatibility test with v3.621 ! !22 cp_cfg = "orca" ! name of the configuration23 jp_cfg = 2 ! resolution of the configuration24 jpidta = 182 ! 1st lateral dimension ( >= jpi )25 jpjdta = 149 ! 2nd " " ( >= jpj )26 jpkdta = 31 ! number of levels ( >= jpk )27 jpiglo = 182 ! 1st dimension of global domain --> i =jpidta28 jpjglo = 149 ! 2nd - - --> j =jpjdta29 jpizoom = 1 ! left bottom (i,j) indices of the zoom30 jpjzoom = 1 ! in data domain indices31 jperio = 4 ! lateral cond. type (between 0 and 6)32 21 / 33 22 !----------------------------------------------------------------------- 34 &namzgr ! vertical coordinate 35 !----------------------------------------------------------------------- 36 ln_zps = .true. ! z-coordinate - partial steps 37 ln_linssh = .true. ! linear free surface 38 / 39 !----------------------------------------------------------------------- 40 &namdom ! space and time domain (bathymetry, mesh, timestep) 41 !----------------------------------------------------------------------- 42 jphgr_msh = 0 ! type of horizontal mesh 43 ppglam0 = 999999.0 ! longitude of first raw and column T-point (jphgr_msh = 1) 44 ppgphi0 = 999999.0 ! latitude of first raw and column T-point (jphgr_msh = 1) 45 ppe1_deg = 999999.0 ! zonal grid-spacing (degrees) 46 ppe2_deg = 999999.0 ! meridional grid-spacing (degrees) 47 ppe1_m = 999999.0 ! zonal grid-spacing (degrees) 48 ppe2_m = 999999.0 ! meridional grid-spacing (degrees) 49 ppsur = -4762.96143546300 ! ORCA r4, r2 and r05 coefficients 50 ppa0 = 255.58049070440 ! (default coefficients) 51 ppa1 = 245.58132232490 ! 52 ppkth = 21.43336197938 ! 53 ppacr = 3.0 ! 54 ppdzmin = 999999. ! Minimum vertical spacing 55 pphmax = 999999. ! Maximum depth 56 ldbletanh = .FALSE. ! Use/do not use double tanf function for vertical coordinates 57 ppa2 = 999999. ! Double tanh function parameters 58 ppkth2 = 999999. ! 59 ppacr2 = 999999. ! 60 / 61 !----------------------------------------------------------------------- 62 &namcrs ! Grid coarsening for dynamics output and/or 63 ! passive tracer coarsened online simulations 23 &namzgr ! vertical coordinate (default: NO selection) 64 24 !----------------------------------------------------------------------- 65 25 / 66 26 !----------------------------------------------------------------------- 67 &nam tsd ! data : Temperature & Salinity27 &namzgr_isf ! isf cavity geometry definition 68 28 !----------------------------------------------------------------------- 69 29 / 70 30 !----------------------------------------------------------------------- 71 &nam sbc ! Surface Boundary Condition (surface module)31 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default F) 72 32 !----------------------------------------------------------------------- 73 33 / 74 34 !----------------------------------------------------------------------- 75 &nam sbc_core ! namsbc_core CORE bulk formulae35 &namclo ! (closed sea : need ln_domclo = .true. in namcfg) 76 36 !----------------------------------------------------------------------- 77 37 / 78 38 !----------------------------------------------------------------------- 79 &nam tra_qsr ! penetrative solar radiation39 &namlbc ! lateral momentum boundary condition (default: NO selection) 80 40 !----------------------------------------------------------------------- 81 41 / 82 42 !----------------------------------------------------------------------- 83 &nam sbc_rnf ! runoffs namelist surface boundary condition43 &namagrif ! AGRIF zoom ("key_agrif") 84 44 !----------------------------------------------------------------------- 85 45 / 86 46 !----------------------------------------------------------------------- 87 &nam sbc_ssr ! surface boundary condition : sea surface restoring47 &nambdy ! unstructured open boundaries (default: OFF) 88 48 !----------------------------------------------------------------------- 89 49 / 90 50 !----------------------------------------------------------------------- 91 &nam sbc_alb ! albedo parameters51 &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") 92 52 !----------------------------------------------------------------------- 93 53 / 94 54 !----------------------------------------------------------------------- 95 &nam berg ! iceberg parameters55 &nammpp ! Massively Parallel Processing ("key_mpp_mpi") 96 56 !----------------------------------------------------------------------- 97 57 / 98 58 !----------------------------------------------------------------------- 99 &nam lbc ! lateral momentum boundary condition59 &namctl ! Control prints (default: OFF) 100 60 !----------------------------------------------------------------------- 101 61 / 102 !-----------------------------------------------------------------------103 &nambfr ! bottom friction104 !-----------------------------------------------------------------------105 /106 !-----------------------------------------------------------------------107 &nambbc ! bottom temperature boundary condition (default: NO)108 !-----------------------------------------------------------------------109 ln_trabbc = .true. ! Apply a geothermal heating at the ocean bottom110 /111 !-----------------------------------------------------------------------112 &nambbl ! bottom boundary layer scheme113 !-----------------------------------------------------------------------114 /115 !-----------------------------------------------------------------------116 &nameos ! ocean physical parameters117 !-----------------------------------------------------------------------118 ln_teos10 = .true. ! = Use TEOS-10 equation of state119 /120 !-----------------------------------------------------------------------121 &namtra_adv ! advection scheme for tracer122 !-----------------------------------------------------------------------123 ln_traadv_fct = .true. ! FCT scheme124 nn_fct_h = 2 ! =2/4, horizontal 2nd / 4th order125 nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order126 nn_fct_zts = 0 ! > 1 , 2nd order FCT scheme with vertical sub-timestepping127 ! ! (number of sub-timestep = nn_fct_zts)128 /129 !-----------------------------------------------------------------------130 &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param)131 !-----------------------------------------------------------------------132 /133 !----------------------------------------------------------------------------------134 &namtra_ldf ! lateral diffusion scheme for tracers135 !----------------------------------------------------------------------------------136 ! ! Operator type:137 ln_traldf_lap = .true. ! laplacian operator138 ln_traldf_blp = .false. ! bilaplacian operator139 ! ! Direction of action:140 ln_traldf_lev = .false. ! iso-level141 ln_traldf_hor = .false. ! horizontal (geopotential)142 ln_traldf_iso = .true. ! iso-neutral (standard operator)143 ln_traldf_triad = .false. ! iso-neutral (triad operator)144 !145 ! ! iso-neutral options:146 ln_traldf_msc = .true. ! Method of Stabilizing Correction (both operators)147 rn_slpmax = 0.01 ! slope limit (both operators)148 ln_triad_iso = .false. ! pure horizontal mixing in ML (triad only)149 rn_sw_triad = 1 ! =1 switching triad ; =0 all 4 triads used (triad only)150 ln_botmix_triad = .false. ! lateral mixing on bottom (triad only)151 !152 ! ! Coefficients:153 nn_aht_ijk_t = 20 ! space/time variation of eddy coef154 ! ! =-20 (=-30) read in eddy_diffusivity_2D.nc (..._3D.nc) file155 ! ! = 0 constant156 ! ! = 10 F(k) =ldf_c1d157 ! ! = 20 F(i,j) =ldf_c2d158 ! ! = 21 F(i,j,t) =Treguier et al. JPO 1997 formulation159 ! ! = 30 F(i,j,k) =ldf_c2d + ldf_c1d160 ! ! = 31 F(i,j,k,t)=F(local velocity)161 rn_aht_0 = 2000. ! lateral eddy diffusivity (lap. operator) [m2/s]162 rn_bht_0 = 1.e+12 ! lateral eddy diffusivity (bilap. operator) [m4/s]163 /164 !----------------------------------------------------------------------------------165 &namtra_ldfeiv ! eddy induced velocity param.166 !----------------------------------------------------------------------------------167 ln_ldfeiv =.true. ! use eddy induced velocity parameterization168 ln_ldfeiv_dia =.true. ! diagnose eiv stream function and velocities169 rn_aeiv_0 = 2000. ! eddy induced velocity coefficient [m2/s]170 nn_aei_ijk_t = 21 ! space/time variation of the eiv coeficient171 ! ! =-20 (=-30) read in eddy_induced_velocity_2D.nc (..._3D.nc) file172 ! ! = 0 constant173 ! ! = 10 F(k) =ldf_c1d174 ! ! = 20 F(i,j) =ldf_c2d175 ! ! = 21 F(i,j,t) =Treguier et al. JPO 1997 formulation176 ! ! = 30 F(i,j,k) =ldf_c2d + ldf_c1d177 /178 !-----------------------------------------------------------------------179 &namtra_dmp ! tracer: T & S newtonian damping180 !-----------------------------------------------------------------------181 /182 !-----------------------------------------------------------------------183 &namdyn_adv ! formulation of the momentum advection184 !-----------------------------------------------------------------------185 /186 !-----------------------------------------------------------------------187 &namdyn_vor ! option of physics/algorithm (not control by CPP keys)188 !-----------------------------------------------------------------------189 ln_dynvor_ene = .false. ! enstrophy conserving scheme190 ln_dynvor_ens = .false. ! energy conserving scheme191 ln_dynvor_mix = .false. ! mixed scheme192 ln_dynvor_een = .true. ! energy & enstrophy scheme193 nn_een_e3f = 0 ! e3f = masked averaging of e3t divided by 4 (=0) or by the sum of mask (=1)194 /195 !-----------------------------------------------------------------------196 &namdyn_hpg ! Hydrostatic pressure gradient option197 !-----------------------------------------------------------------------198 /199 !-----------------------------------------------------------------------200 &namdyn_spg ! Surface pressure gradient201 !-----------------------------------------------------------------------202 ln_dynspg_ts = .true. ! Split-explicit free surface203 /204 !-----------------------------------------------------------------------205 &namdyn_ldf ! lateral diffusion on momentum206 !-----------------------------------------------------------------------207 ! ! Type of the operator :208 ! ! no diffusion: set ln_dynldf_lap=..._blp=F209 ln_dynldf_lap = .true. ! laplacian operator210 ln_dynldf_blp = .false. ! bilaplacian operator211 ! ! Direction of action :212 ln_dynldf_lev = .true. ! iso-level213 ln_dynldf_hor = .false. ! horizontal (geopotential)214 ln_dynldf_iso = .false. ! iso-neutral215 ! ! Coefficient216 nn_ahm_ijk_t = -30 ! space/time variation of eddy coef217 ! ! =-30 read in eddy_viscosity_3D.nc file218 ! ! =-20 read in eddy_viscosity_2D.nc file219 ! ! = 0 constant220 ! ! = 10 F(k)=c1d221 ! ! = 20 F(i,j)=F(grid spacing)=c2d222 ! ! = 30 F(i,j,k)=c2d*c1d223 ! ! = 31 F(i,j,k)=F(grid spacing and local velocity)224 rn_ahm_0 = 40000. ! horizontal laplacian eddy viscosity [m2/s]225 rn_ahm_b = 0. ! background eddy viscosity for ldf_iso [m2/s]226 rn_bhm_0 = 1.e+12 ! horizontal bilaplacian eddy viscosity [m4/s]227 /228 !-----------------------------------------------------------------------229 &namzdf ! vertical physics230 !-----------------------------------------------------------------------231 /232 !-----------------------------------------------------------------------233 &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke")234 !-----------------------------------------------------------------------235 /236 !-----------------------------------------------------------------------237 &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm")238 !-----------------------------------------------------------------------239 /240 !-----------------------------------------------------------------------241 &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx")242 !-----------------------------------------------------------------------243 /244 !-----------------------------------------------------------------------245 &nammpp ! Massively Parallel Processing ("key_mpp_mpi)246 !-----------------------------------------------------------------------247 /248 !-----------------------------------------------------------------------249 &namctl ! Control prints & Benchmark250 !-----------------------------------------------------------------------251 /252 !-----------------------------------------------------------------------253 &namptr ! Poleward Transport Diagnostic254 !-----------------------------------------------------------------------255 /256 !-----------------------------------------------------------------------257 &namhsb ! Heat and salt budgets258 !-----------------------------------------------------------------------259 /260 !-----------------------------------------------------------------------261 &namobs ! observation usage262 !-----------------------------------------------------------------------263 /264 !-----------------------------------------------------------------------265 &nam_asminc ! assimilation increments ('key_asminc')266 !-----------------------------------------------------------------------267 / -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/namelist_ref
r9051 r12101 1 1 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 !! namelist_ref2 !! NEMO/OCE : Reference namelist_ref !! 3 3 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4 !! NEMO/OPA : 1 - run manager (namrun) 5 !! namelists 2 - Domain (namcfg, namzgr, namzgr_sco, namdom, namtsd, namcrs, namc1d, namc1d_uvd) 6 !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core, namsbc_sas 7 !! namsbc_cpl, namtra_qsr, namsbc_rnf, 8 !! namsbc_apr, namsbc_ssr, namsbc_alb, namsbc_wave) 9 !! 4 - lateral boundary (namlbc, namagrif, nambdy, nambdy_tide) 10 !! 5 - bottom boundary (nambfr, nambbc, nambbl) 11 !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_ldfeiv, namtra_dmp) 12 !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) 13 !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_ddm, namzdf_tmx) 14 !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namhsb, namsto) 15 !! 10 - miscellaneous (nammpp, namctl) 16 !! 11 - Obs & Assim (namobs, nam_asminc) 4 !! NEMO/OCE : 1 - Domain & run manager (namrun, namcfg, namdom, namzgr, namzgr_sco ) 5 !! 2 - diagnostics (namnc4) 6 !! 3 - miscellaneous (nammpp, namctl) 17 7 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 18 19 !!======================================================================20 !! *** Run management namelists ***21 !!======================================================================22 !! namrun parameters of the run23 !!======================================================================24 !25 8 !----------------------------------------------------------------------- 26 9 &namrun ! parameters of the run 27 10 !----------------------------------------------------------------------- 28 nn_no = 0 ! job number (no more used...)11 nn_no = 0 ! Assimilation cycle index 29 12 cn_exp = "ORCA2" ! experience name 30 13 nn_it000 = 1 ! first time step 31 nn_itend = 5 475 ! last time step (std 5475)14 nn_itend = 5840 ! last time step (std 5840) 32 15 nn_date0 = 010101 ! date at nit_0000 (format yyyymmdd) used if ln_rstart=F or (ln_rstart=T and nn_rstctl=0 or 1) 33 16 nn_time0 = 0 ! initial time of day in hhmm 34 17 nn_leapy = 0 ! Leap year calendar (1) or not (0) 35 18 ln_rstart = .false. ! start from rest (F) or from a restart file (T) 36 nn_euler = 1 37 nn_rstctl = 0 38 ! 39 ! 40 ! 19 nn_euler = 1 ! = 0 : start with forward time step if ln_rstart=T 20 nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T 21 ! ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist 22 ! ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart 23 ! ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart 41 24 cn_ocerst_in = "restart" ! suffix of ocean restart name (input) 42 25 cn_ocerst_indir = "." ! directory from which to read input ocean restarts 43 26 cn_ocerst_out = "restart" ! suffix of ocean restart name (output) 44 cn_ocerst_outdir = "." ! directory in which to write output ocean restarts27 cn_ocerst_outdir = "." ! directory in which to write output ocean restarts 45 28 ln_iscpl = .false. ! cavity evolution forcing or coupling to ice sheet model 46 29 nn_istate = 0 ! output the initial state (1) or not (0) 47 30 ln_rst_list = .false. ! output restarts at list of times using nn_stocklist (T) or at set frequency with nn_stock (F) 48 nn_stock = 5 475! frequency of creation of a restart file (modulo referenced to 1)31 nn_stock = 5840 ! frequency of creation of a restart file (modulo referenced to 1) 49 32 nn_stocklist = 0,0,0,0,0,0,0,0,0,0 ! List of timesteps when a restart file is to be written 50 33 nn_write = 5475 ! frequency of write in the output file (modulo referenced to nn_it000) … … 54 37 nn_chunksz = 0 ! chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 55 38 / 56 !57 !!======================================================================58 !! *** Domain namelists ***59 !!======================================================================60 !! namcfg parameters of the configuration61 !! namzgr vertical coordinate (default: NO selection)62 !! namzgr_sco s-coordinate or hybrid z-s-coordinate63 !! namdom space and time domain (bathymetry, mesh, timestep)64 !! namwad Wetting and drying (default F)65 !! namtsd data: temperature & salinity66 !! namcrs coarsened grid (for outputs and/or TOP) ("key_crs")67 !! namc1d 1D configuration options ("key_c1d")68 !! namc1d_dyndmp 1D newtonian damping applied on currents ("key_c1d")69 !! namc1d_uvd 1D data (currents) ("key_c1d")70 !!======================================================================71 !72 !-----------------------------------------------------------------------73 &namcfg ! parameters of the configuration74 !-----------------------------------------------------------------------75 !76 ln_e3_dep = .true. ! =T : e3=dk[depth] in discret sens.77 ! ! ===>>> will become the only possibility in v4.078 ! ! =F : e3 analytical derivative of depth function79 ! ! only there for backward compatibility test with v3.680 !81 cp_cfg = "default" ! name of the configuration82 cp_cfz = "no zoom" ! name of the zoom of configuration83 jp_cfg = 0 ! resolution of the configuration84 jpidta = 10 ! 1st lateral dimension ( >= jpi )85 jpjdta = 12 ! 2nd " " ( >= jpj )86 jpkdta = 31 ! number of levels ( >= jpk )87 jpiglo = 10 ! 1st dimension of global domain --> i =jpidta88 jpjglo = 12 ! 2nd - - --> j =jpjdta89 jpizoom = 1 ! left bottom (i,j) indices of the zoom90 jpjzoom = 1 ! in data domain indices91 jperio = 0 ! lateral cond. type (between 0 and 6)92 ! = 0 closed ; = 1 cyclic East-West93 ! = 2 equatorial symmetric ; = 3 North fold T-point pivot94 ! = 4 cyclic East-West AND North fold T-point pivot95 ! = 5 North fold F-point pivot96 ! = 6 cyclic East-West AND North fold F-point pivot97 ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present98 ! in netcdf input files, as the start j-row for reading99 /100 !-----------------------------------------------------------------------101 &namzgr ! vertical coordinate (default: NO selection)102 !-----------------------------------------------------------------------103 ln_zco = .false. ! z-coordinate - full steps104 ln_zps = .false. ! z-coordinate - partial steps105 ln_sco = .false. ! s- or hybrid z-s-coordinate106 ln_isfcav = .false. ! ice shelf cavity107 ln_linssh = .false. ! linear free surface108 /109 !-----------------------------------------------------------------------110 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default F)111 !-----------------------------------------------------------------------112 ln_s_sh94 = .false. ! Song & Haidvogel 1994 hybrid S-sigma (T)|113 ln_s_sf12 = .false. ! Siddorn & Furner 2012 hybrid S-z-sigma (T)| if both are false the NEMO tanh stretching is applied114 ln_sigcrit = .false. ! use sigma coordinates below critical depth (T) or Z coordinates (F) for Siddorn & Furner stretch115 ! stretching coefficients for all functions116 rn_sbot_min = 10.0 ! minimum depth of s-bottom surface (>0) (m)117 rn_sbot_max = 7000.0 ! maximum depth of s-bottom surface (= ocean depth) (>0) (m)118 rn_hc = 150.0 ! critical depth for transition to stretched coordinates119 !!!!!!! Envelop bathymetry120 rn_rmax = 0.3 ! maximum cut-off r-value allowed (0<r_max<1)121 !!!!!!! SH94 stretching coefficients (ln_s_sh94 = .true.)122 rn_theta = 6.0 ! surface control parameter (0<=theta<=20)123 rn_bb = 0.8 ! stretching with SH94 s-sigma124 !!!!!!! SF12 stretching coefficient (ln_s_sf12 = .true.)125 rn_alpha = 4.4 ! stretching with SF12 s-sigma126 rn_efold = 0.0 ! efold length scale for transition to stretched coord127 rn_zs = 1.0 ! depth of surface grid box128 ! bottom cell depth (Zb) is a linear function of water depth Zb = H*a + b129 rn_zb_a = 0.024 ! bathymetry scaling factor for calculating Zb130 rn_zb_b = -0.2 ! offset for calculating Zb131 !!!!!!!! Other stretching (not SH94 or SF12) [also uses rn_theta above]132 rn_thetb = 1.0 ! bottom control parameter (0<=thetb<= 1)133 /134 39 !----------------------------------------------------------------------- 135 40 &namdom ! space and time domain (bathymetry, mesh, timestep) … … 137 42 nn_bathy = 1 ! compute (=0) or read (=1) the bathymetry file 138 43 rn_bathy = 0. ! value of the bathymetry. if (=0) bottom flat at jpkm1 139 nn_closea = 0 ! remove (=0) or keep (=1) closed seas and lakes (ORCA) 140 nn_msh = 1 ! create (=1) a mesh file or not (=0) 44 nn_msh = 0 ! create (=1) a mesh file or not (=0) 141 45 rn_hmin = -3. ! min depth of the ocean (>0) or min number of ocean level (<0) 142 rn_isfhmin = 1.00 ! treshold (m) to discriminate grounding ice to floating ice143 46 rn_e3zps_min= 20. ! partial step thickness is set larger than the minimum of 144 47 rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0<rn_e3zps_rat<1 … … 172 75 / 173 76 !----------------------------------------------------------------------- 174 &namwad ! Wetting and drying (default F) 175 !----------------------------------------------------------------------- 176 ln_wd = .false. ! T/F activation of wetting and drying 177 rn_wdmin1 = 0.1 ! Minimum wet depth on dried cells 178 rn_wdmin2 = 0.01 ! Tolerance of min wet depth on dried cells 179 rn_wdld = 20.0 ! Land elevation below which wetting/drying is allowed 180 nn_wdit = 10 ! Max iterations for W/D limiter 181 / 182 !----------------------------------------------------------------------- 183 &namtsd ! data : Temperature & Salinity 184 !----------------------------------------------------------------------- 185 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 186 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 187 sn_tem = 'data_1m_potential_temperature_nomask', -1 ,'votemper', .true. , .true. , 'yearly' , '' , '' , '' 188 sn_sal = 'data_1m_salinity_nomask' , -1 ,'vosaline', .true. , .true. , 'yearly' , '' , '' , '' 189 ! 190 cn_dir = './' ! root directory for the location of the runoff files 191 ln_tsd_init = .true. ! Initialisation of ocean T & S with T & S input data (T) or not (F) 192 ln_tsd_tradmp = .true. ! damping of ocean T & S toward T & S input data (T) or not (F) 193 / 194 !----------------------------------------------------------------------- 195 &namcrs ! coarsened grid (for outputs and/or TOP) ("key_crs") 196 !----------------------------------------------------------------------- 197 nn_factx = 3 ! Reduction factor of x-direction 198 nn_facty = 3 ! Reduction factor of y-direction 199 nn_binref = 0 ! Bin centering preference: NORTH or EQUAT 200 ! 0, coarse grid is binned with preferential treatment of the north fold 201 ! 1, coarse grid is binned with centering at the equator 202 ! Symmetry with nn_facty being odd-numbered. Asymmetry with even-numbered nn_facty. 203 nn_msh_crs = 1 ! create (=1) a mesh file or not (=0) 204 nn_crs_kz = 0 ! 0, MEAN of volume boxes 205 ! 1, MAX of boxes 206 ! 2, MIN of boxes 207 ln_crs_wn = .true. ! wn coarsened (T) or computed using horizontal divergence ( F ) 208 / 209 !----------------------------------------------------------------------- 210 &namc1d ! 1D configuration options ("key_c1d") 211 !----------------------------------------------------------------------- 212 rn_lat1d = 50 ! Column latitude (default at PAPA station) 213 rn_lon1d = -145 ! Column longitude (default at PAPA station) 214 ln_c1d_locpt= .true. ! Localization of 1D config in a grid (T) or independant point (F) 215 / 216 !----------------------------------------------------------------------- 217 &namc1d_dyndmp ! U & V newtonian damping ("key_c1d") 218 !----------------------------------------------------------------------- 219 ln_dyndmp = .false. ! add a damping term (T) or not (F) 220 / 221 !----------------------------------------------------------------------- 222 &namc1d_uvd ! data: U & V currents ("key_c1d") 223 !----------------------------------------------------------------------- 224 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 225 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 226 sn_ucur = 'ucurrent' , -1 ,'u_current', .false. , .true. , 'monthly' , '' , 'Ume' , '' 227 sn_vcur = 'vcurrent' , -1 ,'v_current', .false. , .true. , 'monthly' , '' , 'Vme' , '' 228 ! 229 cn_dir = './' ! root directory for the location of the files 230 ln_uvd_init = .false. ! Initialisation of ocean U & V with U & V input data (T) or not (F) 231 ln_uvd_dyndmp = .false. ! damping of ocean U & V toward U & V input data (T) or not (F) 232 / 233 234 !!====================================================================== 235 !! *** Surface Boundary Condition namelists *** 236 !!====================================================================== 237 !! namsbc surface boundary condition 238 !! namsbc_ana analytical formulation (ln_ana =T) 239 !! namsbc_flx flux formulation (ln_flx =T) 240 !! namsbc_clio CLIO bulk formulae formulation (ln_blk_clio=T) 241 !! namsbc_core CORE bulk formulae formulation (ln_blk_core=T) 242 !! namsbc_mfs MFS bulk formulae formulation (ln_blk_mfs =T) 243 !! namsbc_cpl CouPLed formulation ("key_oasis3" ) 244 !! namsbc_sas StAndalone Surface module 245 !! namtra_qsr penetrative solar radiation (ln_traqsr =T) 246 !! namsbc_rnf river runoffs (ln_rnf =T) 247 !! namsbc_isf ice shelf melting/freezing (nn_isf >0) 248 !! namsbc_iscpl coupling option between land ice model and ocean 249 !! namsbc_apr Atmospheric Pressure (ln_apr_dyn =T) 250 !! namsbc_ssr sea surface restoring term (for T and/or S) (ln_ssr =T) 251 !! namsbc_alb albedo parameters 252 !! namsbc_wave external fields from wave model (ln_wave =T) 253 !! namberg iceberg floats (ln_icebergs=T) 254 !!====================================================================== 255 ! 256 !----------------------------------------------------------------------- 257 &namsbc ! Surface Boundary Condition (surface module) 258 !----------------------------------------------------------------------- 259 nn_fsbc = 5 ! frequency of surface boundary condition computation 260 ! (also = the frequency of sea-ice & iceberg model call) 261 ! Type of air-sea fluxes 262 ln_ana = .false. ! analytical formulation (T => fill namsbc_ana ) 263 ln_flx = .false. ! flux formulation (T => fill namsbc_flx ) 264 ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) 265 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 266 ln_blk_mfs = .false. ! MFS bulk formulation (T => fill namsbc_mfs ) 267 ! Type of coupling (Ocean/Ice/Atmosphere) : 268 ln_cpl = .false. ! atmosphere coupled formulation ( requires key_oasis3 ) 269 ln_mixcpl = .false. ! forced-coupled mixed formulation ( requires key_oasis3 ) 270 nn_components = 0 ! configuration of the opa-sas OASIS coupling 271 ! =0 no opa-sas OASIS coupling: default single executable configuration 272 ! =1 opa-sas OASIS coupling: multi executable configuration, OPA component 273 ! =2 opa-sas OASIS coupling: multi executable configuration, SAS component 274 nn_limflx = -1 ! LIM3 Multi-category heat flux formulation (use -1 if LIM3 is not used) 275 ! =-1 Use per-category fluxes, bypass redistributor, forced mode only, not yet implemented coupled 276 ! = 0 Average per-category fluxes (forced and coupled mode) 277 ! = 1 Average and redistribute per-category fluxes, forced mode only, not yet implemented coupled 278 ! = 2 Redistribute a single flux over categories (coupled mode only) 279 ! Sea-ice : 280 nn_ice = 2 ! =0 no ice boundary condition , 281 ! =1 use observed ice-cover , 282 ! =2 ice-model used ("key_lim3", "key_lim2", "key_cice") 283 nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) 284 ! =1 levitating ice with mass and salt exchange but no presure effect 285 ! =2 embedded sea-ice (full salt and mass exchanges and pressure) 286 ! Misc. options of sbc : 287 ln_traqsr = .true. ! Light penetration in the ocean (T => fill namtra_qsr ) 288 ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave 289 ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) 290 ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) 291 nn_fwb = 2 ! FreshWater Budget: =0 unchecked 292 ! =1 global mean of e-p-r set to zero at each time step 293 ! =2 annual global mean of e-p-r set to zero 294 ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) 295 ln_isf = .false. ! ice shelf (T => fill namsbc_isf) 296 ln_wave = .false. ! coupling with surface wave (T => fill namsbc_wave) 297 nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , 298 ! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) 299 / 300 !----------------------------------------------------------------------- 301 &namsbc_ana ! analytical surface boundary condition 302 !----------------------------------------------------------------------- 303 nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps 304 rn_utau0 = 0.5 ! uniform value for the i-stress 305 rn_vtau0 = 0.e0 ! uniform value for the j-stress 306 rn_qns0 = 0.e0 ! uniform value for the total heat flux 307 rn_qsr0 = 0.e0 ! uniform value for the solar radiation 308 rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) 309 / 310 !----------------------------------------------------------------------- 311 &namsbc_flx ! surface boundary condition : flux formulation 312 !----------------------------------------------------------------------- 313 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 314 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 315 sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'yearly' , '' , '' , '' 316 sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'yearly' , '' , '' , '' 317 sn_qtot = 'qtot' , 24 , 'qtot' , .false. , .false., 'yearly' , '' , '' , '' 318 sn_qsr = 'qsr' , 24 , 'qsr' , .false. , .false., 'yearly' , '' , '' , '' 319 sn_emp = 'emp' , 24 , 'emp' , .false. , .false., 'yearly' , '' , '' , '' 320 321 cn_dir = './' ! root directory for the location of the flux files 322 / 323 !----------------------------------------------------------------------- 324 &namsbc_clio ! namsbc_clio CLIO bulk formulae 325 !----------------------------------------------------------------------- 326 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 327 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 328 sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' , '' 329 sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' , '' 330 sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' , '' 331 sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' , '' 332 sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' , '' 333 sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' , '' 334 sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' , '' 335 336 cn_dir = './' ! root directory for the location of the bulk files are 337 / 338 !----------------------------------------------------------------------- 339 &namsbc_core ! namsbc_core CORE bulk formulae 340 !----------------------------------------------------------------------- 341 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 342 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 343 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Uwnd' , '' 344 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Vwnd' , '' 345 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 346 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 347 sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 348 sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 349 sn_prec = 'ncar_precip.15JUNE2009_fill', -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 350 sn_snow = 'ncar_precip.15JUNE2009_fill', -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 351 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 352 353 cn_dir = './' ! root directory for the location of the bulk files 354 ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data 355 rn_zqt = 10. ! Air temperature and humidity reference height (m) 356 rn_zu = 10. ! Wind vector reference height (m) 357 rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) 358 rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) 359 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 360 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 361 / 362 !----------------------------------------------------------------------- 363 &namsbc_mfs ! namsbc_mfs MFS bulk formulae 364 !----------------------------------------------------------------------- 365 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 366 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 367 sn_wndi = 'ecmwf' , 6 , 'u10' , .true. , .false., 'daily' ,'bicubic.nc' , '' , '' 368 sn_wndj = 'ecmwf' , 6 , 'v10' , .true. , .false., 'daily' ,'bicubic.nc' , '' , '' 369 sn_clc = 'ecmwf' , 6 , 'clc' , .true. , .false., 'daily' ,'bilinear.nc', '' , '' 370 sn_msl = 'ecmwf' , 6 , 'msl' , .true. , .false., 'daily' ,'bicubic.nc' , '' , '' 371 sn_tair = 'ecmwf' , 6 , 't2' , .true. , .false., 'daily' ,'bicubic.nc' , '' , '' 372 sn_rhm = 'ecmwf' , 6 , 'rh' , .true. , .false., 'daily' ,'bilinear.nc', '' , '' 373 sn_prec = 'ecmwf' , 6 , 'precip' , .true. , .true. , 'daily' ,'bicubic.nc' , '' , '' 374 375 cn_dir = './ECMWF/' ! root directory for the location of the bulk files 376 / 377 !----------------------------------------------------------------------- 378 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") 379 !----------------------------------------------------------------------- 380 ! ! description ! multiple ! vector ! vector ! vector ! 381 ! ! ! categories ! reference ! orientation ! grids ! 382 ! send 383 sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' 384 sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' 385 sn_snd_thick = 'none' , 'no' , '' , '' , '' 386 sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' 387 sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' 388 ! receive 389 sn_rcv_w10m = 'none' , 'no' , '' , '' , '' 390 sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' 391 sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' 392 sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' 393 sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' 394 sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' 395 sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' 396 sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' 397 sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' 398 sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' 399 ! 400 nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 401 ln_usecplmask = .false. ! use a coupling mask file to merge data received from several models 402 ! ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) 403 / 404 !----------------------------------------------------------------------- 405 &namsbc_sas ! analytical surface boundary condition 406 !----------------------------------------------------------------------- 407 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 408 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 409 sn_usp = 'sas_grid_U', 120 , 'vozocrtx', .true. , .true. , 'yearly' , '' , '' , '' 410 sn_vsp = 'sas_grid_V', 120 , 'vomecrty', .true. , .true. , 'yearly' , '' , '' , '' 411 sn_tem = 'sas_grid_T', 120 , 'sosstsst', .true. , .true. , 'yearly' , '' , '' , '' 412 sn_sal = 'sas_grid_T', 120 , 'sosaline', .true. , .true. , 'yearly' , '' , '' , '' 413 sn_ssh = 'sas_grid_T', 120 , 'sossheig', .true. , .true. , 'yearly' , '' , '' , '' 414 sn_e3t = 'sas_grid_T', 120 , 'e3t_m' , .true. , .true. , 'yearly' , '' , '' , '' 415 sn_frq = 'sas_grid_T', 120 , 'frq_m' , .true. , .true. , 'yearly' , '' , '' , '' 416 417 ln_3d_uve = .true. ! specify whether we are supplying a 3D u,v and e3 field 418 ln_read_frq = .false. ! specify whether we must read frq or not 419 cn_dir = './' ! root directory for the location of the bulk files are 420 / 421 !----------------------------------------------------------------------- 422 &namtra_qsr ! penetrative solar radiation (ln_traqsr=T) 423 !----------------------------------------------------------------------- 424 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 425 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 426 sn_chl ='chlorophyll', -1 , 'CHLA' , .true. , .true. , 'yearly' , '' , '' , '' 427 428 cn_dir = './' ! root directory for the location of the runoff files 429 ln_qsr_rgb = .true. ! RGB (Red-Green-Blue) light penetration 430 ln_qsr_2bd = .false. ! 2 bands light penetration 431 ln_qsr_bio = .false. ! bio-model light penetration 432 nn_chldta = 1 ! RGB : Chl data (=1) or cst value (=0) 433 rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) 434 rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction 435 rn_si1 = 23.0 ! 2 bands: longest depth of extinction 436 ln_qsr_ice = .true. ! light penetration for ice-model LIM3 437 / 438 !----------------------------------------------------------------------- 439 &namsbc_rnf ! runoffs namelist surface boundary condition (ln_rnf=T) 440 !----------------------------------------------------------------------- 441 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 442 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 443 sn_rnf = 'runoff_core_monthly', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' , '' 444 sn_cnf = 'runoff_core_monthly', 0 , 'socoefr0', .false. , .true. , 'yearly' , '' , '' , '' 445 sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' , '' 446 sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' , '' 447 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' , '' 448 449 cn_dir = './' ! root directory for the location of the runoff files 450 ln_rnf_mouth= .true. ! specific treatment at rivers mouths 451 rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used (ln_rnf_mouth=T) 452 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] (ln_rnf_mouth=T) 453 rn_rfact = 1.e0 ! multiplicative factor for runoff 454 ln_rnf_depth= .false. ! read in depth information for runoff 455 ln_rnf_tem = .false. ! read in temperature information for runoff 456 ln_rnf_sal = .false. ! read in salinity information for runoff 457 ln_rnf_depth_ini = .false. ! compute depth at initialisation from runoff file 458 rn_rnf_max = 5.735e-4 ! max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true ) 459 rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 460 nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0) 461 / 462 !----------------------------------------------------------------------- 463 &namsbc_isf ! Top boundary layer (ISF) (nn_isf >0) 464 !----------------------------------------------------------------------- 465 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 466 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 467 ! nn_isf == 4 468 sn_fwfisf = 'rnfisf' , -12 ,'sowflisf', .false. , .true. , 'yearly' , '' , '' , '' 469 ! nn_isf == 3 470 sn_rnfisf = 'rnfisf' , -12 ,'sofwfisf', .false. , .true. , 'yearly' , '' , '' , '' 471 ! nn_isf == 2 and 3 472 sn_depmax_isf='rnfisf' , -12 ,'sozisfmax', .false. , .true. , 'yearly' , '' , '' , '' 473 sn_depmin_isf='rnfisf' , -12 ,'sozisfmin', .false. , .true. , 'yearly' , '' , '' , '' 474 ! nn_isf == 2 475 sn_Leff_isf = 'rnfisf' , -12 ,'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 476 ! 477 ! for all case 478 nn_isf = 1 ! ice shelf melting/freezing 479 ! 1 = presence of ISF 2 = bg03 parametrisation 480 ! 3 = rnf file for isf 4 = ISF fwf specified 481 ! option 1 and 4 need ln_isfcav = .true. (domzgr) 482 ! only for nn_isf = 1 or 2 483 rn_gammat0 = 1.e-4 ! gammat coefficient used in blk formula 484 rn_gammas0 = 1.e-4 ! gammas coefficient used in blk formula 485 ! only for nn_isf = 1 or 4 486 rn_hisf_tbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) 487 ! ! 0 => thickness of the tbl = thickness of the first wet cell 488 ! only for nn_isf = 1 489 nn_isfblk = 1 ! 1 ISOMIP like: 2 equations formulation (Hunter et al., 2006) 490 ! ! 2 ISOMIP+ like: 3 equations formulation (Asay-Davis et al., 2015) 491 nn_gammablk = 1 ! 0 = cst Gammat (= gammat/s) 492 ! ! 1 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) 493 ! ! 2 = velocity and stability dependent Gamma (Holland et al. 1999) 494 / 495 !----------------------------------------------------------------------- 496 &namsbc_iscpl ! land ice / ocean coupling option 497 !----------------------------------------------------------------------- 498 nn_drown = 10 ! number of iteration of the extrapolation loop (fill the new wet cells) 499 ln_hsb = .false. ! activate conservation module (conservation exact after a time of rn_fiscpl) 500 nn_fiscpl = 43800 ! (number of time step) conservation period (maybe should be fix to the coupling frequencey of restart frequency) 501 / 502 !----------------------------------------------------------------------- 503 &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk 504 !----------------------------------------------------------------------- 505 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 506 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 507 sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' , '' 508 509 cn_dir = './' ! root directory for the location of the bulk files 510 rn_pref = 101000. ! reference atmospheric pressure [N/m2]/ 511 ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) 512 ln_apr_obc = .false. ! inverse barometer added to OBC ssh data 513 / 514 !----------------------------------------------------------------------- 515 &namsbc_ssr ! surface boundary condition : sea surface restoring (ln_ssr=T) 516 !----------------------------------------------------------------------- 517 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 518 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 519 sn_sst = 'sst_data', 24 , 'sst' , .false. , .false., 'yearly' , '' , '' , '' 520 sn_sss = 'sss_data', -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' , '' 521 522 cn_dir = './' ! root directory for the location of the runoff files 523 nn_sstr = 0 ! add a retroaction term in the surface heat flux (=1) or not (=0) 524 nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) 525 ! or to SSS only (=1) or no damping term (=0) 526 rn_dqdt = -40. ! magnitude of the retroaction on temperature [W/m2/K] 527 rn_deds = -166.67 ! magnitude of the damping on salinity [mm/day] 528 ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) 529 rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] 530 / 531 !----------------------------------------------------------------------- 532 &namsbc_alb ! albedo parameters 533 !----------------------------------------------------------------------- 534 nn_ice_alb = 0 ! parameterization of ice/snow albedo 535 ! 0: Shine & Henderson-Sellers (JGR 1985) 536 ! 1: "home made" based on Brandt et al. (J. Climate 2005) 537 ! and Grenfell & Perovich (JGR 2004) 538 rn_albice = 0.53 ! albedo of bare puddled ice (values from 0.49 to 0.58) 539 ! 0.53 (default) => if nn_ice_alb=0 540 ! 0.50 (default) => if nn_ice_alb=1 541 / 542 !----------------------------------------------------------------------- 543 &namsbc_wave ! External fields from wave model (ln_wave=T) 544 !----------------------------------------------------------------------- 545 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 546 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 547 sn_cdg = 'cdg_wave', 1 , 'drag_coeff', .true. , .false., 'daily' , '' , '' , '' 548 sn_usd = 'sdw_wave', 1 , 'u_sd2d' , .true. , .false., 'daily' , '' , '' , '' 549 sn_vsd = 'sdw_wave', 1 , 'v_sd2d' , .true. , .false., 'daily' , '' , '' , '' 550 sn_wn = 'sdw_wave', 1 , 'wave_num' , .true. , .false., 'daily' , '' , '' , '' 551 ! 552 cn_dir_cdg = './' ! root directory for the location of drag coefficient files 553 ln_cdgw = .false. ! Neutral drag coefficient read from wave model 554 ln_sdw = .false. ! Computation of 3D stokes drift 555 / 556 !----------------------------------------------------------------------- 557 &namberg ! iceberg parameters (default: No iceberg) 558 !----------------------------------------------------------------------- 559 ln_icebergs = .false. ! iceberg floats or not 560 ln_bergdia = .true. ! Calculate budgets 561 nn_verbose_level = 1 ! Turn on more verbose output if level > 0 562 nn_verbose_write = 15 ! Timesteps between verbose messages 563 nn_sample_rate = 1 ! Timesteps between sampling for trajectory storage 564 ! Initial mass required for an iceberg of each class 565 rn_initial_mass = 8.8e7, 4.1e8, 3.3e9, 1.8e10, 3.8e10, 7.5e10, 1.2e11, 2.2e11, 3.9e11, 7.4e11 566 ! Proportion of calving mass to apportion to each class 567 rn_distribution = 0.24, 0.12, 0.15, 0.18, 0.12, 0.07, 0.03, 0.03, 0.03, 0.02 568 ! Ratio between effective and real iceberg mass (non-dim) 569 ! i.e. number of icebergs represented at a point 570 rn_mass_scaling = 2000, 200, 50, 20, 10, 5, 2, 1, 1, 1 571 ! thickness of newly calved bergs (m) 572 rn_initial_thickness = 40., 67., 133., 175., 250., 250., 250., 250., 250., 250. 573 rn_rho_bergs = 850. ! Density of icebergs 574 rn_LoW_ratio = 1.5 ! Initial ratio L/W for newly calved icebergs 575 ln_operator_splitting = .true. ! Use first order operator splitting for thermodynamics 576 rn_bits_erosion_fraction = 0. ! Fraction of erosion melt flux to divert to bergy bits 577 rn_sicn_shift = 0. ! Shift of sea-ice concn in erosion flux (0<sicn_shift<1) 578 ln_passive_mode = .false. ! iceberg - ocean decoupling 579 nn_test_icebergs = 10 ! Create test icebergs of this class (-1 = no) 580 ! Put a test iceberg at each gridpoint in box (lon1,lon2,lat1,lat2) 581 rn_test_box = 108.0, 116.0, -66.0, -58.0 582 rn_speed_limit = 0. ! CFL speed limit for a berg 583 584 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 585 ! ! ! (if <0 months) ! name ! (logical) ! (T/F ) ! 'monthly' ! filename ! pairing ! filename ! 586 sn_icb = 'calving', -1 , 'calvingmask', .true. , .true. , 'yearly' , '' , '' , '' 587 588 cn_dir = './' 589 / 590 591 !!====================================================================== 592 !! *** Lateral boundary condition *** 593 !!====================================================================== 594 !! namlbc lateral momentum boundary condition 595 !! namagrif agrif nested grid ( read by child model only ) ("key_agrif") 596 !! nam_tide Tidal forcing 597 !! nambdy Unstructured open boundaries ("key_bdy") 598 !! nambdy_dta Unstructured open boundaries - external data ("key_bdy") 599 !! nambdy_tide tidal forcing at open boundaries ("key_bdy_tides") 600 !!====================================================================== 601 ! 602 !----------------------------------------------------------------------- 603 &namlbc ! lateral momentum boundary condition 77 &namcfg ! parameters of the configuration 78 !----------------------------------------------------------------------- 79 ! 80 ln_e3_dep = .true. ! =T : e3=dk[depth] in discret sens. 81 ! ! ===>>> will become the only possibility in v4.0 82 ! ! =F : e3 analytical derivative of depth function 83 ! ! only there for backward compatibility test with v3.6 84 ! 85 cp_cfg = "default" ! name of the configuration 86 cp_cfz = "no zoom" ! name of the zoom of configuration 87 jp_cfg = 0 ! resolution of the configuration 88 jpkdta = 31 ! number of levels ( >= jpk ) 89 jpiglo = 10 ! 1st dimension of global domain --> i =jpidta 90 jpjglo = 12 ! 2nd - - --> j =jpjdta 91 jperio = 0 ! lateral cond. type (between 0 and 6) 92 ! = 0 closed ; = 1 cyclic East-West 93 ! = 2 equatorial symmetric ; = 3 North fold T-point pivot 94 ! = 4 cyclic East-West AND North fold T-point pivot 95 ! = 5 North fold F-point pivot 96 ! = 6 cyclic East-West AND North fold F-point pivot 97 ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present 98 ! in netcdf input files, as the start j-row for reading 99 ln_domclo = .false. ! computation of closed sea masks (see namclo) 100 / 101 !----------------------------------------------------------------------- 102 &namzgr ! vertical coordinate (default: NO selection) 103 !----------------------------------------------------------------------- 104 ln_zco = .false. ! z-coordinate - full steps 105 ln_zps = .false. ! z-coordinate - partial steps 106 ln_sco = .false. ! s- or hybrid z-s-coordinate 107 ln_isfcav = .false. ! ice shelf cavity (T: see namzgr_isf) 108 ln_linssh = .false. ! linear free surface 109 / 110 !----------------------------------------------------------------------- 111 &namzgr_isf ! isf cavity geometry definition (default: OFF) 112 !----------------------------------------------------------------------- 113 rn_isfdep_min = 10. ! minimum isf draft tickness (if lower, isf draft set to this value) 114 rn_glhw_min = 1.e-3 ! minimum water column thickness to define the grounding line 115 rn_isfhw_min = 10 ! minimum water column thickness in the cavity once the grounding line defined. 116 ln_isfchannel = .false. ! remove channel (based on 2d mask build from isfdraft-bathy) 117 ln_isfconnect = .false. ! force connection under the ice shelf (based on 2d mask build from isfdraft-bathy) 118 nn_kisfmax = 999 ! limiter in level on the previous condition. (if change larger than this number, get back to value before we enforce the connection) 119 rn_zisfmax = 7000. ! limiter in m on the previous condition. (if change larger than this number, get back to value before we enforce the connection) 120 ln_isfcheminey = .false. ! close cheminey 121 ln_isfsubgl = .false. ! remove subglacial lake created by the remapping process 122 rn_isfsubgllon = 0.0 ! longitude of the seed to determine the open ocean 123 rn_isfsubgllat = 0.0 ! latitude of the seed to determine the open ocean 124 / 125 !----------------------------------------------------------------------- 126 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default: OFF) 127 !----------------------------------------------------------------------- 128 ln_s_sh94 = .false. ! Song & Haidvogel 1994 hybrid S-sigma (T)| 129 ln_s_sf12 = .false. ! Siddorn & Furner 2012 hybrid S-z-sigma (T)| if both are false the NEMO tanh stretching is applied 130 ln_sigcrit = .false. ! use sigma coordinates below critical depth (T) or Z coordinates (F) for Siddorn & Furner stretch 131 ! stretching coefficients for all functions 132 rn_sbot_min = 10.0 ! minimum depth of s-bottom surface (>0) (m) 133 rn_sbot_max = 7000.0 ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) 134 rn_hc = 150.0 ! critical depth for transition to stretched coordinates 135 !!!!!!! Envelop bathymetry 136 rn_rmax = 0.3 ! maximum cut-off r-value allowed (0<r_max<1) 137 !!!!!!! SH94 stretching coefficients (ln_s_sh94 = .true.) 138 rn_theta = 6.0 ! surface control parameter (0<=theta<=20) 139 rn_bb = 0.8 ! stretching with SH94 s-sigma 140 !!!!!!! SF12 stretching coefficient (ln_s_sf12 = .true.) 141 rn_alpha = 4.4 ! stretching with SF12 s-sigma 142 rn_efold = 0.0 ! efold length scale for transition to stretched coord 143 rn_zs = 1.0 ! depth of surface grid box 144 ! bottom cell depth (Zb) is a linear function of water depth Zb = H*a + b 145 rn_zb_a = 0.024 ! bathymetry scaling factor for calculating Zb 146 rn_zb_b = -0.2 ! offset for calculating Zb 147 !!!!!!!! Other stretching (not SH94 or SF12) [also uses rn_theta above] 148 rn_thetb = 1.0 ! bottom control parameter (0<=thetb<= 1) 149 / 150 !----------------------------------------------------------------------- 151 &namclo ! (closed sea : need ln_domclo = .true. in namcfg) (default: OFF) 152 !----------------------------------------------------------------------- 153 rn_lon_opnsea = 0.0 ! longitude seed of open ocean 154 rn_lat_opnsea = 0.0 ! latitude seed of open ocean 155 nn_closea = 8 ! number of closed seas ( = 0; only the open_sea mask will be computed) 156 ! 157 ! name ! lon_src ! lat_src ! lon_trg ! lat_trg ! river mouth area ! correction scheme ! radius trg ! id trg 158 ! ! (degree)! (degree)! (degree)! (degree)! local/coast/global ! (glo/rnf/emp) ! (m) ! 159 ! North American lakes 160 sn_lake(1) = 'superior' , -86.57 , 47.30 , -66.49 , 50.45 , 'local' , 'rnf' , 550000.0 , 2 161 sn_lake(2) = 'michigan' , -87.06 , 42.74 , -66.49 , 50.45 , 'local' , 'rnf' , 550000.0 , 2 162 sn_lake(3) = 'huron' , -82.51 , 44.74 , -66.49 , 50.45 , 'local' , 'rnf' , 550000.0 , 2 163 sn_lake(4) = 'erie' , -81.13 , 42.25 , -66.49 , 50.45 , 'local' , 'rnf' , 550000.0 , 2 164 sn_lake(5) = 'ontario' , -77.72 , 43.62 , -66.49 , 50.45 , 'local' , 'rnf' , 550000.0 , 2 165 ! African Lake 166 sn_lake(6) = 'victoria' , 32.93 , -1.08 , 30.44 , 31.37 , 'coast' , 'emp' , 100000.0 , 3 167 ! Asian Lakes 168 sn_lake(7) = 'caspian' , 50.0 , 44.0 , 0.0 , 0.0 , 'global' , 'glo' , 0.0 , 1 169 sn_lake(8) = 'aral' , 60.0 , 45.0 , 0.0 , 0.0 , 'global' , 'glo' , 0.0 , 1 170 / 171 !----------------------------------------------------------------------- 172 &namlbc ! lateral momentum boundary condition (default: NO selection) 604 173 !----------------------------------------------------------------------- 605 174 ! ! free slip ! partial slip ! no slip ! strong slip 606 rn_shlat = 2.! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat175 rn_shlat = 0 ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat 607 176 ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical Eqs. 608 177 / … … 610 179 &namagrif ! AGRIF zoom ("key_agrif") 611 180 !----------------------------------------------------------------------- 612 nn_cln_update = 3 ! baroclinic update frequency613 181 ln_spc_dyn = .true. ! use 0 as special value for dynamics 614 182 rn_sponge_tra = 2880. ! coefficient for tracer sponge layer [m2/s] 615 183 rn_sponge_dyn = 2880. ! coefficient for dynamics sponge layer [m2/s] 616 ln_chk_bathy = .FALSE. ! 617 / 618 !----------------------------------------------------------------------- 619 &nam_tide ! tide parameters ("key_tide") 620 !----------------------------------------------------------------------- 621 ln_tide_pot = .true. ! use tidal potential forcing 622 ln_tide_ramp= .false. ! 623 rdttideramp = 0. ! 624 clname(1) = 'DUMMY' ! name of constituent - all tidal components must be set in namelist_cfg 625 / 626 !----------------------------------------------------------------------- 627 &nambdy ! unstructured open boundaries ("key_bdy") 628 !----------------------------------------------------------------------- 629 nb_bdy = 0 ! number of open boundary sets 630 ln_coords_file = .true. ! =T : read bdy coordinates from file 631 cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files 632 ln_mask_file = .false. ! =T : read mask from file 633 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 634 cn_dyn2d = 'none' ! 635 nn_dyn2d_dta = 0 ! = 0, bdy data are equal to the initial state 636 ! = 1, bdy data are read in 'bdydata .nc' files 637 ! = 2, use tidal harmonic forcing data from files 638 ! = 3, use external data AND tidal harmonic forcing 639 cn_dyn3d = 'none' ! 640 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 641 ! = 1, bdy data are read in 'bdydata .nc' files 642 cn_tra = 'none' ! 643 nn_tra_dta = 0 ! = 0, bdy data are equal to the initial state 644 ! = 1, bdy data are read in 'bdydata .nc' files 645 cn_ice_lim = 'none' ! 646 nn_ice_lim_dta = 0 ! = 0, bdy data are equal to the initial state 647 ! = 1, bdy data are read in 'bdydata .nc' files 648 rn_ice_tem = 270. ! lim3 only: arbitrary temperature of incoming sea ice 649 rn_ice_sal = 10. ! lim3 only: -- salinity -- 650 rn_ice_age = 30. ! lim3 only: -- age -- 651 652 ln_tra_dmp =.false. ! open boudaries conditions for tracers 653 ln_dyn3d_dmp =.false. ! open boundary condition for baroclinic velocities 654 rn_time_dmp = 1. ! Damping time scale in days 655 rn_time_dmp_out = 1. ! Outflow damping time scale 656 nn_rimwidth = 10 ! width of the relaxation zone 657 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 658 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero 659 / 660 !----------------------------------------------------------------------- 661 &nambdy_dta ! open boundaries - external data ("key_bdy") 662 !----------------------------------------------------------------------- 663 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 664 ! ! ! (if <0 months) ! name ! (logical) ! (T/F ) ! 'monthly' ! filename ! pairing ! filename ! 665 bn_ssh = 'amm12_bdyT_u2d', 24 , 'sossheig', .true. , .false. , 'daily' , '' , '' , '' 666 bn_u2d = 'amm12_bdyU_u2d', 24 , 'vobtcrtx', .true. , .false. , 'daily' , '' , '' , '' 667 bn_v2d = 'amm12_bdyV_u2d', 24 , 'vobtcrty', .true. , .false. , 'daily' , '' , '' , '' 668 bn_u3d = 'amm12_bdyU_u3d', 24 , 'vozocrtx', .true. , .false. , 'daily' , '' , '' , '' 669 bn_v3d = 'amm12_bdyV_u3d', 24 , 'vomecrty', .true. , .false. , 'daily' , '' , '' , '' 670 bn_tem = 'amm12_bdyT_tra', 24 , 'votemper', .true. , .false. , 'daily' , '' , '' , '' 671 bn_sal = 'amm12_bdyT_tra', 24 , 'vosaline', .true. , .false. , 'daily' , '' , '' , '' 672 ! for lim2 673 ! bn_frld = 'amm12_bdyT_ice', 24 , 'ileadfra', .true. , .false. , 'daily' , '' , '' , '' 674 ! bn_hicif = 'amm12_bdyT_ice', 24 , 'iicethic', .true. , .false. , 'daily' , '' , '' , '' 675 ! bn_hsnif = 'amm12_bdyT_ice', 24 , 'isnowthi', .true. , .false. , 'daily' , '' , '' , '' 676 ! for lim3 677 ! bn_a_i = 'amm12_bdyT_ice', 24 , 'ileadfra', .true. , .false. , 'daily' , '' , '' , '' 678 ! bn_ht_i = 'amm12_bdyT_ice', 24 , 'iicethic', .true. , .false. , 'daily' , '' , '' , '' 679 ! bn_ht_s = 'amm12_bdyT_ice', 24 , 'isnowthi', .true. , .false. , 'daily' , '' , '' , '' 680 681 cn_dir = 'bdydta/' ! root directory for the location of the bulk files 682 ln_full_vel = .false. ! 683 / 684 !----------------------------------------------------------------------- 685 &nambdy_tide ! tidal forcing at open boundaries 686 !----------------------------------------------------------------------- 687 filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files 688 ln_bdytide_2ddta = .false. ! 689 ln_bdytide_conj = .false. ! 690 / 691 692 !!====================================================================== 693 !! *** Bottom boundary condition *** 694 !!====================================================================== 695 !! nambfr bottom friction 696 !! nambbc bottom temperature boundary condition 697 !! nambbl bottom boundary layer scheme ("key_trabbl") 698 !!====================================================================== 699 ! 700 !----------------------------------------------------------------------- 701 &nambfr ! bottom friction (default: linear) 702 !----------------------------------------------------------------------- 703 nn_bfr = 1 ! type of bottom friction : = 0 : free slip, = 1 : linear friction 704 ! = 2 : nonlinear friction 705 rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) 706 rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case). Minimum coeft if ln_loglayer=T 707 rn_bfri2_max= 1.e-1 ! max. bottom drag coefficient (non linear case and ln_loglayer=T) 708 rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) 709 rn_bfrz0 = 3.e-3 ! bottom roughness [m] if ln_loglayer=T 710 ln_bfr2d = .false. ! horizontal variation of the bottom friction coef (read a 2D mask file ) 711 rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) 712 rn_tfri1 = 4.e-4 ! top drag coefficient (linear case) 713 rn_tfri2 = 2.5e-3 ! top drag coefficient (non linear case). Minimum coeft if ln_loglayer=T 714 rn_tfri2_max= 1.e-1 ! max. top drag coefficient (non linear case and ln_loglayer=T) 715 rn_tfeb2 = 0.0 ! top turbulent kinetic energy background (m2/s2) 716 rn_tfrz0 = 3.e-3 ! top roughness [m] if ln_loglayer=T 717 ln_tfr2d = .false. ! horizontal variation of the top friction coef (read a 2D mask file ) 718 rn_tfrien = 50. ! local multiplying factor of tfr (ln_tfr2d=T) 719 720 ln_bfrimp = .true. ! implicit bottom friction (requires ln_zdfexp = .false. if true) 721 ln_loglayer = .false. ! logarithmic formulation (non linear case) 722 / 723 !----------------------------------------------------------------------- 724 &nambbc ! bottom temperature boundary condition (default: NO) 725 !----------------------------------------------------------------------- 726 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 727 ! ! ! (if <0 months) ! name ! (logical) ! (T/F ) ! 'monthly' ! filename ! pairing ! filename ! 728 sn_qgh ='geothermal_heating.nc', -12. , 'heatflow', .false. , .true. , 'yearly' , '' , '' , '' 729 ! 730 ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom 731 nn_geoflx = 2 ! geothermal heat flux: = 0 no flux 732 ! = 1 constant flux 733 ! = 2 variable flux (read in geothermal_heating.nc in mW/m2) 734 rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [W/m2] 735 cn_dir = './' ! root directory for the location of the runoff files 736 / 737 !----------------------------------------------------------------------- 738 &nambbl ! bottom boundary layer scheme ("key_trabbl") 739 !----------------------------------------------------------------------- 740 nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0) 741 nn_bbl_adv = 0 ! advective bbl (=1/2) or not (=0) 742 rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s] 743 rn_gambbl = 10. ! advective bbl coefficient [s] 744 / 745 746 !!====================================================================== 747 !! Tracer (T & S ) namelists 748 !!====================================================================== 749 !! nameos equation of state 750 !! namtra_adv advection scheme 751 !! namtra_adv_mle mixed layer eddy param. (Fox-Kemper param.) 752 !! namtra_ldf lateral diffusion scheme 753 !! namtra_ldfeiv eddy induced velocity param. 754 !! namtra_dmp T & S newtonian damping 755 !!====================================================================== 756 ! 757 !----------------------------------------------------------------------- 758 &nameos ! ocean physical parameters 759 !----------------------------------------------------------------------- 760 ln_teos10 = .false. ! = Use TEOS-10 equation of state 761 ln_eos80 = .false. ! = Use EOS80 equation of state 762 ln_seos = .false. ! = Use simplified equation of state (S-EOS) 763 ! 764 ! ! S-EOS coefficients (ln_seos=T): 765 ! ! rd(T,S,Z)*rau0 = -a0*(1+.5*lambda*dT+mu*Z+nu*dS)*dT+b0*dS 766 rn_a0 = 1.6550e-1 ! thermal expension coefficient (nn_eos= 1) 767 rn_b0 = 7.6554e-1 ! saline expension coefficient (nn_eos= 1) 768 rn_lambda1 = 5.9520e-2 ! cabbeling coeff in T^2 (=0 for linear eos) 769 rn_lambda2 = 7.4914e-4 ! cabbeling coeff in S^2 (=0 for linear eos) 770 rn_mu1 = 1.4970e-4 ! thermobaric coeff. in T (=0 for linear eos) 771 rn_mu2 = 1.1090e-5 ! thermobaric coeff. in S (=0 for linear eos) 772 rn_nu = 2.4341e-3 ! cabbeling coeff in T*S (=0 for linear eos) 773 / 774 !----------------------------------------------------------------------- 775 &namtra_adv ! advection scheme for tracer (default: NO advection) 776 !----------------------------------------------------------------------- 777 ln_traadv_cen = .false. ! 2nd order centered scheme 778 nn_cen_h = 4 ! =2/4, horizontal 2nd order CEN / 4th order CEN 779 nn_cen_v = 4 ! =2/4, vertical 2nd order CEN / 4th order COMPACT 780 ln_traadv_fct = .false. ! FCT scheme 781 nn_fct_h = 2 ! =2/4, horizontal 2nd / 4th order 782 nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order 783 nn_fct_zts = 0 ! >=1, 2nd order FCT scheme with vertical sub-timestepping 784 ! ! (number of sub-timestep = nn_fct_zts) 785 ln_traadv_mus = .false. ! MUSCL scheme 786 ln_mus_ups = .false. ! use upstream scheme near river mouths 787 ln_traadv_ubs = .false. ! UBS scheme 788 nn_ubs_v = 2 ! =2 , vertical 2nd order FCT / COMPACT 4th order 789 ln_traadv_qck = .false. ! QUICKEST scheme 790 / 791 !----------------------------------------------------------------------- 792 &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) (default: NO) 793 !----------------------------------------------------------------------- 794 ln_mle = .false. ! (T) use the Mixed Layer Eddy (MLE) parameterisation 795 rn_ce = 0.06 ! magnitude of the MLE (typical value: 0.06 to 0.08) 796 nn_mle = 1 ! MLE type: =0 standard Fox-Kemper ; =1 new formulation 797 rn_lf = 5.e+3 ! typical scale of mixed layer front (meters) (case rn_mle=0) 798 rn_time = 172800. ! time scale for mixing momentum across the mixed layer (seconds) (case rn_mle=0) 799 rn_lat = 20. ! reference latitude (degrees) of MLE coef. (case rn_mle=1) 800 nn_mld_uv = 0 ! space interpolation of MLD at u- & v-pts (0=min,1=averaged,2=max) 801 nn_conv = 0 ! =1 no MLE in case of convection ; =0 always MLE 802 rn_rho_c_mle= 0.01 ! delta rho criterion used to calculate MLD for FK 803 / 804 !----------------------------------------------------------------------- 805 &namtra_ldf ! lateral diffusion scheme for tracers (default: NO diffusion) 806 !----------------------------------------------------------------------- 807 ! ! Operator type: 808 ! ! no diffusion: set ln_traldf_lap=..._blp=F 809 ln_traldf_lap = .false. ! laplacian operator 810 ln_traldf_blp = .false. ! bilaplacian operator 811 ! 812 ! ! Direction of action: 813 ln_traldf_lev = .false. ! iso-level 814 ln_traldf_hor = .false. ! horizontal (geopotential) 815 ln_traldf_iso = .false. ! iso-neutral (standard operator) 816 ln_traldf_triad = .false. ! iso-neutral (triad operator) 817 ! 818 ! ! iso-neutral options: 819 ln_traldf_msc = .false. ! Method of Stabilizing Correction (both operators) 820 rn_slpmax = 0.01 ! slope limit (both operators) 821 ln_triad_iso = .false. ! pure horizontal mixing in ML (triad only) 822 rn_sw_triad = 1 ! =1 switching triad ; =0 all 4 triads used (triad only) 823 ln_botmix_triad = .false. ! lateral mixing on bottom (triad only) 824 ! 825 ! ! Coefficients: 826 nn_aht_ijk_t = 0 ! space/time variation of eddy coef 827 ! ! =-20 (=-30) read in eddy_diffusivity_2D.nc (..._3D.nc) file 828 ! ! = 0 constant 829 ! ! = 10 F(k) =ldf_c1d 830 ! ! = 20 F(i,j) =ldf_c2d 831 ! ! = 21 F(i,j,t) =Treguier et al. JPO 1997 formulation 832 ! ! = 30 F(i,j,k) =ldf_c2d * ldf_c1d 833 ! ! = 31 F(i,j,k,t)=F(local velocity and grid-spacing) 834 rn_aht_0 = 2000. ! lateral eddy diffusivity (lap. operator) [m2/s] 835 rn_bht_0 = 1.e+12 ! lateral eddy diffusivity (bilap. operator) [m4/s] 836 / 837 !----------------------------------------------------------------------- 838 &namtra_ldfeiv ! eddy induced velocity param. (default: NO) 839 !----------------------------------------------------------------------- 840 ln_ldfeiv =.false. ! use eddy induced velocity parameterization 841 ln_ldfeiv_dia =.false. ! diagnose eiv stream function and velocities 842 rn_aeiv_0 = 2000. ! eddy induced velocity coefficient [m2/s] 843 nn_aei_ijk_t = 21 ! space/time variation of the eiv coeficient 844 ! ! =-20 (=-30) read in eddy_induced_velocity_2D.nc (..._3D.nc) file 845 ! ! = 0 constant 846 ! ! = 10 F(k) =ldf_c1d 847 ! ! = 20 F(i,j) =ldf_c2d 848 ! ! = 21 F(i,j,t) =Treguier et al. JPO 1997 formulation 849 ! ! = 30 F(i,j,k) =ldf_c2d + ldf_c1d 850 / 851 !----------------------------------------------------------------------- 852 &namtra_dmp ! tracer: T & S newtonian damping (default: NO) 853 !----------------------------------------------------------------------- 854 ln_tradmp = .true. ! add a damping termn (T) or not (F) 855 nn_zdmp = 0 ! vertical shape =0 damping throughout the water column 856 ! =1 no damping in the mixing layer (kz criteria) 857 ! =2 no damping in the mixed layer (rho crieria) 858 cn_resto ='resto.nc' ! Name of file containing restoration coeff. field (use dmp_tools to create this) 859 / 860 861 !!====================================================================== 862 !! *** Dynamics namelists *** 863 !!====================================================================== 864 !! namdyn_adv formulation of the momentum advection 865 !! namdyn_vor advection scheme 866 !! namdyn_hpg hydrostatic pressure gradient 867 !! namdyn_spg surface pressure gradient 868 !! namdyn_ldf lateral diffusion scheme 869 !!====================================================================== 870 ! 871 !----------------------------------------------------------------------- 872 &namdyn_adv ! formulation of the momentum advection (default: vector form) 873 !----------------------------------------------------------------------- 874 ln_dynadv_vec = .true. ! vector form (T) or flux form (F) 875 nn_dynkeg = 0 ! scheme for grad(KE): =0 C2 ; =1 Hollingsworth correction 876 ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme 877 ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme 878 ln_dynzad_zts = .false. ! Use (T) sub timestepping for vertical momentum advection 879 / 880 !----------------------------------------------------------------------- 881 &nam_vvl ! vertical coordinate options (default: zstar) 882 !----------------------------------------------------------------------- 883 ln_vvl_zstar = .true. ! zstar vertical coordinate 884 ln_vvl_ztilde = .false. ! ztilde vertical coordinate: only high frequency variations 885 ln_vvl_layer = .false. ! full layer vertical coordinate 886 ln_vvl_ztilde_as_zstar = .false. ! ztilde vertical coordinate emulating zstar 887 ln_vvl_zstar_at_eqtor = .false. ! ztilde near the equator 888 rn_ahe3 = 0.0e0 ! thickness diffusion coefficient 889 rn_rst_e3t = 30.e0 ! ztilde to zstar restoration timescale [days] 890 rn_lf_cutoff = 5.0e0 ! cutoff frequency for low-pass filter [days] 891 rn_zdef_max = 0.9e0 ! maximum fractional e3t deformation 892 ln_vvl_dbg = .true. ! debug prints (T/F) 893 / 894 !----------------------------------------------------------------------- 895 &namdyn_vor ! Vorticity / Coriolis scheme (default: NO) 896 !----------------------------------------------------------------------- 897 ln_dynvor_ene = .false. ! enstrophy conserving scheme 898 ln_dynvor_ens = .false. ! energy conserving scheme 899 ln_dynvor_mix = .false. ! mixed scheme 900 ln_dynvor_een = .false. ! energy & enstrophy scheme 901 nn_een_e3f = 1 ! e3f = masked averaging of e3t divided by 4 (=0) or by the sum of mask (=1) 902 ln_dynvor_msk = .false. ! vorticity multiplied by fmask (=T) or not (=F) (all vorticity schemes) ! PLEASE DO NOT ACTIVATE 903 / 904 !----------------------------------------------------------------------- 905 &namdyn_hpg ! Hydrostatic pressure gradient option (default: zps) 906 !----------------------------------------------------------------------- 907 ln_hpg_zco = .false. ! z-coordinate - full steps 908 ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) 909 ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) 910 ln_hpg_isf = .false. ! s-coordinate (sco ) adapted to isf 911 ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) 912 ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) 913 / 914 !----------------------------------------------------------------------- 915 &namdyn_spg ! surface pressure gradient (default: NO) 916 !----------------------------------------------------------------------- 917 ln_dynspg_exp = .false. ! explicit free surface 918 ln_dynspg_ts = .false. ! split-explicit free surface 919 ln_bt_fw = .true. ! Forward integration of barotropic Eqs. 920 ln_bt_av = .true. ! Time filtering of barotropic variables 921 nn_bt_flt = 1 ! Time filter choice = 0 None 922 ! ! = 1 Boxcar over nn_baro sub-steps 923 ! ! = 2 Boxcar over 2*nn_baro " " 924 ln_bt_auto = .true. ! Number of sub-step defined from: 925 rn_bt_cmax = 0.8 ! =T : the Maximum Courant Number allowed 926 nn_baro = 30 ! =F : the number of sub-step in rn_rdt seconds 927 / 928 !----------------------------------------------------------------------- 929 &namdyn_ldf ! lateral diffusion on momentum (default: NO) 930 !----------------------------------------------------------------------- 931 ! ! Type of the operator : 932 ! ! no diffusion: set ln_dynldf_lap=..._blp=F 933 ln_dynldf_lap = .false. ! laplacian operator 934 ln_dynldf_blp = .false. ! bilaplacian operator 935 ! ! Direction of action : 936 ln_dynldf_lev = .false. ! iso-level 937 ln_dynldf_hor = .false. ! horizontal (geopotential) 938 ln_dynldf_iso = .false. ! iso-neutral 939 ! ! Coefficient 940 nn_ahm_ijk_t = 0 ! space/time variation of eddy coef 941 ! ! =-30 read in eddy_viscosity_3D.nc file 942 ! ! =-20 read in eddy_viscosity_2D.nc file 943 ! ! = 0 constant 944 ! ! = 10 F(k)=c1d 945 ! ! = 20 F(i,j)=F(grid spacing)=c2d 946 ! ! = 30 F(i,j,k)=c2d*c1d 947 ! ! = 31 F(i,j,k)=F(grid spacing and local velocity) 948 rn_ahm_0 = 40000. ! horizontal laplacian eddy viscosity [m2/s] 949 rn_ahm_b = 0. ! background eddy viscosity for ldf_iso [m2/s] 950 rn_bhm_0 = 1.e+12 ! horizontal bilaplacian eddy viscosity [m4/s] 951 ! 952 ! Caution in 20 and 30 cases the coefficient have to be given for a 1 degree grid (~111km) 953 / 954 955 !!====================================================================== 956 !! Tracers & Dynamics vertical physics namelists 957 !!====================================================================== 958 !! namzdf vertical physics 959 !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") 960 !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") 961 !! namzdf_gls GLS vertical mixing ("key_zdfgls") 962 !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") 963 !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") 964 !!====================================================================== 965 ! 966 !----------------------------------------------------------------------- 967 &namzdf ! vertical physics 968 !----------------------------------------------------------------------- 969 rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") 970 rn_avt0 = 1.2e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") 971 nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) 972 nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) 973 ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) 974 nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) 975 rn_avevd = 100. ! evd mixing coefficient [m2/s] 976 ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) 977 nn_npc = 1 ! frequency of application of npc 978 nn_npcp = 365 ! npc control print frequency 979 ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping 980 nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T 981 / 982 !----------------------------------------------------------------------- 983 &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) 984 !----------------------------------------------------------------------- 985 rn_avmri = 100.e-4 ! maximum value of the vertical viscosity 986 rn_alp = 5. ! coefficient of the parameterization 987 nn_ric = 2 ! coefficient of the parameterization 988 rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation 989 rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) 990 rn_mldmax = 1000.0 ! maximum allowable mixed-layer depth estimate (m) 991 rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer 992 rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer 993 ln_mldw = .true. ! Flag to use or not the mixed layer depth param. 994 / 995 !----------------------------------------------------------------------- 996 &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") 997 !----------------------------------------------------------------------- 998 rn_ediff = 0.1 ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) 999 rn_ediss = 0.7 ! coef. of the Kolmogoroff dissipation 1000 rn_ebb = 67.83 ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) 1001 rn_emin = 1.e-6 ! minimum value of tke [m2/s2] 1002 rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] 1003 rn_bshear = 1.e-20 ! background shear (>0) currently a numerical threshold (do not change it) 1004 nn_mxl = 2 ! mixing length: = 0 bounded by the distance to surface and bottom 1005 ! = 1 bounded by the local vertical scale factor 1006 ! = 2 first vertical derivative of mixing length bounded by 1 1007 ! = 3 as =2 with distinct disspipative an mixing length scale 1008 nn_pdl = 1 ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) 1009 ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) 1010 rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value 1011 ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) 1012 rn_lc = 0.15 ! coef. associated to Langmuir cells 1013 nn_etau = 1 ! penetration of tke below the mixed layer (ML) due to near intertial waves 1014 ! = 0 no penetration 1015 ! = 1 add a tke source below the ML 1016 ! = 2 add a tke source just at the base of the ML 1017 ! = 3 as = 1 applied on HF part of the stress (ln_cpl=T) 1018 rn_efr = 0.05 ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) 1019 nn_htau = 1 ! type of exponential decrease of tke penetration below the ML 1020 ! = 0 constant 10 m length scale 1021 ! = 1 0.5m at the equator to 30m poleward of 40 degrees 1022 / 1023 !----------------------------------------------------------------------- 1024 &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") 1025 !----------------------------------------------------------------------- 1026 rn_emin = 1.e-7 ! minimum value of e [m2/s2] 1027 rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] 1028 ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) 1029 rn_clim_galp = 0.267 ! galperin limit 1030 ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case 1031 rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux 1032 rn_charn = 70000. ! Charnock constant for wb induced roughness length 1033 rn_hsro = 0.02 ! Minimum surface roughness 1034 rn_frac_hs = 1.3 ! Fraction of wave height as roughness (if nn_z0_met=2) 1035 nn_z0_met = 2 ! Method for surface roughness computation (0/1/2) 1036 nn_bc_surf = 1 ! surface condition (0/1=Dir/Neum) 1037 nn_bc_bot = 1 ! bottom condition (0/1=Dir/Neum) 1038 nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) 1039 nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) 1040 / 1041 !----------------------------------------------------------------------- 1042 &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") 1043 !----------------------------------------------------------------------- 1044 rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) 1045 rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio 1046 / 1047 !----------------------------------------------------------------------- 1048 &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") 1049 !----------------------------------------------------------------------- 1050 rn_htmx = 500. ! vertical decay scale for turbulence (meters) 1051 rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) 1052 rn_tfe = 0.333 ! tidal dissipation efficiency 1053 rn_me = 0.2 ! mixing efficiency 1054 ln_tmx_itf = .true. ! ITF specific parameterisation 1055 rn_tfe_itf = 1. ! ITF tidal dissipation efficiency 1056 / 1057 !----------------------------------------------------------------------- 1058 &namzdf_tmx_new ! internal wave-driven mixing parameterization ("key_zdftmx_new" & "key_zdfddm") 1059 !----------------------------------------------------------------------- 1060 nn_zpyc = 1 ! pycnocline-intensified dissipation scales as N (=1) or N^2 (=2) 1061 ln_mevar = .true. ! variable (T) or constant (F) mixing efficiency 1062 ln_tsdiff = .true. ! account for differential T/S mixing (T) or not (F) 1063 / 1064 1065 1066 !!====================================================================== 1067 !! *** Miscellaneous namelists *** 1068 !!====================================================================== 1069 !! nammpp Massively Parallel Processing ("key_mpp_mpi) 1070 !! namctl Control prints & Benchmark 1071 !! namsto Stochastic parametrization of EOS 1072 !!====================================================================== 1073 ! 1074 !----------------------------------------------------------------------- 1075 &nammpp ! Massively Parallel Processing ("key_mpp_mpi) 184 ln_chk_bathy = .false. ! =T check the parent bathymetry 185 / 186 !----------------------------------------------------------------------- 187 &nambdy ! unstructured open boundaries (default: OFF) 188 !----------------------------------------------------------------------- 189 ln_bdy = .false. ! Use unstructured open boundaries 190 nb_bdy = 0 ! number of open boundary sets 191 ln_coords_file = .true. ! =T : read bdy coordinates from file 192 cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files 193 ln_mask_file = .false. ! =T : read mask from file 194 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 195 cn_dyn2d = 'none' ! 196 nn_dyn2d_dta = 0 ! = 0, bdy data are equal to the initial state 197 ! ! = 1, bdy data are read in 'bdydata .nc' files 198 ! ! = 2, use tidal harmonic forcing data from files 199 ! ! = 3, use external data AND tidal harmonic forcing 200 cn_dyn3d = 'none' ! 201 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 202 ! ! = 1, bdy data are read in 'bdydata .nc' files 203 cn_tra = 'none' ! 204 nn_tra_dta = 0 ! = 0, bdy data are equal to the initial state 205 ! ! = 1, bdy data are read in 'bdydata .nc' files 206 cn_ice = 'none' ! 207 nn_ice_dta = 0 ! = 0, bdy data are equal to the initial state 208 ! ! = 1, bdy data are read in 'bdydata .nc' files 209 rn_ice_tem = 270. ! si3 only: arbitrary temperature of incoming sea ice 210 rn_ice_sal = 10. ! si3 only: -- salinity -- 211 rn_ice_age = 30. ! si3 only: -- age -- 212 ! 213 ln_tra_dmp =.false. ! open boudaries conditions for tracers 214 ln_dyn3d_dmp =.false. ! open boundary condition for baroclinic velocities 215 rn_time_dmp = 1. ! Damping time scale in days 216 rn_time_dmp_out = 1. ! Outflow damping time scale 217 nn_rimwidth = 10 ! width of the relaxation zone 218 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 219 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero 220 nb_jpk_bdy = -1 ! number of levels in the bdy data (set < 0 if consistent with planned run) 221 / 222 !----------------------------------------------------------------------- 223 &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") 224 !----------------------------------------------------------------------- 225 nn_nchunks_i = 4 ! number of chunks in i-dimension 226 nn_nchunks_j = 4 ! number of chunks in j-dimension 227 nn_nchunks_k = 31 ! number of chunks in k-dimension 228 ! ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which 229 ! ! is optimal for postprocessing which works exclusively with horizontal slabs 230 ln_nc4zip = .true. ! (T) use netcdf4 chunking and compression 231 ! ! (F) ignore chunking information and produce netcdf3-compatible files 232 / 233 !----------------------------------------------------------------------- 234 &nammpp ! Massively Parallel Processing ("key_mpp_mpi") 1076 235 !----------------------------------------------------------------------- 1077 236 cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, 1078 237 ! ! buffer blocking send or immediate non-blocking sends, resp. 1079 238 nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation 1080 ln_nnogather = .false. ! activate code to avoid mpi_allgather use at the northfold239 ln_nnogather = .true. ! activate code to avoid mpi_allgather use at the northfold 1081 240 jpni = 0 ! jpni number of processors following i (set automatically if < 1) 1082 241 jpnj = 0 ! jpnj number of processors following j (set automatically if < 1) 1083 jpnij = 0 ! jpnij number of local domains (set automatically if < 1) 1084 / 1085 !----------------------------------------------------------------------- 1086 &namctl ! Control prints & Benchmark 1087 !----------------------------------------------------------------------- 1088 ln_ctl = .false. ! trends control print (expensive!) 242 / 243 !----------------------------------------------------------------------- 244 &namctl ! Control prints (default: OFF) 245 !----------------------------------------------------------------------- 246 ln_ctl = .FALSE. ! Toggle all report printing on/off (T/F); Ignored if sn_cfctl%l_config is T 247 sn_cfctl%l_config = .TRUE. ! IF .true. then control which reports are written with the following 248 sn_cfctl%l_runstat = .FALSE. ! switches and which areas produce reports with the proc integer settings. 249 sn_cfctl%l_trcstat = .FALSE. ! The default settings for the proc integers should ensure 250 sn_cfctl%l_oceout = .FALSE. ! that all areas report. 251 sn_cfctl%l_layout = .FALSE. ! 252 sn_cfctl%l_mppout = .FALSE. ! 253 sn_cfctl%l_mpptop = .FALSE. ! 254 sn_cfctl%procmin = 0 ! Minimum area number for reporting [default:0] 255 sn_cfctl%procmax = 1000000 ! Maximum area number for reporting [default:1000000] 256 sn_cfctl%procincr = 1 ! Increment for optional subsetting of areas [default:1] 257 sn_cfctl%ptimincr = 1 ! Timestep increment for writing time step progress info 1089 258 nn_print = 0 ! level of print (0 no extra print) 1090 259 nn_ictls = 0 ! start i indice of control sum (use to compare mono versus … … 1094 263 nn_isplt = 1 ! number of processors in i-direction 1095 264 nn_jsplt = 1 ! number of processors in j-direction 1096 nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench 1097 ! (no physical validity of the results) 1098 nn_timing = 0 ! timing by routine activated (=1) creates timing.output file, or not (=0) 1099 nn_diacfl = 0 ! Write out CFL diagnostics (=1) in cfl_diagnostics.ascii, or not (=0) 1100 / 1101 !----------------------------------------------------------------------- 1102 &namsto ! Stochastic parametrization of EOS (default: NO) 1103 !----------------------------------------------------------------------- 1104 ln_sto_eos = .false. ! stochastic equation of state 1105 nn_sto_eos = 1 ! number of independent random walks 1106 rn_eos_stdxy= 1.4 ! random walk horz. standard deviation (in grid points) 1107 rn_eos_stdz = 0.7 ! random walk vert. standard deviation (in grid points) 1108 rn_eos_tcor = 1440. ! random walk time correlation (in timesteps) 1109 nn_eos_ord = 1 ! order of autoregressive processes 1110 nn_eos_flt = 0 ! passes of Laplacian filter 1111 rn_eos_lim = 2.0 ! limitation factor (default = 3.0) 1112 ln_rststo = .false. ! start from mean parameter (F) or from restart file (T) 1113 ln_rstseed = .true. ! read seed of RNG from restart file 1114 cn_storst_in = "restart_sto" ! suffix of stochastic parameter restart file (input) 1115 cn_storst_out = "restart_sto" ! suffix of stochastic parameter restart file (output) 1116 / 1117 1118 !!====================================================================== 1119 !! *** Diagnostics namelists *** 1120 !!====================================================================== 1121 !! namtrd dynamics and/or tracer trends (default F) 1122 !! namptr Poleward Transport Diagnostics (default F) 1123 !! namhsb Heat and salt budgets (default F) 1124 !! namdiu Cool skin and warm layer models (default F) 1125 !! namflo float parameters ("key_float") 1126 !! nam_diaharm Harmonic analysis of tidal constituents ("key_diaharm") 1127 !! namdct transports through some sections ("key_diadct") 1128 !! nam_diatmb Top Middle Bottom Output (default F) 1129 !! nam_dia25h 25h Mean Output (default F) 1130 !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") 1131 !!====================================================================== 1132 ! 1133 !----------------------------------------------------------------------- 1134 &namtrd ! trend diagnostics (default F) 1135 !----------------------------------------------------------------------- 1136 ln_glo_trd = .false. ! (T) global domain averaged diag for T, T^2, KE, and PE 1137 ln_dyn_trd = .false. ! (T) 3D momentum trend output 1138 ln_dyn_mxl = .false. ! (T) 2D momentum trends averaged over the mixed layer (not coded yet) 1139 ln_vor_trd = .false. ! (T) 2D barotropic vorticity trends (not coded yet) 1140 ln_KE_trd = .false. ! (T) 3D Kinetic Energy trends 1141 ln_PE_trd = .false. ! (T) 3D Potential Energy trends 1142 ln_tra_trd = .false. ! (T) 3D tracer trend output 1143 ln_tra_mxl = .false. ! (T) 2D tracer trends averaged over the mixed layer (not coded yet) 1144 nn_trd = 365 ! print frequency (ln_glo_trd=T) (unit=time step) 1145 / 1146 !!gm nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n<jpk) 1147 !!gm rn_ucf = 1. ! unit conversion factor (=1 -> /seconds ; =86400. -> /day) 1148 !!gm cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) 1149 !!gm cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) 1150 !!gm ln_trdmld_restart = .false. ! restart for ML diagnostics 1151 !!gm ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S 1152 !!gm 1153 !----------------------------------------------------------------------- 1154 &namptr ! Poleward Transport Diagnostic (default F) 1155 !----------------------------------------------------------------------- 1156 ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) 1157 ln_subbas = .false. ! Atlantic/Pacific/Indian basins computation (T) or not 1158 / 1159 !----------------------------------------------------------------------- 1160 &namhsb ! Heat and salt budgets (default F) 1161 !----------------------------------------------------------------------- 1162 ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) 1163 / 1164 !----------------------------------------------------------------------- 1165 &namdiu ! Cool skin and warm layer models (default F) 1166 !----------------------------------------------------------------------- 1167 ln_diurnal = .false. ! 1168 ln_diurnal_only = .false. ! 1169 / 1170 !----------------------------------------------------------------------- 1171 &namflo ! float parameters ("key_float") 1172 !----------------------------------------------------------------------- 1173 jpnfl = 1 ! total number of floats during the run 1174 jpnnewflo = 0 ! number of floats for the restart 1175 ln_rstflo = .false. ! float restart (T) or not (F) 1176 nn_writefl = 75 ! frequency of writing in float output file 1177 nn_stockfl = 5475 ! frequency of creation of the float restart file 1178 ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) 1179 ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) 1180 ! ! or computed with Blanke' scheme (F) 1181 ln_ariane = .true. ! Input with Ariane tool convention(T) 1182 ln_flo_ascii= .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) 1183 / 1184 !----------------------------------------------------------------------- 1185 &nam_diaharm ! Harmonic analysis of tidal constituents ("key_diaharm") 1186 !----------------------------------------------------------------------- 1187 nit000_han = 1 ! First time step used for harmonic analysis 1188 nitend_han = 75 ! Last time step used for harmonic analysis 1189 nstep_han = 15 ! Time step frequency for harmonic analysis 1190 tname(1) = 'M2' ! Name of tidal constituents 1191 tname(2) = 'K1' 1192 / 1193 !----------------------------------------------------------------------- 1194 &namdct ! transports through some sections ("key_diadct") 1195 !----------------------------------------------------------------------- 1196 nn_dct = 15 ! time step frequency for transports computing 1197 nn_dctwri = 15 ! time step frequency for transports writing 1198 nn_secdebug= 112 ! 0 : no section to debug 1199 ! ! -1 : debug all section 1200 ! ! 0 < n : debug section number n 1201 / 1202 !----------------------------------------------------------------------- 1203 &nam_diatmb ! Top Middle Bottom Output (default F) 1204 !----------------------------------------------------------------------- 1205 ln_diatmb = .false. ! Choose Top Middle and Bottom output or not 1206 / 1207 !----------------------------------------------------------------------- 1208 &nam_dia25h ! 25h Mean Output (default F) 1209 !----------------------------------------------------------------------- 1210 ln_dia25h = .false. ! Choose 25h mean output or not 1211 / 1212 !----------------------------------------------------------------------- 1213 &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") 1214 !----------------------------------------------------------------------- 1215 nn_nchunks_i= 4 ! number of chunks in i-dimension 1216 nn_nchunks_j= 4 ! number of chunks in j-dimension 1217 nn_nchunks_k= 31 ! number of chunks in k-dimension 1218 ! ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which 1219 ! ! is optimal for postprocessing which works exclusively with horizontal slabs 1220 ln_nc4zip = .true. ! (T) use netcdf4 chunking and compression 1221 ! ! (F) ignore chunking information and produce netcdf3-compatible files 1222 / 1223 1224 !!====================================================================== 1225 !! *** Observation & Assimilation *** 1226 !!====================================================================== 1227 !! namobs observation and model comparison 1228 !! nam_asminc assimilation increments ('key_asminc') 1229 !!====================================================================== 1230 ! 1231 !----------------------------------------------------------------------- 1232 &namobs ! observation usage switch 1233 !----------------------------------------------------------------------- 1234 ln_diaobs = .false. ! Logical switch for the observation operator 1235 ln_t3d = .false. ! Logical switch for T profile observations 1236 ln_s3d = .false. ! Logical switch for S profile observations 1237 ln_sla = .false. ! Logical switch for SLA observations 1238 ln_sst = .false. ! Logical switch for SST observations 1239 ln_sic = .false. ! Logical switch for Sea Ice observations 1240 ln_vel3d = .false. ! Logical switch for velocity observations 1241 ln_altbias = .false. ! Logical switch for altimeter bias correction 1242 ln_nea = .false. ! Logical switch for rejection of observations near land 1243 ln_grid_global = .true. ! Logical switch for global distribution of observations 1244 ln_grid_search_lookup = .false. ! Logical switch for obs grid search w/lookup table 1245 ln_ignmis = .true. ! Logical switch for ignoring missing files 1246 ln_s_at_t = .false. ! Logical switch for computing model S at T obs if not there 1247 ln_sstnight = .false. ! Logical switch for calculating night-time average for SST obs 1248 ! All of the *files* variables below are arrays. Use namelist_cfg to add more files 1249 cn_profbfiles = 'profiles_01.nc' ! Profile feedback input observation file names 1250 cn_slafbfiles = 'sla_01.nc' ! SLA feedback input observation file names 1251 cn_sstfbfiles = 'sst_01.nc' ! SST feedback input observation file names 1252 cn_sicfbfiles = 'sic_01.nc' ! SIC feedback input observation file names 1253 cn_velfbfiles = 'vel_01.nc' ! Velocity feedback input observation file names 1254 cn_altbiasfile = 'altbias.nc' ! Altimeter bias input file name 1255 cn_gridsearchfile='gridsearch.nc' ! Grid search file name 1256 rn_gridsearchres = 0.5 ! Grid search resolution 1257 rn_dobsini = 00010101.000000 ! Initial date in window YYYYMMDD.HHMMSS 1258 rn_dobsend = 00010102.000000 ! Final date in window YYYYMMDD.HHMMSS 1259 nn_1dint = 0 ! Type of vertical interpolation method 1260 nn_2dint = 0 ! Type of horizontal interpolation method 1261 nn_msshc = 0 ! MSSH correction scheme 1262 rn_mdtcorr = 1.61 ! MDT correction 1263 rn_mdtcutoff = 65.0 ! MDT cutoff for computed correction 1264 nn_profdavtypes = -1 ! Profile daily average types - array 1265 ln_sstbias = .false. ! 1266 cn_sstbias_files = 'sstbias.nc' ! 1267 / 1268 !----------------------------------------------------------------------- 1269 &nam_asminc ! assimilation increments ('key_asminc') 1270 !----------------------------------------------------------------------- 1271 ln_bkgwri = .false. ! Logical switch for writing out background state 1272 ln_trainc = .false. ! Logical switch for applying tracer increments 1273 ln_dyninc = .false. ! Logical switch for applying velocity increments 1274 ln_sshinc = .false. ! Logical switch for applying SSH increments 1275 ln_asmdin = .false. ! Logical switch for Direct Initialization (DI) 1276 ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU) 1277 nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] 1278 nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] 1279 nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] 1280 nitiaufin = 15 ! Timestep of end of IAU interval in [0,nitend-nit000-1] 1281 niaufn = 0 ! Type of IAU weighting function 1282 ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin 1283 salfixmin = -9999 ! Minimum salinity after applying the increments 1284 nn_divdmp = 0 ! Number of iterations of divergence damping operator 1285 / 265 ln_timing = .false. ! timing by routine write out in timing.output file 266 ln_diacfl = .false. ! CFL diagnostics write out in cfl_diagnostics.ascii 267 / -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/agrif_user.F90
r12100 r12101 12 12 !!---------------------------------------------------------------------- 13 13 USE Agrif_Util 14 USE oce15 14 USE dom_oce 16 15 USE nemogcm -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/dom_oce.F90
r12100 r12101 36 36 REAL(wp), PUBLIC :: rn_e3zps_rat !: minimum thickness ration for partial steps 37 37 INTEGER , PUBLIC :: nn_msh !: = 1 create a mesh-mask file 38 INTEGER , PUBLIC :: nn_closea !: =0 suppress closed sea/lake from the ORCA domain or not (=1) 38 39 INTEGER , PUBLIC :: ntopo !: = 0/1 ,compute/read the bathymetry file 40 INTEGER, PUBLIC :: nperio !: type of lateral boundary condition 41 REAL(wp), PUBLIC :: e3zps_min !: miminum thickness for partial steps (meters) 42 REAL(wp), PUBLIC :: e3zps_rat !: minimum thickness ration for partial steps 39 43 40 44 INTEGER, PUBLIC :: nn_interp … … 50 54 LOGICAL, PUBLIC :: lzoom_n = .FALSE. !: North zoom type flag 51 55 56 LOGICAL, PUBLIC :: ln_domclo = .FALSE. 52 57 53 58 INTEGER :: jphgr_msh !: type of horizontal mesh … … 202 207 LOGICAL, PUBLIC :: ln_sco !: s-coordinate or hybrid z-s coordinate 203 208 LOGICAL, PUBLIC :: ln_isfcav !: presence of ISF 204 ! ! ref. ! before ! now ! after ! 205 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t_0 , e3t_b , e3t_n , e3t_a !: t- vert. scale factor [m] 206 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3u_0 , e3u_b , e3u_n , e3u_a !: u- vert. scale factor [m] 207 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3v_0 , e3v_b , e3v_n , e3v_a !: v- vert. scale factor [m] 208 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3f_0 , e3f_n !: f- vert. scale factor [m] 209 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3w_0 , e3w_b , e3w_n !: w- vert. scale factor [m] 210 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3uw_0 , e3uw_b , e3uw_n !: uw-vert. scale factor [m] 211 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3vw_0 , e3vw_b , e3vw_n !: vw-vert. scale factor [m] 212 213 ! ! ref. ! before ! now ! 214 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdept_0 , gdept_b , gdept_n !: t- depth [m] 215 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdepw_0 , gdepw_b , gdepw_n !: w- depth [m] 216 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w_0 , gde3w_n !: w- depth (sum of e3w) [m] 217 218 ! ! ref. ! before ! now ! after ! 219 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht_0 , ht_n !: t-depth [m] 220 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_0 , hu_b , hu_n , hu_a !: u-depth [m] 221 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hv_0 , hv_b , hv_n , hv_a !: v-depth [m] 222 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_hu_b , r1_hu_n , r1_hu_a !: inverse of u-depth [1/m] 223 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_hv_b , r1_hv_n , r1_hv_a !: inverse of v-depth [1/m] 224 209 ! 210 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t_0, e3u_0 , e3v_0 , e3f_0 !: t-,u-,v-,f-vert. scale factor [m] 211 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3w_0, e3uw_0, e3vw_0 !: w-,uw-,vw-vert. scale factor [m] 212 ! 213 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdept_0 !: t- depth [m] 214 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdepw_0 !: w- depth [m] 215 ! 225 216 INTEGER, PUBLIC :: nla10 !: deepest W level Above ~10m (nlb10 - 1) 226 217 INTEGER, PUBLIC :: nlb10 !: shallowest W level Bellow ~10m (nla10 + 1) 227 218 ! 228 219 !! 1D reference vertical coordinate 229 220 !! =-----------------====------ … … 251 242 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssmask, ssumask, ssvmask !: surface mask at T-,U-, V- and F-pts 252 243 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, fmask !: land/ocean mask at T-, U-, V- and F-pts 253 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: wmask, wumask, wvmask !: land/ocean mask at WT-, WU- and WV-pts 244 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: wmask !: land/ocean mask at W- pts 245 246 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: msk_opnsea , msk_csundef !: open ocean mask, closed sea mask (all of them) 247 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: msk_csglo , msk_csrnf , msk_csemp !: closed sea masks 248 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: msk_csgrpglo, msk_csgrprnf, msk_csgrpemp !: closed sea masks 254 249 255 250 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: tpol, fpol !: north fold mask (jperio= 3 or 4) … … 310 305 INTEGER FUNCTION dom_oce_alloc() 311 306 !!---------------------------------------------------------------------- 312 INTEGER, DIMENSION(1 2) :: ierr307 INTEGER, DIMENSION(11) :: ierr 313 308 !!---------------------------------------------------------------------- 314 309 ierr(:) = 0 … … 331 326 & ff_f (jpi,jpj) , ff_t (jpi,jpj) , STAT=ierr(3) ) 332 327 ! 333 ALLOCATE( gdept_0(jpi,jpj,jpk) , gdepw_0(jpi,jpj,jpk) , gde3w_0(jpi,jpj,jpk) , & 334 & gdept_b(jpi,jpj,jpk) , gdepw_b(jpi,jpj,jpk) , & 335 & gdept_n(jpi,jpj,jpk) , gdepw_n(jpi,jpj,jpk) , gde3w_n(jpi,jpj,jpk) , STAT=ierr(4) ) 336 ! 337 ALLOCATE( e3t_0(jpi,jpj,jpk) , e3u_0(jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0(jpi,jpj,jpk) , e3w_0(jpi,jpj,jpk) , & 338 & e3t_b(jpi,jpj,jpk) , e3u_b(jpi,jpj,jpk) , e3v_b(jpi,jpj,jpk) , e3w_b(jpi,jpj,jpk) , & 339 & e3t_n(jpi,jpj,jpk) , e3u_n(jpi,jpj,jpk) , e3v_n(jpi,jpj,jpk) , e3f_n(jpi,jpj,jpk) , e3w_n(jpi,jpj,jpk) , & 340 & e3t_a(jpi,jpj,jpk) , e3u_a(jpi,jpj,jpk) , e3v_a(jpi,jpj,jpk) , & 341 ! ! 342 & e3uw_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk) , & 343 & e3uw_b(jpi,jpj,jpk) , e3vw_b(jpi,jpj,jpk) , & 344 & e3uw_n(jpi,jpj,jpk) , e3vw_n(jpi,jpj,jpk) , STAT=ierr(5) ) 345 ! 346 ALLOCATE( ht_0(jpi,jpj) , hu_0(jpi,jpj) , hv_0(jpi,jpj) , & 347 & hu_b(jpi,jpj) , hv_b(jpi,jpj) , r1_hu_b(jpi,jpj) , r1_hv_b(jpi,jpj) , & 348 & ht_n(jpi,jpj) , hu_n(jpi,jpj) , hv_n(jpi,jpj) , r1_hu_n(jpi,jpj) , r1_hv_n(jpi,jpj) , & 349 & hu_a(jpi,jpj) , hv_a(jpi,jpj) , r1_hu_a(jpi,jpj) , r1_hv_a(jpi,jpj) , STAT=ierr(6) ) 350 ! 351 ! 352 ALLOCATE( gdept_1d(jpk) , e3tp (jpi,jpj), e3wp(jpi,jpj) ,gdepw_1d(jpk) , e3t_1d(jpk) , e3w_1d(jpk) , STAT=ierr(7) ) 328 ALLOCATE( gdept_0(jpi,jpj,jpk) , gdepw_0(jpi,jpj,jpk) , STAT=ierr(4) ) 329 ! 330 ALLOCATE( e3t_0 (jpi,jpj,jpk) , e3u_0 (jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0(jpi,jpj,jpk) , e3w_0(jpi,jpj,jpk) , & 331 & e3uw_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk) , STAT=ierr(5) ) 332 ! 333 ALLOCATE( gdept_1d(jpk) , e3tp (jpi,jpj), e3wp(jpi,jpj) ,gdepw_1d(jpk) , e3t_1d(jpk) , e3w_1d(jpk) , STAT=ierr(6) ) 353 334 ! 354 335 ALLOCATE( bathy(jpi,jpj),mbathy(jpi,jpj), tmask_i(jpi,jpj) , tmask_h(jpi,jpj) , & 355 336 & ssmask (jpi,jpj) , ssumask(jpi,jpj) , ssvmask(jpi,jpj) , & 356 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv (jpi,jpj) , STAT=ierr( 9) )337 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv (jpi,jpj) , STAT=ierr(7) ) 357 338 ! 358 339 ALLOCATE( misfdep(jpi,jpj) , mikt(jpi,jpj) , miku(jpi,jpj) , & 359 & risfdep(jpi,jpj) , mikv(jpi,jpj) , mikf(jpi,jpj) , STAT=ierr( 10) )340 & risfdep(jpi,jpj) , mikv(jpi,jpj) , mikf(jpi,jpj) , STAT=ierr(8) ) 360 341 ! 361 342 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk) , & 362 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk) , STAT=ierr(11) ) 363 ! 364 ALLOCATE( wmask(jpi,jpj,jpk) , wumask(jpi,jpj,jpk), wvmask(jpi,jpj,jpk) , STAT=ierr(12) ) 365 343 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk) , wmask(jpi,jpj,jpk) , STAT=ierr(9) ) 344 ! 366 345 ALLOCATE( hbatv (jpi,jpj) , hbatf (jpi,jpj) , & 367 346 & hbatt (jpi,jpj) , hbatu (jpi,jpj) , & 368 347 & scosrf(jpi,jpj) , scobot(jpi,jpj) , & 369 348 & hifv (jpi,jpj) , hiff (jpi,jpj) , & 370 & hift (jpi,jpj) , hifu (jpi,jpj) , STAT=ierr(8) ) 349 & hift (jpi,jpj) , hifu (jpi,jpj) , STAT=ierr(10) ) 350 351 ALLOCATE( msk_opnsea (jpi,jpj), msk_csundef (jpi,jpj), & 352 & msk_csglo (jpi,jpj), msk_csrnf (jpi,jpj), msk_csemp (jpi,jpj), & 353 & msk_csgrpglo(jpi,jpj), msk_csgrprnf(jpi,jpj), msk_csgrpemp(jpi,jpj), STAT=ierr(11) ) 371 354 ! 372 355 dom_oce_alloc = MAXVAL(ierr) -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domain.F90
r12100 r12101 21 21 !! dom_ctl : control print for the ocean domain 22 22 !!---------------------------------------------------------------------- 23 USE oce ! ocean variables24 23 USE dom_oce ! domain: ocean 25 24 USE phycst ! physical constants 26 ! USE closea ! closed seas27 25 USE domhgr ! domain: set the horizontal mesh 28 26 USE domzgr ! domain: set the vertical mesh 29 ! USE domstp ! domain: set the time-step30 27 USE dommsk ! domain: set the mask system 31 USE domwri ! domain: write the meshmask file 32 USE domvvl ! variable volume 28 USE domclo ! domain: set closed sea mask 33 29 ! 30 USE lib_mpp ! 34 31 USE in_out_manager ! I/O manager 35 32 USE iom ! 36 USE wrk_nemo ! Memory Allocation37 USE lib_mpp ! distributed memory computing library38 USE lbclnk ! ocean lateral boundary condition (or mpp link)39 USE timing ! Timing40 33 41 34 IMPLICIT NONE … … 69 62 !! - 1D configuration, move Coriolis, u and v at T-point 70 63 !!---------------------------------------------------------------------- 71 INTEGER :: jk ! dummy loop indices72 INTEGER :: iconf = 0 ! local integers73 REAL(wp), POINTER, DIMENSION(:,:) :: z1_hu_0, z1_hv_074 !!----------------------------------------------------------------------75 !76 ! IF( nn_timing == 1 ) CALL timing_start('dom_init')77 64 ! 78 65 IF(lwp) THEN … … 84 71 ! !== Reference coordinate system ==! 85 72 ! 86 CALL dom_nam ! read namelist ( namrun, namdom ) 87 ! CALL dom_clo ! Closed seas and lake 88 89 CALL dom_hgr ! Horizontal mesh 90 CALL dom_zgr ! Vertical mesh and bathymetry 91 CALL dom_msk ! Masks 92 ! 93 ht_0(:,:) = e3t_0(:,:,1) * tmask(:,:,1) ! Reference ocean thickness 94 hu_0(:,:) = e3u_0(:,:,1) * umask(:,:,1) 95 hv_0(:,:) = e3v_0(:,:,1) * vmask(:,:,1) 96 DO jk = 2, jpk 97 ht_0(:,:) = ht_0(:,:) + e3t_0(:,:,jk) * tmask(:,:,jk) 98 hu_0(:,:) = hu_0(:,:) + e3u_0(:,:,jk) * umask(:,:,jk) 99 hv_0(:,:) = hv_0(:,:) + e3v_0(:,:,jk) * vmask(:,:,jk) 100 END DO 101 ! 102 ! !== time varying part of coordinate system ==! 103 ! 104 IF( ln_linssh ) THEN ! Fix in time : set to the reference one for all 105 ! before ! now ! after ! 106 ; gdept_b = gdept_0 ; gdept_n = gdept_0 ! --- ! depth of grid-points 107 ; gdepw_b = gdepw_0 ; gdepw_n = gdepw_0 ! --- ! 108 ; ; gde3w_n = gde3w_0 ! --- ! 109 ! 110 ; e3t_b = e3t_0 ; e3t_n = e3t_0 ; e3t_a = e3t_0 ! scale factors 111 ; e3u_b = e3u_0 ; e3u_n = e3u_0 ; e3u_a = e3u_0 ! 112 ; e3v_b = e3v_0 ; e3v_n = e3v_0 ; e3v_a = e3v_0 ! 113 ; ; e3f_n = e3f_0 ! --- ! 114 ; e3w_b = e3w_0 ; e3w_n = e3w_0 ! --- ! 115 ; e3uw_b = e3uw_0 ; e3uw_n = e3uw_0 ! --- ! 116 ; e3vw_b = e3vw_0 ; e3vw_n = e3vw_0 ! --- ! 117 ! 118 CALL wrk_alloc( jpi,jpj, z1_hu_0, z1_hv_0 ) 119 ! 120 z1_hu_0(:,:) = ssumask(:,:) / ( hu_0(:,:) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF 121 z1_hv_0(:,:) = ssvmask(:,:) / ( hv_0(:,:) + 1._wp - ssvmask(:,:) ) 122 ! 123 ! before ! now ! after ! 124 ; ; ht_n = ht_0 ! ! water column thickness 125 ; hu_b = hu_0 ; hu_n = hu_0 ; hu_a = hu_0 ! 126 ; hv_b = hv_0 ; hv_n = hv_0 ; hv_a = hv_0 ! 127 ; r1_hu_b = z1_hu_0 ; r1_hu_n = z1_hu_0 ; r1_hu_a = z1_hu_0 ! inverse of water column thickness 128 ; r1_hv_b = z1_hv_0 ; r1_hv_n = z1_hv_0 ; r1_hv_a = z1_hv_0 ! 129 ! 130 CALL wrk_dealloc( jpi,jpj, z1_hu_0, z1_hv_0 ) 131 ! 132 ELSE ! time varying : initialize before/now/after variables 133 ! 134 CALL dom_vvl_init 135 ! 136 ENDIF 137 ! 138 CALL cfg_write ! create the configuration file 139 ! 140 ! IF( nn_timing == 1 ) CALL timing_stop('dom_init') 73 CALL dom_nam ! read namelist ( namrun, namdom ) 74 ! 75 CALL dom_hgr ! Horizontal mesh 76 ! 77 CALL dom_zgr ! Vertical mesh and bathymetry 78 ! 79 CALL dom_msk ! compute mask (needed by write_cfg) 80 ! 81 IF ( ln_domclo ) CALL dom_clo ! Closed seas and lake 82 ! 83 CALL dom_ctl ! print extrema of masked scale factors 84 ! 85 CALL cfg_write ! create the configuration file 141 86 ! 142 87 END SUBROUTINE dom_init 143 144 88 145 89 SUBROUTINE dom_nam … … 160 104 & ln_cfmeta, ln_iscpl 161 105 NAMELIST/namdom/ nn_bathy, cn_topo, cn_bath, cn_lon, cn_lat, nn_interp, & 162 & rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin, rn_isfhmin,&163 & rn_atfp , rn_rdt , nn_closea , ln_crs , jphgr_msh ,&106 & rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin, & 107 & rn_atfp , rn_rdt , ln_crs , jphgr_msh , & 164 108 & ppglam0, ppgphi0, ppe1_deg, ppe2_deg, ppe1_m, ppe2_m, & 165 109 & ppsur, ppa0, ppa1, ppkth, ppacr, ppdzmin, pphmax, ldbletanh, & … … 185 129 WRITE(numout,*) '~~~~~~~ ' 186 130 WRITE(numout,*) ' Namelist namrun' 187 WRITE(numout,*) ' job number nn_no = ', nn_no188 131 WRITE(numout,*) ' experiment name for output cn_exp = ', cn_exp 189 WRITE(numout,*) ' file prefix restart input cn_ocerst_in= ', cn_ocerst_in190 WRITE(numout,*) ' restart input directory cn_ocerst_indir= ', cn_ocerst_indir191 WRITE(numout,*) ' file prefix restart output cn_ocerst_out= ', cn_ocerst_out192 WRITE(numout,*) ' restart output directory cn_ocerst_outdir= ', cn_ocerst_outdir193 WRITE(numout,*) ' restart logical ln_rstart = ', ln_rstart194 WRITE(numout,*) ' start with forward time step nn_euler = ', nn_euler195 WRITE(numout,*) ' control of time step nn_rstctl = ', nn_rstctl196 WRITE(numout,*) ' number of the first time step nn_it000 = ', nn_it000197 WRITE(numout,*) ' number of the last time step nn_itend = ', nn_itend198 WRITE(numout,*) ' initial calendar date aammjj nn_date0 = ', nn_date0199 WRITE(numout,*) ' initial time of day in hhmm nn_time0 = ', nn_time0200 WRITE(numout,*) ' leap year calendar (0/1) nn_leapy = ', nn_leapy201 WRITE(numout,*) ' initial state output nn_istate = ', nn_istate202 IF( ln_rst_list ) THEN203 WRITE(numout,*) ' list of restart dump times nn_stocklist =', nn_stocklist204 ELSE205 WRITE(numout,*) ' frequency of restart file nn_stock = ', nn_stock206 ENDIF207 WRITE(numout,*) ' frequency of output file nn_write = ', nn_write208 132 WRITE(numout,*) ' mask land points ln_mskland = ', ln_mskland 209 133 WRITE(numout,*) ' additional CF standard metadata ln_cfmeta = ', ln_cfmeta 210 134 WRITE(numout,*) ' overwrite an existing file ln_clobber = ', ln_clobber 211 135 WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz 212 WRITE(numout,*) ' IS coupling at the restart step ln_iscpl = ', ln_iscpl213 136 ENDIF 214 137 … … 280 203 WRITE(numout,*) ' min depth of the ocean (>0) or rn_hmin = ', rn_hmin 281 204 WRITE(numout,*) ' min number of ocean level (<0) ' 282 WRITE(numout,*) ' treshold to open the isf cavity rn_isfhmin = ', rn_isfhmin, ' (m)'283 205 WRITE(numout,*) ' minimum thickness of partial rn_e3zps_min = ', rn_e3zps_min, ' (m)' 284 206 WRITE(numout,*) ' step level rn_e3zps_rat = ', rn_e3zps_rat … … 288 210 WRITE(numout,*) ' = 2 mesh and mask ' 289 211 WRITE(numout,*) ' = 3 mesh_hgr, msh_zgr and mask' 290 WRITE(numout,*) ' ocean time step rn_rdt = ', rn_rdt291 WRITE(numout,*) ' asselin time filter parameter rn_atfp = ', rn_atfp292 WRITE(numout,*) ' suppression of closed seas (=0) nn_closea = ', nn_closea293 WRITE(numout,*) ' online coarsening of dynamical fields ln_crs = ', ln_crs294 212 WRITE(numout,*) ' type of horizontal mesh jphgr_msh = ', jphgr_msh 295 213 WRITE(numout,*) ' longitude of first raw and column T-point ppglam0 = ', ppglam0 … … 337 255 !!---------------------------------------------------------------------- 338 256 ! 339 #undef CHECK_DOM340 #ifdef CHECK_DOM341 257 IF(lk_mpp) THEN 342 CALL mpp_minloc( e1t(:,:), tmask_i(:,:), ze1min, iimi1,ijmi1 ) 343 CALL mpp_minloc( e2t(:,:), tmask_i(:,:), ze2min, iimi2,ijmi2 ) 344 CALL mpp_maxloc( e1t(:,:), tmask_i(:,:), ze1max, iima1,ijma1 ) 345 CALL mpp_maxloc( e2t(:,:), tmask_i(:,:), ze2max, iima2,ijma2 ) 258 CALL mpp_minloc( 'dom_ctl', e1t(:,:), tmask_i(:,:), ze1min, iloc ) 259 iimi1 = iloc(1) ; ijmi1 = iloc(2) 260 CALL mpp_minloc( 'dom_ctl', e2t(:,:), tmask_i(:,:), ze2min, iloc ) 261 iimi2 = iloc(1) ; ijmi2 = iloc(2) 262 CALL mpp_maxloc( 'dom_ctl', e1t(:,:), tmask_i(:,:), ze1max, iloc ) 263 iima1 = iloc(1) ; ijma1 = iloc(2) 264 CALL mpp_maxloc( 'dom_ctl', e2t(:,:), tmask_i(:,:), ze2max, iloc ) 265 iima2 = iloc(1) ; ijma2 = iloc(2) 346 266 ELSE 347 267 ze1min = MINVAL( e1t(:,:), mask = tmask_i(:,:) == 1._wp ) … … 372 292 WRITE(numout,"(14x,'e2t mini: ',1f10.2,' at i = ',i5,' j= ',i5)") ze2min, iimi2, ijmi2 373 293 ENDIF 374 #endif375 294 ! 376 295 END SUBROUTINE dom_ctl … … 490 409 CALL iom_rstput( 0, 0, inum, 'bottom_level' , REAL( mbkt, wp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points 491 410 CALL iom_rstput( 0, 0, inum, 'top_level' , REAL( mikt, wp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points (ISF) 492 DO jj = 1,jpj 493 DO ji = 1,jpi 494 z2d (ji,jj) = SUM ( e3t_0(ji,jj, 1:mbkt(ji,jj) ) ) * ssmask(ji,jj) 495 END DO 496 END DO 497 CALL iom_rstput( 0, 0, inum, 'bathy_metry' , z2d , ktype = jp_r4 ) 498 499 ! 500 IF( ln_sco ) THEN ! s-coordinate: store grid stiffness ratio (Not required anyway) 501 CALL dom_stiff( z2d ) 502 CALL iom_rstput( 0, 0, inum, 'stiffness', z2d ) ! ! Max. grid stiffness ratio 503 ENDIF 411 CALL iom_rstput( 0, 0, inum, 'isf_draft' , risfdep , ktype = jp_r8 ) 412 CALL iom_rstput( 0, 0, inum, 'bathy_metry' , bathy , ktype = jp_r8 ) 413 ! 414 ! !== closed sea ==! 415 IF (ln_domclo) THEN 416 ! mask for the open sea 417 CALL iom_rstput( 0, 0, inum, 'mask_opensea' , msk_opnsea , ktype = jp_i4 ) 418 ! mask for all the under closed sea 419 CALL iom_rstput( 0, 0, inum, 'mask_csundef' , msk_csundef , ktype = jp_i4 ) 420 ! mask for global, local net precip, local net precip and evaporation correction 421 CALL iom_rstput( 0, 0, inum, 'mask_csglo' , msk_csglo , ktype = jp_i4 ) 422 CALL iom_rstput( 0, 0, inum, 'mask_csemp' , msk_csemp , ktype = jp_i4 ) 423 CALL iom_rstput( 0, 0, inum, 'mask_csrnf' , msk_csrnf , ktype = jp_i4 ) 424 ! mask for the various river mouth (in case multiple lake in the same outlet) 425 CALL iom_rstput( 0, 0, inum, 'mask_csgrpglo', msk_csgrpglo, ktype = jp_i4 ) 426 CALL iom_rstput( 0, 0, inum, 'mask_csgrpemp', msk_csgrpemp, ktype = jp_i4 ) 427 CALL iom_rstput( 0, 0, inum, 'mask_csgrprnf', msk_csgrprnf, ktype = jp_i4 ) 428 END IF 504 429 ! 505 430 ! ! ============================ -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/dombat.F90
r12100 r12101 1 1 MODULE dombat 2 2 3 USE oce ! ocean variables4 3 USE dom_oce ! ocean domain 5 4 ! USE closea ! closed seas … … 9 8 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 10 9 USE lib_mpp ! distributed memory computing library 11 USE wrk_nemo ! Memory allocation12 USE timing ! Timing13 10 USE agrif_modutil 14 11 USE bilinear_interp -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domcfg.f90
r9598 r12101 15 15 USE in_out_manager ! I/O manager 16 16 USE lib_mpp ! distributed memory computing library 17 USE timing ! Timing18 17 19 18 IMPLICIT NONE … … 36 35 !! 37 36 !!---------------------------------------------------------------------- 38 !39 IF( nn_timing == 1 ) CALL timing_start('dom_cfg')40 37 ! 41 38 IF(lwp) THEN ! Control print … … 60 57 CALL dom_glo ! global domain versus zoom and/or local domain 61 58 ! 62 IF( nn_timing == 1 ) CALL timing_stop('dom_cfg')63 !64 59 END SUBROUTINE dom_cfg 65 66 60 67 61 SUBROUTINE dom_glo … … 69 63 !! *** ROUTINE dom_glo *** 70 64 !! 71 !! ** Purpose : initialization for global domain, zoom and local domain65 !! ** Purpose : initialization of global domain <--> local domain indices 72 66 !! 73 67 !! ** Method : 74 68 !! 75 !! ** Action : - mig , mjg :76 !! - mi0 , mi1 :77 !! - mj0, , mj1 :69 !! ** Action : - mig , mjg : local domain indices ==> global domain indices 70 !! - mi0 , mi1 : global domain indices ==> local domain indices 71 !! - mj0,, mj1 (global point not in the local domain ==> mi0>mi1 and/or mj0>mj1) 78 72 !!---------------------------------------------------------------------- 79 73 INTEGER :: ji, jj ! dummy loop argument 80 74 !!---------------------------------------------------------------------- 81 ! ! recalculate jpizoom/jpjzoom given lat/lon82 75 ! 83 ! ! ============== ! 84 ! ! Local domain ! 85 ! ! ============== ! 86 DO ji = 1, jpi ! local domain indices ==> data domain indices 87 mig(ji) = ji + jpizoom - 1 + nimpp - 1 76 DO ji = 1, jpi ! local domain indices ==> global domain indices 77 mig(ji) = ji + nimpp - 1 88 78 END DO 89 79 DO jj = 1, jpj 90 mjg(jj) = jj + jpjzoom - 1 +njmpp - 180 mjg(jj) = jj + njmpp - 1 91 81 END DO 92 ! 93 ! ! data domain indices ==> local domain indices 82 ! ! global domain indices ==> local domain indices 94 83 ! ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the 95 ! ! local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.96 DO ji = 1, jpi dta97 mi0(ji) = MAX( 1 , MIN( ji - jpizoom + 1- nimpp + 1, jpi+1 ) )98 mi1(ji) = MAX( 0 , MIN( ji - jpizoom + 1- nimpp + 1, jpi ) )84 ! ! local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain. 85 DO ji = 1, jpiglo 86 mi0(ji) = MAX( 1 , MIN( ji - nimpp + 1, jpi+1 ) ) 87 mi1(ji) = MAX( 0 , MIN( ji - nimpp + 1, jpi ) ) 99 88 END DO 100 DO jj = 1, jpj dta101 mj0(jj) = MAX( 1 , MIN( jj - jpjzoom + 1- njmpp + 1, jpj+1 ) )102 mj1(jj) = MAX( 0 , MIN( jj - jpjzoom + 1- njmpp + 1, jpj ) )89 DO jj = 1, jpjglo 90 mj0(jj) = MAX( 1 , MIN( jj - njmpp + 1, jpj+1 ) ) 91 mj1(jj) = MAX( 0 , MIN( jj - njmpp + 1, jpj ) ) 103 92 END DO 104 93 IF(lwp) THEN ! control print 105 94 WRITE(numout,*) 106 WRITE(numout,*) 'dom_glo : domain: data /local '95 WRITE(numout,*) 'dom_glo : domain: global <<==>> local ' 107 96 WRITE(numout,*) '~~~~~~~ ' 108 WRITE(numout,*) ' data input domain : jpidta = ', jpidta, & 109 & ' jpjdta = ', jpjdta, ' jpkdta = ', jpkdta 110 WRITE(numout,*) ' global or zoom domain: jpiglo = ', jpiglo, & 111 & ' jpjglo = ', jpjglo, ' jpk = ', jpk 112 WRITE(numout,*) ' local domain : jpi = ', jpi , & 113 & ' jpj = ', jpj , ' jpk = ', jpk 97 WRITE(numout,*) ' global domain: jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpkglo = ', jpkglo 98 WRITE(numout,*) ' local domain: jpi = ', jpi , ' jpj = ', jpj , ' jpk = ', jpk 114 99 WRITE(numout,*) 115 WRITE(numout,*) ' south-west indices jpizoom = ', jpizoom, & 116 & ' jpjzoom = ', jpjzoom 100 WRITE(numout,*) ' conversion from local to global domain indices (and vise versa) done' 117 101 IF( nn_print >= 1 ) THEN 118 102 WRITE(numout,*) 119 WRITE(numout,*) ' conversion local ==> data i-index domain'103 WRITE(numout,*) ' conversion local ==> global i-index domain (mig)' 120 104 WRITE(numout,25) (mig(ji),ji = 1,jpi) 121 105 WRITE(numout,*) 122 WRITE(numout,*) ' conversion data==> local i-index domain'123 WRITE(numout,*) ' starting index '124 WRITE(numout,25) (mi0(ji),ji = 1,jpi dta)125 WRITE(numout,*) ' ending index '126 WRITE(numout,25) (mi1(ji),ji = 1,jpi dta)106 WRITE(numout,*) ' conversion global ==> local i-index domain' 107 WRITE(numout,*) ' starting index (mi0)' 108 WRITE(numout,25) (mi0(ji),ji = 1,jpiglo) 109 WRITE(numout,*) ' ending index (mi1)' 110 WRITE(numout,25) (mi1(ji),ji = 1,jpiglo) 127 111 WRITE(numout,*) 128 WRITE(numout,*) ' conversion local ==> data j-index domain'112 WRITE(numout,*) ' conversion local ==> global j-index domain (mjg)' 129 113 WRITE(numout,25) (mjg(jj),jj = 1,jpj) 130 114 WRITE(numout,*) 131 WRITE(numout,*) ' conversion data ==> localj-index domain'132 WRITE(numout,*) ' starting index '133 WRITE(numout,25) (mj0(jj),jj = 1,jpj dta)134 WRITE(numout,*) ' ending index '135 WRITE(numout,25) (mj1(jj),jj = 1,jpj dta)115 WRITE(numout,*) ' conversion global ==> local j-index domain' 116 WRITE(numout,*) ' starting index (mj0)' 117 WRITE(numout,25) (mj0(jj),jj = 1,jpjglo) 118 WRITE(numout,*) ' ending index (mj1)' 119 WRITE(numout,25) (mj1(jj),jj = 1,jpjglo) 136 120 ENDIF 137 121 ENDIF 138 122 25 FORMAT( 100(10x,19i4,/) ) 139 140 ! ! ============== !141 ! ! Zoom domain !142 ! ! ============== !143 ! ! zoom control144 IF( jpiglo + jpizoom - 1 > jpidta .OR. &145 jpjglo + jpjzoom - 1 > jpjdta ) &146 & CALL ctl_stop( ' global or zoom domain exceed the data domain ! ' )147 148 ! ! set zoom flag149 IF( jpiglo < jpidta .OR. jpjglo < jpjdta ) lzoom = .TRUE.150 151 ! ! set zoom type flags152 IF( lzoom .AND. jpizoom /= 1 ) lzoom_w = .TRUE. !153 IF( lzoom .AND. jpjzoom /= 1 ) lzoom_s = .TRUE.154 IF( lzoom .AND. jpiglo + jpizoom -1 /= jpidta ) lzoom_e = .TRUE.155 IF( lzoom .AND. jpjglo + jpjzoom -1 /= jpjdta ) lzoom_n = .TRUE.156 IF(lwp) THEN157 WRITE(numout,*)158 WRITE(numout,*) ' zoom flags : '159 WRITE(numout,*) ' lzoom = ', lzoom , ' (T = zoom, F = global )'160 WRITE(numout,*) ' lzoom_e = ', lzoom_e, ' (T = forced closed east boundary)'161 WRITE(numout,*) ' lzoom_w = ', lzoom_w, ' (T = forced closed west boundary)'162 WRITE(numout,*) ' lzoom_s = ', lzoom_s, ' (T = forced closed South boundary)'163 WRITE(numout,*) ' lzoom_n = ', lzoom_n, ' (T = forced closed North boundary)'164 ENDIF165 IF( ( lzoom_e .OR. lzoom_w ) .AND. ( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) ) &166 & CALL ctl_stop( ' Your zoom choice is inconsistent with east-west cyclic boundary condition' )167 IF( lzoom_n .AND. ( 3 <= jperio .AND. jperio <= 6 ) ) &168 & CALL ctl_stop( ' Your zoom choice is inconsistent with North fold boundary condition' )169 170 ! ! Pre-defined arctic/antarctic zoom of ORCA configuration flag171 IF( cp_cfg == "orca" ) THEN172 SELECT CASE ( jp_cfg )173 CASE ( 2 ) ! ORCA_R2 configuration174 IF( cp_cfz == "arctic" .AND. jpiglo == 142 .AND. jpjglo == 53 .AND. &175 & jpizoom == 21 .AND. jpjzoom == 97 ) THEN176 IF(lwp) WRITE(numout,*) ' ORCA configuration: arctic zoom '177 ENDIF178 IF( cp_cfz == "antarctic" .AND. jpiglo == jpidta .AND. jpjglo == 50 .AND. &179 & jpizoom == 1 .AND. jpjzoom == 1 ) THEN180 IF(lwp) WRITE(numout,*) ' ORCA configuration: antarctic zoom '181 ENDIF182 !183 CASE ( 05 ) ! ORCA_R05 configuration184 IF( cp_cfz == "arctic" .AND. jpiglo == 562 .AND. jpjglo == 202 .AND. &185 & jpizoom == 81 .AND. jpjzoom == 301 ) THEN186 IF(lwp) WRITE(numout,*) ' ORCA configuration: arctic zoom '187 ENDIF188 IF( cp_cfz == "antarctic" .AND. jpiglo == jpidta .AND. jpjglo == 187 .AND. &189 & jpizoom == 1 .AND. jpjzoom == 1 ) THEN190 IF(lwp) WRITE(numout,*) ' ORCA configuration: antarctic zoom '191 ENDIF192 END SELECT193 !194 ENDIF195 123 ! 196 124 END SUBROUTINE dom_glo 197 198 125 !!====================================================================== 199 126 END MODULE domcfg -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domhgr.F90
r12100 r12101 28 28 USE in_out_manager ! I/O manager 29 29 USE lib_mpp ! MPP library 30 USE timing ! Timing31 30 32 31 IMPLICIT NONE … … 111 110 INTEGER :: ie1e2u_v ! fag for u- & v-surface read in coordinate file or not 112 111 !!---------------------------------------------------------------------- 113 !114 ! IF( nn_timing == 1 ) CALL timing_start('dom_hgr')115 112 ! 116 113 IF(lwp) THEN … … 437 434 ! ------------------------------------------ 438 435 ! The equator line must be the latitude coordinate axe 439 440 ! IF( nperio == 2 ) THEN 441 ! znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / REAL( jpi ) 442 ! IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 443 ! ENDIF 444 ! 445 ! IF( nn_timing == 1 ) CALL timing_stop('dom_hgr') 436 ! (PM) be carefull with nperio/jperio 437 IF( jperio == 2 ) THEN 438 znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / REAL( jpi ) 439 IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 440 ENDIF 446 441 ! 447 442 END SUBROUTINE dom_hgr -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/dommsk.F90
r12100 r12101 9 9 !! - ! 1996-05 (G. Madec) mask computed from tmask 10 10 !! 8.0 ! 1997-02 (G. Madec) mesh information put in domhgr.F 11 !! 8.1 ! 1997-07 (G. Madec) modification of mbathyand fmask11 !! 8.1 ! 1997-07 (G. Madec) modification of kbat and fmask 12 12 !! - ! 1998-05 (G. Roullet) free surface 13 13 !! 8.2 ! 2000-03 (G. Madec) no slip accurate … … 17 17 !! 3.2 ! 2009-07 (R. Benshila) Suppression of rigid-lid option 18 18 !! 3.6 ! 2015-05 (P. Mathiot) ISF: add wmask,wumask and wvmask 19 !!---------------------------------------------------------------------- 20 21 !!---------------------------------------------------------------------- 22 !! dom_msk : compute land/ocean mask 23 !!---------------------------------------------------------------------- 24 USE oce ! ocean dynamics and tracers 25 USE dom_oce ! ocean space and time domain 19 !! 4.0 ! 2016-06 (G. Madec, S. Flavoni) domain configuration / user defined interface 20 !!---------------------------------------------------------------------- 21 22 !!---------------------------------------------------------------------- 23 !! dom_msk : compute land/ocean mask 24 !!---------------------------------------------------------------------- 25 USE dom_oce ! ocean space and time domain 26 USE domisf ! domain: ice shelf 27 USE domwri ! domain: write the meshmask file 28 USE bdy_oce ! open boundary 26 29 ! 27 USE in_out_manager ! I/O manager 28 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 29 USE lib_mpp ! 30 USE wrk_nemo ! Memory allocation 31 USE timing ! Timing 30 USE in_out_manager ! I/O manager 31 USE iom ! IOM library 32 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 33 USE lib_mpp ! Massively Parallel Processing library 32 34 33 35 IMPLICIT NONE … … 42 44 43 45 !! * Substitutions 44 !!---------------------------------------------------------------------- 45 !! *** vectopt_loop_substitute *** 46 !!---------------------------------------------------------------------- 47 !! ** purpose : substitute the inner loop start/end indices with CPP macro 48 !! allow unrolling of do-loop (useful with vector processors) 49 !!---------------------------------------------------------------------- 50 !!---------------------------------------------------------------------- 51 !! NEMO/OPA 3.7 , NEMO Consortium (2014) 52 !! $Id: vectopt_loop_substitute.h90 4990 2014-12-15 16:42:49Z timgraham $ 53 !! Software governed by the CeCILL licence (./LICENSE) 54 !!---------------------------------------------------------------------- 55 !!---------------------------------------------------------------------- 56 !! NEMO/OPA 3.2 , LODYC-IPSL (2009) 57 !! $Id: dommsk.F90 6140 2015-12-21 11:35:23Z timgraham $ 58 !! Software governed by the CeCILL licence (./LICENSE) 46 # include "vectopt_loop_substitute.h90" 47 !!---------------------------------------------------------------------- 48 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 49 !! $Id: dommsk.F90 10425 2018-12-19 21:54:16Z smasson $ 50 !! Software governed by the CeCILL license (see ./LICENSE) 59 51 !!---------------------------------------------------------------------- 60 52 CONTAINS … … 67 59 !! zontal velocity points (u & v), vorticity points (f) points. 68 60 !! 69 !! ** Method : The ocean/land mask is computed from the basin bathy- 70 !! metry in level (mbathy) which is defined or read in dommba. 71 !! mbathy equals 0 over continental T-point 72 !! and the number of ocean level over the ocean. 73 !! 74 !! At a given position (ji,jj,jk) the ocean/land mask is given by: 75 !! t-point : 0. IF mbathy( ji ,jj) =< 0 76 !! 1. IF mbathy( ji ,jj) >= jk 77 !! u-point : 0. IF mbathy( ji ,jj) or mbathy(ji+1, jj ) =< 0 78 !! 1. IF mbathy( ji ,jj) and mbathy(ji+1, jj ) >= jk. 79 !! v-point : 0. IF mbathy( ji ,jj) or mbathy( ji ,jj+1) =< 0 80 !! 1. IF mbathy( ji ,jj) and mbathy( ji ,jj+1) >= jk. 81 !! f-point : 0. IF mbathy( ji ,jj) or mbathy( ji ,jj+1) 82 !! or mbathy(ji+1,jj) or mbathy(ji+1,jj+1) =< 0 83 !! 1. IF mbathy( ji ,jj) and mbathy( ji ,jj+1) 84 !! and mbathy(ji+1,jj) and mbathy(ji+1,jj+1) >= jk. 85 !! tmask_i : interior ocean mask at t-point, i.e. excluding duplicated 86 !! rows/lines due to cyclic or North Fold boundaries as well 87 !! as MPP halos. 88 !! 89 !! The lateral friction is set through the value of fmask along 90 !! the coast and topography. This value is defined by rn_shlat, a 91 !! namelist parameter: 61 !! ** Method : The ocean/land mask at t-point is deduced from ko_top 62 !! and ko_bot, the indices of the fist and last ocean t-levels which 63 !! are either defined in usrdef_zgr or read in zgr_read. 64 !! The velocity masks (umask, vmask) 65 !! are deduced from a product of the two neighboring tmask. 66 !! The vorticity mask (fmask) is deduced from tmask taking 67 !! into account the choice of lateral boundary condition (rn_shlat) : 92 68 !! rn_shlat = 0, free slip (no shear along the coast) 93 69 !! rn_shlat = 2, no slip (specified zero velocity at the coast) … … 95 71 !! 2 < rn_shlat, strong slip | in the lateral boundary layer 96 72 !! 97 !! N.B. If nperio not equal to 0, the land/ocean mask arrays98 !! are defined with the proper value at lateral domain boundaries.99 !! 100 !! In case of open boundaries (lk_bdy=T):101 !! - tmask is set to 1 on the points to be computed bay the open102 !! boundaries routines.103 !! 104 !! ** Action : tmask : land/ocean mask at t-point(=0. or 1.)105 !! umask : land/ocean mask at u-point (=0. or 1.)106 !! vmask : land/ocean mask at v-point (=0. or 1.)107 !! fmask : land/ocean mask at f-point (=0. or 1.)108 !! =rn_shlat along lateral boundaries109 !! tmask_i : interiorocean mask73 !! tmask_i : interior ocean mask at t-point, i.e. excluding duplicated 74 !! rows/lines due to cyclic or North Fold boundaries as well 75 !! as MPP halos. 76 !! tmask_h : halo mask at t-point, i.e. excluding duplicated rows/lines 77 !! due to cyclic or North Fold boundaries as well as MPP halos. 78 !! 79 !! ** Action : tmask, umask, vmask, wmask : land/ocean mask 80 !! at t-, u-, v- w, wu-, and wv-points (=0. or 1.) 81 !! fmask : land/ocean mask at f-point (=0., or =1., or 82 !! =rn_shlat along lateral boundaries) 83 !! tmask_i : interior ocean mask 84 !! tmask_h : halo mask 85 !! ssmask , ssumask, ssvmask, ssfmask : 2D ocean mask 110 86 !!---------------------------------------------------------------------- 111 INTEGER :: ji, jj, jk ! dummy loop indices112 INTEGER :: iif, iil, ii0, ii1, ii ! local integers113 INTEGER :: i jf, ijl, ij0, ij1 ! - -114 INTEGER :: i os115 INTEGER :: i srow ! index for ORCA1 starting row116 INTEGER , POINTER, DIMENSION(:,:) :: imsk117 REAL(wp), POINTER, DIMENSION(:,:) :: zwf87 ! 88 INTEGER :: ji, jj, jk ! dummy loop indices 89 INTEGER :: iif, iil ! local integers 90 INTEGER :: ijf, ijl ! - - 91 INTEGER :: iktop, ikbot ! - - 92 INTEGER :: ios, inum 93 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zwf ! 2D workspace 118 94 !! 119 95 NAMELIST/namlbc/ rn_shlat, ln_vorlat 96 NAMELIST/nambdy/ ln_bdy ,nb_bdy, ln_coords_file, cn_coords_file, & 97 & ln_mask_file, cn_mask_file, cn_dyn2d, nn_dyn2d_dta, & 98 & cn_dyn3d, nn_dyn3d_dta, cn_tra, nn_tra_dta, & 99 & ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, rn_time_dmp_out, & 100 & cn_ice, nn_ice_dta, & 101 & rn_ice_tem, rn_ice_sal, rn_ice_age, & 102 & ln_vol, nn_volctl, nn_rimwidth, nb_jpk_bdy 120 103 !!--------------------------------------------------------------------- 121 !122 ! IF( nn_timing == 1 ) CALL timing_start('dom_msk')123 !124 CALL wrk_alloc( jpi, jpj, imsk )125 CALL wrk_alloc( jpi, jpj, zwf )126 104 ! 127 105 REWIND( numnam_ref ) ! Namelist namlbc in reference namelist : Lateral momentum boundary condition 128 106 READ ( numnam_ref, namlbc, IOSTAT = ios, ERR = 901 ) 129 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlbc in reference namelist', lwp ) 130 107 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlbc in reference namelist', lwp ) 131 108 REWIND( numnam_cfg ) ! Namelist namlbc in configuration namelist : Lateral momentum boundary condition 132 109 READ ( numnam_cfg, namlbc, IOSTAT = ios, ERR = 902 ) 133 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlbc in configuration namelist', lwp )110 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlbc in configuration namelist', lwp ) 134 111 IF(lwm) WRITE ( numond, namlbc ) 135 112 … … 142 119 WRITE(numout,*) ' consistency with analytical form ln_vorlat = ',ln_vorlat 143 120 ENDIF 144 145 IF ( rn_shlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ocean lateral free-slip ' 146 ELSEIF ( rn_shlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ocean lateral no-slip ' 147 ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ocean lateral partial-slip ' 148 ELSEIF ( 2. < rn_shlat ) THEN ; IF(lwp) WRITE(numout,*) ' ocean lateral strong-slip ' 121 ! 122 IF(lwp) WRITE(numout,*) 123 IF ( rn_shlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral free-slip' 124 ELSEIF ( rn_shlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral no-slip' 125 ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral partial-slip' 126 ELSEIF ( 2. < rn_shlat ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral strong-slip' 149 127 ELSE 150 WRITE(ctmp1,*) ' rn_shlat is negative = ', rn_shlat 151 CALL ctl_stop( ctmp1 ) 152 ENDIF 153 154 ! 1. Ocean/land mask at t-point (computed from mbathy) 155 ! ----------------------------- 156 ! N.B. tmask has already the right boundary conditions since mbathy is ok 157 ! 128 CALL ctl_stop( 'dom_msk: wrong value for rn_shlat (i.e. a negalive value). We stop.' ) 129 ENDIF 130 131 ! 1. Ocean/land mask at t-point (computed from mbathy) 132 ! ----------------------------- 133 ! N.B. tmask has already the right boundary conditions since mbathy is ok 134 ! 158 135 tmask(:,:,:) = 0._wp 159 136 DO jk = 1, jpk 160 137 DO jj = 1, jpj 161 138 DO ji = 1, jpi 162 IF( REAL( mbathy(ji,jj) - jk, wp ) + 0.1_wp >= 0._wp ) tmask(ji,jj,jk) = 1._wp 163 END DO 164 END DO 165 END DO 166 167 ! (ISF) define barotropic mask and mask the ice shelf point 168 ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked 169 170 DO jk = 1, jpk 171 DO jj = 1, jpj 172 DO ji = 1, jpi 173 IF( REAL( misfdep(ji,jj) - jk, wp ) - 0.1_wp >= 0._wp ) THEN 174 tmask(ji,jj,jk) = 0._wp 175 END IF 176 END DO 177 END DO 178 END DO 179 180 ! Interior domain mask (used for global sum) 181 ! -------------------- 182 ! tmask_i(:,:) = ssmask(:,:) ! (ISH) tmask_i = 1 even on the ice shelf 183 184 ! tmask_h(:,:) = 1._wp ! 0 on the halo and 1 elsewhere 185 ! iif = jpreci ! ??? 186 ! iil = nlci - jpreci + 1 187 ! ijf = jprecj ! ??? 188 ! ijl = nlcj - jprecj + 1 189 190 ! tmask_h( 1 :iif, : ) = 0._wp ! first columns 191 ! tmask_h(iil:jpi, : ) = 0._wp ! last columns (including mpp extra columns) 192 ! tmask_h( : , 1 :ijf) = 0._wp ! first rows 193 ! tmask_h( : ,ijl:jpj) = 0._wp ! last rows (including mpp extra rows) 194 195 ! north fold mask 196 ! --------------- 197 ! tpol(1:jpiglo) = 1._wp 198 ! fpol(1:jpiglo) = 1._wp 199 ! IF( jperio == 3 .OR. jperio == 4 ) THEN ! T-point pivot 200 ! tpol(jpiglo/2+1:jpiglo) = 0._wp 201 ! fpol( 1 :jpiglo) = 0._wp 202 ! IF( mjg(nlej) == jpjglo ) THEN ! only half of the nlcj-1 row 203 ! DO ji = iif+1, iil-1 204 ! tmask_h(ji,nlej-1) = tmask_h(ji,nlej-1) * tpol(mig(ji)) 205 ! END DO 206 ! ENDIF 207 ! ENDIF 208 209 ! tmask_i(:,:) = tmask_i(:,:) * tmask_h(:,:) 210 211 ! IF( jperio == 5 .OR. jperio == 6 ) THEN ! F-point pivot 212 ! tpol( 1 :jpiglo) = 0._wp 213 ! fpol(jpiglo/2+1:jpiglo) = 0._wp 214 ! ENDIF 215 216 ! 2. Ocean/land mask at u-, v-, and z-points (computed from tmask) 217 ! ------------------------------------------- 139 IF( ( REAL( mbathy (ji,jj) - jk, wp ) + 0.1_wp >= 0._wp ) & 140 & .AND. ( REAL( misfdep(ji,jj) - jk, wp ) - 0.1_wp <= 0._wp ) ) THEN 141 tmask(ji,jj,jk) = 1._wp 142 END IF 143 END DO 144 END DO 145 END DO 146 147 IF ( ln_isfsubgl ) CALL zgr_isf_subgl 148 149 !SF add here lbc_lnk: bug not still understood : cause now domain configuration is read ! 150 !!gm I don't understand why... 151 CALL lbc_lnk( 'dommsk', tmask , 'T', 1._wp ) ! Lateral boundary conditions 152 153 ! Mask corrections for bdy (read in mppini2) 154 REWIND( numnam_ref ) ! Namelist nambdy in reference namelist :Unstructured open boundaries 155 READ ( numnam_ref, nambdy, IOSTAT = ios, ERR = 903) 156 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy in reference namelist', lwp ) 157 REWIND( numnam_cfg ) ! Namelist nambdy in configuration namelist :Unstructured open boundaries 158 READ ( numnam_cfg, nambdy, IOSTAT = ios, ERR = 904 ) 159 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'nambdy in configuration namelist', lwp ) 160 ! ------------------------ 161 IF ( ln_bdy .AND. ln_mask_file ) THEN 162 CALL iom_open( cn_mask_file, inum ) 163 CALL iom_get ( inum, jpdom_data, 'bdy_msk', bdytmask(:,:) ) 164 CALL iom_close( inum ) 165 DO jk = 1, jpkm1 166 DO jj = 1, jpj 167 DO ji = 1, jpi 168 tmask(ji,jj,jk) = tmask(ji,jj,jk) * bdytmask(ji,jj) 169 END DO 170 END DO 171 END DO 172 ENDIF 173 174 ! Ocean/land mask at u-, v-, and f-points (computed from tmask) 175 ! ---------------------------------------- 176 ! NB: at this point, fmask is designed for free slip lateral boundary condition 218 177 DO jk = 1, jpk 219 178 DO jj = 1, jpjm1 220 DO ji = 1, jpim1 ! vector loop179 DO ji = 1, fs_jpim1 ! vector loop 221 180 umask(ji,jj,jk) = tmask(ji,jj ,jk) * tmask(ji+1,jj ,jk) 222 181 vmask(ji,jj,jk) = tmask(ji,jj ,jk) * tmask(ji ,jj+1,jk) … … 228 187 END DO 229 188 END DO 230 ! (ISF) MIN(1,SUM(umask)) is here to check if you have effectively at least 1 wet cell at u point 231 ! DO jj = 1, jpjm1 232 ! DO ji = 1, jpim1 ! vector loop 233 ! ssumask(ji,jj) = ssmask(ji,jj) * ssmask(ji+1,jj ) * MIN(1._wp,SUM(umask(ji,jj,:))) 234 ! ssvmask(ji,jj) = ssmask(ji,jj) * ssmask(ji ,jj+1) * MIN(1._wp,SUM(vmask(ji,jj,:))) 235 !! END DO 236 ! DO ji = 1, jpim1 ! NO vector opt. 237 ! ssfmask(ji,jj) = ssmask(ji,jj ) * ssmask(ji+1,jj ) & 238 ! & * ssmask(ji,jj+1) * ssmask(ji+1,jj+1) * MIN(1._wp,SUM(fmask(ji,jj,:))) 239 ! END DO 240 ! END DO 241 CALL lbc_lnk( 'toto',umask , 'U', 1._wp ) ! Lateral boundary conditions 242 CALL lbc_lnk( 'toto',vmask , 'V', 1._wp ) 243 CALL lbc_lnk( 'toto',fmask , 'F', 1._wp ) 244 ! CALL lbc_lnk( 'toto',ssumask, 'U', 1._wp ) ! Lateral boundary conditions 245 ! CALL lbc_lnk( 'toto',ssvmask, 'V', 1._wp ) 246 ! CALL lbc_lnk( 'toto',ssfmask, 'F', 1._wp ) 247 248 ! 3. Ocean/land mask at wu-, wv- and w points 249 !---------------------------------------------- 189 CALL lbc_lnk_multi( 'dommsk', umask, 'U', 1., vmask, 'V', 1., fmask, 'F', 1. ) ! Lateral boundary conditions 190 191 ! Ocean/land mask at wu-, wv- and w points (computed from tmask) 192 !----------------------------------------- 250 193 wmask (:,:,1) = tmask(:,:,1) ! surface 251 wumask(:,:,1) = umask(:,:,1)252 wvmask(:,:,1) = vmask(:,:,1)253 194 DO jk = 2, jpk ! interior values 254 195 wmask (:,:,jk) = tmask(:,:,jk) * tmask(:,:,jk-1) 255 wumask(:,:,jk) = umask(:,:,jk) * umask(:,:,jk-1)256 wvmask(:,:,jk) = vmask(:,:,jk) * vmask(:,:,jk-1)257 196 END DO 258 197 198 199 ! Ocean/land column mask at t-, u-, and v-points (i.e. at least 1 wet cell in the vertical) 200 ! ---------------------------------------------- 201 ssmask (:,:) = MAXVAL( tmask(:,:,:), DIM=3 ) 202 ssumask(:,:) = MAXVAL( umask(:,:,:), DIM=3 ) 203 ssvmask(:,:) = MAXVAL( vmask(:,:,:), DIM=3 ) 204 205 ! Interior domain mask (used for global sum) 206 ! -------------------- 207 ! 208 iif = nn_hls ; iil = nlci - nn_hls + 1 209 ijf = nn_hls ; ijl = nlcj - nn_hls + 1 210 ! 211 ! ! halo mask : 0 on the halo and 1 elsewhere 212 tmask_h(:,:) = 1._wp 213 tmask_h( 1 :iif, : ) = 0._wp ! first columns 214 tmask_h(iil:jpi, : ) = 0._wp ! last columns (including mpp extra columns) 215 tmask_h( : , 1 :ijf) = 0._wp ! first rows 216 tmask_h( : ,ijl:jpj) = 0._wp ! last rows (including mpp extra rows) 217 ! 218 ! ! north fold mask 219 tpol(1:jpiglo) = 1._wp 220 fpol(1:jpiglo) = 1._wp 221 IF( jperio == 3 .OR. jperio == 4 ) THEN ! T-point pivot 222 tpol(jpiglo/2+1:jpiglo) = 0._wp 223 fpol( 1 :jpiglo) = 0._wp 224 IF( mjg(nlej) == jpjglo ) THEN ! only half of the nlcj-1 row for tmask_h 225 DO ji = iif+1, iil-1 226 tmask_h(ji,nlej-1) = tmask_h(ji,nlej-1) * tpol(mig(ji)) 227 END DO 228 ENDIF 229 ENDIF 230 ! 231 IF( jperio == 5 .OR. jperio == 6 ) THEN ! F-point pivot 232 tpol( 1 :jpiglo) = 0._wp 233 fpol(jpiglo/2+1:jpiglo) = 0._wp 234 ENDIF 235 ! 236 ! ! interior mask : 2D ocean mask x halo mask 237 tmask_i(:,:) = ssmask(:,:) * tmask_h(:,:) 238 239 259 240 ! Lateral boundary conditions on velocity (modify fmask) 260 ! --------------------------------------- 261 DO jk = 1, jpk 262 zwf(:,:) = fmask(:,:,jk) 263 DO jj = 2, jpjm1 264 DO ji = 2, jpim1 ! vector opt. 265 IF( fmask(ji,jj,jk) == 0._wp ) THEN 266 fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), & 267 & zwf(ji-1,jj), zwf(ji,jj-1) ) ) 268 ENDIF 269 END DO 270 END DO 271 DO jj = 2, jpjm1 272 IF( fmask(1,jj,jk) == 0._wp ) THEN 273 fmask(1 ,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 274 ENDIF 275 IF( fmask(jpi,jj,jk) == 0._wp ) THEN 276 fmask(jpi,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 277 ENDIF 278 END DO 279 DO ji = 2, jpim1 280 IF( fmask(ji,1,jk) == 0._wp ) THEN 281 fmask(ji, 1 ,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 282 ENDIF 283 IF( fmask(ji,jpj,jk) == 0._wp ) THEN 284 fmask(ji,jpj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 285 ENDIF 286 END DO 287 END DO 288 ! 289 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA_R2 configuration 290 ! ! Increased lateral friction near of some straits 291 ! ! Gibraltar strait : partial slip (fmask=0.5) 292 ij0 = 101 ; ij1 = 101 293 ii0 = 139 ; ii1 = 140 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.5_wp 294 ij0 = 102 ; ij1 = 102 295 ii0 = 139 ; ii1 = 140 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.5_wp 296 ! 297 ! ! Bab el Mandeb : partial slip (fmask=1) 298 ij0 = 87 ; ij1 = 88 299 ii0 = 160 ; ii1 = 160 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 1._wp 300 ij0 = 88 ; ij1 = 88 301 ii0 = 159 ; ii1 = 159 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 1._wp 302 ! 303 ! ! Danish straits : strong slip (fmask > 2) 304 ! We keep this as an example but it is instable in this case 305 ! ij0 = 115 ; ij1 = 115 306 ! ii0 = 145 ; ii1 = 146 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 307 ! ij0 = 116 ; ij1 = 116 308 ! ii0 = 145 ; ii1 = 146 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 309 ! 310 ENDIF 311 ! 312 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 313 ! ! Increased lateral friction near of some straits 314 ! This dirty section will be suppressed by simplification process: 315 ! all this will come back in input files 316 ! Currently these hard-wired indices relate to configuration with 317 ! extend grid (jpjglo=332) 318 ! 319 isrow = 332 - jpjglo 320 ! 321 IF(lwp) WRITE(numout,*) 322 IF(lwp) WRITE(numout,*) ' orca_r1: increase friction near the following straits : ' 323 IF(lwp) WRITE(numout,*) ' Gibraltar ' 324 ii0 = 282 ; ii1 = 283 ! Gibraltar Strait 325 ij0 = 241 - isrow ; ij1 = 241 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 326 327 IF(lwp) WRITE(numout,*) ' Bhosporus ' 328 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait 329 ij0 = 248 - isrow ; ij1 = 248 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 330 331 IF(lwp) WRITE(numout,*) ' Makassar (Top) ' 332 ii0 = 48 ; ii1 = 48 ! Makassar Strait (Top) 333 ij0 = 189 - isrow ; ij1 = 190 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 334 335 IF(lwp) WRITE(numout,*) ' Lombok ' 336 ii0 = 44 ; ii1 = 44 ! Lombok Strait 337 ij0 = 164 - isrow ; ij1 = 165 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 338 339 IF(lwp) WRITE(numout,*) ' Ombai ' 340 ii0 = 53 ; ii1 = 53 ! Ombai Strait 341 ij0 = 164 - isrow ; ij1 = 165 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 342 343 IF(lwp) WRITE(numout,*) ' Timor Passage ' 344 ii0 = 56 ; ii1 = 56 ! Timor Passage 345 ij0 = 164 - isrow ; ij1 = 165 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 346 347 IF(lwp) WRITE(numout,*) ' West Halmahera ' 348 ii0 = 58 ; ii1 = 58 ! West Halmahera Strait 349 ij0 = 181 - isrow ; ij1 = 182 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 350 351 IF(lwp) WRITE(numout,*) ' East Halmahera ' 352 ii0 = 55 ; ii1 = 55 ! East Halmahera Strait 353 ij0 = 181 - isrow ; ij1 = 182 - isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 354 ! 355 ENDIF 356 ! 357 CALL lbc_lnk( 'toto',fmask, 'F', 1._wp ) ! Lateral boundary conditions on fmask 358 ! 359 ! CAUTION : The fmask may be further modified in dyn_vor_init ( dynvor.F90 ) 360 ! 361 CALL wrk_dealloc( jpi, jpj, imsk ) 362 CALL wrk_dealloc( jpi, jpj, zwf ) 363 ! 364 ! IF( nn_timing == 1 ) CALL timing_stop('dom_msk') 241 ! --------------------------------------- 242 IF( rn_shlat /= 0 ) THEN ! Not free-slip lateral boundary condition 243 ! 244 ALLOCATE( zwf(jpi,jpj) ) 245 ! 246 DO jk = 1, jpk 247 zwf(:,:) = fmask(:,:,jk) 248 DO jj = 2, jpjm1 249 DO ji = fs_2, fs_jpim1 ! vector opt. 250 IF( fmask(ji,jj,jk) == 0._wp ) THEN 251 fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), & 252 & zwf(ji-1,jj), zwf(ji,jj-1) ) ) 253 ENDIF 254 END DO 255 END DO 256 DO jj = 2, jpjm1 257 IF( fmask(1,jj,jk) == 0._wp ) THEN 258 fmask(1 ,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 259 ENDIF 260 IF( fmask(jpi,jj,jk) == 0._wp ) THEN 261 fmask(jpi,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 262 ENDIF 263 END DO 264 DO ji = 2, jpim1 265 IF( fmask(ji,1,jk) == 0._wp ) THEN 266 fmask(ji, 1 ,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 267 ENDIF 268 IF( fmask(ji,jpj,jk) == 0._wp ) THEN 269 fmask(ji,jpj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 270 ENDIF 271 END DO 272 #if defined key_agrif 273 IF( .NOT. AGRIF_Root() ) THEN 274 IF ((nbondi == 1).OR.(nbondi == 2)) fmask(nlci-1 , : ,jk) = 0.e0 ! east 275 IF ((nbondi == -1).OR.(nbondi == 2)) fmask(1 , : ,jk) = 0.e0 ! west 276 IF ((nbondj == 1).OR.(nbondj == 2)) fmask(: ,nlcj-1 ,jk) = 0.e0 ! north 277 IF ((nbondj == -1).OR.(nbondj == 2)) fmask(: ,1 ,jk) = 0.e0 ! south 278 ENDIF 279 #endif 280 END DO 281 ! 282 DEALLOCATE( zwf ) 283 ! 284 CALL lbc_lnk( 'dommsk', fmask, 'F', 1._wp ) ! Lateral boundary conditions on fmask 285 ! 286 ! CAUTION : The fmask may be further modified in dyn_vor_init ( dynvor.F90 ) depending on ln_vorlat 287 ! 288 ENDIF 289 ! 290 ! write out mesh mask 291 IF ( nn_msh > 0 ) CALL dom_wri 365 292 ! 366 293 END SUBROUTINE dom_msk -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domngb.F90
r12100 r12101 11 11 !!---------------------------------------------------------------------- 12 12 USE dom_oce ! ocean space and time domain 13 USE phycst 13 14 ! 14 15 USE in_out_manager ! I/O manager … … 18 19 PRIVATE 19 20 20 PUBLIC dom_ngb ! routine called in iom.F90 module 21 PUBLIC dom_ngb ! routine called in iom.F90 and domclo.F90 module 22 PUBLIC dist 21 23 22 24 !!---------------------------------------------------------------------- … … 27 29 CONTAINS 28 30 29 SUBROUTINE dom_ngb( plon, plat, kii, kjj, cdgrid, kkk )31 SUBROUTINE dom_ngb( plon, plat, kii, kjj, rdist, cdgrid, kkk ) 30 32 !!---------------------------------------------------------------------- 31 33 !! *** ROUTINE dom_ngb *** … … 37 39 !!---------------------------------------------------------------------- 38 40 REAL(wp) , INTENT(in ) :: plon, plat ! longitude,latitude of the point 41 REAL(wp) , INTENT( out) :: rdist ! distance between the located point and the source 39 42 INTEGER , INTENT( out) :: kii, kjj ! i-,j-index of the closes grid point 40 43 INTEGER , INTENT(in ), OPTIONAL :: kkk ! k-index of the mask level used … … 43 46 INTEGER :: ik ! working level 44 47 INTEGER , DIMENSION(2) :: iloc 45 REAL(wp) :: zlon, zmini46 48 REAL(wp), DIMENSION(jpi,jpj) :: zglam, zgphi, zmask, zdist 47 49 !!-------------------------------------------------------------------- … … 57 59 END SELECT 58 60 59 zlon = MOD( plon + 720., 360. ) ! plon between 0 and 360 60 zglam(:,:) = MOD( zglam(:,:) + 720., 360. ) ! glam between 0 and 360 61 IF( zlon > 270. ) zlon = zlon - 360. ! zlon between -90 and 270 62 IF( zlon < 90. ) WHERE( zglam(:,:) > 180. ) zglam(:,:) = zglam(:,:) - 360. ! glam between -180 and 180 63 zglam(:,:) = zglam(:,:) - zlon 61 zdist = dist(plon, plat, zglam, zgphi) 64 62 65 zgphi(:,:) = zgphi(:,:) - plat66 zdist(:,:) = zglam(:,:) * zglam(:,:) + zgphi(:,:) * zgphi(:,:)67 68 63 IF( lk_mpp ) THEN 69 CALL mpp_minloc( 'domngb', zdist(:,:), zmask, zmini, iloc)64 CALL mpp_minloc( 'domngb', zdist(:,:), zmask, rdist, iloc) 70 65 kii = iloc(1) ; kjj = iloc(2) 71 66 ELSE 72 67 iloc(:) = MINLOC( zdist(:,:), mask = zmask(:,:) == 1.e0 ) 68 rdist = MINVAL( zdist(:,:) ) 73 69 kii = iloc(1) + nimpp - 1 74 70 kjj = iloc(2) + njmpp - 1 … … 77 73 END SUBROUTINE dom_ngb 78 74 75 FUNCTION dist(plonsrc, platsrc, plontrg, plattrg) 76 REAL(wp), INTENT(in) :: plonsrc, platsrc ! lat/lon of the source point 77 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plontrg, plattrg ! lat/lon of the target (2d in this case) 78 79 REAL(wp) :: zxs, zys, zzs 80 REAL(wp), DIMENSION(jpi,jpj) :: zxt, zyt, zzt 81 82 REAL(wp), DIMENSION(jpi,jpj) :: dist ! distance between src and trg 83 84 zxs = COS( rad * platsrc ) * COS( rad * plonsrc ) 85 zys = COS( rad * platsrc ) * SIN( rad * plonsrc ) 86 zzs = SIN( rad * platsrc ) 87 88 zxt = COS( rad * plattrg ) * COS( rad * plontrg ) 89 zyt = COS( rad * plattrg ) * SIN( rad * plontrg ) 90 zzt = SIN( rad * plattrg ) 91 92 dist(:,:) = ( zxs - zxt(:,:) )**2 & 93 & + ( zys - zyt(:,:) )**2 & 94 & + ( zzs - zzt(:,:) )**2 95 96 dist(:,:) = ra * SQRT( dist(:,:) ) 97 98 END FUNCTION dist 99 79 100 !!====================================================================== 80 101 END MODULE domngb -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domwri.F90
r12100 r12101 154 154 CALL iom_rstput( 0, 0, inum, 'ff_t', ff_t, ktype = jp_r8 ) 155 155 156 ! note that mbkt is set to 1 over land ==> use surface tmask156 ! note that mbkt and mikt is set to 1 over land ==> use surface tmask 157 157 zprt(:,:) = ssmask(:,:) * REAL( mbkt(:,:) , wp ) 158 CALL iom_rstput( 0, 0, inum, 'mbathy', zprt, ktype = jp_i4 ) ! ! nb of ocean T-points 158 CALL iom_rstput( 0, 0, inum, 'mbathy', zprt, ktype = jp_i4 ) ! ! nb of ocean T-points 159 CALL iom_rstput( 0, 0, inum, 'bathy_metry', bathy(:,:) * ssmask(:,:), ktype = jp_r8 ) ! ! bathymetry 159 160 zprt(:,:) = ssmask(:,:) * REAL( mikt(:,:) , wp ) 160 CALL iom_rstput( 0, 0, inum, 'misf', zprt, ktype = jp_i4 ) ! ! nb of ocean T-points 161 zprt(:,:) = ssmask(:,:) * REAL( risfdep(:,:) , wp ) 162 CALL iom_rstput( 0, 0, inum, 'isfdraft', zprt, ktype = jp_r8 ) ! ! nb of ocean T-points 163 ! ! vertical mesh 161 CALL iom_rstput( 0, 0, inum, 'misf', zprt, ktype = jp_i4 ) ! ! first wet level 162 CALL iom_rstput( 0, 0, inum, 'isfdraft' , risfdep(:,:) * ssmask(:,:), ktype = jp_r8 ) ! ! ice shelf draft 163 zprt(:,:) = ssmask(:,:) * REAL( mbkt(:,:) - mikt(:,:) + 1, wp ) 164 CALL iom_rstput( 0, 0, inum, 'mhw',zprt, ktype = jp_i4 ) 165 CALL iom_rstput( 0, 0, inum, 'hw' ,(bathy-risfdep)*ssmask, ktype = jp_r8 ) 166 167 ! ! vertical mesh 164 168 CALL iom_rstput( 0, 0, inum, 'e3t_0', e3t_0, ktype = jp_r8 ) ! ! scale factors 165 169 CALL iom_rstput( 0, 0, inum, 'e3u_0', e3u_0, ktype = jp_r8 ) … … 177 181 ENDIF 178 182 ! 179 ! IF( ll_wd ) CALL iom_rstput( 0, 0, inum, 'ht_0' , ht_0 , ktype = jp_r8 )180 181 183 ! ! ============================ 182 184 CALL iom_close( inum ) ! close the files -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domzgr.F90
r12100 r12101 17 17 !! 3.4 ! 2012-08 (J. Siddorn) added Siddorn and Furner stretching function 18 18 !! 3.4 ! 2012-12 (R. Bourdalle-Badie and G. Reffray) modify C1D case 19 !! 3.6 ! 2014-11 (P. Mathiot and C. Harris) add ice shelf capability e19 !! 3.6 ! 2014-11 (P. Mathiot and C. Harris) add ice shelf capability 20 20 !! 3.? ! 2015-11 (H. Liu) Modifications for Wetting/Drying 21 21 !!---------------------------------------------------------------------- … … 35 35 !! fgamma : Siddorn and Furner 2012 stretching function 36 36 !!--------------------------------------------------------------------- 37 USE oce ! ocean variables38 37 USE dom_oce ! ocean domain 39 ! USE closea ! closed seas40 38 ! 41 39 USE in_out_manager ! I/O manager … … 43 41 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 44 42 USE lib_mpp ! distributed memory computing library 45 USE wrk_nemo ! Memory allocation 46 USE timing ! Timing 43 USE lib_fortran 47 44 USE dombat 45 USE domisf 48 46 49 47 IMPLICIT NONE … … 51 49 52 50 PUBLIC dom_zgr ! called by dom_init.F90 53 51 ! 54 52 ! !!* Namelist namzgr_sco * 55 53 LOGICAL :: ln_s_sh94 ! use hybrid s-sig Song and Haidvogel 1994 stretching function fssig1 (ln_sco=T) … … 60 58 REAL(wp) :: rn_rmax ! maximum cut-off r-value allowed (0<rn_rmax<1) 61 59 REAL(wp) :: rn_hc ! Critical depth for transition from sigma to stretched coordinates 62 INTEGER , PUBLIC :: ntopo !: = 0/1 ,compute/read the bathymetry file63 REAL(wp), PUBLIC :: e3zps_min !: miminum thickness for partial steps (meters)64 REAL(wp), PUBLIC :: e3zps_rat !: minimum thickness ration for partial steps65 INTEGER, PUBLIC :: nperio !: type of lateral boundary condition66 60 67 61 ! Song and Haidvogel 1994 stretching parameters … … 121 115 !!---------------------------------------------------------------------- 122 116 ! 123 ! IF( nn_timing == 1 ) CALL timing_start('dom_zgr')124 117 ! 125 118 REWIND( numnam_ref ) ! Namelist namzgr in reference namelist : Vertical coordinate … … 152 145 IF( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 153 146 ! 147 IF ( ln_isfcav ) CALL zgr_isf_nam 154 148 ioptio = 0 155 149 IF ( ln_zco .AND. ln_isfcav ) ioptio = ioptio + 1 … … 164 158 IF( ln_zps ) CALL zgr_zps ! Partial step z-coordinate 165 159 IF( ln_sco ) CALL zgr_sco ! s-coordinate or hybrid z-s coordinate 160 CALL zgr_bat_ctl ! check bathymetry (mbathy) and suppress isolated ocean points 166 161 ! 167 162 ! final adjustment of mbathy & check 168 163 ! ----------------------------------- 169 IF( lzoom ) CALL zgr_bat_zoom ! correct mbathy in case of zoom subdomain170 CALL zgr_bat_ctl ! check bathymetry (mbathy) and suppress isolated ocean points171 164 CALL zgr_bot_level ! deepest ocean level for t-, u- and v-points 172 165 CALL zgr_top_level ! shallowest ocean level for T-, U-, V- points … … 175 168 WRITE(numout,*) ' MIN val mbathy ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 176 169 WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ), & 177 & ' w ', MINVAL( gdepw_0(:,:,:) ) , '3w ', MINVAL( gde3w_0(:,:,:) )170 & ' w ', MINVAL( gdepw_0(:,:,:) ) 178 171 WRITE(numout,*) ' MIN val e3 t ', MINVAL( e3t_0(:,:,:) ), ' f ', MINVAL( e3f_0(:,:,:) ), & 179 172 & ' u ', MINVAL( e3u_0(:,:,:) ), ' u ', MINVAL( e3v_0(:,:,:) ), & … … 182 175 183 176 WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ), & 184 & ' w ', MAXVAL( gdepw_0(:,:,:) ) , '3w ', MAXVAL( gde3w_0(:,:,:) )177 & ' w ', MAXVAL( gdepw_0(:,:,:) ) 185 178 WRITE(numout,*) ' MAX val e3 t ', MAXVAL( e3t_0(:,:,:) ), ' f ', MAXVAL( e3f_0(:,:,:) ), & 186 179 & ' u ', MAXVAL( e3u_0(:,:,:) ), ' u ', MAXVAL( e3v_0(:,:,:) ), & … … 188 181 & ' w ', MAXVAL( e3w_0(:,:,:) ) 189 182 ENDIF 190 !191 ! IF( nn_timing == 1 ) CALL timing_stop('dom_zgr')192 183 ! 193 184 END SUBROUTINE dom_zgr … … 222 213 REAL(wp) :: za2, zkth2, zacr2 ! Values for optional double tanh function set from parameters 223 214 !!---------------------------------------------------------------------- 224 !225 ! IF( nn_timing == 1 ) CALL timing_start('zgr_z')226 215 ! 227 216 ! Set variables from parameters … … 322 311 IF ( ln_isfcav .OR. ln_e3_dep ) THEN ! e3. = dk[gdep] 323 312 ! 324 !==>>> need to be like this to compute the pressure gradient with ISF.325 ! If not, level beneath the ISF are not aligned (sum(e3t) /= depth)326 ! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively327 !328 313 DO jk = 1, jpkm1 329 314 e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk) … … 354 339 IF( gdepw_1d(jk) < 0._wp .OR. gdept_1d(jk) < 0._wp ) CALL ctl_stop( 'dom:zgr_z: gdepw_1d or gdept_1d < 0 ' ) 355 340 END DO 356 !357 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_z')358 341 ! 359 342 END SUBROUTINE zgr_z … … 401 384 !!---------------------------------------------------------------------- 402 385 ! 403 ! IF( nn_timing == 1 ) CALL timing_start('zgr_bat')404 !405 386 IF(lwp) WRITE(numout,*) 406 387 IF(lwp) WRITE(numout,*) ' zgr_bat : defines level and meter bathymetry' … … 411 392 ! ! global domain level and meter bathymetry (idta,zdta) 412 393 ! 413 ALLOCATE( idta(jpi dta,jpjdta), STAT=ierror )394 ALLOCATE( idta(jpiglo,jpjglo), STAT=ierror ) 414 395 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate idta array' ) 415 ALLOCATE( zdta(jpi dta,jpjdta), STAT=ierror )396 ALLOCATE( zdta(jpiglo,jpjglo), STAT=ierror ) 416 397 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate zdta array' ) 417 398 ! … … 439 420 IF(lwp) WRITE(numout,*) 440 421 IF(lwp) WRITE(numout,*) ' bathymetry field: flat basin with a bump' 441 ii_bump = jpi dta/ 2 ! i-index of the bump center442 ij_bump = jpj dta/ 2 ! j-index of the bump center422 ii_bump = jpiglo / 2 ! i-index of the bump center 423 ij_bump = jpjglo / 2 ! j-index of the bump center 443 424 r_bump = 50000._wp ! bump radius (meters) 444 425 h_bump = 2700._wp ! bump height (meters) … … 450 431 IF(lwp) WRITE(numout,*) ' background ocean depth = ', h_oce , ' meters' 451 432 ! 452 DO jj = 1, jpj dta! zdta :453 DO ji = 1, jpi dta433 DO jj = 1, jpjglo ! zdta : 434 DO ji = 1, jpiglo 454 435 zi = FLOAT( ji - ii_bump ) * ppe1_m / r_bump 455 436 zj = FLOAT( jj - ij_bump ) * ppe2_m / r_bump … … 467 448 ENDIF 468 449 ENDIF 450 ! 469 451 ! ! set GLOBAL boundary conditions 470 ! ! Caution : idta on the global domain: use of jperio, not nperio471 452 IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 472 453 idta( : , 1 ) = -1 ; zdta( : , 1 ) = -1._wp 473 idta( : ,jpj dta) = 0 ; zdta( : ,jpjdta) = 0._wp454 idta( : ,jpjglo) = 0 ; zdta( : ,jpjglo) = 0._wp 474 455 ELSEIF( jperio == 2 ) THEN 475 456 idta( : , 1 ) = idta( : , 3 ) ; zdta( : , 1 ) = zdta( : , 3 ) 476 idta( : ,jpj dta) = 0 ; zdta( : ,jpjdta) = 0._wp457 idta( : ,jpjglo) = 0 ; zdta( : ,jpjglo) = 0._wp 477 458 idta( 1 , : ) = 0 ; zdta( 1 , : ) = 0._wp 478 idta(jpi dta, : ) = 0 ; zdta(jpidta, : ) = 0._wp459 idta(jpiglo, : ) = 0 ; zdta(jpiglo, : ) = 0._wp 479 460 ELSE 480 461 ih = 0 ; zh = 0._wp 481 462 IF( ln_sco ) ih = jpkm1 ; IF( ln_sco ) zh = h_oce 482 463 idta( : , 1 ) = ih ; zdta( : , 1 ) = zh 483 idta( : ,jpj dta) = ih ; zdta( : ,jpjdta) = zh464 idta( : ,jpjglo) = ih ; zdta( : ,jpjglo) = zh 484 465 idta( 1 , : ) = ih ; zdta( 1 , : ) = zh 485 idta(jpi dta, : ) = ih ; zdta(jpidta, : ) = zh466 idta(jpiglo, : ) = ih ; zdta(jpiglo, : ) = zh 486 467 ENDIF 487 468 … … 497 478 risfdep(:,:)=0.e0 498 479 misfdep(:,:)=1 499 !500 ! (ISF) TODO build ice draft netcdf file for isomip and build the corresponding part of code501 IF( cp_cfg == "isomip" .AND. ln_isfcav ) THEN502 risfdep(:,:)=200.e0503 misfdep(:,:)=1504 ij0 = 1 ; ij1 = 40505 DO jj = mj0(ij0), mj1(ij1)506 risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp507 END DO508 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp509 !510 ELSEIF ( cp_cfg == "isomip2" .AND. ln_isfcav ) THEN511 !512 risfdep(:,:)=0.e0513 misfdep(:,:)=1514 ij0 = 1 ; ij1 = 40515 DO jj = mj0(ij0), mj1(ij1)516 risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp517 END DO518 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp519 END IF520 480 ! 521 481 DEALLOCATE( idta, zdta ) … … 591 551 CALL iom_get ( inum, jpdom_data, 'isf_draft', risfdep ) 592 552 CALL iom_close( inum ) 593 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp594 595 ! set grounded point to 0596 ! (a treshold could be set here if needed, or set it offline based on the grounded fraction)597 WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin )598 misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp599 mbathy (:,:) = 0 ; bathy (:,:) = 0._wp600 END WHERE601 553 END IF 602 554 ! … … 633 585 ENDIF 634 586 ! 635 ! IF( nn_closea == 0 ) CALL clo_bat( bathy, mbathy ) !== NO closed seas or lakes ==!636 !637 587 IF ( .not. ln_sco ) THEN !== set a minimum depth ==! 638 588 IF( rn_hmin < 0._wp ) THEN ; ik = - INT( rn_hmin ) ! from a nb of level 639 589 ELSE ; ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 ) ! from a depth 640 590 ENDIF 641 zhmin = gdepw_1d(ik+1) 591 zhmin = gdepw_1d(ik+1) ! minimum depth = ik+1 w-levels 642 592 WHERE( bathy(:,:) <= 0._wp ) ; bathy(:,:) = 0._wp ! min=0 over the lands 643 ELSE WHERE 593 ELSE WHERE ( risfdep == 0._wp ); bathy(:,:) = MAX( zhmin , bathy(:,:) ) ! min=zhmin over the oceans 644 594 END WHERE 645 595 IF(lwp) write(numout,*) 'Minimum ocean depth: ', zhmin, ' minimum number of ocean levels : ', ik 646 596 ENDIF 647 597 ! 648 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_bat')649 !650 598 END SUBROUTINE zgr_bat 651 652 653 SUBROUTINE zgr_bat_zoom654 !!----------------------------------------------------------------------655 !! *** ROUTINE zgr_bat_zoom ***656 !!657 !! ** Purpose : - Close zoom domain boundary if necessary658 !! - Suppress Med Sea from ORCA R2 and R05 arctic zoom659 !!660 !! ** Method :661 !!662 !! ** Action : - update mbathy: level bathymetry (in level index)663 !!----------------------------------------------------------------------664 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers665 !!----------------------------------------------------------------------666 !667 IF(lwp) WRITE(numout,*)668 IF(lwp) WRITE(numout,*) ' zgr_bat_zoom : modify the level bathymetry for zoom domain'669 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~'670 !671 ! Zoom domain672 ! ===========673 !674 ! Forced closed boundary if required675 IF( lzoom_s ) mbathy( : , mj0(jpjzoom):mj1(jpjzoom) ) = 0676 IF( lzoom_w ) mbathy( mi0(jpizoom):mi1(jpizoom) , : ) = 0677 IF( lzoom_e ) mbathy( mi0(jpiglo+jpizoom-1):mi1(jpiglo+jpizoom-1) , : ) = 0678 IF( lzoom_n ) mbathy( : , mj0(jpjglo+jpjzoom-1):mj1(jpjglo+jpjzoom-1) ) = 0679 !680 ! Configuration specific domain modifications681 ! (here, ORCA arctic configuration: suppress Med Sea)682 IF( cp_cfg == "orca" .AND. cp_cfz == "arctic" ) THEN683 SELECT CASE ( jp_cfg )684 ! ! =======================685 CASE ( 2 ) ! ORCA_R2 configuration686 ! ! =======================687 IF(lwp) WRITE(numout,*) ' ORCA R2 arctic zoom: suppress the Med Sea'688 ii0 = 141 ; ii1 = 162 ! Sea box i,j indices689 ij0 = 98 ; ij1 = 110690 ! ! =======================691 CASE ( 05 ) ! ORCA_R05 configuration692 ! ! =======================693 IF(lwp) WRITE(numout,*) ' ORCA R05 arctic zoom: suppress the Med Sea'694 ii0 = 563 ; ii1 = 642 ! zero over the Med Sea boxe695 ij0 = 314 ; ij1 = 370696 END SELECT697 !698 mbathy( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0 ! zero over the Med Sea boxe699 !700 ENDIF701 !702 END SUBROUTINE zgr_bat_zoom703 704 599 705 600 SUBROUTINE zgr_bat_ctl … … 727 622 INTEGER :: ji, jj, jl ! dummy loop indices 728 623 INTEGER :: icompt, ibtest, ikmax ! temporary integers 729 REAL(wp), POINTER, DIMENSION(:,:) :: zbathy 730 !!---------------------------------------------------------------------- 731 ! 732 ! IF( nn_timing == 1 ) CALL timing_start('zgr_bat_ctl') 733 ! 734 CALL wrk_alloc( jpi, jpj, zbathy ) 624 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zbathy 625 !!---------------------------------------------------------------------- 626 ! 627 ALLOCATE(zbathy(jpi,jpj)) 735 628 ! 736 629 IF(lwp) WRITE(numout,*) … … 743 636 icompt = 0 744 637 DO jl = 1, 2 745 IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN638 IF( l_Iperio ) THEN 746 639 mbathy( 1 ,:) = mbathy(jpim1,:) ! local domain is cyclic east-west 747 640 mbathy(jpi,:) = mbathy( 2 ,:) 748 641 ENDIF 642 zbathy(:,:) = FLOAT( mbathy(:,:) ) 643 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 644 mbathy(:,:) = INT( zbathy(:,:) ) 645 749 646 DO jj = 2, jpjm1 750 647 DO ji = 2, jpim1 … … 760 657 END DO 761 658 END DO 762 ! IF( lk_mpp ) CALL mpp_sum( icompt ) 659 660 IF( lk_mpp ) CALL mpp_sum( 'domzgr', icompt ) 763 661 IF( icompt == 0 ) THEN 764 662 IF(lwp) WRITE(numout,*)' no isolated ocean grid points' … … 766 664 IF(lwp) WRITE(numout,*)' ',icompt,' ocean grid points suppressed' 767 665 ENDIF 768 IF( lk_mpp ) THEN 769 770 CALL lbc_lnk( 'toto',zbathy, 'T', 1._wp )771 772 ENDIF 666 667 zbathy(:,:) = FLOAT( mbathy(:,:) ) 668 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 669 mbathy(:,:) = INT( zbathy(:,:) ) 670 773 671 ! ! East-west cyclic boundary conditions 774 IF( nperio == 0 ) THEN775 IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: nperio = ', nperio672 IF( jperio == 0 ) THEN 673 IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: jperio = ', jperio 776 674 IF( lk_mpp ) THEN 777 675 IF( nbondi == -1 .OR. nbondi == 2 ) THEN … … 790 688 ENDIF 791 689 ENDIF 792 ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN793 IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: nperio = ', nperio690 ELSEIF( l_Iperio ) THEN 691 IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: jperio = ', jperio 794 692 mbathy( 1 ,:) = mbathy(jpim1,:) 795 693 mbathy(jpi,:) = mbathy( 2 ,:) 796 ELSEIF( nperio == 2 ) THEN797 IF(lwp) WRITE(numout,*) ' equatorial boundary conditions on mbathy: nperio = ', nperio694 ELSEIF( jperio == 2 ) THEN 695 IF(lwp) WRITE(numout,*) ' equatorial boundary conditions on mbathy: jperio = ', jperio 798 696 ELSE 799 697 IF(lwp) WRITE(numout,*) ' e r r o r' 800 IF(lwp) WRITE(numout,*) ' parameter , nperio = ', nperio698 IF(lwp) WRITE(numout,*) ' parameter , jperio = ', jperio 801 699 ! STOP 'dom_mba' 802 700 ENDIF 701 803 702 ! Boundary condition on mbathy 804 703 IF( .NOT.lk_mpp ) THEN … … 806 705 ! ... mono- or macro-tasking: T-point, >0, 2D array, no slab 807 706 zbathy(:,:) = FLOAT( mbathy(:,:) ) 808 CALL lbc_lnk( ' toto',zbathy, 'T', 1._wp )707 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 809 708 mbathy(:,:) = INT( zbathy(:,:) ) 810 709 ENDIF 710 811 711 ! Number of ocean level inferior or equal to jpkm1 812 ikmax = 0 813 DO jj = 1, jpj 814 DO ji = 1, jpi 815 ikmax = MAX( ikmax, mbathy(ji,jj) ) 816 END DO 817 END DO 818 !!gm !!! test to do: ikmax = MAX( mbathy(:,:) ) ??? 712 zbathy(:,:) = FLOAT( mbathy(:,:) ) 713 ikmax = glob_max( 'domzgr', zbathy(:,:) ) 714 819 715 IF( ikmax > jpkm1 ) THEN 820 716 IF(lwp) WRITE(numout,*) ' maximum number of ocean level = ', ikmax,' > jpk-1' … … 825 721 ENDIF 826 722 ! 827 CALL wrk_dealloc( jpi, jpj, zbathy ) 828 ! 829 !! IF( nn_timing == 1 ) CALL timing_stop('zgr_bat_ctl') 723 DEALLOCATE( zbathy ) 830 724 ! 831 725 END SUBROUTINE zgr_bat_ctl … … 845 739 !!---------------------------------------------------------------------- 846 740 INTEGER :: ji, jj ! dummy loop indices 847 REAL(wp), POINTER, DIMENSION(:,:) :: zmbk 848 !!---------------------------------------------------------------------- 849 ! 850 ! IF( nn_timing == 1 ) CALL timing_start('zgr_bot_level') 851 ! 852 CALL wrk_alloc( jpi, jpj, zmbk ) 741 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zmbk 742 !!---------------------------------------------------------------------- 743 ! 744 ALLOCATE( zmbk(jpi,jpj) ) 853 745 ! 854 746 IF(lwp) WRITE(numout,*) … … 866 758 END DO 867 759 ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 868 zmbk(:,:) = REAL( mbku(:,:), wp ) ; CALL lbc_lnk('toto',zmbk,'U',1.) ; mbku (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 869 zmbk(:,:) = REAL( mbkv(:,:), wp ) ; CALL lbc_lnk('toto',zmbk,'V',1.) ; mbkv (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 870 ! 871 CALL wrk_dealloc( jpi, jpj, zmbk ) 872 ! 873 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_bot_level') 760 zmbk(:,:) = REAL( mbku(:,:), wp ) ; CALL lbc_lnk('domzgr',zmbk,'U',1.) ; mbku (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 761 zmbk(:,:) = REAL( mbkv(:,:), wp ) ; CALL lbc_lnk('domzgr',zmbk,'V',1.) ; mbkv (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 762 ! 763 DEALLOCATE( zmbk ) 874 764 ! 875 765 END SUBROUTINE zgr_bot_level … … 889 779 !!---------------------------------------------------------------------- 890 780 INTEGER :: ji, jj ! dummy loop indices 891 REAL(wp), POINTER, DIMENSION(:,:) :: zmik 892 !!---------------------------------------------------------------------- 893 ! 894 ! IF( nn_timing == 1 ) CALL timing_start('zgr_top_level') 895 ! 896 CALL wrk_alloc( jpi, jpj, zmik ) 781 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zmik 782 !!---------------------------------------------------------------------- 783 ! 784 ALLOCATE( zmik(jpi,jpj) ) 897 785 ! 898 786 IF(lwp) WRITE(numout,*) … … 911 799 912 800 ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 913 zmik(:,:) = REAL( miku(:,:), wp ) ; CALL lbc_lnk('toto',zmik,'U',1.) ; miku (:,:) = MAX( INT( zmik(:,:) ), 1 ) 914 zmik(:,:) = REAL( mikv(:,:), wp ) ; CALL lbc_lnk('toto',zmik,'V',1.) ; mikv (:,:) = MAX( INT( zmik(:,:) ), 1 ) 915 zmik(:,:) = REAL( mikf(:,:), wp ) ; CALL lbc_lnk('toto',zmik,'F',1.) ; mikf (:,:) = MAX( INT( zmik(:,:) ), 1 ) 916 ! 917 CALL wrk_dealloc( jpi, jpj, zmik ) 918 ! 919 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_top_level') 801 zmik(:,:) = REAL( miku(:,:), wp ) ; CALL lbc_lnk('domzgr',zmik,'U',1.) ; miku (:,:) = MAX( INT( zmik(:,:) ), 1 ) 802 zmik(:,:) = REAL( mikv(:,:), wp ) ; CALL lbc_lnk('domzgr',zmik,'V',1.) ; mikv (:,:) = MAX( INT( zmik(:,:) ), 1 ) 803 zmik(:,:) = REAL( mikf(:,:), wp ) ; CALL lbc_lnk('domzgr',zmik,'F',1.) ; mikf (:,:) = MAX( INT( zmik(:,:) ), 1 ) 804 ! 805 DEALLOCATE( zmik ) 920 806 ! 921 807 END SUBROUTINE zgr_top_level … … 932 818 INTEGER :: jk 933 819 !!---------------------------------------------------------------------- 934 !935 ! IF( nn_timing == 1 ) CALL timing_start('zgr_zco')936 820 ! 937 821 DO jk = 1, jpk 938 822 gdept_0(:,:,jk) = gdept_1d(jk) 939 823 gdepw_0(:,:,jk) = gdepw_1d(jk) 940 gde3w_0(:,:,jk) = gdepw_1d(jk)941 824 e3t_0 (:,:,jk) = e3t_1d (jk) 942 825 e3u_0 (:,:,jk) = e3t_1d (jk) … … 947 830 e3vw_0 (:,:,jk) = e3w_1d (jk) 948 831 END DO 949 !950 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_zco')951 832 ! 952 833 END SUBROUTINE zgr_zco … … 1004 885 REAL(wp) :: zdiff ! temporary scalar 1005 886 REAL(wp) :: zmax ! temporary scalar 1006 REAL(wp), POINTER, DIMENSION(:,:,:) :: zprt887 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zprt 1007 888 !!--------------------------------------------------------------------- 1008 889 ! 1009 ! IF( nn_timing == 1 ) CALL timing_start('zgr_zps') 1010 ! 1011 CALL wrk_alloc( jpi,jpj,jpk, zprt ) 890 ALLOCATE( zprt(jpi,jpj,jpk) ) 1012 891 ! 1013 892 IF(lwp) WRITE(numout,*) … … 1015 894 IF(lwp) WRITE(numout,*) ' ~~~~~~~ ' 1016 895 IF(lwp) WRITE(numout,*) ' mbathy is recomputed : bathy_level file is NOT used' 896 897 ! compute position of the ice shelf grounding line 898 ! set bathy and isfdraft to 0 where grounded 899 IF ( ln_isfcav ) CALL zgr_isf_zspace 1017 900 1018 901 ! bathymetry in level (from bathy_meter) … … 1033 916 END DO 1034 917 918 ! Check compatibility between bathy and iceshelf draft 919 ! insure at least 2 wet level on the vertical under an ice shelf 920 ! compute misfdep and adjust isf draft if needed 921 IF ( ln_isfcav ) CALL zgr_isf_kspace 922 1035 923 ! Scale factors and depth at T- and W-points 1036 924 DO jk = 1, jpk ! intitialization to the reference z-coordinate … … 1041 929 END DO 1042 930 1043 ! Bathy, iceshelf draft, scale factor and depth at T- and W- points in case of isf1044 IF ( ln_isfcav ) CALL zgr_isf1045 1046 931 ! Scale factors and depth at T- and W-points 1047 IF ( .NOT. ln_isfcav ) THEN1048 DO jj = 1, jpj1049 DO ji = 1, jpi1050 ik = mbathy(ji,jj)1051 IF( ik > 0 ) THEN ! ocean point only1052 ! max ocean level case1053 IF( ik == jpkm1 ) THEN1054 zdepwp = bathy(ji,jj)1055 ze3tp = bathy(ji,jj) - gdepw_1d(ik)1056 ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) )1057 e3t_0(ji,jj,ik ) = ze3tp1058 e3t_0(ji,jj,ik+1) = ze3tp1059 e3w_0(ji,jj,ik ) = ze3wp1060 e3w_0(ji,jj,ik+1) = ze3tp1061 gdepw_0(ji,jj,ik+1) = zdepwp1062 gdept_0(ji,jj,ik ) = gdept_1d(ik-1) + ze3wp1063 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp1064 !1065 ELSE ! standard case1066 IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN ; gdepw_0(ji,jj,ik+1) = bathy(ji,jj)1067 ELSE ; gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1)1068 ENDIF1069 !gm Bug? check the gdepw_1d1070 ! ... on ik1071 gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) ) &1072 & * ((gdept_1d( ik ) - gdepw_1d(ik) ) &1073 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) ))1074 e3t_0 (ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) ) &1075 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) )1076 e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) ) &1077 & * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) )1078 ! ... on ik+11079 e3w_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik)1080 e3t_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik)1081 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik)1082 ENDIF1083 ENDIF1084 END DO1085 END DO1086 !1087 it = 01088 DO jj = 1, jpj1089 DO ji = 1, jpi1090 ik = mbathy(ji,jj)1091 IF( ik > 0 ) THEN ! ocean point only1092 e3tp (ji,jj) = e3t_0(ji,jj,ik)1093 e3wp (ji,jj) = e3w_0(ji,jj,ik)1094 ! test1095 zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik )1096 IF( zdiff <= 0._wp .AND. lwp ) THEN1097 it = it + 11098 WRITE(numout,*) ' it = ', it, ' ik = ', ik, ' (i,j) = ', ji, jj1099 WRITE(numout,*) ' bathy = ', bathy(ji,jj)1100 WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff1101 WRITE(numout,*) ' e3tp = ', e3t_0 (ji,jj,ik), ' e3wp = ', e3w_0 (ji,jj,ik )1102 ENDIF1103 ENDIF1104 END DO1105 END DO1106 END IF1107 !1108 ! Scale factors and depth at U-, V-, UW and VW-points1109 DO jk = 1, jpk ! initialisation to z-scale factors1110 e3u_0 (:,:,jk) = e3t_1d(jk)1111 e3v_0 (:,:,jk) = e3t_1d(jk)1112 e3uw_0(:,:,jk) = e3w_1d(jk)1113 e3vw_0(:,:,jk) = e3w_1d(jk)1114 END DO1115 1116 DO jk = 1,jpk ! Computed as the minimum of neighbooring scale factors1117 DO jj = 1, jpjm11118 DO ji = 1, jpim1 ! vector opt.1119 e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) )1120 e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) )1121 e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) )1122 e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) )1123 END DO1124 END DO1125 END DO1126 IF ( ln_isfcav ) THEN1127 ! (ISF) define e3uw (adapted for 2 cells in the water column)1128 DO jj = 2, jpjm11129 DO ji = 2, jpim1 ! vector opt.1130 ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj))1131 ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj))1132 IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) = MIN( gdept_0(ji,jj,ikb ), gdept_0(ji+1,jj ,ikb ) ) &1133 & - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj ,ikb-1) )1134 ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1))1135 ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1))1136 IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) = MIN( gdept_0(ji,jj,ikb ), gdept_0(ji ,jj+1,ikb ) ) &1137 & - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji ,jj+1,ikb-1) )1138 END DO1139 END DO1140 END IF1141 1142 CALL lbc_lnk('toto', e3u_0 , 'U', 1._wp ) ; CALL lbc_lnk('toto', e3uw_0, 'U', 1._wp ) ! lateral boundary conditions1143 CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp ) ; CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp )1144 !1145 1146 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries)1147 WHERE( e3u_0 (:,:,jk) == 0._wp ) e3u_0 (:,:,jk) = e3t_1d(jk)1148 WHERE( e3v_0 (:,:,jk) == 0._wp ) e3v_0 (:,:,jk) = e3t_1d(jk)1149 WHERE( e3uw_0(:,:,jk) == 0._wp ) e3uw_0(:,:,jk) = e3w_1d(jk)1150 WHERE( e3vw_0(:,:,jk) == 0._wp ) e3vw_0(:,:,jk) = e3w_1d(jk)1151 END DO1152 1153 ! Scale factor at F-point1154 DO jk = 1, jpk ! initialisation to z-scale factors1155 e3f_0(:,:,jk) = e3t_1d(jk)1156 END DO1157 DO jk = 1, jpk ! Computed as the minimum of neighbooring V-scale factors1158 DO jj = 1, jpjm11159 DO ji = 1, jpim1 ! vector opt.1160 e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) )1161 END DO1162 END DO1163 END DO1164 CALL lbc_lnk('toto', e3f_0, 'F', 1._wp ) ! Lateral boundary conditions1165 !1166 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries)1167 WHERE( e3f_0(:,:,jk) == 0._wp ) e3f_0(:,:,jk) = e3t_1d(jk)1168 END DO1169 !!gm bug ? : must be a do loop with mj0,mj11170 !1171 e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:) ! we duplicate factor scales for jj = 1 and jj = 21172 e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)1173 e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)1174 e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)1175 e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)1176 1177 ! Control of the sign1178 IF( MINVAL( e3t_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3t_0 <= 0' )1179 IF( MINVAL( e3w_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3w_0 <= 0' )1180 IF( MINVAL( gdept_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdept_0 < 0' )1181 IF( MINVAL( gdepw_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdepw_0 < 0' )1182 1183 ! Compute gde3w_0 (vertical sum of e3w)1184 IF ( ln_isfcav ) THEN ! if cavity1185 WHERE( misfdep == 0 ) misfdep = 11186 DO jj = 1,jpj1187 DO ji = 1,jpi1188 gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1)1189 DO jk = 2, misfdep(ji,jj)1190 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)1191 END DO1192 IF( misfdep(ji,jj) >= 2 ) gde3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj))1193 DO jk = misfdep(ji,jj) + 1, jpk1194 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)1195 END DO1196 END DO1197 END DO1198 ELSE ! no cavity1199 gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1)1200 DO jk = 2, jpk1201 gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk)1202 END DO1203 END IF1204 !1205 CALL wrk_dealloc( jpi,jpj,jpk, zprt )1206 !1207 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_zps')1208 !1209 END SUBROUTINE zgr_zps1210 1211 1212 SUBROUTINE zgr_isf1213 !!----------------------------------------------------------------------1214 !! *** ROUTINE zgr_isf ***1215 !!1216 !! ** Purpose : check the bathymetry in levels1217 !!1218 !! ** Method : THe water column have to contained at least 2 cells1219 !! Bathymetry and isfdraft are modified (dig/close) to respect1220 !! this criterion.1221 !!1222 !! ** Action : - test compatibility between isfdraft and bathy1223 !! - bathy and isfdraft are modified1224 !!----------------------------------------------------------------------1225 INTEGER :: ji, jj, jl, jk ! dummy loop indices1226 INTEGER :: ik, it ! temporary integers1227 INTEGER :: icompt, ibtest ! (ISF)1228 INTEGER :: ibtestim1, ibtestip1 ! (ISF)1229 INTEGER :: ibtestjm1, ibtestjp1 ! (ISF)1230 REAL(wp) :: zdepth ! Ajusted ocean depth to avoid too small e3t1231 REAL(wp) :: zmax ! Maximum and minimum depth1232 REAL(wp) :: zbathydiff ! isf temporary scalar1233 REAL(wp) :: zrisfdepdiff ! isf temporary scalar1234 REAL(wp) :: ze3tp , ze3wp ! Last ocean level thickness at T- and W-points1235 REAL(wp) :: zdepwp ! Ajusted ocean depth to avoid too small e3t1236 REAL(wp) :: zdiff ! temporary scalar1237 REAL(wp), POINTER, DIMENSION(:,:) :: zrisfdep, zbathy, zmask ! 2D workspace (ISH)1238 INTEGER , POINTER, DIMENSION(:,:) :: zmbathy, zmisfdep ! 2D workspace (ISH)1239 !!---------------------------------------------------------------------1240 !1241 !! IF( nn_timing == 1 ) CALL timing_start('zgr_isf')1242 !1243 CALL wrk_alloc( jpi,jpj, zbathy, zmask, zrisfdep)1244 CALL wrk_alloc( jpi,jpj, zmisfdep, zmbathy )1245 1246 ! (ISF) compute misfdep1247 WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ; misfdep(:,:) = 1 ! open water : set misfdep to 11248 ELSEWHERE ; misfdep(:,:) = 2 ! iceshelf : initialize misfdep to second level1249 END WHERE1250 1251 ! Compute misfdep for ocean points (i.e. first wet level)1252 ! find the first ocean level such that the first level thickness1253 ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where1254 ! e3t_0 is the reference level thickness1255 DO jk = 2, jpkm11256 zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1257 WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth ) misfdep(:,:) = jk+11258 END DO1259 WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) )1260 risfdep(:,:) = 0. ; misfdep(:,:) = 11261 END WHERE1262 1263 ! remove very shallow ice shelf (less than ~ 10m if 75L)1264 WHERE (risfdep(:,:) <= 10._wp .AND. misfdep(:,:) > 1)1265 misfdep = 0; risfdep = 0.0_wp;1266 mbathy = 0; bathy = 0.0_wp;1267 END WHERE1268 WHERE (bathy(:,:) <= 30.0_wp .AND. gphit < -60._wp)1269 misfdep = 0; risfdep = 0.0_wp;1270 mbathy = 0; bathy = 0.0_wp;1271 END WHERE1272 1273 ! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation1274 icompt = 01275 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together1276 DO jl = 1, 101277 ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments)1278 WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin)1279 misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp1280 mbathy (:,:) = 0 ; bathy (:,:) = 0._wp1281 END WHERE1282 WHERE (mbathy(:,:) <= 0)1283 misfdep(:,:) = 0; risfdep(:,:) = 0._wp1284 mbathy (:,:) = 0; bathy (:,:) = 0._wp1285 END WHERE1286 IF( lk_mpp ) THEN1287 zbathy(:,:) = FLOAT( misfdep(:,:) )1288 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1289 misfdep(:,:) = INT( zbathy(:,:) )1290 1291 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1292 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1293 1294 zbathy(:,:) = FLOAT( mbathy(:,:) )1295 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1296 mbathy(:,:) = INT( zbathy(:,:) )1297 ENDIF1298 IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN1299 misfdep( 1 ,:) = misfdep(jpim1,:) ! local domain is cyclic east-west1300 misfdep(jpi,:) = misfdep( 2 ,:)1301 mbathy( 1 ,:) = mbathy(jpim1,:) ! local domain is cyclic east-west1302 mbathy(jpi,:) = mbathy( 2 ,:)1303 ENDIF1304 1305 ! split last cell if possible (only where water column is 2 cell or less)1306 ! if coupled to ice sheet, we do not modify the bathymetry (can be discuss).1307 IF ( .NOT. ln_iscpl) THEN1308 DO jk = jpkm1, 1, -11309 zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1310 WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy)1311 mbathy(:,:) = jk1312 bathy(:,:) = zmax1313 END WHERE1314 END DO1315 END IF1316 1317 ! split top cell if possible (only where water column is 2 cell or less)1318 DO jk = 2, jpkm11319 zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1320 WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy)1321 misfdep(:,:) = jk1322 risfdep(:,:) = zmax1323 END WHERE1324 END DO1325 1326 1327 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition1328 DO jj = 1, jpj1329 DO ji = 1, jpi1330 ! find the minimum change option:1331 ! test bathy1332 IF (risfdep(ji,jj) > 1) THEN1333 IF ( .NOT. ln_iscpl ) THEN1334 zbathydiff =ABS(bathy(ji,jj) - (gdepw_1d(mbathy (ji,jj)+1) &1335 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat )))1336 zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj) ) &1337 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )))1338 IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN1339 IF (zbathydiff <= zrisfdepdiff) THEN1340 bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat )1341 mbathy(ji,jj)= mbathy(ji,jj) + 11342 ELSE1343 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )1344 misfdep(ji,jj) = misfdep(ji,jj) - 11345 END IF1346 ENDIF1347 ELSE1348 IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN1349 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )1350 misfdep(ji,jj) = misfdep(ji,jj) - 11351 END IF1352 END IF1353 END IF1354 END DO1355 END DO1356 1357 ! At least 2 levels for water thickness at T, U, and V point.1358 DO jj = 1, jpj1359 DO ji = 1, jpi1360 ! find the minimum change option:1361 ! test bathy1362 IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1363 IF ( .NOT. ln_iscpl ) THEN1364 zbathydiff =ABS(bathy(ji,jj) - ( gdepw_1d(mbathy (ji,jj)+1) &1365 & + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat )))1366 zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj) ) &1367 & - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )))1368 IF (zbathydiff <= zrisfdepdiff) THEN1369 mbathy(ji,jj) = mbathy(ji,jj) + 11370 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat )1371 ELSE1372 misfdep(ji,jj)= misfdep(ji,jj) - 11373 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat )1374 END IF1375 ELSE1376 misfdep(ji,jj)= misfdep(ji,jj) - 11377 risfdep(ji,jj)= gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat )1378 END IF1379 ENDIF1380 END DO1381 END DO1382 1383 ! point V mbathy(ji,jj) == misfdep(ji,jj+1)1384 DO jj = 1, jpjm11385 DO ji = 1, jpim11386 IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1387 IF ( .NOT. ln_iscpl ) THEN1388 zbathydiff =ABS(bathy(ji,jj ) - ( gdepw_1d(mbathy (ji,jj)+1) &1389 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj )+1)*e3zps_rat )))1390 zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) &1391 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat )))1392 IF (zbathydiff <= zrisfdepdiff) THEN1393 mbathy(ji,jj) = mbathy(ji,jj) + 11394 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj )+1)*e3zps_rat )1395 ELSE1396 misfdep(ji,jj+1) = misfdep(ji,jj+1) - 11397 risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat )1398 END IF1399 ELSE1400 misfdep(ji,jj+1) = misfdep(ji,jj+1) - 11401 risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat )1402 END IF1403 ENDIF1404 END DO1405 END DO1406 1407 IF( lk_mpp ) THEN1408 zbathy(:,:) = FLOAT( misfdep(:,:) )1409 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1410 misfdep(:,:) = INT( zbathy(:,:) )1411 1412 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1413 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1414 1415 zbathy(:,:) = FLOAT( mbathy(:,:) )1416 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1417 mbathy(:,:) = INT( zbathy(:,:) )1418 ENDIF1419 ! point V misdep(ji,jj) == mbathy(ji,jj+1)1420 DO jj = 1, jpjm11421 DO ji = 1, jpim11422 IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN1423 IF ( .NOT. ln_iscpl ) THEN1424 zbathydiff =ABS( bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) &1425 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat )))1426 zrisfdepdiff=ABS(risfdep(ji,jj ) - ( gdepw_1d(misfdep(ji,jj ) ) &1427 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj )-1)*e3zps_rat )))1428 IF (zbathydiff <= zrisfdepdiff) THEN1429 mbathy (ji,jj+1) = mbathy(ji,jj+1) + 11430 bathy (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1) ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat )1431 ELSE1432 misfdep(ji,jj) = misfdep(ji,jj) - 11433 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj ) )*e3zps_rat )1434 END IF1435 ELSE1436 misfdep(ji,jj) = misfdep(ji,jj) - 11437 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj ) )*e3zps_rat )1438 END IF1439 ENDIF1440 END DO1441 END DO1442 1443 1444 IF( lk_mpp ) THEN1445 zbathy(:,:) = FLOAT( misfdep(:,:) )1446 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1447 misfdep(:,:) = INT( zbathy(:,:) )1448 1449 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1450 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1451 1452 zbathy(:,:) = FLOAT( mbathy(:,:) )1453 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1454 mbathy(:,:) = INT( zbathy(:,:) )1455 ENDIF1456 1457 ! point U mbathy(ji,jj) == misfdep(ji,jj+1)1458 DO jj = 1, jpjm11459 DO ji = 1, jpim11460 IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1461 IF ( .NOT. ln_iscpl ) THEN1462 zbathydiff =ABS( bathy(ji ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) &1463 & + MIN( e3zps_min, e3t_1d(mbathy (ji ,jj)+1)*e3zps_rat )))1464 zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) &1465 & - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat )))1466 IF (zbathydiff <= zrisfdepdiff) THEN1467 mbathy(ji,jj) = mbathy(ji,jj) + 11468 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat )1469 ELSE1470 misfdep(ji+1,jj)= misfdep(ji+1,jj) - 11471 risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat )1472 END IF1473 ELSE1474 misfdep(ji+1,jj)= misfdep(ji+1,jj) - 11475 risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat )1476 ENDIF1477 ENDIF1478 ENDDO1479 ENDDO1480 1481 IF( lk_mpp ) THEN1482 zbathy(:,:) = FLOAT( misfdep(:,:) )1483 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1484 misfdep(:,:) = INT( zbathy(:,:) )1485 1486 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1487 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1488 1489 zbathy(:,:) = FLOAT( mbathy(:,:) )1490 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1491 mbathy(:,:) = INT( zbathy(:,:) )1492 ENDIF1493 1494 ! point U misfdep(ji,jj) == bathy(ji,jj+1)1495 DO jj = 1, jpjm11496 DO ji = 1, jpim11497 IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) > 1) THEN1498 IF ( .NOT. ln_iscpl ) THEN1499 zbathydiff =ABS( bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) &1500 & + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat )))1501 zrisfdepdiff=ABS(risfdep(ji ,jj) - ( gdepw_1d(misfdep(ji ,jj) ) &1502 & - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj)-1)*e3zps_rat )))1503 IF (zbathydiff <= zrisfdepdiff) THEN1504 mbathy(ji+1,jj) = mbathy (ji+1,jj) + 11505 bathy (ji+1,jj) = gdepw_1d(mbathy (ji+1,jj) ) + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat )1506 ELSE1507 misfdep(ji,jj) = misfdep(ji ,jj) - 11508 risfdep(ji,jj) = gdepw_1d(misfdep(ji ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj) )*e3zps_rat )1509 END IF1510 ELSE1511 misfdep(ji,jj) = misfdep(ji ,jj) - 11512 risfdep(ji,jj) = gdepw_1d(misfdep(ji ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj) )*e3zps_rat )1513 ENDIF1514 ENDIF1515 ENDDO1516 ENDDO1517 1518 IF( lk_mpp ) THEN1519 zbathy(:,:) = FLOAT( misfdep(:,:) )1520 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1521 misfdep(:,:) = INT( zbathy(:,:) )1522 1523 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1524 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1525 1526 zbathy(:,:) = FLOAT( mbathy(:,:) )1527 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1528 mbathy(:,:) = INT( zbathy(:,:) )1529 ENDIF1530 END DO1531 ! end dig bathy/ice shelf to be compatible1532 ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness1533 DO jl = 1,201534 1535 ! remove single point "bay" on isf coast line in the ice shelf draft'1536 DO jk = 2, jpk1537 WHERE (misfdep==0) misfdep=jpk1538 zmask=0._wp1539 WHERE (misfdep <= jk) zmask=11540 DO jj = 2, jpjm11541 DO ji = 2, jpim11542 IF (misfdep(ji,jj) == jk) THEN1543 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1)1544 IF (ibtest <= 1) THEN1545 risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+11546 IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk1547 END IF1548 END IF1549 END DO1550 END DO1551 END DO1552 WHERE (misfdep==jpk)1553 misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp1554 END WHERE1555 IF( lk_mpp ) THEN1556 zbathy(:,:) = FLOAT( misfdep(:,:) )1557 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1558 misfdep(:,:) = INT( zbathy(:,:) )1559 1560 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1561 CALL lbc_lnk('toto', bathy, 'T', 1. )1562 1563 zbathy(:,:) = FLOAT( mbathy(:,:) )1564 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1565 mbathy(:,:) = INT( zbathy(:,:) )1566 ENDIF1567 1568 ! remove single point "bay" on bathy coast line beneath an ice shelf'1569 DO jk = jpk,1,-11570 zmask=0._wp1571 WHERE (mbathy >= jk ) zmask=11572 DO jj = 2, jpjm11573 DO ji = 2, jpim11574 IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN1575 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1)1576 IF (ibtest <= 1) THEN1577 bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-11578 IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 01579 END IF1580 END IF1581 END DO1582 END DO1583 END DO1584 WHERE (mbathy==0)1585 misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp1586 END WHERE1587 IF( lk_mpp ) THEN1588 zbathy(:,:) = FLOAT( misfdep(:,:) )1589 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1590 misfdep(:,:) = INT( zbathy(:,:) )1591 1592 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1593 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1594 1595 zbathy(:,:) = FLOAT( mbathy(:,:) )1596 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1597 mbathy(:,:) = INT( zbathy(:,:) )1598 ENDIF1599 1600 ! fill hole in ice shelf1601 zmisfdep = misfdep1602 zrisfdep = risfdep1603 WHERE (zmisfdep <= 1._wp) zmisfdep=jpk1604 DO jj = 2, jpjm11605 DO ji = 2, jpim11606 ibtestim1 = zmisfdep(ji-1,jj ) ; ibtestip1 = zmisfdep(ji+1,jj )1607 ibtestjm1 = zmisfdep(ji ,jj-1) ; ibtestjp1 = zmisfdep(ji ,jj+1)1608 IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj ) ) ibtestim1 = jpk1609 IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj ) ) ibtestip1 = jpk1610 IF( zmisfdep(ji,jj) >= mbathy(ji ,jj-1) ) ibtestjm1 = jpk1611 IF( zmisfdep(ji,jj) >= mbathy(ji ,jj+1) ) ibtestjp1 = jpk1612 ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1)1613 IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN1614 mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp1615 END IF1616 IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN1617 misfdep(ji,jj) = ibtest1618 risfdep(ji,jj) = gdepw_1d(ibtest)1619 ENDIF1620 ENDDO1621 ENDDO1622 1623 IF( lk_mpp ) THEN1624 zbathy(:,:) = FLOAT( misfdep(:,:) )1625 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1626 misfdep(:,:) = INT( zbathy(:,:) )1627 1628 CALL lbc_lnk( 'toto',risfdep, 'T', 1. )1629 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1630 1631 zbathy(:,:) = FLOAT( mbathy(:,:) )1632 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1633 mbathy(:,:) = INT( zbathy(:,:) )1634 ENDIF1635 !1636 !! fill hole in bathymetry1637 zmbathy (:,:)=mbathy (:,:)1638 DO jj = 2, jpjm11639 DO ji = 2, jpim11640 ibtestim1 = zmbathy(ji-1,jj ) ; ibtestip1 = zmbathy(ji+1,jj )1641 ibtestjm1 = zmbathy(ji ,jj-1) ; ibtestjp1 = zmbathy(ji ,jj+1)1642 IF( zmbathy(ji,jj) < misfdep(ji-1,jj ) ) ibtestim1 = 01643 IF( zmbathy(ji,jj) < misfdep(ji+1,jj ) ) ibtestip1 = 01644 IF( zmbathy(ji,jj) < misfdep(ji ,jj-1) ) ibtestjm1 = 01645 IF( zmbathy(ji,jj) < misfdep(ji ,jj+1) ) ibtestjp1 = 01646 ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1)1647 IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN1648 mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ;1649 END IF1650 IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN1651 mbathy(ji,jj) = ibtest1652 bathy(ji,jj) = gdepw_1d(ibtest+1)1653 ENDIF1654 END DO1655 END DO1656 IF( lk_mpp ) THEN1657 zbathy(:,:) = FLOAT( misfdep(:,:) )1658 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1659 misfdep(:,:) = INT( zbathy(:,:) )1660 1661 CALL lbc_lnk( 'toto',risfdep, 'T', 1. )1662 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1663 1664 zbathy(:,:) = FLOAT( mbathy(:,:) )1665 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1666 mbathy(:,:) = INT( zbathy(:,:) )1667 ENDIF1668 ! if not compatible after all check (ie U point water column less than 2 cells), mask U1669 DO jj = 1, jpjm11670 DO ji = 1, jpim11671 IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN1672 mbathy(ji,jj) = mbathy(ji,jj) - 1 ; bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)+1) ;1673 END IF1674 END DO1675 END DO1676 IF( lk_mpp ) THEN1677 zbathy(:,:) = FLOAT( misfdep(:,:) )1678 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1679 misfdep(:,:) = INT( zbathy(:,:) )1680 1681 CALL lbc_lnk('toto', risfdep, 'T', 1. )1682 CALL lbc_lnk('toto', bathy, 'T', 1. )1683 1684 zbathy(:,:) = FLOAT( mbathy(:,:) )1685 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1686 mbathy(:,:) = INT( zbathy(:,:) )1687 ENDIF1688 ! if not compatible after all check (ie U point water column less than 2 cells), mask U1689 DO jj = 1, jpjm11690 DO ji = 1, jpim11691 IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN1692 mbathy(ji+1,jj) = mbathy(ji+1,jj) - 1; bathy(ji+1,jj) = gdepw_1d(mbathy(ji+1,jj)+1) ;1693 END IF1694 END DO1695 END DO1696 IF( lk_mpp ) THEN1697 zbathy(:,:) = FLOAT( misfdep(:,:) )1698 CALL lbc_lnk('toto', zbathy, 'T', 1. )1699 misfdep(:,:) = INT( zbathy(:,:) )1700 1701 CALL lbc_lnk('toto', risfdep,'T', 1. )1702 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1703 1704 zbathy(:,:) = FLOAT( mbathy(:,:) )1705 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1706 mbathy(:,:) = INT( zbathy(:,:) )1707 ENDIF1708 ! if not compatible after all check (ie V point water column less than 2 cells), mask V1709 DO jj = 1, jpjm11710 DO ji = 1, jpi1711 IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN1712 mbathy(ji,jj) = mbathy(ji,jj) - 1 ; bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)+1) ;1713 END IF1714 END DO1715 END DO1716 IF( lk_mpp ) THEN1717 zbathy(:,:) = FLOAT( misfdep(:,:) )1718 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1719 misfdep(:,:) = INT( zbathy(:,:) )1720 1721 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1722 CALL lbc_lnk('toto', bathy, 'T', 1. )1723 1724 zbathy(:,:) = FLOAT( mbathy(:,:) )1725 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1726 mbathy(:,:) = INT( zbathy(:,:) )1727 ENDIF1728 ! if not compatible after all check (ie V point water column less than 2 cells), mask V1729 DO jj = 1, jpjm11730 DO ji = 1, jpi1731 IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN1732 mbathy(ji,jj+1) = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ;1733 END IF1734 END DO1735 END DO1736 IF( lk_mpp ) THEN1737 zbathy(:,:) = FLOAT( misfdep(:,:) )1738 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1739 misfdep(:,:) = INT( zbathy(:,:) )1740 1741 CALL lbc_lnk( 'toto',risfdep,'T', 1. )1742 CALL lbc_lnk( 'toto',bathy, 'T', 1. )1743 1744 zbathy(:,:) = FLOAT( mbathy(:,:) )1745 CALL lbc_lnk( 'toto',zbathy, 'T', 1. )1746 mbathy(:,:) = INT( zbathy(:,:) )1747 ENDIF1748 ! if not compatible after all check, mask T1749 DO jj = 1, jpj1750 DO ji = 1, jpi1751 IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN1752 misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0._wp ;1753 END IF1754 END DO1755 END DO1756 1757 WHERE (mbathy(:,:) == 1)1758 mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp1759 END WHERE1760 END DO1761 ! end check compatibility ice shelf/bathy1762 ! remove very shallow ice shelf (less than ~ 10m if 75L)1763 WHERE (risfdep(:,:) <= 10._wp)1764 misfdep = 1; risfdep = 0.0_wp;1765 END WHERE1766 1767 IF( icompt == 0 ) THEN1768 IF(lwp) WRITE(numout,*)' no points with ice shelf too close to bathymetry'1769 ELSE1770 IF(lwp) WRITE(numout,*)' ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'1771 ENDIF1772 1773 ! compute scale factor and depth at T- and W- points1774 932 DO jj = 1, jpj 1775 933 DO ji = 1, jpi … … 1793 951 ELSE ; gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 1794 952 ENDIF 1795 ! gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1)1796 953 !gm Bug? check the gdepw_1d 1797 954 ! ... on ik … … 1799 956 & * ((gdept_1d( ik ) - gdepw_1d(ik) ) & 1800 957 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) )) 1801 e3t_0 (ji,jj,ik ) = gdepw_0(ji,jj,ik+1) - gdepw_1d(ik ) 1802 e3w_0 (ji,jj,ik ) = gdept_0(ji,jj,ik ) - gdept_1d(ik-1) 958 e3t_0 (ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) ) & 959 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) ) 960 e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) ) & 961 & * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 1803 962 ! ... on ik+1 1804 963 e3w_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik) 1805 964 e3t_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik) 965 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 1806 966 ENDIF 1807 967 ENDIF … … 1829 989 END DO 1830 990 ! 1831 ! (ISF) Definition of e3t, u, v, w for ISF case 1832 DO jj = 1, jpj 1833 DO ji = 1, jpi 1834 ik = misfdep(ji,jj) 1835 IF( ik > 1 ) THEN ! ice shelf point only 1836 IF( risfdep(ji,jj) < gdepw_1d(ik) ) risfdep(ji,jj)= gdepw_1d(ik) 1837 gdepw_0(ji,jj,ik) = risfdep(ji,jj) 1838 !gm Bug? check the gdepw_0 1839 ! ... on ik 1840 gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) ) & 1841 & * ( gdepw_1d(ik+1) - gdept_1d(ik) ) & 1842 & / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) 1843 e3t_0 (ji,jj,ik ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) 1844 e3w_0 (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 1845 1846 IF( ik + 1 == mbathy(ji,jj) ) THEN ! ice shelf point only (2 cell water column) 1847 e3w_0 (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik) 1848 ENDIF 1849 ! ... on ik / ik-1 1850 e3w_0 (ji,jj,ik ) = e3t_0 (ji,jj,ik) !2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik)) 1851 gdept_0(ji,jj,ik-1) = gdept_0(ji,jj,ik) - e3w_0(ji,jj,ik) 1852 e3t_0 (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 1853 e3w_0 (ji,jj,ik-1) = gdept_0(ji,jj,ik-1) - gdept_1d(ik-2) 1854 gdepw_0(ji,jj,ik-1) = gdepw_0(ji,jj,ik) - e3t_0(ji,jj,ik-1) 1855 ENDIF 1856 END DO 1857 END DO 1858 1859 it = 0 1860 DO jj = 1, jpj 1861 DO ji = 1, jpi 1862 ik = misfdep(ji,jj) 1863 IF( ik > 1 ) THEN ! ice shelf point only 1864 e3tp (ji,jj) = e3t_0(ji,jj,ik ) 1865 e3wp (ji,jj) = e3w_0(ji,jj,ik+1 ) 1866 ! test 1867 zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik ) 1868 IF( zdiff <= 0. .AND. lwp ) THEN 1869 it = it + 1 1870 WRITE(numout,*) ' it = ', it, ' ik = ', ik, ' (i,j) = ', ji, jj 1871 WRITE(numout,*) ' risfdep = ', risfdep(ji,jj) 1872 WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 1873 WRITE(numout,*) ' e3tp = ', e3tp(ji,jj), ' e3wp = ', e3wp(ji,jj) 1874 ENDIF 1875 ENDIF 1876 END DO 1877 END DO 1878 1879 CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 1880 CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 1881 ! 1882 ! IF( nn_timing == 1 ) CALL timing_stop('zgr_isf') 1883 ! 1884 END SUBROUTINE zgr_isf 1885 991 ! compute top scale factor if ice shelf 992 IF (ln_isfcav) CALL zps_isf 993 ! 994 ! Scale factors and depth at U-, V-, UW and VW-points 995 DO jk = 1, jpk ! initialisation to z-scale factors 996 e3u_0 (:,:,jk) = e3t_1d(jk) 997 e3v_0 (:,:,jk) = e3t_1d(jk) 998 e3uw_0(:,:,jk) = e3w_1d(jk) 999 e3vw_0(:,:,jk) = e3w_1d(jk) 1000 END DO 1001 1002 DO jk = 1,jpk ! Computed as the minimum of neighbooring scale factors 1003 DO jj = 1, jpjm1 1004 DO ji = 1, jpim1 ! vector opt. 1005 e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 1006 e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 1007 e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 1008 e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 1009 END DO 1010 END DO 1011 END DO 1012 1013 ! update e3uw in case only 2 cells in the water column 1014 IF ( ln_isfcav ) CALL zps_isf_e3uv_w 1015 ! 1016 CALL lbc_lnk('domzgr', e3u_0 , 'U', 1._wp ) ; CALL lbc_lnk('domzgr', e3uw_0, 'U', 1._wp ) ! lateral boundary conditions 1017 CALL lbc_lnk('domzgr', e3v_0 , 'V', 1._wp ) ; CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 1018 ! 1019 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 1020 WHERE( e3u_0 (:,:,jk) == 0._wp ) e3u_0 (:,:,jk) = e3t_1d(jk) 1021 WHERE( e3v_0 (:,:,jk) == 0._wp ) e3v_0 (:,:,jk) = e3t_1d(jk) 1022 WHERE( e3uw_0(:,:,jk) == 0._wp ) e3uw_0(:,:,jk) = e3w_1d(jk) 1023 WHERE( e3vw_0(:,:,jk) == 0._wp ) e3vw_0(:,:,jk) = e3w_1d(jk) 1024 END DO 1025 1026 ! Scale factor at F-point 1027 DO jk = 1, jpk ! initialisation to z-scale factors 1028 e3f_0(:,:,jk) = e3t_1d(jk) 1029 END DO 1030 DO jk = 1, jpk ! Computed as the minimum of neighbooring V-scale factors 1031 DO jj = 1, jpjm1 1032 DO ji = 1, jpim1 ! vector opt. 1033 e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 1034 END DO 1035 END DO 1036 END DO 1037 CALL lbc_lnk('domzgr', e3f_0, 'F', 1._wp ) ! Lateral boundary conditions 1038 ! 1039 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 1040 WHERE( e3f_0(:,:,jk) == 0._wp ) e3f_0(:,:,jk) = e3t_1d(jk) 1041 END DO 1042 !!gm bug ? : must be a do loop with mj0,mj1 1043 ! 1044 e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:) ! we duplicate factor scales for jj = 1 and jj = 2 1045 e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:) 1046 e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:) 1047 e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:) 1048 e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:) 1049 1050 ! Control of the sign 1051 IF( MINVAL( e3t_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3t_0 <= 0' ) 1052 IF( MINVAL( e3w_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3w_0 <= 0' ) 1053 IF( MINVAL( gdept_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdept_0 < 0' ) 1054 IF( MINVAL( gdepw_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdepw_0 < 0' ) 1055 ! 1056 ! if in the future gde3w_0 need to be compute, use the function defined in NEMO 1057 ! for now gde3w_0 computation is removed as not an output of domcfg 1058 1059 DEALLOCATE( zprt ) 1060 ! 1061 END SUBROUTINE zgr_zps 1886 1062 1887 1063 SUBROUTINE zgr_sco … … 1935 1111 REAL(wp) :: zrfact 1936 1112 ! 1937 REAL(wp), POINTER, DIMENSION(:,: ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj21938 REAL(wp), POINTER, DIMENSION(:,: ) :: zenv, ztmp, zmsk, zri, zrj, zhbat1113 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 1114 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 1939 1115 !! 1940 1116 NAMELIST/namzgr_sco/ln_s_sh94, ln_s_sf12, ln_sigcrit, rn_sbot_min, rn_sbot_max, rn_hc, rn_rmax,rn_theta, & … … 1942 1118 !!---------------------------------------------------------------------- 1943 1119 ! 1944 !! IF( nn_timing == 1 ) CALL timing_start('zgr_sco') 1945 ! 1946 CALL wrk_alloc( jpi,jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 1120 ALLOCATE( zenv(jpi,jpj), ztmp(jpi,jpj), zmsk(jpi,jpj), zri(jpi,jpj), zrj(jpi,jpj), zhbat(jpi,jpj) , ztmpi1(jpi,jpj), ztmpi2(jpi,jpj), ztmpj1(jpi,jpj), ztmpj2(jpi,jpj) ) 1947 1121 ! 1948 1122 REWIND( numnam_ref ) ! Namelist namzgr_sco in reference namelist : Sigma-stretching parameters … … 2024 1198 2025 1199 ! apply lateral boundary condition CAUTION: keep the value when the lbc field is zero 2026 CALL lbc_lnk( ' toto',zenv, 'T', 1._wp, 'no0' )1200 CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 2027 1201 ! 2028 1202 ! smooth the bathymetry (if required) … … 2088 1262 END DO 2089 1263 ! apply lateral boundary condition CAUTION: keep the value when the lbc field is zero 2090 CALL lbc_lnk( ' toto',zenv, 'T', 1._wp, 'no0' )1264 CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 2091 1265 ! ! ================ ! 2092 1266 END DO ! End loop ! … … 2132 1306 ! Apply lateral boundary condition 2133 1307 !!gm ! CAUTION: retain non zero value in the initial file this should be OK for orca cfg, not for EEL 2134 zhbat(:,:) = hbatu(:,:) ; CALL lbc_lnk(' toto', hbatu, 'U', 1._wp )1308 zhbat(:,:) = hbatu(:,:) ; CALL lbc_lnk('domzgr', hbatu, 'U', 1._wp ) 2135 1309 DO jj = 1, jpj 2136 1310 DO ji = 1, jpi … … 2142 1316 END DO 2143 1317 END DO 2144 zhbat(:,:) = hbatv(:,:) ; CALL lbc_lnk(' toto', hbatv, 'V', 1._wp )1318 zhbat(:,:) = hbatv(:,:) ; CALL lbc_lnk('domzgr', hbatv, 'V', 1._wp ) 2145 1319 DO jj = 1, jpj 2146 1320 DO ji = 1, jpi … … 2151 1325 END DO 2152 1326 END DO 2153 zhbat(:,:) = hbatf(:,:) ; CALL lbc_lnk(' toto', hbatf, 'F', 1._wp )1327 zhbat(:,:) = hbatf(:,:) ; CALL lbc_lnk('domzgr', hbatf, 'F', 1._wp ) 2154 1328 DO jj = 1, jpj 2155 1329 DO ji = 1, jpi … … 2199 1373 ENDIF 2200 1374 2201 CALL lbc_lnk( ' toto',e3t_0 , 'T', 1._wp )2202 CALL lbc_lnk( ' toto',e3u_0 , 'U', 1._wp )2203 CALL lbc_lnk( ' toto',e3v_0 , 'V', 1._wp )2204 CALL lbc_lnk( ' toto',e3f_0 , 'F', 1._wp )2205 CALL lbc_lnk( ' toto',e3w_0 , 'W', 1._wp )2206 CALL lbc_lnk( ' toto',e3uw_0, 'U', 1._wp )2207 CALL lbc_lnk(' toto', e3vw_0, 'V', 1._wp )1375 CALL lbc_lnk( 'domzgr',e3t_0 , 'T', 1._wp ) 1376 CALL lbc_lnk( 'domzgr',e3u_0 , 'U', 1._wp ) 1377 CALL lbc_lnk( 'domzgr',e3v_0 , 'V', 1._wp ) 1378 CALL lbc_lnk( 'domzgr',e3f_0 , 'F', 1._wp ) 1379 CALL lbc_lnk( 'domzgr',e3w_0 , 'W', 1._wp ) 1380 CALL lbc_lnk( 'domzgr',e3uw_0, 'U', 1._wp ) 1381 CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 2208 1382 ! 2209 1383 WHERE( e3t_0 (:,:,:) == 0._wp ) e3t_0 (:,:,:) = 1._wp … … 2214 1388 WHERE( e3uw_0(:,:,:) == 0._wp ) e3uw_0(:,:,:) = 1._wp 2215 1389 WHERE( e3vw_0(:,:,:) == 0._wp ) e3vw_0(:,:,:) = 1._wp 2216 2217 2218 !!gm I don't like that HERE we are supposed to set the reference coordinate (i.e. _0 arrays)2219 !!gm and only that !!!!!2220 !!gm THIS should be removed from here !2221 gdept_n(:,:,:) = gdept_0(:,:,:)2222 gdepw_n(:,:,:) = gdepw_0(:,:,:)2223 gde3w_n(:,:,:) = gde3w_0(:,:,:)2224 e3t_n (:,:,:) = e3t_0 (:,:,:)2225 e3u_n (:,:,:) = e3u_0 (:,:,:)2226 e3v_n (:,:,:) = e3v_0 (:,:,:)2227 e3f_n (:,:,:) = e3f_0 (:,:,:)2228 e3w_n (:,:,:) = e3w_0 (:,:,:)2229 e3uw_n (:,:,:) = e3uw_0 (:,:,:)2230 e3vw_n (:,:,:) = e3vw_0 (:,:,:)2231 !!gm and obviously in the following, use the _0 arrays until the end of this subroutine2232 !! gm end2233 1390 !! 2234 1391 ! HYBRID : … … 2236 1393 DO ji = 1, jpi 2237 1394 DO jk = 1, jpkm1 2238 IF( scobot(ji,jj) >= gdept_ n(ji,jj,jk) ) mbathy(ji,jj) = MAX( 2, jk )1395 IF( scobot(ji,jj) >= gdept_0(ji,jj,jk) ) mbathy(ji,jj) = MAX( 2, jk ) 2239 1396 END DO 2240 1397 END DO … … 2246 1403 WRITE(numout,*) ' MIN val mbathy ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 2247 1404 WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ), & 2248 & ' w ', MINVAL( gdepw_0(:,:,:) ) , '3w ' , MINVAL( gde3w_0(:,:,:) )1405 & ' w ', MINVAL( gdepw_0(:,:,:) ) 2249 1406 WRITE(numout,*) ' MIN val e3 t ', MINVAL( e3t_0 (:,:,:) ), ' f ' , MINVAL( e3f_0 (:,:,:) ), & 2250 1407 & ' u ', MINVAL( e3u_0 (:,:,:) ), ' u ' , MINVAL( e3v_0 (:,:,:) ), & … … 2253 1410 2254 1411 WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ), & 2255 & ' w ', MAXVAL( gdepw_0(:,:,:) ) , '3w ' , MAXVAL( gde3w_0(:,:,:) )1412 & ' w ', MAXVAL( gdepw_0(:,:,:) ) 2256 1413 WRITE(numout,*) ' MAX val e3 t ', MAXVAL( e3t_0 (:,:,:) ), ' f ' , MAXVAL( e3f_0 (:,:,:) ), & 2257 1414 & ' u ', MAXVAL( e3u_0 (:,:,:) ), ' u ' , MAXVAL( e3v_0 (:,:,:) ), & … … 2298 1455 DO jk = 1, mbathy(ji,jj) 2299 1456 ! check coordinate is monotonically increasing 2300 IF (e3w_ n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN1457 IF (e3w_0(ji,jj,jk) <= 0._wp .OR. e3t_0(ji,jj,jk) <= 0._wp ) THEN 2301 1458 WRITE(ctmp1,*) 'ERROR zgr_sco : e3w or e3t =< 0 at point (i,j,k)= ', ji, jj, jk 2302 1459 WRITE(numout,*) 'ERROR zgr_sco : e3w or e3t =< 0 at point (i,j,k)= ', ji, jj, jk 2303 WRITE(numout,*) 'e3w',e3w_ n(ji,jj,:)2304 WRITE(numout,*) 'e3t',e3t_ n(ji,jj,:)1460 WRITE(numout,*) 'e3w',e3w_0(ji,jj,:) 1461 WRITE(numout,*) 'e3t',e3t_0(ji,jj,:) 2305 1462 CALL ctl_stop( ctmp1 ) 2306 1463 ENDIF 2307 1464 ! and check it has never gone negative 2308 IF( gdepw_ n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN1465 IF( gdepw_0(ji,jj,jk) < 0._wp .OR. gdept_0(ji,jj,jk) < 0._wp ) THEN 2309 1466 WRITE(ctmp1,*) 'ERROR zgr_sco : gdepw or gdept =< 0 at point (i,j,k)= ', ji, jj, jk 2310 1467 WRITE(numout,*) 'ERROR zgr_sco : gdepw or gdept =< 0 at point (i,j,k)= ', ji, jj, jk 2311 WRITE(numout,*) 'gdepw',gdepw_ n(ji,jj,:)2312 WRITE(numout,*) 'gdept',gdept_ n(ji,jj,:)1468 WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 1469 WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 2313 1470 CALL ctl_stop( ctmp1 ) 2314 1471 ENDIF 2315 1472 ! and check it never exceeds the total depth 2316 IF( gdepw_ n(ji,jj,jk) > hbatt(ji,jj) ) THEN1473 IF( gdepw_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 2317 1474 WRITE(ctmp1,*) 'ERROR zgr_sco : gdepw > hbatt at point (i,j,k)= ', ji, jj, jk 2318 1475 WRITE(numout,*) 'ERROR zgr_sco : gdepw > hbatt at point (i,j,k)= ', ji, jj, jk 2319 WRITE(numout,*) 'gdepw',gdepw_ n(ji,jj,:)1476 WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 2320 1477 CALL ctl_stop( ctmp1 ) 2321 1478 ENDIF … … 2324 1481 DO jk = 1, mbathy(ji,jj)-1 2325 1482 ! and check it never exceeds the total depth 2326 IF( gdept_ n(ji,jj,jk) > hbatt(ji,jj) ) THEN1483 IF( gdept_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 2327 1484 WRITE(ctmp1,*) 'ERROR zgr_sco : gdept > hbatt at point (i,j,k)= ', ji, jj, jk 2328 1485 WRITE(numout,*) 'ERROR zgr_sco : gdept > hbatt at point (i,j,k)= ', ji, jj, jk 2329 WRITE(numout,*) 'gdept',gdept_ n(ji,jj,:)1486 WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 2330 1487 CALL ctl_stop( ctmp1 ) 2331 1488 ENDIF … … 2335 1492 END DO 2336 1493 ! 2337 CALL wrk_dealloc( jpi, jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 2338 ! 2339 !!! IF( nn_timing == 1 ) CALL timing_stop('zgr_sco') 1494 DEALLOCATE( zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 2340 1495 ! 2341 1496 END SUBROUTINE zgr_sco … … 2358 1513 REAL(wp) :: ztmpu1, ztmpv1, ztmpf1 2359 1514 ! 2360 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 2361 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 2362 !!---------------------------------------------------------------------- 2363 2364 CALL wrk_alloc( jpi,jpj,jpk, z_gsigw3, z_gsigt3, z_gsi3w3 ) 2365 CALL wrk_alloc( jpi,jpj,jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 2366 2367 z_gsigw3 = 0._wp ; z_gsigt3 = 0._wp ; z_gsi3w3 = 0._wp 1515 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3 1516 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 1517 !!---------------------------------------------------------------------- 1518 1519 ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk) ) 1520 ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk) ) 1521 ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 1522 1523 z_gsigw3 = 0._wp ; z_gsigt3 = 0._wp 2368 1524 z_esigt3 = 0._wp ; z_esigw3 = 0._wp 2369 1525 z_esigtu3 = 0._wp ; z_esigtv3 = 0._wp ; z_esigtf3 = 0._wp … … 2392 1548 z_esigt3(ji,jj,jpk) = 2._wp * ( z_gsigt3(ji,jj,jpk) - z_gsigw3(ji,jj,jpk) ) 2393 1549 ! 2394 ! Coefficients for vertical depth as the sum of e3w scale factors2395 z_gsi3w3(ji,jj,1) = 0.5_wp * z_esigw3(ji,jj,1)2396 DO jk = 2, jpk2397 z_gsi3w3(ji,jj,jk) = z_gsi3w3(ji,jj,jk-1) + z_esigw3(ji,jj,jk)2398 END DO2399 !2400 1550 DO jk = 1, jpk 2401 1551 zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) … … 2403 1553 gdept_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 2404 1554 gdepw_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 2405 gde3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft )2406 1555 END DO 2407 1556 ! … … 2448 1597 END DO 2449 1598 ! 2450 CALL wrk_dealloc( jpi,jpj,jpk, z_gsigw3, z_gsigt3, z_gsi3w3)2451 CALL wrk_dealloc( jpi,jpj,jpk,z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 )1599 DEALLOCATE( z_gsigw3, z_gsigt3 ) 1600 DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 2452 1601 ! 2453 1602 END SUBROUTINE s_sh94 … … 2476 1625 REAL(wp) :: ztmpu1, ztmpv1, ztmpf1 2477 1626 ! 2478 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 2479 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 2480 !!---------------------------------------------------------------------- 2481 ! 2482 CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3 ) 2483 CALL wrk_alloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 2484 2485 z_gsigw3 = 0._wp ; z_gsigt3 = 0._wp ; z_gsi3w3 = 0._wp 1627 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3 1628 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 1629 !!---------------------------------------------------------------------- 1630 ! 1631 ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk) ) 1632 ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk)) 1633 ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 1634 1635 z_gsigw3 = 0._wp ; z_gsigt3 = 0._wp 2486 1636 z_esigt3 = 0._wp ; z_esigw3 = 0._wp 2487 1637 z_esigtu3 = 0._wp ; z_esigtv3 = 0._wp ; z_esigtf3 = 0._wp … … 2535 1685 z_esigt3(ji,jj,jpk) = 2.0_wp * (z_gsigt3(ji,jj,jpk) - z_gsigw3(ji,jj,jpk)) 2536 1686 2537 ! Coefficients for vertical depth as the sum of e3w scale factors2538 z_gsi3w3(ji,jj,1) = 0.5 * z_esigw3(ji,jj,1)2539 DO jk = 2, jpk2540 z_gsi3w3(ji,jj,jk) = z_gsi3w3(ji,jj,jk-1) + z_esigw3(ji,jj,jk)2541 END DO2542 2543 1687 DO jk = 1, jpk 2544 1688 gdept_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 2545 1689 gdepw_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 2546 gde3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk)2547 1690 END DO 2548 1691 … … 2608 1751 ENDDO 2609 1752 ! 2610 CALL lbc_lnk(' toto',e3t_0 ,'T',1.) ; CALL lbc_lnk('toto',e3u_0 ,'T',1.)2611 CALL lbc_lnk(' toto',e3v_0 ,'T',1.) ; CALL lbc_lnk('toto',e3f_0 ,'T',1.)2612 CALL lbc_lnk(' toto',e3w_0 ,'T',1.)2613 CALL lbc_lnk(' toto',e3uw_0,'T',1.) ; CALL lbc_lnk('toto',e3vw_0,'T',1.)2614 ! 2615 CALL wrk_dealloc( jpi,jpj,jpk, z_gsigw3, z_gsigt3, z_gsi3w3)2616 CALL wrk_dealloc( jpi,jpj,jpk,z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 )1753 CALL lbc_lnk('domzgr',e3t_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3u_0 ,'T',1.) 1754 CALL lbc_lnk('domzgr',e3v_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3f_0 ,'T',1.) 1755 CALL lbc_lnk('domzgr',e3w_0 ,'T',1.) 1756 CALL lbc_lnk('domzgr',e3uw_0,'T',1.) ; CALL lbc_lnk('domzgr',e3vw_0,'T',1.) 1757 ! 1758 DEALLOCATE( z_gsigw3, z_gsigt3 ) 1759 DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 2617 1760 ! 2618 1761 END SUBROUTINE s_sf12 … … 2631 1774 INTEGER :: ji, jj, jk ! dummy loop argument 2632 1775 REAL(wp) :: zcoeft, zcoefw ! temporary scalars 2633 REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w2634 REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw2635 !!---------------------------------------------------------------------- 2636 2637 CALL wrk_alloc( jpk, z_gsigw, z_gsigt, z_gsi3w)2638 CALL wrk_alloc( jpk, z_esigt, z_esigw)2639 2640 z_gsigw = 0._wp ; z_gsigt = 0._wp ; z_gsi3w = 0._wp1776 REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_gsigw, z_gsigt 1777 REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_esigt, z_esigw 1778 !!---------------------------------------------------------------------- 1779 1780 ALLOCATE( z_gsigw(jpk), z_gsigt(jpk) ) 1781 ALLOCATE( z_esigt(jpk), z_esigw(jpk) ) 1782 1783 z_gsigw = 0._wp ; z_gsigt = 0._wp 2641 1784 z_esigt = 0._wp ; z_esigw = 0._wp 2642 1785 … … 2657 1800 z_esigt(jpk) = 2._wp * ( z_gsigt(jpk) - z_gsigw(jpk) ) 2658 1801 ! 2659 ! Coefficients for vertical depth as the sum of e3w scale factors2660 z_gsi3w(1) = 0.5_wp * z_esigw(1)2661 DO jk = 2, jpk2662 z_gsi3w(jk) = z_gsi3w(jk-1) + z_esigw(jk)2663 END DO2664 !!gm: depuw, depvw can be suppressed (modif in ldfslp) and depw=dep3w can be set (save 3 3D arrays)2665 1802 DO jk = 1, jpk 2666 1803 zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) … … 2668 1805 gdept_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 2669 1806 gdepw_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 2670 gde3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 2671 END DO 2672 !!gm: e3uw, e3vw can be suppressed (modif in dynzdf, dynzdf_iso, zdfbfr) (save 2 3D arrays) 1807 END DO 1808 2673 1809 DO jj = 1, jpj 2674 1810 DO ji = 1, jpi … … 2686 1822 END DO 2687 1823 ! 2688 CALL wrk_dealloc( jpk, z_gsigw, z_gsigt, z_gsi3w)2689 CALL wrk_dealloc( jpk, z_esigt, z_esigw)1824 DEALLOCATE( z_gsigw, z_gsigt ) 1825 DEALLOCATE( z_esigt, z_esigw ) 2690 1826 ! 2691 1827 END SUBROUTINE s_tanh -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/ioipsl.f90
r6951 r12101 6 6 ! See IOIPSL/IOIPSL_License_CeCILL.txt 7 7 ! 8 USE errioipsl 8 USE errioipsl 9 USE calendar 9 10 USE stringop 10 USE mathelp11 USE getincom12 USE calendar13 11 USE fliocom 14 USE flincom 15 USE histcom 16 USE restcom 12 17 13 END MODULE ioipsl -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/iom.F90
r12100 r12101 35 35 USE domngb ! ocean space and time domain 36 36 USE phycst ! physical constants 37 USE dianam ! build name of file38 37 USE xios 39 38 # endif … … 64 63 PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 65 64 # endif 66 PUBLIC iom_set_rstw_var_active, iom_set_rst w_core, iom_set_rst_vars65 PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 67 66 68 67 INTERFACE iom_get … … 348 347 #endif 349 348 END SUBROUTINE iom_set_rstr_active 350 351 SUBROUTINE iom_set_rstw_core(cdmdl)352 !!---------------------------------------------------------------------353 !! *** SUBROUTINE iom_set_rstw_core ***354 !!355 !! ** Purpose : set variables which are always in restart file356 !!---------------------------------------------------------------------357 CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS358 CHARACTER(LEN=256) :: clinfo ! info character359 #if defined key_iomput360 IF(cdmdl == "OPA") THEN361 !from restart.F90362 CALL iom_set_rstw_var_active("rdt")363 IF ( .NOT. ln_diurnal_only ) THEN364 CALL iom_set_rstw_var_active('ub' )365 CALL iom_set_rstw_var_active('vb' )366 CALL iom_set_rstw_var_active('tb' )367 CALL iom_set_rstw_var_active('sb' )368 CALL iom_set_rstw_var_active('sshb')369 !370 CALL iom_set_rstw_var_active('un' )371 CALL iom_set_rstw_var_active('vn' )372 CALL iom_set_rstw_var_active('tn' )373 CALL iom_set_rstw_var_active('sn' )374 CALL iom_set_rstw_var_active('sshn')375 CALL iom_set_rstw_var_active('rhop')376 ! extra variable needed for the ice sheet coupling377 IF ( ln_iscpl ) THEN378 CALL iom_set_rstw_var_active('tmask')379 CALL iom_set_rstw_var_active('umask')380 CALL iom_set_rstw_var_active('vmask')381 CALL iom_set_rstw_var_active('smask')382 CALL iom_set_rstw_var_active('e3t_n')383 CALL iom_set_rstw_var_active('e3u_n')384 CALL iom_set_rstw_var_active('e3v_n')385 CALL iom_set_rstw_var_active('gdepw_n')386 END IF387 ENDIF388 IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst')389 !from trasbc.F90390 CALL iom_set_rstw_var_active('sbc_hc_b')391 CALL iom_set_rstw_var_active('sbc_sc_b')392 ENDIF393 #else394 clinfo = 'iom_set_rstw_core: key_iomput is needed to use XIOS restart read/write functionality'395 CALL ctl_stop('STOP', TRIM(clinfo))396 #endif397 END SUBROUTINE iom_set_rstw_core398 349 399 350 SUBROUTINE iom_set_rst_vars(fields) … … 662 613 ! start halo size for x,y dimensions 663 614 ! end halo size for x,y dimensions 615 ! 616 INTEGER :: nldi_save, nlei_save !:patch before we remove periodicity and close boundaries in output files 617 INTEGER :: nldj_save, nlej_save !: 618 ! 664 619 !--------------------------------------------------------------------- 665 620 ! Initializations and control … … 668 623 clinfo = ' iom_open ~~~ ' 669 624 istop = nstop 625 626 ! use patch to force the writing off periodicity and close boundaries 627 ! without this, issue in some model decomposition 628 ! seb: patch before we remove periodicity and close boundaries in output files 629 nldi_save = nldi ; nlei_save = nlei 630 nldj_save = nldj ; nlej_save = nlej 631 IF( nimpp == 1 ) nldi = 1 632 IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi 633 IF( njmpp == 1 ) nldj = 1 634 IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj 635 670 636 ! if iom_open is called for the first time: initialize iom_file(:)%nfid to 0 671 637 ! (could be done when defining iom_file in f95 but not in f90) … … 694 660 ! do we read the overlap 695 661 ! ugly patch SM+JMM+RB to overwrite global definition in some cases 696 llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 662 !llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 663 ! for domain_cfg, force to read the full domain 664 llnoov = .FALSE. 697 665 ! create the file name by added, if needed, TRIM(Agrif_CFixed()) and TRIM(clsuffix) 698 666 ! ============= … … 792 760 CALL iom_nf90_open( clname, kiomid, llwrt, llok, idompar, kdlev = kdlev ) 793 761 ENDIF 762 763 nldi = nldi_save ; nlei = nlei_save 764 nldj = nldj_save ; nlej = nlej_save 794 765 ! 795 766 END SUBROUTINE iom_open … … 1083 1054 ! do we read the overlap 1084 1055 ! ugly patch SM+JMM+RB to overwrite global definition in some cases 1085 llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 1056 ! 1057 !llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 1058 ! for domain_cfg tools force to read the full domain 1059 llnoov = .FALSE. 1086 1060 ! check kcount and kstart optionals parameters... 1087 1061 IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') … … 1264 1238 ENDIF 1265 1239 ENDIF 1266 1240 WRITE(numout,*) 'istart icnt',istart, ' ', icnt 1241 WRITE(numout,*) ' idx i1, i2, j1, j2 ',ix1, ix2, iy1, iy2 1267 1242 CALL iom_nf90_get( kiomid, idvar, inbdim, istart, icnt, ix1, ix2, iy1, iy2, pv_r1d, pv_r2d, pv_r3d ) 1268 1243 -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/iom_nf90.F90
r12100 r12101 529 529 INTEGER :: idlv ! local variable 530 530 INTEGER :: idim3 ! id of the third dimension 531 ! 532 INTEGER :: nldi_save, nlei_save !:patch before we remove periodicity and close boundaries in output files 533 INTEGER :: nldj_save, nlej_save !: 531 534 !--------------------------------------------------------------------- 532 535 ! 533 536 clinfo = ' iom_nf90_rp0123d, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(cdvar) 534 537 if90id = iom_file(kiomid)%nfid 538 ! 539 ! use patch to force the writing off periodicity and close boundaries 540 ! without this, issue in some model decomposition 541 ! seb: patch before we remove periodicity and close boundaries in output files 542 nldi_save = nldi ; nlei_save = nlei 543 nldj_save = nldj ; nlej_save = nlej 544 IF( nimpp == 1 ) nldi = 1 545 IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi 546 IF( njmpp == 1 ) nldj = 1 547 IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj 535 548 ! 536 549 ! define dimension variables if it is not already done … … 705 718 IF(lwp) WRITE(numout,*) TRIM(clinfo)//' written ok' 706 719 ENDIF 720 ! 721 nldi = nldi_save ; nlei = nlei_save 722 nldj = nldj_save ; nlej = nlej_save 707 723 ! 708 724 END SUBROUTINE iom_nf90_rp0123d -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/lbclnk.F90
r12100 r12101 71 71 !! lbc_bdy_lnk : set the lateral BDY boundary condition 72 72 !!---------------------------------------------------------------------- 73 USE oce ! ocean dynamics and tracers74 73 USE dom_oce ! ocean space and time domain 75 74 USE in_out_manager ! I/O manager -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/mpp_loc_generic.h90
r12100 r12101 17 17 # define MPI_OPERATION mpi_maxloc 18 18 # define LOC_OPERATION MAXLOC 19 # define ERRVAL -HUGE 19 20 # endif 20 21 # if defined OPERATION_MINLOC 21 22 # define MPI_OPERATION mpi_minloc 22 23 # define LOC_OPERATION MINLOC 24 # define ERRVAL HUGE 23 25 # endif 24 26 … … 42 44 ! 43 45 idim = SIZE(kindex) 44 ALLOCATE ( ilocs(idim) )45 46 ! 46 ilocs = LOC_OPERATION( ARRAY_IN(:,:,:) , mask= MASK_IN(:,:,:) == 1._wp ) 47 zmin = ARRAY_IN(ilocs(1),ilocs(2),ilocs(3)) 48 ! 49 kindex(1) = ilocs(1) + nimpp - 1 47 IF ( ALL(MASK_IN(:,:,:) /= 1._wp) ) THEN 48 ! special case for land processors 49 zmin = ERRVAL(zmin) 50 index0 = 0 51 ELSE 52 ALLOCATE ( ilocs(idim) ) 53 ! 54 ilocs = LOC_OPERATION( ARRAY_IN(:,:,:) , mask= MASK_IN(:,:,:) == 1._wp ) 55 zmin = ARRAY_IN(ilocs(1),ilocs(2),ilocs(3)) 56 ! 57 kindex(1) = mig( ilocs(1) ) 50 58 # if defined DIM_2d || defined DIM_3d /* avoid warning when kindex has 1 element */ 51 kindex(2) = ilocs(2) + njmpp - 159 kindex(2) = mjg( ilocs(2) ) 52 60 # endif 53 61 # if defined DIM_3d /* avoid warning when kindex has 2 elements */ 54 kindex(3) = ilocs(3)62 kindex(3) = ilocs(3) 55 63 # endif 56 !57 DEALLOCATE (ilocs)58 !59 index0 = kindex(1)-1 ! 1d index starting at 064 ! 65 DEALLOCATE (ilocs) 66 ! 67 index0 = kindex(1)-1 ! 1d index starting at 0 60 68 # if defined DIM_2d || defined DIM_3d /* avoid warning when kindex has 1 element */ 61 index0 = index0 + jpiglo * (kindex(2)-1)69 index0 = index0 + jpiglo * (kindex(2)-1) 62 70 # endif 63 71 # if defined DIM_3d /* avoid warning when kindex has 2 elements */ 64 index0 = index0 + jpiglo * jpjglo * (kindex(3)-1)72 index0 = index0 + jpiglo * jpjglo * (kindex(3)-1) 65 73 # endif 74 END IF 66 75 zain(1,:) = zmin 67 76 zain(2,:) = REAL(index0, wp) … … 98 107 #undef LOC_OPERATION 99 108 #undef INDEX_TYPE 109 #undef ERRVAL -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/nemogcm.F90
r12100 r12101 44 44 !! factorise : calculate the factors of the no. of MPI processes 45 45 !!---------------------------------------------------------------------- 46 USE step_oce ! module used in the ocean time stepping module (step.F90) 46 USE dom_oce ! ocean space and time domain variables 47 USE in_out_manager ! I/O manager 48 USE iom ! 47 49 USE domcfg ! domain configuration (dom_cfg routine) 48 50 USE mppini ! shared/distributed memory setting (mpp_init routine) … … 141 143 INTEGER :: ios, ilocal_comm ! local integers 142 144 CHARACTER(len=120), DIMENSION(60) :: cltxt, cltxt2, clnam 143 ! 144 NAMELIST/namctl/ ln_ctl , sn_cfctl, nn_print,ln_timing 145 !! 146 NAMELIST/namctl/ ln_ctl , sn_cfctl, nn_print, nn_ictls, nn_ictle, & 147 & nn_isplt , nn_jsplt, nn_jctls, nn_jctle, & 148 & ln_timing, ln_diacfl 145 149 NAMELIST/namcfg/ ln_e3_dep, & 146 150 & cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & 147 & jp izoom, jpjzoom, jperio, ln_use_jattr151 & jperio, ln_use_jattr, ln_domclo 148 152 !!---------------------------------------------------------------------- 149 153 ! … … 154 158 CALL ctl_opn( numnam_cfg, 'namelist_cfg', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. ) 155 159 ! 156 REWIND( numnam_ref ) ! Namelist namctl in reference namelist : Control prints & Benchmark160 REWIND( numnam_ref ) ! Namelist namctl in reference namelist 157 161 READ ( numnam_ref, namctl, IOSTAT = ios, ERR = 901 ) 158 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namctl in reference namelist', .TRUE. ) 159 160 REWIND( numnam_cfg ) ! Namelist namctl in confguration namelist : Control prints & Benchmark 162 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namctl in reference namelist', .TRUE. ) 163 REWIND( numnam_cfg ) ! Namelist namctl in confguration namelist 161 164 READ ( numnam_cfg, namctl, IOSTAT = ios, ERR = 902 ) 162 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namctl in configuration namelist', .TRUE. ) 163 164 ! 165 REWIND( numnam_ref ) ! Namelist namcfg in reference namelist : Control prints & Benchmark 165 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namctl in configuration namelist', .TRUE. ) 166 ! 167 REWIND( numnam_ref ) ! Namelist namcfg in reference namelist 166 168 READ ( numnam_ref, namcfg, IOSTAT = ios, ERR = 903 ) 167 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in reference namelist', .TRUE. ) 168 169 REWIND( numnam_cfg ) ! Namelist namcfg in confguration namelist : Control prints & Benchmark 169 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in reference namelist', .TRUE. ) 170 REWIND( numnam_cfg ) ! Namelist namcfg in confguration namelist 170 171 READ ( numnam_cfg, namcfg, IOSTAT = ios, ERR = 904 ) 171 904 IF( ios /= 0 )CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. )172 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. ) 172 173 173 174 ! Force values for AGRIF zoom (cf. agrif_user.F90) … … 265 266 CALL dom_cfg ! Domain configuration 266 267 CALL dom_init ! Domain 267 IF( ln_ctl ) CALL prt_ctl_init ! Print control268 268 ! 269 269 END SUBROUTINE nemo_init … … 315 315 jsplt = nn_jsplt 316 316 317 ! IF( .NOT.ln_read_cfg ) ln_closea = .false. ! dealing possible only with a domcfg file318 317 ! 319 318 ! ! Parameter control … … 409 408 !!---------------------------------------------------------------------- 410 409 ! 411 ierr = oce_alloc () ! ocean 412 ierr = ierr + dom_oce_alloc () ! ocean domain 410 ierr = dom_oce_alloc () ! ocean domain 413 411 ! 414 412 CALL mpp_sum( 'nemogcm', ierr ) -
utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/par_oce.f90
r9598 r12101 13 13 PUBLIC 14 14 15 CHARACTER(lc) :: cp_cfg !: name of the configuration 16 CHARACTER(lc) :: cp_cfz !: name of the zoom of configuration 17 INTEGER :: jp_cfg !: resolution of the configuration 18 19 ! data size !!! * size of all input files * 20 INTEGER :: jpidta !: 1st lateral dimension ( >= jpi ) 21 INTEGER :: jpjdta !: 2nd " " ( >= jpj ) 22 INTEGER :: jpkdta !: number of levels ( >= jpk ) 23 LOGICAL :: ln_e3_dep ! e3. definition flag 24 REAL(wp) :: pp_not_used = 999999._wp !: vertical grid parameter 25 REAL(wp) :: pp_to_be_computed = 999999._wp !: - - - 26 !!---------------------------------------------------------------------- 27 !! namcfg namelist parameters 28 !!---------------------------------------------------------------------- 29 LOGICAL :: ln_read_cfg !: (=T) read the domain configuration file or (=F) not 30 CHARACTER(lc) :: cn_domcfg !: filename the configuration file to be read 31 LOGICAL :: ln_write_cfg !: (=T) create the domain configuration file 32 CHARACTER(lc) :: cn_domcfg_out !: filename the configuration file to be read 33 ! 34 LOGICAL :: ln_use_jattr !: input file read offset 35 ! ! Use file global attribute: open_ocean_jstart to determine start j-row 36 ! ! when reading input from those netcdf files that have the 37 ! ! attribute defined. This is designed to enable input files associated 38 ! ! with the extended grids used in the under ice shelf configurations to 39 ! ! be used without redundant rows when the ice shelves are not in use. 40 ! 41 42 !!--------------------------------------------------------------------- 43 !! Domain Matrix size 44 !!--------------------------------------------------------------------- 45 ! configuration name & resolution (required only in ORCA family case) 46 CHARACTER(lc) :: cn_cfg !: name of the configuration 47 INTEGER :: nn_cfg !: resolution of the configuration 48 49 ! global domain size !!! * total computational domain * 50 INTEGER :: jpiglo !: 1st dimension of global domain --> i-direction 51 INTEGER :: jpjglo !: 2nd - - --> j-direction 52 INTEGER :: jpkglo !: 3nd - - --> k levels 53 54 ! global domain size for AGRIF !!! * total AGRIF computational domain * 55 INTEGER, PUBLIC :: nbug_in_agrif_conv_do_not_remove_or_modify = 1 - 1 56 INTEGER, PUBLIC, PARAMETER :: nbghostcells = 3 !: number of ghost cells 57 INTEGER, PUBLIC :: nbcellsx ! = jpiglo - 2 - 2*nbghostcells !: number of cells in i-direction 58 INTEGER, PUBLIC :: nbcellsy ! = jpjglo - 2 - 2*nbghostcells !: number of cells in j-direction 59 60 ! local domain size !!! * local computational domain * 61 INTEGER, PUBLIC :: jpi ! !: first dimension 62 INTEGER, PUBLIC :: jpj ! !: second dimension 63 INTEGER, PUBLIC :: jpk ! = jpkglo !: third dimension 64 INTEGER, PUBLIC :: jpim1 ! = jpi-1 !: inner domain indices 65 INTEGER, PUBLIC :: jpjm1 ! = jpj-1 !: - - - 66 INTEGER, PUBLIC :: jpkm1 ! = jpk-1 !: - - - 67 INTEGER, PUBLIC :: jpij ! = jpi*jpj !: jpi x jpj 68 INTEGER, PUBLIC :: jpimax! = ( jpiglo-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls !: maximum jpi 69 INTEGER, PUBLIC :: jpjmax! = ( jpjglo-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls !: maximum jpj 70 71 !!--------------------------------------------------------------------- 72 !! Active tracer parameters 73 !!--------------------------------------------------------------------- 74 INTEGER, PUBLIC, PARAMETER :: jpts = 2 !: Number of active tracers (=2, i.e. T & S ) 75 INTEGER, PUBLIC, PARAMETER :: jp_tem = 1 !: indice for temperature 76 INTEGER, PUBLIC, PARAMETER :: jp_sal = 2 !: indice for salinity 77 15 78 !!---------------------------------------------------------------------- 16 79 !! Domain decomposition … … 22 85 INTEGER, PUBLIC, PARAMETER :: jpr2di = 0 !: number of columns for extra outer halo 23 86 INTEGER, PUBLIC, PARAMETER :: jpr2dj = 0 !: number of rows for extra outer halo 24 INTEGER, PUBLIC, PARAMETER :: jpreci = 1 !: number of columns for overlap 25 INTEGER, PUBLIC, PARAMETER :: jprecj = 1 !: number of rows for overlap 26 27 !!---------------------------------------------------------------------- 28 !! namcfg namelist parameters 29 !!---------------------------------------------------------------------- 30 ! 31 LOGICAL :: ln_e3_dep ! e3. definition flag 32 ! 33 CHARACTER(lc) :: cp_cfg !: name of the configuration 34 CHARACTER(lc) :: cp_cfz !: name of the zoom of configuration 35 INTEGER :: jp_cfg !: resolution of the configuration 36 37 ! data size !!! * size of all input files * 38 INTEGER :: jpidta !: 1st lateral dimension ( >= jpi ) 39 INTEGER :: jpjdta !: 2nd " " ( >= jpj ) 40 INTEGER :: jpkdta !: number of levels ( >= jpk ) 41 42 ! global or zoom domain size !!! * computational domain * 43 INTEGER :: jpiglo !: 1st dimension of global domain --> i 44 INTEGER :: jpjglo !: 2nd - - --> j 45 46 ! zoom starting position 47 INTEGER :: jpizoom !: left bottom (i,j) indices of the zoom 48 INTEGER :: jpjzoom !: in data domain indices 49 50 ! Domain characteristics 51 INTEGER :: jperio !: lateral cond. type (between 0 and 6) 52 ! ! = 0 closed ; = 1 cyclic East-West 53 ! ! = 2 equatorial symmetric ; = 3 North fold T-point pivot 54 ! ! = 4 cyclic East-West AND North fold T-point pivot 55 ! ! = 5 North fold F-point pivot 56 ! ! = 6 cyclic East-West AND North fold F-point pivot 57 58 ! Input file read offset 59 LOGICAL :: ln_use_jattr !: Use file global attribute: open_ocean_jstart to determine start j-row 60 ! when reading input from those netcdf files that have the 61 ! attribute defined. This is designed to enable input files associated 62 ! with the extended grids used in the under ice shelf configurations to 63 ! be used without redundant rows when the ice shelves are not in use. 64 65 !! Values set to pp_not_used indicates that this parameter is not used in THIS config. 66 !! Values set to pp_to_be_computed indicates that variables will be computed in domzgr 67 REAL(wp) :: pp_not_used = 999999._wp !: vertical grid parameter 68 REAL(wp) :: pp_to_be_computed = 999999._wp !: - - - 69 70 71 72 73 !!--------------------------------------------------------------------- 74 !! Active tracer parameters 75 !!--------------------------------------------------------------------- 76 INTEGER, PUBLIC, PARAMETER :: jpts = 2 !: Number of active tracers (=2, i.e. T & S ) 77 INTEGER, PUBLIC, PARAMETER :: jp_tem = 1 !: indice for temperature 78 INTEGER, PUBLIC, PARAMETER :: jp_sal = 2 !: indice for salinity 79 80 !!--------------------------------------------------------------------- 81 !! Domain Matrix size (if AGRIF, they are not all parameters) 82 !!--------------------------------------------------------------------- 83 84 85 86 87 88 89 INTEGER, PUBLIC :: jpi ! = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci !: first dimension 90 INTEGER, PUBLIC :: jpj ! = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj !: second dimension 91 INTEGER, PUBLIC :: jpk ! = jpkdta 92 INTEGER, PUBLIC :: jpim1 ! = jpi-1 !: inner domain indices 93 INTEGER, PUBLIC :: jpjm1 ! = jpj-1 !: - - - 94 INTEGER, PUBLIC :: jpkm1 ! = jpk-1 !: - - - 95 INTEGER, PUBLIC :: jpij ! = jpi*jpj !: jpi x jpj 87 INTEGER, PUBLIC, PARAMETER :: nn_hls = 1 !: halo width (applies to both rows and columns) 96 88 97 89 !!---------------------------------------------------------------------- 98 90 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 99 !! $Id: par_oce.F90 5836 2015-10-26 14:49:40Z cetlod$100 !! Software governed by the CeCILL licen ce (./LICENSE)91 !! $Id: par_oce.F90 10068 2018-08-28 14:09:04Z nicolasmartin $ 92 !! Software governed by the CeCILL license (see ./LICENSE) 101 93 !!====================================================================== 102 94 END MODULE par_oce
Note: See TracChangeset
for help on using the changeset viewer.