Changeset 7280
- Timestamp:
- 2016-11-21T11:40:00+01:00 (7 years ago)
- Location:
- branches/2016/dev_CNRS_2016/NEMOGCM
- Files:
-
- 3 deleted
- 61 edited
- 5 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/AMM12/EXP00/namelist_cfg
r7278 r7280 47 47 ! (also = the frequency of sea-ice model call) 48 48 ln_flx = .true. ! flux formulation (T => fill namsbc_flx ) 49 ln_blk _core = .false. ! CORE bulk formulation (T => fill namsbc_core)50 nn_ice = 0 ! =0 no ice boundary condition ,49 ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk ) 50 nn_ice = 0 ! =0 no ice boundary condition 51 51 ln_ssr = .false. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) 52 52 nn_fwb = 0 ! FreshWater Budget: =0 unchecked 53 ln_apr_dyn = .false. 53 ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) 54 54 ln_traqsr = .false. ! Light penetration (T) or not (F) 55 56 55 / 57 56 !----------------------------------------------------------------------- … … 60 59 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 61 60 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 62 sn_utau = 'amm12_utau' , 1 , 'utau' , .false. , .false. , 'daily' , '' , '' , '' 63 sn_vtau = 'amm12_vtau' , 1 , 'vtau' , .false. , .false. , 'daily' , '' , '' , '' 64 sn_qtot = 'amm12_flx' , 3 , 'sonsfldo' , .true. , .false. , 'daily' , '' , '' , '' 65 sn_qsr = 'amm12_flx' , 3 , 'soshfldo' , .true. , .false. , 'daily' , '' , '' , '' 66 sn_emp = 'amm12_flx' , 3 , 'sowafldo' , .true. , .false. , 'daily' , '' , '' , '' 67 cn_dir = './fluxes/' ! root directory for the location of the flux files 68 / 69 !----------------------------------------------------------------------- 70 &namsbc_clio ! namsbc_clio CLIO bulk formulae 71 !----------------------------------------------------------------------- 72 / 73 !----------------------------------------------------------------------- 74 &namsbc_core ! namsbc_core CORE bulk formulae 75 !----------------------------------------------------------------------- 76 / 77 !----------------------------------------------------------------------- 78 &namsbc_mfs ! namsbc_mfs MFS bulk formulae 79 !----------------------------------------------------------------------- 80 / 81 !----------------------------------------------------------------------- 82 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") 83 !----------------------------------------------------------------------- 61 sn_utau = 'amm12_utau', 1 , 'utau' , .false. , .false., 'daily' , '' , '' , '' 62 sn_vtau = 'amm12_vtau', 1 , 'vtau' , .false. , .false., 'daily' , '' , '' , '' 63 sn_qtot = 'amm12_flx' , 3 , 'sonsfldo', .true. , .false., 'daily' , '' , '' , '' 64 sn_qsr = 'amm12_flx' , 3 , 'soshfldo', .true. , .false., 'daily' , '' , '' , '' 65 sn_emp = 'amm12_flx' , 3 , 'sowafldo', .true. , .false., 'daily' , '' , '' , '' 66 cn_dir = './fluxes/' ! root directory for the location of the flux files 84 67 / 85 68 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/C1D_PAPA/EXP00/namelist_cfg
r7278 r7280 96 96 / 97 97 !----------------------------------------------------------------------- 98 &namsbc_clio ! namsbc_clio CLIO bulk formulae 99 !----------------------------------------------------------------------- 100 / 101 !----------------------------------------------------------------------- 102 &namsbc_core ! namsbc_core CORE bulk formulae 98 &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) 103 99 !----------------------------------------------------------------------- 104 100 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! … … 112 108 sn_prec = 'forcing_PAPASTATION_1h' , 1 , 'prec' , .false. , .false. , 'yearly' , '' , '', '' 113 109 sn_snow = 'forcing_PAPASTATION_1h' , 1 , 'snow' , .false. , .false. , 'yearly' , '' , '', '' 114 rn_zqt = 2. ! air temperature and humidity referenced at 2m (T) instead 10m (F) 115 / 116 !----------------------------------------------------------------------- 117 &namsbc_mfs ! namsbc_mfs MFS bulk formulae 118 !----------------------------------------------------------------------- 110 sn_slp = 'slp.15JUNE2009_fill' , 6 , 'SLP', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 111 112 nn_bulk_algo = 1 ! Bulk algorithm to use to compute bulk transfer coefficients Cd, Ce and Ch 113 ! 1 => "NCAR" algorithm (Large and Yeager, 2008) 114 ! 2 => "COARE 3.0" algorithm (Fairall et al 2003) 115 ! 3 => "ECMWF" algorithm (IFS cycle 31) 116 ! 4 => "COARE 3.5" algorithm (Edson et al 2013) 117 118 rn_zqt = 2. ! Air temperature and humidity reference height (m) 119 119 / 120 120 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/GYRE/EXP00/namelist_cfg
r7278 r7280 57 57 ! ! (also = the frequency of sea-ice model call) 58 58 ln_usr = .true. ! user defined formulation (T => check usrdef_sbc) 59 ln_blk = .false. ! CORE bulk formulation (T => fill namsbc_core) 59 60 nn_ice = 0 ! =0 no ice boundary condition , 60 61 ln_rnf = .false. ! runoffs (T => fill namsbc_rnf) … … 67 68 nn_tau000 = 100 ! gently increase the stress over the first ntau_rst time-steps 68 69 rn_utau0 = 0.1e0 ! uniform value for the i-stress 69 /70 !-----------------------------------------------------------------------71 &namsbc_flx ! surface boundary condition : flux formulation72 !-----------------------------------------------------------------------73 /74 !-----------------------------------------------------------------------75 &namsbc_clio ! namsbc_clio CLIO bulk formulae76 !-----------------------------------------------------------------------77 /78 !-----------------------------------------------------------------------79 &namsbc_core ! namsbc_core CORE bulk formulae80 !-----------------------------------------------------------------------81 /82 !-----------------------------------------------------------------------83 &namsbc_mfs ! namsbc_mfs MFS bulk formulae84 !-----------------------------------------------------------------------85 /86 !-----------------------------------------------------------------------87 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3")88 !-----------------------------------------------------------------------89 70 / 90 71 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_cfg
r7278 r7280 55 55 ! (also = the frequency of sea-ice model call) 56 56 ln_usr = .true. ! user defined formulation (T => check usrdef_sbc) 57 ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk ) 57 58 nn_ice = 0 ! =0 no ice boundary condition , 58 59 ln_rnf = .false. ! runoffs (T => fill namsbc_rnf) 59 60 ln_ssr = .false. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) 60 61 nn_fwb = 0 ! FreshWater Budget: =0 unchecked 61 /62 !-----------------------------------------------------------------------63 &namsbc_flx ! surface boundary condition : flux formulation64 !-----------------------------------------------------------------------65 /66 !-----------------------------------------------------------------------67 &namsbc_clio ! namsbc_clio CLIO bulk formulae68 !-----------------------------------------------------------------------69 /70 !-----------------------------------------------------------------------71 &namsbc_core ! namsbc_core CORE bulk formulae72 !-----------------------------------------------------------------------73 /74 !-----------------------------------------------------------------------75 &namsbc_mfs ! namsbc_mfs MFS bulk formulae76 !-----------------------------------------------------------------------77 /78 !-----------------------------------------------------------------------79 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3")80 !-----------------------------------------------------------------------81 62 / 82 63 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_cfg
r7278 r7280 46 46 ! (also = the frequency of sea-ice model call) 47 47 ln_usr = .true. ! user defined formulation (T => check usrdef_sbc) 48 ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk ) 48 49 nn_ice = 0 ! =0 no ice boundary condition , 49 50 ln_rnf = .false. ! runoffs (T => fill namsbc_rnf) … … 57 58 ln_qsr_2bd = .true. ! 2 bands light penetration 58 59 nn_chldta = 0 ! RGB : Chl data (=1) or cst value (=0) 59 /60 61 !-----------------------------------------------------------------------62 &namberg ! iceberg parameters63 !-----------------------------------------------------------------------64 60 / 65 61 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/GYRE_XIOS/EXP00/namelist_cfg
r7278 r7280 46 46 ! (also = the frequency of sea-ice model call) 47 47 ln_usr = .true. ! user defined formulation (T => check usrdef_sbc) 48 ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk ) 48 49 nn_ice = 0 ! =0 no ice boundary condition , 49 50 ln_rnf = .false. ! runoffs (T => fill namsbc_rnf) … … 55 56 !----------------------------------------------------------------------- 56 57 nn_tau000 = 100 ! gently increase the stress over the first ntau_rst time-steps 57 rn_utau0 = 0.1e0 ! uniform value for the i-stress 58 / 59 !----------------------------------------------------------------------- 60 &namsbc_flx ! surface boundary condition : flux formulation 61 !----------------------------------------------------------------------- 62 / 63 !----------------------------------------------------------------------- 64 &namsbc_clio ! namsbc_clio CLIO bulk formulae 65 !----------------------------------------------------------------------- 66 / 67 !----------------------------------------------------------------------- 68 &namsbc_core ! namsbc_core CORE bulk formulae 69 !----------------------------------------------------------------------- 70 / 71 !----------------------------------------------------------------------- 72 &namsbc_mfs ! namsbc_mfs MFS bulk formulae 73 !----------------------------------------------------------------------- 74 / 75 !----------------------------------------------------------------------- 76 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") 77 !----------------------------------------------------------------------- 58 rn_utau0 = 0.1 ! uniform value for the i-stress 78 59 / 79 60 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/1_namelist_cfg
r7278 r7280 56 56 / 57 57 !----------------------------------------------------------------------- 58 &namsbc_core ! namsbc_core CORE bulk formulae 59 !----------------------------------------------------------------------- 60 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 61 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 62 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , '' 63 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , '' 64 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 65 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 66 sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 67 sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 68 sn_prec = 'ncar_precip.15JUNE2009_fill' , -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 69 sn_snow = 'ncar_precip.15JUNE2009_fill' , -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 70 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 71 72 cn_dir = './' ! root directory for the location of the bulk files 73 ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data 74 rn_zqt = 10. ! Air temperature and humidity reference height (m) 75 rn_zu = 10. ! Wind vector reference height (m) 76 rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) 77 rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) 78 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 79 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 58 &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) 59 !----------------------------------------------------------------------- 60 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 61 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 62 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , '' 63 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , '' 64 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 65 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 66 sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 67 sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 68 sn_prec = 'ncar_precip.15JUNE2009_fill', -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 69 sn_snow = 'ncar_precip.15JUNE2009_fill', -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 70 sn_slp = 'slp.15JUNE2009_fill' , 6 , 'SLP' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 71 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 72 ! 73 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 74 ! 80 75 / 81 76 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist_cfg
r7278 r7280 43 43 &namsbc ! Surface Boundary Condition (surface module) 44 44 !----------------------------------------------------------------------- 45 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_core ! namsbc_core CORE bulk formulae 49 !----------------------------------------------------------------------- 45 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) 49 !----------------------------------------------------------------------- 50 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 50 51 / 51 52 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/1_namelist_cfg
r7277 r7280 35 35 !----------------------------------------------------------------------- 36 36 &namcrs ! Grid coarsening for dynamics output and/or 37 37 ! ! passive tracer coarsened online simulations 38 38 !----------------------------------------------------------------------- 39 39 / … … 57 57 / 58 58 !----------------------------------------------------------------------- 59 &namsbc_core ! namsbc_core CORE bulk formulae 60 !----------------------------------------------------------------------- 61 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 62 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 63 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , '' 64 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , '' 65 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 66 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 67 sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 68 sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 69 sn_prec = 'ncar_precip.15JUNE2009_fill' , -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 70 sn_snow = 'ncar_precip.15JUNE2009_fill' , -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 71 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 72 73 cn_dir = './' ! root directory for the location of the bulk files 74 ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data 75 rn_zqt = 10. ! Air temperature and humidity reference height (m) 76 rn_zu = 10. ! Wind vector reference height (m) 77 rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) 78 rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) 79 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 80 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 59 &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) 60 !----------------------------------------------------------------------- 61 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 62 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 63 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , '' 64 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , '' 65 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 66 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 67 sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 68 sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 69 sn_prec = 'ncar_precip.15JUNE2009_fill', -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 70 sn_snow = 'ncar_precip.15JUNE2009_fill', -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 71 sn_slp = 'slp.15JUNE2009_fill' , 6 , 'SLP' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 72 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 73 ! 74 ! ! bulk algorithm : 75 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 76 ! 81 77 / 82 78 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/namelist_cfg
r7278 r7280 43 43 &namsbc ! Surface Boundary Condition (surface module) 44 44 !----------------------------------------------------------------------- 45 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_core ! namsbc_core CORE bulk formulae 49 !----------------------------------------------------------------------- 45 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_blk ! namsbc_blk Bulk formulae 49 !----------------------------------------------------------------------- 50 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 50 51 / 51 52 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/1_namelist_cfg
r7277 r7280 116 116 nn_fsbc = 5 ! frequency of surface boundary condition computation 117 117 ! (also = the frequency of sea-ice model call) 118 ln_ blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core)118 ln_flx = .false. ! flux formulation (T => fill namsbc_flx ) 119 119 nn_ice = 0 ! =0 no ice boundary condition , 120 120 ! =1 use observed ice-cover , -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_cfg
r7278 r7280 70 70 &namsbc ! Surface Boundary Condition (surface module) 71 71 !----------------------------------------------------------------------- 72 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 73 / 74 !----------------------------------------------------------------------- 75 &namsbc_flx ! surface boundary condition : flux formulation 76 !----------------------------------------------------------------------- 77 / 78 !----------------------------------------------------------------------- 79 &namsbc_clio ! namsbc_clio CLIO bulk formulae 80 !----------------------------------------------------------------------- 81 / 82 !----------------------------------------------------------------------- 83 &namsbc_core ! namsbc_core CORE bulk formulae 84 !----------------------------------------------------------------------- 85 / 86 !----------------------------------------------------------------------- 87 &namsbc_mfs ! namsbc_mfs MFS bulk formulae 88 !----------------------------------------------------------------------- 89 / 90 !----------------------------------------------------------------------- 91 &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") 92 !----------------------------------------------------------------------- 72 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 73 / 74 !----------------------------------------------------------------------- 75 &namsbc_blk ! namsbc_blk Bulk formulae 76 !----------------------------------------------------------------------- 77 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 93 78 / 94 79 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_cfg
r7278 r7280 43 43 &namsbc ! Surface Boundary Condition (surface module) 44 44 !----------------------------------------------------------------------- 45 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_core ! namsbc_core CORE bulk formulae 49 !----------------------------------------------------------------------- 45 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_blk ! namsbc_blk Bulk formulae 49 !----------------------------------------------------------------------- 50 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 50 51 / 51 52 !----------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_cfg
r7278 r7280 48 48 &namsbc ! Surface Boundary Condition (surface module) 49 49 !----------------------------------------------------------------------- 50 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 50 51 nn_fsbc = 1 ! frequency of surface boundary condition computation 51 52 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 52 53 ln_rnf = .false. ! runoffs 53 54 ln_traqsr = .false. ! Light penetration (T) or not (F) 54 / 55 / 56 !----------------------------------------------------------------------- 57 &namsbc_blk ! namsbc_blk Bulk formulae 58 !----------------------------------------------------------------------- 59 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 60 / 55 61 !----------------------------------------------------------------------- 56 62 &namtra_qsr ! penetrative solar radiation -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/ORCA2_SAS_LIM/EXP00/namelist_cfg
r7278 r7280 43 43 &namsbc ! Surface Boundary Condition (surface module) 44 44 !----------------------------------------------------------------------- 45 ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_core ! namsbc_core CORE bulk formulae 49 !----------------------------------------------------------------------- 50 / 51 !----------------------------------------------------------------------- 52 &namtra_qsr ! penetrative solar radiation 53 !----------------------------------------------------------------------- 54 / 45 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 46 / 47 !----------------------------------------------------------------------- 48 &namsbc_blk ! namsbc_blk Bulk formulae 49 !----------------------------------------------------------------------- 50 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 51 / 52 !----------------------------------------------------------------------- 53 &namsbc_sas ! Stand-Alone Surface module 54 !----------------------------------------------------------------------- 55 / 55 56 !----------------------------------------------------------------------- 56 57 &namsbc_rnf ! runoffs namelist surface boundary condition -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/SHARED/namelist_ref
r7278 r7280 4 4 !! NEMO/OPA : 1 - run manager (namrun) 5 5 !! namelists 2 - Domain (namcfg, namzgr, namdom, namtsd, namcrs, namc1d, namc1d_uvd) 6 !! 3 - Surface boundary (namsbc, namsbc_flx, namsbc_ clio, namsbc_core, namsbc_sas6 !! 3 - Surface boundary (namsbc, namsbc_flx, namsbc_blk, namsbc_sas) 7 7 !! namsbc_cpl, namtra_qsr, namsbc_rnf, 8 8 !! namsbc_apr, namsbc_ssr, namsbc_alb, namsbc_wave) … … 162 162 !! namsbc surface boundary condition 163 163 !! namsbc_flx flux formulation (ln_flx =T) 164 !! namsbc_clio CLIO bulk formulae formulation (ln_blk_clio=T) 165 !! namsbc_core CORE bulk formulae formulation (ln_blk_core=T) 166 !! namsbc_mfs MFS bulk formulae formulation (ln_blk_mfs =T) 164 !! namsbc_blk Bulk formulae formulation (ln_blk =T) 167 165 !! namsbc_cpl CouPLed formulation ("key_oasis3" ) 168 !! namsbc_sas St Andalone Surface module166 !! namsbc_sas Stand-Alone Surface module 169 167 !! namtra_qsr penetrative solar radiation (ln_traqsr =T) 170 168 !! namsbc_rnf river runoffs (ln_rnf =T) … … 186 184 ln_usr = .false. ! user defined formulation (T => check usrdef_sbc) 187 185 ln_flx = .false. ! flux formulation (T => fill namsbc_flx ) 188 ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) 189 ln_blk_core = .false. ! CORE bulk formulation (T => fill namsbc_core) 190 ln_blk_mfs = .false. ! MFS bulk formulation (T => fill namsbc_mfs ) 186 ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk ) 191 187 ! Type of coupling (Ocean/Ice/Atmosphere) : 192 188 ln_cpl = .false. ! atmosphere coupled formulation ( requires key_oasis3 ) … … 204 200 nn_ice = 2 ! =0 no ice boundary condition , 205 201 ! =1 use observed ice-cover , 206 ! =2 ice-model used ("key_lim3", "key_lim2","key_cice")202 ! =2 to 4 : ice-model used (LIM2, LIM3 or CICE) ("key_lim3", "key_lim2", or "key_cice") 207 203 nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) 208 204 ! =1 levitating ice with mass and salt exchange but no presure effect 209 205 ! =2 embedded sea-ice (full salt and mass exchanges and pressure) 210 206 ! Misc. options of sbc : 211 ln_traqsr = .true. ! Light penetration in the ocean (T => fill namtra_qsr 207 ln_traqsr = .true. ! Light penetration in the ocean (T => fill namtra_qsr) 212 208 ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave 213 209 ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) … … 216 212 ! =1 global mean of e-p-r set to zero at each time step 217 213 ! =2 annual global mean of e-p-r set to zero 218 ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr 219 ln_isf = .false. ! ice shelf (T 214 ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr) 215 ln_isf = .false. ! ice shelf (T => fill namsbc_isf) 220 216 ln_wave = .false. ! coupling with surface wave (T => fill namsbc_wave) 221 217 nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , … … 223 219 / 224 220 !----------------------------------------------------------------------- 225 &namsbc_flx ! surface boundary condition : flux formulation 221 &namsbc_flx ! surface boundary condition : flux formulation (ln_ana = T) 226 222 !----------------------------------------------------------------------- 227 223 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! … … 236 232 / 237 233 !----------------------------------------------------------------------- 238 &namsbc_clio ! namsbc_clio CLIO bulk formulae 239 !----------------------------------------------------------------------- 240 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 241 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 242 sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' , '' 243 sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' , '' 244 sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' , '' 245 sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' , '' 246 sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' , '' 247 sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' , '' 248 sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' , '' 249 250 cn_dir = './' ! root directory for the location of the bulk files are 251 / 252 !----------------------------------------------------------------------- 253 &namsbc_core ! namsbc_core CORE bulk formulae 254 !----------------------------------------------------------------------- 255 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 256 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 234 &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) 235 !----------------------------------------------------------------------- 236 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 237 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 257 238 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Uwnd' , '' 258 239 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Vwnd' , '' … … 263 244 sn_prec = 'ncar_precip.15JUNE2009_fill', -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 264 245 sn_snow = 'ncar_precip.15JUNE2009_fill', -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 246 sn_slp = 'slp.15JUNE2009_fill' , 6 , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 265 247 sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 266 248 ! ! bulk algorithm : 249 ln_NCAR = .false. ! "NCAR" algorithm (Large and Yeager 2008) 250 ln_COARE_3p0= .false. ! "COARE 3.0" algorithm (Fairall et al. 2003) 251 ln_COARE_3p5= .false. ! "COARE 3.5" algorithm (Edson et al. 2013) 252 ln_ECMWF = .false. ! "ECMWF" algorithm (IFS cycle 31) 253 ! 267 254 cn_dir = './' ! root directory for the location of the bulk files 268 255 ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data … … 273 260 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 274 261 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 275 /276 !-----------------------------------------------------------------------277 &namsbc_mfs ! namsbc_mfs MFS bulk formulae278 !-----------------------------------------------------------------------279 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask !280 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename !281 sn_wndi = 'ecmwf' , 6 , 'u10' , .true. , .false., 'daily' ,'bicubic.nc' , '' , ''282 sn_wndj = 'ecmwf' , 6 , 'v10' , .true. , .false., 'daily' ,'bicubic.nc' , '' , ''283 sn_clc = 'ecmwf' , 6 , 'clc' , .true. , .false., 'daily' ,'bilinear.nc', '' , ''284 sn_msl = 'ecmwf' , 6 , 'msl' , .true. , .false., 'daily' ,'bicubic.nc' , '' , ''285 sn_tair = 'ecmwf' , 6 , 't2' , .true. , .false., 'daily' ,'bicubic.nc' , '' , ''286 sn_rhm = 'ecmwf' , 6 , 'rh' , .true. , .false., 'daily' ,'bilinear.nc', '' , ''287 sn_prec = 'ecmwf' , 6 , 'precip' , .true. , .true. , 'daily' ,'bicubic.nc' , '' , ''288 289 cn_dir = './ECMWF/' ! root directory for the location of the bulk files290 262 / 291 263 !----------------------------------------------------------------------- … … 415 387 / 416 388 !----------------------------------------------------------------------- 417 &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk389 &namsbc_apr ! Atmospheric pressure used as ocean forcing (ln_apr_dyn =T) 418 390 !----------------------------------------------------------------------- 419 391 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! -
branches/2016/dev_CNRS_2016/NEMOGCM/CONFIG/cfg.txt
r7278 r7280 6 6 GYRE_BFM OPA_SRC TOP_SRC 7 7 AMM12 OPA_SRC 8 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC9 8 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 10 9 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC … … 14 13 GYRE OPA_SRC 15 14 ISOMIP OPA_SRC 15 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r7278 r7280 5 5 !!====================================================================== 6 6 !! History : 2.0 ! 2004-01 (C. Ethe, G. Madec) Original code 7 !! 4.0 ! 2011-02 (G. Madec) dynamical allocation7 !! 3.0 ! 2011-02 (G. Madec) dynamical allocation 8 8 !! - ! 2014 (C. Rousset) add N/S initializations 9 9 !!---------------------------------------------------------------------- … … 25 25 USE dom_ice ! sea-ice domain 26 26 USE limvar ! lim_var_salprof 27 ! 27 28 USE in_out_manager ! I/O manager 28 29 USE lib_mpp ! MPP library … … 37 38 PUBLIC lim_istate ! routine called by lim_init.F90 38 39 39 ! !!** init namelist (namiceini) **40 ! !!** init namelist (namiceini) ** 40 41 REAL(wp) :: rn_thres_sst ! threshold water temperature for initial sea ice 41 42 REAL(wp) :: rn_hts_ini_n ! initial snow thickness in the north … … 57 58 INTEGER , PARAMETER :: jp_tmi = 5 ! index of ice temp at T-point 58 59 INTEGER , PARAMETER :: jp_smi = 6 ! index of ice sali at T-point 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si ! structure of input fields (file informations, fields read) 60 61 61 62 LOGICAL :: ln_iceini ! initialization or not … … 74 75 !! ** Purpose : defined the sea-ice initial state 75 76 !! 76 !! ** Method : 77 !! This routine will put some ice where ocean 77 !! ** Method : This routine will put some ice where ocean 78 78 !! is at the freezing point, then fill in ice 79 79 !! state variables using prescribed initial 80 80 !! values in the namelist 81 81 !! 82 !! ** Steps : 83 !! 1) Read namelist 82 !! ** Steps : 1) Read namelist 84 83 !! 2) Basal temperature; ice and hemisphere masks 85 84 !! 3) Fill in the ice thickness distribution using gaussian … … 96 95 !! 4.0 ! 09-11 (M. Vancoppenolle) Enhanced version for ice cats 97 96 !!-------------------------------------------------------------------- 98 99 !! * Local variables 100 INTEGER :: ji, jj, jk, jl ! dummy loop indices 101 REAL(wp) :: ztmelts, zdh 102 INTEGER :: i_hemis, i_fill, jl0 97 INTEGER :: ji, jj, jk, jl ! dummy loop indices 98 REAL(wp) :: ztmelts, zdh 99 INTEGER :: i_hemis, i_fill, jl0 103 100 REAL(wp) :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv 104 101 REAL(wp), POINTER, DIMENSION(:,:) :: zswitch ! ice indicator … … 108 105 !-------------------------------------------------------------------- 109 106 110 CALL wrk_alloc( jpi, jpj, jpl,zh_i_ini, za_i_ini, zv_i_ini )111 CALL wrk_alloc( jpi, jpj,zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini )112 CALL wrk_alloc( jpi, jpj,zswitch )107 CALL wrk_alloc( jpi,jpj,jpl, zh_i_ini, za_i_ini, zv_i_ini ) 108 CALL wrk_alloc( jpi,jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 109 CALL wrk_alloc( jpi,jpj, zswitch ) 113 110 114 111 IF(lwp) WRITE(numout,*) 115 IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization '116 IF(lwp) WRITE(numout,*) '~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~'112 IF(lwp) WRITE(numout,*) 'lim_istate : sea-ice initialization ' 113 IF(lwp) WRITE(numout,*) '~~~~~~~~~~ ' 117 114 118 115 !-------------------------------------------------------------------- 119 116 ! 1) Read namelist 120 117 !-------------------------------------------------------------------- 121 118 ! 122 119 CALL lim_istate_init ! reading the initials parameters of the ice 123 120 … … 134 131 135 132 IF( ln_iceini ) THEN 136 133 ! 137 134 !-------------------------------------------------------------------- 138 135 ! 2) Basal temperature, ice mask and hemispheric index 139 136 !-------------------------------------------------------------------- 140 137 ! 141 138 DO jj = 1, jpj ! ice if sst <= t-freez + ttest 142 139 DO ji = 1, jpi … … 153 150 !-------------------------------------------------------------------- 154 151 IF( ln_iceini_file )THEN 155 152 ! 156 153 zht_i_ini(:,:) = si(jp_hti)%fnow(:,:,1) 157 154 zht_s_ini(:,:) = si(jp_hts)%fnow(:,:,1) … … 160 157 ztm_i_ini(:,:) = si(jp_tmi)%fnow(:,:,1) 161 158 zsm_i_ini(:,:) = si(jp_smi)%fnow(:,:,1) 162 159 ! 163 160 ELSE ! ln_iceini_file = F 164 161 ! 165 162 !----------------------------- 166 163 ! 3.1) Hemisphere-dependent arrays … … 186 183 END DO 187 184 END DO 188 185 ! 189 186 ENDIF ! ln_iceini_file 190 187 … … 200 197 za_i_ini(:,:,:) = 0._wp 201 198 zv_i_ini(:,:,:) = 0._wp 202 199 ! 203 200 DO jj = 1, jpj 204 201 DO ji = 1, jpi 205 202 ! 206 203 IF( zat_i_ini(ji,jj) > 0._wp .AND. zht_i_ini(ji,jj) > 0._wp )THEN 207 208 ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ;ztest_4 = 0204 ! 205 ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ; ztest_4 = 0 209 206 ! ztests = 0 210 207 ! 211 208 DO i_fill = jpl, 1, -1 212 213 ! IF( ztests .NE.4 ) THEN214 IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) .NE.4 ) THEN209 ! 210 ! IF( ztests /= 4 ) THEN 211 IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) /= 4 ) THEN 215 212 !---------------------------- 216 213 ! fill the i_fill categories … … 223 220 za_i_ini(ji,jj,2:jpl) = 0._wp 224 221 ELSE 225 222 ! 226 223 ! *** >1 categores to fill 227 224 !--- Ice thicknesses in the i_fill - 1 first categories … … 229 226 zh_i_ini(ji,jj,jl) = hi_mean(jl) 230 227 END DO 231 228 ! 232 229 !--- jl0: most likely index where cc will be maximum 233 230 DO jl = 1, jpl … … 238 235 END DO 239 236 jl0 = MIN(jl0, i_fill) 240 237 ! 241 238 !--- Concentrations 242 239 za_i_ini(ji,jj,jl0) = zat_i_ini(ji,jj) / SQRT(REAL(jpl)) 243 240 DO jl = 1, i_fill - 1 244 IF( jl .NE.jl0 )THEN241 IF( jl /= jl0 )THEN 245 242 zsigma = 0.5 * zht_i_ini(ji,jj) 246 243 zarg = ( zh_i_ini(ji,jj,jl) - zht_i_ini(ji,jj) ) / zsigma … … 248 245 ENDIF 249 246 END DO 250 247 ! 251 248 zA = 0. ! sum of the areas in the jpl categories 252 249 DO jl = 1, i_fill - 1 … … 254 251 END DO 255 252 za_i_ini(ji,jj,i_fill) = zat_i_ini(ji,jj) - zA ! ice conc in the last category 256 IF ( i_fill .LT.jpl ) za_i_ini(ji,jj,i_fill+1:jpl) = 0._wp257 253 IF ( i_fill < jpl ) za_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 254 ! 258 255 !--- Ice thickness in the last category 259 256 zV = 0. ! sum of the volumes of the N-1 categories … … 262 259 END DO 263 260 zh_i_ini(ji,jj,i_fill) = ( zvt_i_ini(ji,jj) - zV ) / za_i_ini(ji,jj,i_fill) 264 IF ( i_fill .LT.jpl ) zh_i_ini(ji,jj,i_fill+1:jpl) = 0._wp265 261 IF ( i_fill < jpl ) zh_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 262 ! 266 263 !--- volumes 267 264 zv_i_ini(ji,jj,:) = za_i_ini(ji,jj,:) * zh_i_ini(ji,jj,:) 268 IF ( i_fill .LT.jpl ) zv_i_ini(ji,jj,i_fill+1:jpl) = 0._wp269 265 IF ( i_fill < jpl ) zv_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 266 ! 270 267 ENDIF ! i_fill 271 268 ! 272 269 !--------------------- 273 270 ! Compatibility tests … … 275 272 ! Test 1: area conservation 276 273 zA_cons = SUM(za_i_ini(ji,jj,:)) ; zconv = ABS(zat_i_ini(ji,jj) - zA_cons ) 277 IF ( zconv .LT. 1.0e-6 ) THEN 278 ztest_1 = 1 279 ELSE 280 ztest_1 = 0 274 IF( zconv < 1.0e-6 ) THEN ; ztest_1 = 1. 275 ELSE ; ztest_1 = 0. 281 276 ENDIF 282 277 ! 283 278 ! Test 2: volume conservation 284 279 zV_cons = SUM(zv_i_ini(ji,jj,:)) 285 zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 286 287 IF( zconv .LT. 1.0e-6 ) THEN 288 ztest_2 = 1 289 ELSE 290 ztest_2 = 0 280 zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 281 IF( zconv < 1.0e-6 ) THEN ; ztest_2 = 1. 282 ELSE ; ztest_2 = 0. 291 283 ENDIF 292 284 ! 293 285 ! Test 3: thickness of the last category is in-bounds ? 294 IF ( zh_i_ini(ji,jj,i_fill) > hi_max(i_fill-1) ) THEN 295 ztest_3 = 1 296 ELSE 297 ztest_3 = 0 286 IF( zh_i_ini(ji,jj,i_fill) > hi_max(i_fill-1) ) THEN ; ztest_3 = 1. 287 ELSE ; ztest_3 = 0. 298 288 ENDIF 299 289 ! 300 290 ! Test 4: positivity of ice concentrations 301 291 ztest_4 = 1 302 292 DO jl = 1, jpl 303 IF ( za_i_ini(ji,jj,jl) .LT. 0._wp ) THEN 304 ztest_4 = 0 305 ENDIF 293 IF( za_i_ini(ji,jj,jl) < 0._wp ) ztest_4 = 0 306 294 END DO 307 295 ! 308 296 ENDIF ! ztest_1 + ztest_2 + ztest_3 + ztest_4 309 297 ! 310 298 ztests = ztest_1 + ztest_2 + ztest_3 + ztest_4 311 299 ! 312 300 END DO ! i_fill 313 301 ! 314 302 IF(lwp) THEN 315 WRITE(numout,*) ' ztests : ', ztests 316 IF( ztests .NE. 4 )THEN 303 IF( ztests /= 4 ) THEN 317 304 WRITE(numout,*) 318 305 WRITE(numout,*) ' !!!! ALERT !!! ' 319 306 WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 320 307 WRITE(numout,*) 321 WRITE(numout,*) ' *** ztests is not equal to 4 '308 WRITE(numout,*) ' *** ztests is not equal to 4 : ztests : ', ztests 322 309 WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4 323 310 WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 324 311 WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(ji,jj) 325 ENDIF ! ztests .NE.4312 ENDIF ! ztests /= 4 326 313 ENDIF 327 314 ! 328 315 ENDIF ! zat_i_ini(ji,jj) > 0._wp .AND. zhm_i_ini(ji,jj) > 0._wp 329 330 END DO331 END DO316 ! 317 END DO 318 END DO 332 319 333 320 !--------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r7278 r7280 969 969 IF (lwp) THEN ! control print 970 970 WRITE(numout,*) 971 WRITE(numout,*)' lim_itd_me_init : ice parameters for mechanical ice redistribution ' 972 WRITE(numout,*)' ~~~~~~~~~~~~~~~' 973 WRITE(numout,*)' Fraction of shear energy contributing to ridging rn_cs = ', rn_cs 974 WRITE(numout,*)' Fraction of snow volume conserved during ridging rn_fsnowrdg = ', rn_fsnowrdg 975 WRITE(numout,*)' Fraction of snow volume conserved during ridging rn_fsnowrft = ', rn_fsnowrft 976 WRITE(numout,*)' Fraction of total ice coverage contributing to ridging rn_gstar = ', rn_gstar 977 WRITE(numout,*)' Equivalent to G* for an exponential part function rn_astar = ', rn_astar 978 WRITE(numout,*)' Quantity playing a role in max ridged ice thickness rn_hstar = ', rn_hstar 979 WRITE(numout,*)' Rafting of ice sheets or not ln_rafting = ', ln_rafting 980 WRITE(numout,*)' Parmeter thickness (threshold between ridge-raft) rn_hraft = ', rn_hraft 981 WRITE(numout,*)' Rafting hyperbolic tangent coefficient rn_craft = ', rn_craft 982 WRITE(numout,*)' Initial porosity of ridges rn_por_rdg = ', rn_por_rdg 983 WRITE(numout,*)' Switch for part. function (0) linear (1) exponential nn_partfun = ', nn_partfun 971 WRITE(numout,*) ' lim_itd_me_init : ice parameters for mechanical ice redistribution ' 972 WRITE(numout,*) ' ~~~~~~~~~~~~~~~' 973 WRITE(numout,*) ' Namelist namiceitdme :' 974 WRITE(numout,*) ' Fraction of shear energy contributing to ridging rn_cs = ', rn_cs 975 WRITE(numout,*) ' Fraction of snow volume conserved during ridging rn_fsnowrdg = ', rn_fsnowrdg 976 WRITE(numout,*) ' Fraction of snow volume conserved during ridging rn_fsnowrft = ', rn_fsnowrft 977 WRITE(numout,*) ' Fraction of total ice coverage contributing to ridging rn_gstar = ', rn_gstar 978 WRITE(numout,*) ' Equivalent to G* for an exponential part function rn_astar = ', rn_astar 979 WRITE(numout,*) ' Quantity playing a role in max ridged ice thickness rn_hstar = ', rn_hstar 980 WRITE(numout,*) ' Rafting of ice sheets or not ln_rafting = ', ln_rafting 981 WRITE(numout,*) ' Parmeter thickness (threshold between ridge-raft) rn_hraft = ', rn_hraft 982 WRITE(numout,*) ' Rafting hyperbolic tangent coefficient rn_craft = ', rn_craft 983 WRITE(numout,*) ' Initial porosity of ridges rn_por_rdg = ', rn_por_rdg 984 WRITE(numout,*) ' Switch for part. function (0) linear (1) exponential nn_partfun = ', nn_partfun 984 985 ENDIF 985 986 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r7278 r7280 621 621 IF(lwp) THEN 622 622 WRITE(numout,*) 623 WRITE(numout,*) 'lim_thd : Ice Thermodynamics'624 WRITE(numout,*) '~~~~~~~ '623 WRITE(numout,*) 'lim_thd_init : Ice Thermodynamics initialization' 624 WRITE(numout,*) '~~~~~~~~~~~~' 625 625 ENDIF 626 626 ! … … 634 634 IF(lwm) WRITE ( numoni, namicethd ) 635 635 ! 636 IF ( ( jpl > 1 ) .AND. ( nn_monocat == 1 ) ) THEN637 nn_monocat = 0638 IF(lwp) WRITE(numout, *) ' nn_monocat must be 0 in multi-category case '639 ENDIF640 641 !642 636 IF(lwp) THEN ! control print 643 WRITE(numout,*)644 637 WRITE(numout,*)' Namelist of ice parameters for ice thermodynamic computation ' 645 638 WRITE(numout,*)' ice thick. for lateral accretion rn_hnewice = ', rn_hnewice … … 659 652 WRITE(numout,*)' iterate the surface non-solar flux (T) or not (F) ln_it_qnsice = ', ln_it_qnsice 660 653 ENDIF 654 IF( jpl > 1 .AND. nn_monocat == 1 ) THEN 655 nn_monocat = 0 656 IF(lwp) WRITE(numout,*) 657 IF(lwp) WRITE(numout,*) ' nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen' 658 ENDIF 661 659 ! 662 660 END SUBROUTINE lim_thd_init -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r7278 r7280 144 144 WRITE(numout,*) 'lim_thd_sal_init : Ice parameters for salinity ' 145 145 WRITE(numout,*) '~~~~~~~~~~~~~~~~' 146 WRITE(numout,*) ' switch for salinity nn_icesal = ', nn_icesal 147 WRITE(numout,*) ' bulk salinity value if nn_icesal = 1 = ', rn_icesal 148 WRITE(numout,*) ' restoring salinity for GD = ', rn_sal_gd 149 WRITE(numout,*) ' restoring time for GD = ', rn_time_gd 150 WRITE(numout,*) ' restoring salinity for flushing = ', rn_sal_fl 151 WRITE(numout,*) ' restoring time for flushing = ', rn_time_fl 152 WRITE(numout,*) ' Maximum tolerated ice salinity = ', rn_simax 153 WRITE(numout,*) ' Minimum tolerated ice salinity = ', rn_simin 146 WRITE(numout,*) ' Namelist namicesal :' 147 WRITE(numout,*) ' switch for salinity nn_icesal = ', nn_icesal 148 WRITE(numout,*) ' bulk salinity value if nn_icesal = 1 = ', rn_icesal 149 WRITE(numout,*) ' restoring salinity for GD = ', rn_sal_gd 150 WRITE(numout,*) ' restoring time for GD = ', rn_time_gd 151 WRITE(numout,*) ' restoring salinity for flushing = ', rn_sal_fl 152 WRITE(numout,*) ' restoring time for flushing = ', rn_time_fl 153 WRITE(numout,*) ' Maximum tolerated ice salinity = ', rn_simax 154 WRITE(numout,*) ' Minimum tolerated ice salinity = ', rn_simin 154 155 ENDIF 155 156 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r6140 r7280 230 230 231 231 SUBROUTINE dia_hsb_rst( kt, cdrw ) 232 !!---------------------------------------------------------------------233 !! *** ROUTINE limdia_rst ***234 !!235 !! ** Purpose : Read or write DIA file in restart file236 !!237 !! ** Method : use of IOM library238 !!----------------------------------------------------------------------239 INTEGER , INTENT(in) :: kt ! ocean time-step240 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag241 !242 INTEGER :: ji, jj, jk ! dummy loop indices243 INTEGER :: id1 ! local integers244 !!----------------------------------------------------------------------245 !246 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise247 IF( ln_rstart ) THEN !* Read the restart file248 !id1 = iom_varid( numror, 'frc_vol' , ldstop = .FALSE. )249 !250 IF(lwp) WRITE(numout,*) '~~~~~~~'251 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp252 IF(lwp) WRITE(numout,*) '~~~~~~~'253 CALL iom_get( numror, 'frc_v', frc_v )254 CALL iom_get( numror, 'frc_t', frc_t )255 CALL iom_get( numror, 'frc_s', frc_s )256 IF( ln_linssh ) THEN257 CALL iom_get( numror, 'frc_wn_t', frc_wn_t )258 CALL iom_get( numror, 'frc_wn_s', frc_wn_s )259 ENDIF260 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling261 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini )262 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini )263 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini )264 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini )265 IF( ln_linssh ) THEN266 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini )267 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini )268 ENDIF269 ELSE270 IF(lwp) WRITE(numout,*) '~~~~~~~'271 IF(lwp) WRITE(numout,*) ' dia_hsbat initial state '272 IF(lwp) WRITE(numout,*) '~~~~~~~'273 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface274 ssh_ini(:,:) = sshn(:,:) ! initial ssh275 DO jk = 1, jpk276 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance).277 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors278 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content279 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content280 END DO281 frc_v = 0._wp ! volume trend due to forcing282 frc_t = 0._wp ! heat content - - - -283 frc_s = 0._wp ! salt content - - - -284 IF( ln_linssh ) THEN285 IF( ln_isfcav ) THEN286 DO ji=1,jpi287 DO jj=1,jpj288 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh289 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh290 ENDDO291 ENDDO292 ELSE293 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh294 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh295 END IF296 frc_wn_t = 0._wp ! initial heat content misfit due to free surface297 frc_wn_s = 0._wp ! initial salt content misfit due to free surface298 ENDIF299 ENDIF300 301 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file302 ! ! -------------------303 IF(lwp) WRITE(numout,*) '~~~~~~~'304 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp305 IF(lwp) WRITE(numout,*) '~~~~~~~'306 307 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v )308 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t )309 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s )310 IF( ln_linssh ) THEN311 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t )312 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s )313 ENDIF314 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini ) ! ice sheet coupling315 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini )316 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini )317 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini )318 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini )319 IF( ln_linssh ) THEN320 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini )321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini )322 ENDIF323 !324 ENDIF325 !232 !!--------------------------------------------------------------------- 233 !! *** ROUTINE limdia_rst *** 234 !! 235 !! ** Purpose : Read or write DIA file in restart file 236 !! 237 !! ** Method : use of IOM library 238 !!---------------------------------------------------------------------- 239 INTEGER , INTENT(in) :: kt ! ocean time-step 240 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 241 ! 242 INTEGER :: ji, jj, jk ! dummy loop indices 243 INTEGER :: id1 ! local integers 244 !!---------------------------------------------------------------------- 245 ! 246 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 247 IF( ln_rstart ) THEN !* Read the restart file 248 !id1 = iom_varid( numror, 'frc_vol' , ldstop = .FALSE. ) 249 ! 250 IF(lwp) WRITE(numout,*) 251 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : read restart at it= ', kt,' date= ', ndastp 252 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 253 CALL iom_get( numror, 'frc_v', frc_v ) 254 CALL iom_get( numror, 'frc_t', frc_t ) 255 CALL iom_get( numror, 'frc_s', frc_s ) 256 IF( ln_linssh ) THEN 257 CALL iom_get( numror, 'frc_wn_t', frc_wn_t ) 258 CALL iom_get( numror, 'frc_wn_s', frc_wn_s ) 259 ENDIF 260 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling 261 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini ) 262 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini ) 263 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini ) 264 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini ) 265 IF( ln_linssh ) THEN 266 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 267 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) 268 ENDIF 269 ELSE 270 IF(lwp) WRITE(numout,*) 271 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : no restart, set value at initial state ' 272 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 273 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface 274 ssh_ini(:,:) = sshn(:,:) ! initial ssh 275 DO jk = 1, jpk 276 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 277 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors 278 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content 279 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content 280 END DO 281 frc_v = 0._wp ! volume trend due to forcing 282 frc_t = 0._wp ! heat content - - - - 283 frc_s = 0._wp ! salt content - - - - 284 IF( ln_linssh ) THEN 285 IF( ln_isfcav ) THEN 286 DO ji=1,jpi 287 DO jj=1,jpj 288 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh 289 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh 290 END DO 291 END DO 292 ELSE 293 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh 294 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh 295 END IF 296 frc_wn_t = 0._wp ! initial heat content misfit due to free surface 297 frc_wn_s = 0._wp ! initial salt content misfit due to free surface 298 ENDIF 299 ENDIF 300 ! 301 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file 302 ! ! ------------------- 303 IF(lwp) WRITE(numout,*) 304 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : write restart at it= ', kt,' date= ', ndastp 305 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 306 307 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v ) 308 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t ) 309 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s ) 310 IF( ln_linssh ) THEN 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 312 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) 313 ENDIF 314 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini ) ! ice sheet coupling 315 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini ) 316 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini ) 317 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini ) 318 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini ) 319 IF( ln_linssh ) THEN 320 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) 322 ENDIF 323 ! 324 ENDIF 325 ! 326 326 END SUBROUTINE dia_hsb_rst 327 327 … … 342 342 INTEGER :: ierror ! local integer 343 343 INTEGER :: ios 344 ! 344 !! 345 345 NAMELIST/namhsb/ ln_diahsb 346 346 !!---------------------------------------------------------------------- 347 348 IF(lwp) THEN 349 WRITE(numout,*) 350 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets' 351 WRITE(numout,*) '~~~~~~~~ ' 352 ENDIF 353 347 ! 354 348 REWIND( numnam_ref ) ! Namelist namhsb in reference namelist 355 349 READ ( numnam_ref, namhsb, IOSTAT = ios, ERR = 901) … … 368 362 WRITE(numout,*) ' Namelist namhsb : set hsb parameters' 369 363 WRITE(numout,*) ' Switch for hsb diagnostic (T) or not (F) ln_diahsb = ', ln_diahsb 370 WRITE(numout,*)371 364 ENDIF 372 365 373 366 IF( .NOT. ln_diahsb ) RETURN 374 ! IF( .NOT. lk_mpp_rep ) &375 ! CALL ctl_stop (' Your global mpp_sum if performed in single precision - 64 bits -', &376 ! & ' whereas the global sum to be precise must be done in double precision ',&377 ! & ' please add key_mpp_rep')378 367 379 368 ! ------------------- ! … … 383 372 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror ) 384 373 IF( ierror > 0 ) THEN 385 CALL ctl_stop( 'dia_hsb : unable to allocate hc_loc_ini' ) ; RETURN374 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN 386 375 ENDIF 387 376 388 377 IF( ln_linssh ) ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror ) 389 378 IF( ierror > 0 ) THEN 390 CALL ctl_stop( 'dia_hsb : unable to allocate hc_loc_ini' ) ; RETURN379 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN 391 380 ENDIF 392 381 … … 394 383 ! 2 - Time independant variables and file opening ! 395 384 ! ----------------------------------------------- ! 396 IF(lwp) WRITE(numout,*) "dia_hsb: heat salt volume budgets activated"397 IF(lwp) WRITE(numout,*) '~~~~~~~'385 IF(lwp) WRITE(numout,*) 386 IF(lwp) WRITE(numout,*) " heat salt volume budgets activated" 398 387 surf(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) ! masked surface grid cell area 399 388 surf_tot = glob_sum( surf(:,:) ) ! total ocean surface area 400 389 401 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb does not take open boundary fluxes into account' )390 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb_init: heat/salt budget does not consider open boundary fluxes' ) 402 391 ! 403 392 ! ---------------------------------- ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIU/cool_skin.F90
r7278 r7280 10 10 11 11 !!---------------------------------------------------------------------- 12 !! diurnal_sst_coolskin_step : time-step the cool skin corrections 12 !! diurnal_sst_coolskin_init : initialisation of the cool skin 13 !! diurnal_sst_coolskin_step : time-stepping of the cool skin corrections 13 14 !!---------------------------------------------------------------------- 14 15 USE par_kind … … 21 22 22 23 IMPLICIT NONE 23 24 PRIVATE 25 24 26 ! Namelist parameters 25 27 … … 37 39 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: x_csthick ! Cool skin thickness 38 40 39 PRIVATE40 41 PUBLIC diurnal_sst_coolskin_step, diurnal_sst_coolskin_init 41 42 42 43 !! * Substitutions 43 44 # include "vectopt_loop_substitute.h90" 44 45 !!---------------------------------------------------------------------- 46 !! NEMO/OPA 4.0 , NEMO-consortium (2016) 47 !! $Id: $ 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 !!---------------------------------------------------------------------- 45 50 CONTAINS 46 51 … … 56 61 !! 57 62 !!---------------------------------------------------------------------- 58 59 IMPLICIT NONE60 61 63 ALLOCATE( x_csdsst(jpi,jpj), x_csthick(jpi,jpj) ) 62 64 x_csdsst = 0. 63 65 x_csthick = 0. 64 66 ! 65 67 END SUBROUTINE diurnal_sst_coolskin_init 66 68 69 67 70 SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, rdt) 68 71 !!---------------------------------------------------------------------- … … 75 78 !! ** Reference : 76 79 !!---------------------------------------------------------------------- 77 78 IMPLICIT NONE79 80 80 ! Dummy variables 81 81 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psqflux ! Heat (non-solar)(Watts) … … 94 94 95 95 INTEGER :: ji,jj 96 97 IF ( .NOT. ln_blk_core ) THEN 98 CALL ctl_stop("cool_skin.f90: diurnal flux processing only implemented"//& 99 & " for core bulk forcing") 100 ENDIF 101 96 !!---------------------------------------------------------------------- 97 ! 98 IF( .NOT. ln_blk ) CALL ctl_stop("cool_skin.f90: diurnal flux processing only implemented for bulk forcing") 99 ! 102 100 DO jj = 1,jpj 103 101 DO ji = 1,jpi 104 102 ! 105 103 ! Calcualte wind speed from wind stress and friction velocity 106 104 IF( tmask(ji,jj,1) == 1. .AND. pstauflux(ji,jj) /= 0 .AND. psrho(ji,jj) /=0 ) THEN … … 111 109 z_wspd(ji,jj) = 0. 112 110 ENDIF 113 114 111 ! 115 112 ! Calculate gamma function which is dependent upon wind speed 116 113 IF( tmask(ji,jj,1) == 1. ) THEN … … 119 116 IF( ( z_wspd(ji,jj) >= 10. ) ) z_gamma(ji,jj) = 6. 120 117 ENDIF 121 122 118 ! 123 119 ! Calculate lamda function 124 120 IF( tmask(ji,jj,1) == 1. .AND. z_fv(ji,jj) /= 0 ) THEN … … 127 123 z_lamda(ji,jj) = 0. 128 124 ENDIF 129 130 131 125 ! 132 126 ! Calculate the cool skin thickness - only when heat flux is out of the ocean 133 127 IF( tmask(ji,jj,1) == 1. .AND. z_fv(ji,jj) /= 0 .AND. psqflux(ji,jj) < 0 ) THEN 134 128 x_csthick(ji,jj) = ( z_lamda(ji,jj) * pp_v ) / z_fv(ji,jj) 135 129 ELSE 136 130 x_csthick(ji,jj) = 0. 137 131 ENDIF 138 139 140 132 ! 141 133 ! Calculate the cool skin correction - only when the heat flux is out of the ocean 142 134 IF( tmask(ji,jj,1) == 1. .AND. x_csthick(ji,jj) /= 0. .AND. psqflux(ji,jj) < 0. ) THEN … … 145 137 x_csdsst(ji,jj) = 0. 146 138 ENDIF 147 148 END DO149 END DO150 139 ! 140 END DO 141 END DO 142 ! 151 143 END SUBROUTINE diurnal_sst_coolskin_step 152 144 153 145 !!====================================================================== 154 146 END MODULE cool_skin -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIU/step_diu.F90
r6017 r7280 64 64 65 65 ! Cool skin 66 IF ( .NOT.ln_diurnal ) CALL ctl_stop( "stp_diurnal: ln_diurnal not set")66 IF( .NOT.ln_diurnal ) CALL ctl_stop( "stp_diurnal: ln_diurnal not set" ) 67 67 68 IF ( .NOT. ln_blk_core ) THEN 69 CALL ctl_stop("step.f90: diurnal flux processing only implemented"//& 70 & " for core forcing") 71 ENDIF 68 IF( .NOT. ln_blk ) CALL ctl_stop( "stp_diurnal: diurnal flux processing only implemented for bulk forcing" ) 72 69 73 70 CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), rdt) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90
r7277 r7280 53 53 LOGICAL, INTENT(in), OPTIONAL :: ld_tradmp ! force the initialization when tradp is used 54 54 ! 55 INTEGER :: i err0, ierr1, ierr2, ierr3 ! temporaryintegers56 ! 55 INTEGER :: ios, ierr0, ierr1, ierr2, ierr3 ! local integers 56 !! 57 57 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 58 58 TYPE(FLD_N), DIMENSION( jpts) :: slf_i ! array of namelist informations on the fields to read … … 60 60 !! 61 61 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_tradmp, cn_dir, sn_tem, sn_sal 62 INTEGER :: ios63 62 !!---------------------------------------------------------------------- 64 63 ! … … 117 116 ! ! fill sf_tsd with sn_tem & sn_sal and control print 118 117 slf_i(jp_tem) = sn_tem ; slf_i(jp_sal) = sn_sal 119 CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd' )118 CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd', no_print ) 120 119 ! 121 120 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90
r7277 r7280 104 104 105 105 IF(lwp) WRITE(numout,*) 106 IF(lwp) WRITE(numout,*) ' phy_cst : initialization of physicalconstants'107 IF(lwp) WRITE(numout,*) ' 106 IF(lwp) WRITE(numout,*) 'phy_cst : initialization of ocean parameters and constants' 107 IF(lwp) WRITE(numout,*) '~~~~~~~' 108 108 109 109 ! Define & print constants -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90
r6140 r7280 106 106 WRITE(numout,*) 107 107 WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 108 WRITE(numout,*) '~~~~~~~~~~~ '109 WRITE(numout,*) ' 110 WRITE(numout,*) ' 111 WRITE(numout,*) ' 112 WRITE(numout,*) ' 113 WRITE(numout,*) ' 114 WRITE(numout,*) ' 108 WRITE(numout,*) '~~~~~~~~~~~~' 109 WRITE(numout,*) ' Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 110 WRITE(numout,*) ' Vector/flux form (T/F) ln_dynadv_vec = ', ln_dynadv_vec 111 WRITE(numout,*) ' = 0 standard scheme ; =1 Hollingsworth scheme nn_dynkeg = ', nn_dynkeg 112 WRITE(numout,*) ' 2nd order centred advection scheme ln_dynadv_cen2 = ', ln_dynadv_cen2 113 WRITE(numout,*) ' 3rd order UBS advection scheme ln_dynadv_ubs = ', ln_dynadv_ubs 114 WRITE(numout,*) ' Sub timestepping of vertical advection ln_dynzad_zts = ', ln_dynzad_zts 115 115 ENDIF 116 116 … … 134 134 IF(lwp) THEN ! Print the choice 135 135 WRITE(numout,*) 136 IF( nadv == 0 ) WRITE(numout,*) ' vector form : keg + zad + vor is used'137 IF( nadv == 1 ) WRITE(numout,*) ' vector form : keg + zad_zts + vor is used'136 IF( nadv == 0 ) WRITE(numout,*) ' ===>> vector form : keg + zad + vor is used' 137 IF( nadv == 1 ) WRITE(numout,*) ' ===>> vector form : keg + zad_zts + vor is used' 138 138 IF( nadv == 0 .OR. nadv == 1 ) THEN 139 IF( nn_dynkeg == nkeg_C2 ) WRITE(numout,*) ' with Centered standard keg scheme'140 IF( nn_dynkeg == nkeg_HW ) WRITE(numout,*) ' with Hollingsworth keg scheme'139 IF( nn_dynkeg == nkeg_C2 ) WRITE(numout,*) ' with Centered standard keg scheme' 140 IF( nn_dynkeg == nkeg_HW ) WRITE(numout,*) ' with Hollingsworth keg scheme' 141 141 ENDIF 142 IF( nadv == 2 ) WRITE(numout,*) ' flux form : 2nd order scheme is used'143 IF( nadv == 3 ) WRITE(numout,*) ' flux form : UBS scheme is used'142 IF( nadv == 2 ) WRITE(numout,*) ' ===>> flux form : 2nd order scheme is used' 143 IF( nadv == 3 ) WRITE(numout,*) ' ===>> flux form : UBS scheme is used' 144 144 ENDIF 145 145 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90
r6140 r7280 110 110 WRITE(numout,*) 111 111 WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 112 WRITE(numout,*) '~~~~~~~~~~~ '113 WRITE(numout,*) ' 114 WRITE(numout,*) ' 115 WRITE(numout,*) ' 116 WRITE(numout,*) ' 117 WRITE(numout,*) ' 118 WRITE(numout,*) ' 112 WRITE(numout,*) '~~~~~~~~~~~~' 113 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 114 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 115 WRITE(numout,*) ' bilaplacian operator ln_dynldf_blp = ', ln_dynldf_blp 116 WRITE(numout,*) ' iso-level ln_dynldf_lev = ', ln_dynldf_lev 117 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 118 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 119 119 ENDIF 120 120 ! ! use of lateral operator or not … … 180 180 IF(lwp) THEN 181 181 WRITE(numout,*) 182 IF( nldf == np_no_ldf ) WRITE(numout,*) ' 183 IF( nldf == np_lap ) WRITE(numout,*) ' 184 IF( nldf == np_lap_i ) WRITE(numout,*) ' 185 IF( nldf == np_blp ) WRITE(numout,*) ' 182 IF( nldf == np_no_ldf ) WRITE(numout,*) ' ===>> NO lateral viscosity' 183 IF( nldf == np_lap ) WRITE(numout,*) ' ===>> iso-level laplacian operator' 184 IF( nldf == np_lap_i ) WRITE(numout,*) ' ===>> rotated laplacian operator with iso-level background' 185 IF( nldf == np_blp ) WRITE(numout,*) ' ===>> iso-level bi-laplacian operator' 186 186 ENDIF 187 187 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r6140 r7280 216 216 IF(lwp) THEN 217 217 WRITE(numout,*) 218 IF( nspg == np_EXP ) WRITE(numout,*) ' explicit free surface'219 IF( nspg == np_TS ) WRITE(numout,*) ' free surface with time splitting scheme'220 IF( nspg == np_NO ) WRITE(numout,*) ' No surface surface pressure gradient trend in momentum Eqs.'218 IF( nspg == np_EXP ) WRITE(numout,*) ' ===>> explicit free surface' 219 IF( nspg == np_TS ) WRITE(numout,*) ' ===>> free surface with time splitting scheme' 220 IF( nspg == np_NO ) WRITE(numout,*) ' ===>> No surface surface pressure gradient trend in momentum Eqs.' 221 221 ENDIF 222 222 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r7277 r7280 626 626 WRITE(numout,*) 'dyn_vor_init : vorticity term : read namelist and control the consistency' 627 627 WRITE(numout,*) '~~~~~~~~~~~~' 628 WRITE(numout,*) ' 629 WRITE(numout,*) ' 630 WRITE(numout,*) ' 631 WRITE(numout,*) ' 632 WRITE(numout,*) ' 633 WRITE(numout,*) ' 634 WRITE(numout,*) ' 628 WRITE(numout,*) ' Namelist namdyn_vor : choice of the vorticity term scheme' 629 WRITE(numout,*) ' energy conserving scheme ln_dynvor_ene = ', ln_dynvor_ene 630 WRITE(numout,*) ' enstrophy conserving scheme ln_dynvor_ens = ', ln_dynvor_ens 631 WRITE(numout,*) ' mixed enstrophy/energy conserving scheme ln_dynvor_mix = ', ln_dynvor_mix 632 WRITE(numout,*) ' enstrophy and energy conserving scheme ln_dynvor_een = ', ln_dynvor_een 633 WRITE(numout,*) ' e3f = averaging /4 (=0) or /sum(tmask) (=1) nn_een_e3f = ', nn_een_e3f 634 WRITE(numout,*) ' masked (=T) or unmasked(=F) vorticity ln_dynvor_msk = ', ln_dynvor_msk 635 635 ENDIF 636 636 … … 639 639 ! at angles with three ocean points and one land point 640 640 IF(lwp) WRITE(numout,*) 641 IF(lwp) WRITE(numout,*) ' namlbc: change fmask value in the angles (T)ln_vorlat = ', ln_vorlat641 IF(lwp) WRITE(numout,*) ' change fmask value in the angles (T) ln_vorlat = ', ln_vorlat 642 642 IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 643 643 DO jk = 1, jpk … … 666 666 ncor = np_COR 667 667 IF( ln_dynadv_vec ) THEN 668 IF(lwp) WRITE(numout,*) ' Vector form advection : vorticity = Coriolis + relative vorticity'668 IF(lwp) WRITE(numout,*) ' ===>> Vector form advection : vorticity = Coriolis + relative vorticity' 669 669 nrvm = np_RVO ! relative vorticity 670 670 ntot = np_CRV ! relative + planetary vorticity 671 671 ELSE 672 IF(lwp) WRITE(numout,*) ' Flux form advection : vorticity = Coriolis + metric term'672 IF(lwp) WRITE(numout,*) ' ===>> Flux form advection : vorticity = Coriolis + metric term' 673 673 nrvm = np_MET ! metric term 674 674 ntot = np_CME ! Coriolis + metric term … … 677 677 IF(lwp) THEN ! Print the choice 678 678 WRITE(numout,*) 679 IF( nvor_scheme == np_ENE ) WRITE(numout,*) ' vorticity scheme ==>>energy conserving scheme'680 IF( nvor_scheme == np_ENS ) WRITE(numout,*) ' vorticity scheme ==>>enstrophy conserving scheme'681 IF( nvor_scheme == np_MIX ) WRITE(numout,*) ' vorticity scheme ==>>mixed enstrophy/energy conserving scheme'682 IF( nvor_scheme == np_EEN ) WRITE(numout,*) ' vorticity scheme ==>>energy and enstrophy conserving scheme'679 IF( nvor_scheme == np_ENE ) WRITE(numout,*) ' ===>> energy conserving scheme' 680 IF( nvor_scheme == np_ENS ) WRITE(numout,*) ' ===>> enstrophy conserving scheme' 681 IF( nvor_scheme == np_MIX ) WRITE(numout,*) ' ===>> mixed enstrophy/energy conserving scheme' 682 IF( nvor_scheme == np_EEN ) WRITE(numout,*) ' ===>> energy and enstrophy conserving scheme' 683 683 ENDIF 684 684 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90
r6140 r7280 119 119 WRITE(numout,*) 'dyn_zdf_init : vertical dynamics physics scheme' 120 120 WRITE(numout,*) '~~~~~~~~~~~' 121 IF( nzdf == 0 ) WRITE(numout,*) ' 122 IF( nzdf == 1 ) WRITE(numout,*) ' 121 IF( nzdf == 0 ) WRITE(numout,*) ' ===>> Explicit time-splitting scheme' 122 IF( nzdf == 1 ) WRITE(numout,*) ' ===>> Implicit (euler backward) scheme' 123 123 ENDIF 124 124 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90
r7277 r7280 75 75 WRITE(numout,*) 76 76 WRITE(numout,*) 'wad_init : Wetting and drying initialization through namelist read' 77 WRITE(numout,*) '~~~~~~~ 77 WRITE(numout,*) '~~~~~~~~' 78 78 WRITE(numout,*) ' Namelist namwad' 79 79 WRITE(numout,*) ' Logical activation ln_wd = ', ln_wd … … 268 268 REAL(wp) :: ztmp ! local scalars 269 269 REAL(wp), POINTER, DIMENSION(:,:) :: zwdlmtu, zwdlmtv !: W/D flux limiters 270 REAL(wp), POINTER, DIMENSION(:,:) :: zflxp, zflxn ! 2D workspace271 REAL(wp), POINTER, DIMENSION(:,:) :: zflxu1, zflxv1 ! 2D workspace270 REAL(wp), POINTER, DIMENSION(:,:) :: zflxp, zflxn ! local 2D workspace 271 REAL(wp), POINTER, DIMENSION(:,:) :: zflxu1, zflxv1 ! local 2D workspace 272 272 !!---------------------------------------------------------------------- 273 273 ! … … 390 390 ! 391 391 END SUBROUTINE wad_lmt_bt 392 392 393 393 !!============================================================================== 394 394 END MODULE wet_dry -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ICB/icbini.F90
r5215 r7280 372 372 IF(lwp) THEN 373 373 WRITE(numout,*) 374 WRITE(numout,*) 'icbini : 375 WRITE(numout,*) ' 376 WRITE(numout,*) ' namelist nambergnot read'374 WRITE(numout,*) 'icbini : AGRIF is not compatible with namelist namberg : ' 375 WRITE(numout,*) '~~~~~~ definition of rn_initial_mass(nclasses) with nclasses as PARAMETER ' 376 WRITE(numout,*) ' ==>>> force NO icebergs used. The namelist namberg is not read' 377 377 ENDIF 378 378 ln_icebergs = .false. … … 381 381 IF(lwp) THEN 382 382 WRITE(numout,*) 383 WRITE(numout,*) 'icbini : 384 WRITE(numout,*) '~~~~~~ ~~'383 WRITE(numout,*) 'icbini : Namelist namberg ln_icebergs = F , NO icebergs used' 384 WRITE(numout,*) '~~~~~~ ' 385 385 ENDIF 386 386 RETURN -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r7277 r7280 17 17 IMPLICIT NONE 18 18 PUBLIC 19 19 20 20 !!---------------------------------------------------------------------- 21 21 !! namrun namelist parameters … … 95 95 !! output monitoring 96 96 !!---------------------------------------------------------------------- 97 LOGICAL :: ln_ctl !: run control for debugging98 INTEGER :: nn_timing !: run control for timing99 INTEGER :: nn_diacfl !: flag whether to create CFL diagnostics100 INTEGER :: nn_print !: level of print (0 no print)101 INTEGER :: nn_ictls !: Start i indice for the SUM control102 INTEGER :: nn_ictle !: End i indice for the SUM control103 INTEGER :: nn_jctls !: Start j indice for the SUM control104 INTEGER :: nn_jctle !: End j indice for the SUM control105 INTEGER :: nn_isplt !: number of processors following i106 INTEGER :: nn_jsplt !: number of processors following j107 INTEGER :: nn_b it_cmp = 0 !: bit reproducibility(0/1)108 97 LOGICAL :: ln_ctl !: run control for debugging 98 INTEGER :: nn_timing !: run control for timing 99 INTEGER :: nn_diacfl !: flag whether to create CFL diagnostics 100 INTEGER :: nn_print !: level of print (0 no print) 101 INTEGER :: nn_ictls !: Start i indice for the SUM control 102 INTEGER :: nn_ictle !: End i indice for the SUM control 103 INTEGER :: nn_jctls !: Start j indice for the SUM control 104 INTEGER :: nn_jctle !: End j indice for the SUM control 105 INTEGER :: nn_isplt !: number of processors following i 106 INTEGER :: nn_jsplt !: number of processors following j 107 INTEGER :: nn_bench !: benchmark parameter (0/1) 108 INTEGER :: nn_bit_cmp = 0 !: bit reproducibility (0/1) 109 109 ! 110 110 INTEGER :: nprint, nictls, nictle, njctls, njctle, isplt, jsplt !: OLD namelist names … … 137 137 !! Run control 138 138 !!---------------------------------------------------------------------- 139 INTEGER :: no_print = 0 !: optional argument of fld_fill (if present, suppress some control print) 139 140 INTEGER :: nstop = 0 !: error flag (=number of reason for a premature stop run) 140 141 INTEGER :: nwarn = 0 !: warning flag (=number of warning found during the run) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r7278 r7280 4303 4303 WRITE(kout,*) 4304 4304 ENDIF 4305 CALL FLUSH(kout) 4305 4306 STOP 'ctl_opn bad opening' 4306 4307 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90
r7278 r7280 65 65 WRITE(numout,*) 66 66 WRITE(numout,*) 'mpp_init(2) : NO massively parallel processing' 67 WRITE(numout,*) '~~~~~~~~~~~ :'67 WRITE(numout,*) '~~~~~~~~~~~ ' 68 68 WRITE(numout,*) ' nperio = ', nperio 69 69 WRITE(numout,*) ' npolj = ', npolj … … 265 265 266 266 IF(lwp) WRITE(numout,*) 267 IF(lwp) WRITE(numout,*) ' mpp_init: defines mpp subdomains' 268 IF(lwp) WRITE(numout,*) ' ~~~~~~ ----------------------' 269 IF(lwp) WRITE(numout,*) 270 IF(lwp) WRITE(numout,*) 'iresti=',iresti,' irestj=',irestj 271 IF(lwp) WRITE(numout,*) 272 IF(lwp) WRITE(numout,*) 'jpni=',jpni,' jpnj=',jpnj 267 IF(lwp) WRITE(numout,*) ' defines mpp subdomains' 268 IF(lwp) WRITE(numout,*) ' jpni=', jpni, ' iresti=', iresti 269 IF(lwp) WRITE(numout,*) ' jpnj=', jpnj, ' irestj=', irestj 273 270 zidom = nreci 274 271 DO ji = 1, jpni … … 276 273 END DO 277 274 IF(lwp) WRITE(numout,*) 278 IF(lwp) WRITE(numout,*)' sum ilcit(i,1)=', zidom, ' jpiglo=', jpiglo275 IF(lwp) WRITE(numout,*)' sum ilcit(i,1)=', zidom, ' jpiglo=', jpiglo 279 276 280 277 zjdom = nrecj … … 282 279 zjdom = zjdom + ilcjt(1,jj) - nrecj 283 280 END DO 284 IF(lwp) WRITE(numout,*)' sum ilcit(1,j)=', zjdom, ' jpjglo=', jpjglo 285 IF(lwp) WRITE(numout,*) 281 IF(lwp) WRITE(numout,*)' sum ilcit(1,j)=', zjdom, ' jpjglo=', jpjglo 286 282 287 283 IF(lwp) THEN … … 360 356 njmpp = njmppt(narea) 361 357 362 ! Save processor layout in layout.dat file363 IF(lwp) THEN364 CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea )365 WRITE(inum,'(a)') ' jpnij jpi jpj jpk jpiglo jpjglo'366 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo367 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp'368 369 DOjn = 1, jpnij370 WRITE(inum,'(9i5)') jn, nlcit(jn), nlcjt(jn), &371 372 373 374 END DO375 CLOSE(inum)358 ! Save processor layout in layout.dat file 359 IF(lwp) THEN 360 CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 361 WRITE(inum,'(a)') ' jpnij jpi jpj jpk jpiglo jpjglo' 362 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 363 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 364 ! 365 DO jn = 1, jpnij 366 WRITE(inum,'(9i5)') jn, nlcit(jn), nlcjt(jn), & 367 & nldit(jn), nldjt(jn), & 368 & nleit(jn), nlejt(jn), & 369 & nimppt(jn), njmppt(jn) 370 END DO 371 CLOSE(inum) 376 372 END IF 377 378 373 379 374 ! w a r n i n g narea (zone) /= nproc (processors)! … … 428 423 429 424 IF(lwp) THEN 430 WRITE(numout,*) ' nproc = ', nproc 431 WRITE(numout,*) ' nowe = ', nowe , ' noea = ', noea 432 WRITE(numout,*) ' nono = ', nono , ' noso = ', noso 433 WRITE(numout,*) ' nbondi = ', nbondi 434 WRITE(numout,*) ' nbondj = ', nbondj 435 WRITE(numout,*) ' npolj = ', npolj 436 WRITE(numout,*) ' nperio = ', nperio 437 WRITE(numout,*) ' nlci = ', nlci 438 WRITE(numout,*) ' nlcj = ', nlcj 439 WRITE(numout,*) ' nimpp = ', nimpp 440 WRITE(numout,*) ' njmpp = ', njmpp 441 WRITE(numout,*) ' nreci = ', nreci , ' npse = ', npse 442 WRITE(numout,*) ' nrecj = ', nrecj , ' npsw = ', npsw 443 WRITE(numout,*) ' jpreci = ', jpreci , ' npne = ', npne 444 WRITE(numout,*) ' jprecj = ', jprecj , ' npnw = ', npnw 425 WRITE(numout,*) ' nproc = ', nproc 426 WRITE(numout,*) ' nowe = ', nowe , ' noea = ', noea 427 WRITE(numout,*) ' nono = ', nono , ' noso = ', noso 428 WRITE(numout,*) ' nbondi = ', nbondi, ' nbondj = ', nbondj 429 WRITE(numout,*) ' npolj = ', npolj 430 WRITE(numout,*) ' nperio = ', nperio 431 WRITE(numout,*) ' nlci = ', nlci , ' nlcj = ', nlcj 432 WRITE(numout,*) ' nimpp = ', nimpp , ' njmpp = ', njmpp 433 WRITE(numout,*) ' nreci = ', nreci , ' npse = ', npse 434 WRITE(numout,*) ' nrecj = ', nrecj , ' npsw = ', npsw 435 WRITE(numout,*) ' jpreci = ', jpreci, ' npne = ', npne 436 WRITE(numout,*) ' jprecj = ', jprecj, ' npnw = ', npnw 445 437 WRITE(numout,*) 446 438 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LDF/ldfc1d_c2d.F90
r6140 r7280 59 59 REAL(wp) :: zw , zdep2 ! - - 60 60 !!---------------------------------------------------------------------- 61 62 IF(lwp) THEN 63 WRITE(numout,*) 64 WRITE(numout,*) ' ldf_c1d : set a given profile to eddy diffusivity/viscosity coefficients' 65 WRITE(numout,*) ' ~~~~~~~' 66 ENDIF 61 67 62 68 ! initialization of the profile … … 130 136 ! 131 137 IF(lwp) THEN 132 WRITE(numout,*) 'ldf_c2d : aht = rn_aht0 * max(e1,e2)/e_equator ( laplacian) ' 133 WRITE(numout,*) '~~~~~~~ or = rn_bht0 * [max(e1,e2)/e_equator]**3 (bilaplacian)' 138 WRITE(numout,*) 139 WRITE(numout,*) ' ldf_c2d : aht = rn_aht0 * max(e1,e2)/e_equator ( laplacian) ' 140 WRITE(numout,*) ' ~~~~~~~ or = rn_bht0 * [max(e1,e2)/e_equator]**3 (bilaplacian)' 134 141 WRITE(numout,*) 135 142 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/cyclone.F90
r5215 r7280 27 27 PRIVATE 28 28 29 PUBLIC wnd_cyc ! routine called in sbcblk _core.F90 module29 PUBLIC wnd_cyc ! routine called in sbcblk.F90 module 30 30 31 31 INTEGER , PARAMETER :: jp_is1 = 1 ! index of presence 1 or absence 0 of a TC record … … 102 102 sn_tc = FLD_N( 'tc_track', 6 , 'tc' , .true. , .false. , 'yearly' , '' , '' , '' ) 103 103 ! 104 ! Namelist is read in namsbc_ core104 ! Namelist is read in namsbc_blk 105 105 ! set sf structure 106 106 ALLOCATE( sf(1), STAT=ierror ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r6140 r7280 4 4 !! Ocean forcing: read input field for surface boundary condition 5 5 !!===================================================================== 6 !! History : 2.0 ! 06-2006 (S. Masson, G. Madec) Original code7 !! ! 05-2008(S. Alderson) Modified for Interpolation in memory from input grid to model grid8 !! ! 10-2013(D. Delrosso, P. Oddo) suppression of land point prior to interpolation6 !! History : 2.0 ! 2006-06 (S. Masson, G. Madec) Original code 7 !! 3.0 ! 2008-05 (S. Alderson) Modified for Interpolation in memory from input grid to model grid 8 !! 3.4 ! 2013-10 (D. Delrosso, P. Oddo) suppression of land point prior to interpolation 9 9 !!---------------------------------------------------------------------- 10 10 11 11 !!---------------------------------------------------------------------- 12 !! fld_read : read input fields used for the computation of the 13 !! surface boundary condition 12 !! fld_read : read input fields used for the computation of the surface boundary condition 13 !! fld_init : initialization of field read 14 !! fld_rec : determined the record(s) to be read 15 !! fld_get : read the data 16 !! fld_map : read global data from file and map onto local data using a general mapping (use for open boundaries) 17 !! fld_rot : rotate the vector fields onto the local grid direction 18 !! fld_clopn : update the data file name and close/open the files 19 !! fld_fill : fill the data structure with the associated information read in namelist 20 !! wgt_list : manage the weights used for interpolation 21 !! wgt_print : print the list of known weights 22 !! fld_weight : create a WGT structure and fill in data from file, restructuring as required 23 !! apply_seaoverland : fill land with ocean values 24 !! seaoverland : create shifted matrices for seaoverland application 25 !! fld_interp : apply weights to input gridded data to create data on model grid 26 !! ksec_week : function returning the first 3 letters of the first day of the weekly file 14 27 !!---------------------------------------------------------------------- 15 28 USE oce ! ocean dynamics and tracers … … 274 287 IF( sd(jf)%ln_tint ) THEN ! temporal interpolation 275 288 IF(lwp .AND. kt - nit000 <= 100 ) THEN 276 clfmt = "(' fld_read: var ', a, ' kt = ', i8, ' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // &289 clfmt = "(' fld_read: var ', a, ' kt = ', i8, ' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // & 277 290 & "', records b/a: ', i6.4, '/', i6.4, ' (days ', f9.4,'/', f9.4, ')')" 278 291 WRITE(numout, clfmt) TRIM( sd(jf)%clvar ), kt, REAL(isecsbc,wp)/rday, nyear, nmonth, nday, & 279 292 & sd(jf)%nrec_b(1), sd(jf)%nrec_a(1), REAL(sd(jf)%nrec_b(2),wp)/rday, REAL(sd(jf)%nrec_a(2),wp)/rday 280 WRITE(numout, *) ' it_offset is : ',it_offset293 WRITE(numout, *) ' it_offset is : ',it_offset 281 294 ENDIF 282 295 ! temporal interpolation weights … … 286 299 ELSE ! nothing to do... 287 300 IF(lwp .AND. kt - nit000 <= 100 ) THEN 288 clfmt = "(' fld_read: var ', a, ' kt = ', i8,' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // &301 clfmt = "(' fld_read: var ', a, ' kt = ', i8,' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // & 289 302 & "', record: ', i6.4, ' (days ', f9.4, ' <-> ', f9.4, ')')" 290 303 WRITE(numout, clfmt) TRIM(sd(jf)%clvar), kt, REAL(isecsbc,wp)/rday, nyear, nmonth, nday, & … … 407 420 CALL fld_get( sdjf, map ) ! read before data in after arrays(as we will swap it later) 408 421 ! 409 clfmt = "(' fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')"422 clfmt = "(' fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')" 410 423 IF(lwp) WRITE(numout, clfmt) TRIM(sdjf%clvar), sdjf%nrec_a(1), REAL(sdjf%nrec_a(2),wp)/rday 411 424 ! … … 791 804 !! *** ROUTINE fld_clopn *** 792 805 !! 793 !! ** Purpose : update the file name and open the file806 !! ** Purpose : update the file name and close/open the files 794 807 !!---------------------------------------------------------------------- 795 808 TYPE(FLD) , INTENT(inout) :: sdjf ! input field related variables … … 882 895 883 896 884 SUBROUTINE fld_fill( sdf, sdf_n, cdir, cdcaller, cdtitle, cdnam )897 SUBROUTINE fld_fill( sdf, sdf_n, cdir, cdcaller, cdtitle, cdnam, knoprint ) 885 898 !!--------------------------------------------------------------------- 886 899 !! *** ROUTINE fld_fill *** 887 900 !! 888 !! ** Purpose : fill sdf with sdf_n and control print 889 !!---------------------------------------------------------------------- 890 TYPE(FLD) , DIMENSION(:), INTENT(inout) :: sdf ! structure of input fields (file informations, fields read) 891 TYPE(FLD_N), DIMENSION(:), INTENT(in ) :: sdf_n ! array of namelist information structures 892 CHARACTER(len=*) , INTENT(in ) :: cdir ! Root directory for location of flx files 893 CHARACTER(len=*) , INTENT(in ) :: cdcaller ! 894 CHARACTER(len=*) , INTENT(in ) :: cdtitle ! 895 CHARACTER(len=*) , INTENT(in ) :: cdnam ! 896 ! 897 INTEGER :: jf ! dummy indices 901 !! ** Purpose : fill the data structure (sdf) with the associated information 902 !! read in namelist (sdf_n) and control print 903 !!---------------------------------------------------------------------- 904 TYPE(FLD) , DIMENSION(:) , INTENT(inout) :: sdf ! structure of input fields (file informations, fields read) 905 TYPE(FLD_N), DIMENSION(:) , INTENT(in ) :: sdf_n ! array of namelist information structures 906 CHARACTER(len=*) , INTENT(in ) :: cdir ! Root directory for location of flx files 907 CHARACTER(len=*) , INTENT(in ) :: cdcaller ! name of the calling routine 908 CHARACTER(len=*) , INTENT(in ) :: cdtitle ! description of the calling routine 909 CHARACTER(len=*) , INTENT(in ) :: cdnam ! name of the namelist from which sdf_n comes 910 INTEGER , OPTIONAL, INTENT(in ) :: knoprint ! no calling routine information printed 911 ! 912 INTEGER :: jf ! dummy indices 898 913 !!--------------------------------------------------------------------- 899 914 ! … … 922 937 IF(lwp) THEN ! control print 923 938 WRITE(numout,*) 924 WRITE(numout,*) TRIM( cdcaller )//' : '//TRIM( cdtitle ) 925 WRITE(numout,*) (/ ('~', jf = 1, LEN_TRIM( cdcaller ) ) /) 926 WRITE(numout,*) ' '//TRIM( cdnam )//' Namelist' 927 WRITE(numout,*) ' list of files and frequency (>0: in hours ; <0 in months)' 939 IF( .NOT.PRESENT( knoprint) ) THEN 940 WRITE(numout,*) TRIM( cdcaller )//' : '//TRIM( cdtitle ) 941 WRITE(numout,*) (/ ('~', jf = 1, LEN_TRIM( cdcaller ) ) /) 942 ENDIF 943 WRITE(numout,*) ' fld_fill : fill data structure with information from namelist '//TRIM( cdnam ) 944 WRITE(numout,*) ' ~~~~~~~~' 945 WRITE(numout,*) ' list of files and frequency (>0: in hours ; <0 in months)' 928 946 DO jf = 1, SIZE(sdf) 929 WRITE(numout,*) ' root filename: ' , TRIM( sdf(jf)%clrootname ), & 930 & ' variable name: ' , TRIM( sdf(jf)%clvar ) 931 WRITE(numout,*) ' frequency: ' , sdf(jf)%nfreqh , & 932 & ' time interp: ' , sdf(jf)%ln_tint , & 933 & ' climatology: ' , sdf(jf)%ln_clim , & 934 & ' weights : ' , TRIM( sdf(jf)%wgtname ), & 935 & ' pairing : ' , TRIM( sdf(jf)%vcomp ), & 936 & ' data type: ' , sdf(jf)%cltype , & 937 & ' land/sea mask:' , TRIM( sdf(jf)%lsmname ) 947 WRITE(numout,*) ' root filename: ' , TRIM( sdf(jf)%clrootname ), ' variable name: ', TRIM( sdf(jf)%clvar ) 948 WRITE(numout,*) ' frequency: ' , sdf(jf)%nfreqh , & 949 & ' time interp: ' , sdf(jf)%ln_tint , & 950 & ' climatology: ' , sdf(jf)%ln_clim 951 WRITE(numout,*) ' weights: ' , TRIM( sdf(jf)%wgtname ), & 952 & ' pairing: ' , TRIM( sdf(jf)%vcomp ), & 953 & ' data type: ' , sdf(jf)%cltype , & 954 & ' land/sea mask:' , TRIM( sdf(jf)%lsmname ) 938 955 call flush(numout) 939 956 END DO … … 947 964 !! *** ROUTINE wgt_list *** 948 965 !! 949 !! ** Purpose : search array of WGTs and find a weights file 950 !! entry, or return a new one adding it to the end 951 !! if it is a new entry, the weights data is read in and 952 !! restructured (fld_weight) 966 !! ** Purpose : search array of WGTs and find a weights file entry, 967 !! or return a new one adding it to the end if new entry. 968 !! the weights data is read in and restructured (fld_weight) 953 969 !!---------------------------------------------------------------------- 954 970 TYPE( FLD ), INTENT(in ) :: sd ! field with name of weights file … … 1019 1035 !! *** ROUTINE fld_weight *** 1020 1036 !! 1021 !! ** Purpose : create a new WGT structure and fill in data from 1022 !! file,restructuring as required1037 !! ** Purpose : create a new WGT structure and fill in data from file, 1038 !! restructuring as required 1023 1039 !!---------------------------------------------------------------------- 1024 1040 TYPE( FLD ), INTENT(in) :: sd ! field with name of weights file … … 1163 1179 1164 1180 SUBROUTINE apply_seaoverland( clmaskfile, zfieldo, jpi1_lsm, jpi2_lsm, jpj1_lsm, & 1165 &jpj2_lsm, itmpi, itmpj, itmpz, rec1_lsm, recn_lsm )1181 & jpj2_lsm, itmpi, itmpj, itmpz, rec1_lsm, recn_lsm ) 1166 1182 !!--------------------------------------------------------------------- 1167 1183 !! *** ROUTINE apply_seaoverland *** … … 1492 1508 !! *** FUNCTION kshift_week *** 1493 1509 !! 1494 !! ** Purpose : 1495 !!--------------------------------------------------------------------- 1496 CHARACTER(len=*), INTENT(in) :: cdday !3 first letters of the first day of the weekly file 1497 !! 1498 INTEGER :: ksec_week ! output variable 1499 INTEGER :: ijul !temp variable 1500 INTEGER :: ishift !temp variable 1510 !! ** Purpose : return the first 3 letters of the first day of the weekly file 1511 !!--------------------------------------------------------------------- 1512 CHARACTER(len=*), INTENT(in) :: cdday ! first 3 letters of the first day of the weekly file 1513 !! 1514 INTEGER :: ksec_week ! output variable 1515 INTEGER :: ijul, ishift ! local integer 1501 1516 CHARACTER(len=3),DIMENSION(7) :: cl_week 1502 1517 !!---------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r7277 r7280 10 10 !! 3.3 ! 2010-10 (J. Chanut, C. Bricaud) add the surface pressure forcing 11 11 !! 4.0 ! 2012-05 (C. Rousset) add attenuation coef for use in ice model 12 !! 4.0 ! 2016-06 (L. Brodeau) new unified bulk routine (based on AeroBulk) 12 13 !!---------------------------------------------------------------------- 13 14 … … 31 32 ! !!* namsbc namelist * 32 33 LOGICAL , PUBLIC :: ln_usr !: user defined formulation 33 LOGICAL , PUBLIC :: ln_flx !: flux formulation 34 LOGICAL , PUBLIC :: ln_blk_clio !: CLIO bulk formulation 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 34 LOGICAL , PUBLIC :: ln_flx !: flux formulation 35 LOGICAL , PUBLIC :: ln_blk !: bulk formulation 37 36 #if defined key_oasis3 38 37 LOGICAL , PUBLIC :: lk_oasis = .TRUE. !: OASIS used … … 74 73 INTEGER , PUBLIC, PARAMETER :: jp_usr = 1 !: user defined formulation 75 74 INTEGER , PUBLIC, PARAMETER :: jp_flx = 2 !: flux formulation 76 INTEGER , PUBLIC, PARAMETER :: jp_clio = 3 !: CLIO bulk formulation 77 INTEGER , PUBLIC, PARAMETER :: jp_core = 4 !: CORE bulk formulation 75 INTEGER , PUBLIC, PARAMETER :: jp_blk = 4 !: bulk formulation 78 76 INTEGER , PUBLIC, PARAMETER :: jp_purecpl = 5 !: Pure ocean-atmosphere Coupled formulation 79 INTEGER , PUBLIC, PARAMETER :: jp_mfs = 6 !: MFS bulk formulation80 77 INTEGER , PUBLIC, PARAMETER :: jp_none = 7 !: for OPA when doing coupling via SAS module 81 78 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r6140 r7280 24 24 USE sbc_oce ! Surface boundary condition: ocean fields 25 25 USE sbc_ice ! Surface boundary condition: ice fields 26 USE sbcblk _core ! Surface boundary condition: COREbulk26 USE sbcblk ! Surface boundary condition: bulk 27 27 USE sbccpl 28 28 … … 191 191 CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=F and calc_Tsfc=F in ice_in' ) 192 192 ENDIF 193 ELSEIF (ksbc == jp_ core) THEN193 ELSEIF (ksbc == jp_blk) THEN 194 194 IF ( .NOT. (calc_strair .AND. calc_Tsfc) ) THEN 195 195 CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=T and calc_Tsfc=T in ice_in' ) … … 392 392 ENDDO 393 393 394 ELSE IF (ksbc == jp_ core) THEN395 396 ! Pass COREforcing fields to CICE (which will calculate heat fluxes etc itself)394 ELSE IF (ksbc == jp_blk) THEN 395 396 ! Pass bulk forcing fields to CICE (which will calculate heat fluxes etc itself) 397 397 ! x comp and y comp of atmosphere surface wind (CICE expects on T points) 398 398 ztmp(:,:) = wndi_ice(:,:) … … 585 585 ! Better to use evap and tprecip? (but for now don't read in evap in this case) 586 586 emp(:,:) = emp(:,:)+fr_i(:,:)*(tprecip(:,:)-sprecip(:,:)) 587 ELSE IF (ksbc == jp_ core) THEN587 ELSE IF (ksbc == jp_blk) THEN 588 588 emp(:,:) = (1.0-fr_i(:,:))*emp(:,:) 589 589 ELSE IF (ksbc == jp_purecpl) THEN … … 618 618 ! Scale qsr and qns according to ice fraction (bulk formulae only) 619 619 620 IF (ksbc == jp_ core) THEN620 IF (ksbc == jp_blk) THEN 621 621 qsr(:,:)=qsr(:,:)*(1.0-fr_i(:,:)) 622 622 qns(:,:)=qns(:,:)*(1.0-fr_i(:,:)) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r7278 r7280 13 13 !! - ! 2012-10 (C. Rousset) add lim_diahsb 14 14 !! 3.6 ! 2014-07 (M. Vancoppenolle, G. Madec, O. Marti) revise coupled interface 15 !! 4.0 ! 2016-06 (L. Brodeau) new unified bulk routine (based on AeroBulk) 15 16 !!---------------------------------------------------------------------- 16 17 #if defined key_lim3 … … 28 29 USE sbc_oce ! Surface boundary condition: ocean fields 29 30 USE sbc_ice ! Surface boundary condition: ice fields 30 USE sbcblk_core ! Surface boundary condition: CORE bulk 31 USE sbcblk_clio ! Surface boundary condition: CLIO bulk 31 USE sbcblk ! Surface boundary condition: bulk 32 32 USE sbccpl ! Surface boundary condition: coupled interface 33 33 USE albedo ! ocean & ice albedo … … 47 47 USE limupdate2 ! update of global variables 48 48 USE limvar ! Ice variables switch 49 USE limctl ! 49 USE limctl ! 50 50 USE limmsh ! LIM mesh 51 51 USE limistate ! LIM initial state … … 56 56 USE iom ! I/O manager library 57 57 USE prtctl ! Print control 58 USE lib_fortran ! 58 USE lib_fortran ! 59 59 USE lbclnk ! lateral boundary condition - MPP link 60 60 USE lib_mpp ! MPP library … … 62 62 USE timing ! Timing 63 63 64 #if defined key_bdy 64 #if defined key_bdy 65 65 USE bdyice_lim ! unstructured open boundary data (bdy_ice_lim routine) 66 66 #endif … … 71 71 PUBLIC sbc_ice_lim ! routine called by sbcmod.F90 72 72 PUBLIC sbc_lim_init ! routine called by sbcmod.F90 73 73 74 74 !! * Substitutions 75 75 # include "vectopt_loop_substitute.h90" … … 84 84 !!--------------------------------------------------------------------- 85 85 !! *** ROUTINE sbc_ice_lim *** 86 !! 87 !! ** Purpose : update the ocean surface boundary condition via the 88 !! Louvain la Neuve Sea Ice Model time stepping 86 !! 87 !! ** Purpose : update the ocean surface boundary condition via the 88 !! Louvain la Neuve Sea Ice Model time stepping 89 89 !! 90 90 !! ** Method : ice model time stepping 91 !! - call the ice dynamics routine 92 !! - call the ice advection/diffusion routine 93 !! - call the ice thermodynamics routine 94 !! - call the routine that computes mass and 91 !! - call the ice dynamics routine 92 !! - call the ice advection/diffusion routine 93 !! - call the ice thermodynamics routine 94 !! - call the routine that computes mass and 95 95 !! heat fluxes at the ice/ocean interface 96 !! - save the outputs 96 !! - save the outputs 97 97 !! - save the outputs for restart when necessary 98 98 !! 99 99 !! ** Action : - time evolution of the LIM sea-ice model 100 100 !! - update all sbc variables below sea-ice: 101 !! utau, vtau, taum, wndm, qns , qsr, emp , sfx 101 !! utau, vtau, taum, wndm, qns , qsr, emp , sfx 102 102 !!--------------------------------------------------------------------- 103 103 INTEGER, INTENT(in) :: kt ! ocean time step 104 INTEGER, INTENT(in) :: kblk ! type of bulk (= 3 CLIO, =4 CORE, =5 COUPLED)104 INTEGER, INTENT(in) :: kblk ! type of bulk (=4 BULK, =5 COUPLED) 105 105 !! 106 106 INTEGER :: jl ! dummy loop index 107 107 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_os, zalb_cs ! ice albedo under overcast/clear sky 108 REAL(wp), POINTER, DIMENSION(:,: ) :: zutau_ice, zvtau_ice 108 REAL(wp), POINTER, DIMENSION(:,: ) :: zutau_ice, zvtau_ice 109 109 !!---------------------------------------------------------------------- 110 110 … … 119 119 u_oce(:,:) = ssu_m(:,:) * umask(:,:,1) 120 120 v_oce(:,:) = ssv_m(:,:) * vmask(:,:,1) 121 121 122 122 ! masked sea surface freezing temperature [Kelvin] (set to rt0 over land) 123 123 CALL eos_fzp( sss_m(:,:) , t_bo(:,:) ) 124 124 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) ) 125 125 126 126 ! Mask sea ice surface temperature (set to rt0 over land) 127 127 DO jl = 1, jpl 128 128 t_su(:,:,jl) = t_su(:,:,jl) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) ) 129 END DO 130 ! 131 !------------------------------------------------! 132 ! --- Dynamical coupling with the atmosphere --- ! 129 END DO 130 ! 131 !------------------------------------------------! 132 ! --- Dynamical coupling with the atmosphere --- ! 133 133 !------------------------------------------------! 134 134 ! It provides the following fields: … … 136 136 !----------------------------------------------------------------- 137 137 SELECT CASE( kblk ) 138 CASE( jp_clio ) ; CALL blk_ice_clio_tau ! CLIO bulk formulation 139 CASE( jp_core ) ; CALL blk_ice_core_tau ! CORE bulk formulation 138 CASE( jp_blk ) ; CALL blk_ice_tau ! Bulk formulation 140 139 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation 141 140 END SELECT 142 141 143 142 IF( ln_mixcpl) THEN ! Case of a mixed Bulk/Coupled formulation 144 143 CALL wrk_alloc( jpi,jpj , zutau_ice, zvtau_ice) … … 153 152 !-------------------------------------------------------! 154 153 numit = numit + nn_fsbc ! Ice model time step 155 ! 154 ! 156 155 CALL sbc_lim_bef ! Store previous ice values 157 156 CALL sbc_lim_diag0 ! set diag of mass, heat and salt fluxes to 0 … … 160 159 IF( .NOT. lk_c1d ) THEN 161 160 ! 162 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 161 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 163 162 ! 164 163 CALL lim_trp( kt ) ! Ice transport ( Advection/diffusion ) … … 167 166 ! 168 167 #if defined key_bdy 169 CALL bdy_ice_lim( kt ) ! bdy ice thermo 168 CALL bdy_ice_lim( kt ) ! bdy ice thermo 170 169 IF( ln_icectl ) CALL lim_prt( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' ) 171 170 #endif … … 174 173 ! 175 174 ENDIF 176 175 177 176 ! previous lead fraction and ice volume for flux calculations 178 CALL sbc_lim_bef 177 CALL sbc_lim_bef 179 178 CALL lim_var_glo2eqv ! ht_i and ht_s for ice albedo calculation 180 CALL lim_var_agg(1) ! at_i for coupling (via pfrld) 179 CALL lim_var_agg(1) ! at_i for coupling (via pfrld) 181 180 pfrld(:,:) = 1._wp - at_i(:,:) 182 181 phicif(:,:) = vt_i(:,:) 183 184 !------------------------------------------------------! 185 ! --- Thermodynamical coupling with the atmosphere --- ! 182 183 !------------------------------------------------------! 184 ! --- Thermodynamical coupling with the atmosphere --- ! 186 185 !------------------------------------------------------! 187 186 ! It provides the following fields: … … 196 195 197 196 SELECT CASE( kblk ) 198 CASE( jp_clio ) ! CLIO bulk formulation 199 ! In CLIO the cloud fraction is read in the climatology and the all-sky albedo 200 ! (alb_ice) is computed within the bulk routine 201 CALL blk_ice_clio_flx( t_su, zalb_cs, zalb_os, alb_ice ) 202 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld=pfrld, palbi=alb_ice, psst=sst_m, pist=t_su ) 203 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 204 CASE( jp_core ) ! CORE bulk formulation 197 CASE( jp_blk ) ! bulk formulation 205 198 ! albedo depends on cloud fraction because of non-linear spectral effects 206 199 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 207 CALL blk_ice_ core_flx( t_su, alb_ice )200 CALL blk_ice_flx( t_su, alb_ice ) 208 201 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld=pfrld, palbi=alb_ice, psst=sst_m, pist=t_su ) 209 202 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) … … 219 212 ! --- ice thermodynamics --- ! 220 213 !----------------------------! 221 CALL lim_thd( kt ) ! Ice thermodynamics 214 CALL lim_thd( kt ) ! Ice thermodynamics 222 215 ! 223 216 CALL lim_update2( kt ) ! Corrections … … 225 218 CALL lim_sbc_flx( kt ) ! Update surface ocean mass, heat and salt fluxes 226 219 ! 227 IF(ln_limdiaout) CALL lim_diahsb ! Diagnostics and outputs 228 ! 229 CALL lim_wri( 1 ) ! Ice outputs 220 IF(ln_limdiaout) CALL lim_diahsb ! Diagnostics and outputs 221 ! 222 CALL lim_wri( 1 ) ! Ice outputs 230 223 ! 231 224 IF( kt == nit000 .AND. ln_rstart ) & 232 225 & CALL iom_close( numrir ) ! close input ice restart file 233 226 ! 234 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file 227 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file 235 228 ! 236 229 IF( ln_icectl ) CALL lim_ctl( kt ) ! alerts in case of model crash … … 248 241 ! 249 242 END SUBROUTINE sbc_ice_lim 250 243 251 244 252 245 SUBROUTINE sbc_lim_init … … 259 252 !!---------------------------------------------------------------------- 260 253 IF(lwp) WRITE(numout,*) 261 IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition' 254 IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition' 262 255 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ via Louvain la Neuve Ice Model (LIM-3) time stepping' 263 256 ! 264 ! ! Open the reference and configuration namelist files and namelist output file 265 CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 257 ! ! Open the reference and configuration namelist files and namelist output file 258 CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 266 259 CALL ctl_opn( numnam_ice_cfg, 'namelist_ice_cfg', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 267 260 IF(lwm) CALL ctl_opn( numoni, 'output.namelist.ice', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, 1 ) 268 261 ! 269 CALL ice_run! set some ice run parameters262 CALL lim_run_init ! set some ice run parameters 270 263 ! 271 264 ! ! Allocate the ice arrays … … 308 301 CALL lim_var_glo2eqv 309 302 ! 310 CALL lim_sbc_init ! ice surface boundary condition 303 CALL lim_sbc_init ! ice surface boundary condition 311 304 ! 312 305 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction … … 318 311 ELSE ; rn_amax_2d(ji,jj) = rn_amax_s ! SH 319 312 ENDIF 320 ENDDO321 END DO322 ! 323 nstart = numit + nn_fsbc 324 nitrun = nitend - nit000 + 1 325 nlast = numit + nitrun 313 END DO 314 END DO 315 ! 316 nstart = numit + nn_fsbc 317 nitrun = nitend - nit000 + 1 318 nlast = numit + nitrun 326 319 ! 327 320 IF( nstock == 0 ) nstock = nlast + 1 … … 330 323 331 324 332 SUBROUTINE ice_run325 SUBROUTINE lim_run_init 333 326 !!------------------------------------------------------------------- 334 !! *** ROUTINE ice_run***335 !! 327 !! *** ROUTINE lim_run_init *** 328 !! 336 329 !! ** Purpose : Definition some run parameter for ice model 337 330 !! 338 !! ** Method : Read the namicerun namelist and check the parameter 331 !! ** Method : Read the namicerun namelist and check the parameter 339 332 !! values called at the first timestep (nit000) 340 333 !! … … 343 336 INTEGER :: ios ! Local integer output status for namelist read 344 337 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, cn_icerst_in, cn_icerst_indir, cn_icerst_out, cn_icerst_outdir, & 345 & ln_limdyn, rn_amax_n, rn_amax_s, ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt 338 & ln_limdyn, rn_amax_n, rn_amax_s, ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt 346 339 !!------------------------------------------------------------------- 347 ! 340 ! 348 341 REWIND( numnam_ice_ref ) ! Namelist namicerun in reference namelist : Parameters for ice 349 342 READ ( numnam_ice_ref, namicerun, IOSTAT = ios, ERR = 901) … … 357 350 IF(lwp) THEN ! control print 358 351 WRITE(numout,*) 359 WRITE(numout,*) 'ice_run : ice share parameters for dynamics/advection/thermo of sea-ice' 360 WRITE(numout,*) ' ~~~~~~' 361 WRITE(numout,*) ' number of ice categories = ', jpl 362 WRITE(numout,*) ' number of ice layers = ', nlay_i 363 WRITE(numout,*) ' number of snow layers = ', nlay_s 364 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 365 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 366 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 367 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb 368 WRITE(numout,*) ' Output heat/salt budget or not ln_limdiaout = ', ln_limdiaout 369 WRITE(numout,*) ' control prints in ocean.out for (i,j)=(iiceprt,jiceprt) = ', ln_icectl 370 WRITE(numout,*) ' i-index for control prints (ln_icectl=true) = ', iiceprt 371 WRITE(numout,*) ' j-index for control prints (ln_icectl=true) = ', jiceprt 352 WRITE(numout,*) 'lim_run_init : ice share parameters for dynamics/advection/thermo of sea-ice' 353 WRITE(numout,*) '~~~~~~~~~~~~' 354 WRITE(numout,*) ' Namelist namicerun' 355 WRITE(numout,*) ' number of ice categories = ', jpl 356 WRITE(numout,*) ' number of ice layers = ', nlay_i 357 WRITE(numout,*) ' number of snow layers = ', nlay_s 358 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 359 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 360 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 361 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb 362 WRITE(numout,*) ' Output heat/salt budget or not ln_limdiaout = ', ln_limdiaout 363 WRITE(numout,*) ' control prints in ocean.out for (i,j)=(iiceprt,jiceprt) = ', ln_icectl 364 WRITE(numout,*) ' i-index for control prints (ln_icectl=true) = ', iiceprt 365 WRITE(numout,*) ' j-index for control prints (ln_icectl=true) = ', jiceprt 372 366 ENDIF 373 367 ! 374 368 ! sea-ice timestep and inverse 375 rdt_ice = nn_fsbc * rdt 376 r1_rdtice = 1._wp / rdt_ice 369 rdt_ice = nn_fsbc * rdt 370 r1_rdtice = 1._wp / rdt_ice 377 371 378 372 ! inverse of nlay_i and nlay_s … … 384 378 #endif 385 379 ! 386 END SUBROUTINE ice_run380 END SUBROUTINE lim_run_init 387 381 388 382 … … 414 408 IF(lwp) THEN ! control print 415 409 WRITE(numout,*) 416 WRITE(numout,*) 'ice_itd : ice cat distribution' 417 WRITE(numout,*) ' ~~~~~~' 418 WRITE(numout,*) ' shape of ice categories distribution nn_catbnd = ', nn_catbnd 419 WRITE(numout,*) ' mean ice thickness in the domain (used if nn_catbnd=2) rn_himean = ', rn_himean 410 WRITE(numout,*) 'lim_itd_init : Initialization of ice cat distribution ' 411 WRITE(numout,*) '~~~~~~~~~~~~' 412 WRITE(numout,*) ' Namelist namiceitd' 413 WRITE(numout,*) ' shape of ice categories distribution nn_catbnd = ', nn_catbnd 414 WRITE(numout,*) ' mean ice thickness in the domain (used if nn_catbnd=2) rn_himean = ', rn_himean 420 415 ENDIF 421 416 ! 422 417 !---------------------------------- 423 !- Thickness categories boundaries 418 !- Thickness categories boundaries 424 419 !---------------------------------- 425 IF(lwp) WRITE(numout,*)426 IF(lwp) WRITE(numout,*) 'lim_itd_init : Initialization of ice cat distribution '427 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'428 420 ! 429 421 hi_max(:) = 0._wp … … 443 435 zalpha = 0.05_wp 444 436 zhmax = 3._wp * rn_himean 445 DO jl = 1, jpl 437 DO jl = 1, jpl 446 438 znum = jpl * ( zhmax+1 )**zalpha 447 439 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) … … 457 449 hi_max(jpl) = 99._wp ! set to a big value to ensure that all ice is thinner than hi_max(jpl) 458 450 ! 459 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 460 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 451 IF(lwp) WRITE(numout,*) 452 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 453 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 461 454 ! 462 455 END SUBROUTINE lim_itd_init 463 456 464 457 465 458 SUBROUTINE ice_lim_flx( ptn_ice , palb_ice, pqns_ice , & 466 459 & pqsr_ice, pdqn_ice, pevap_ice, pdevap_ice, k_limflx ) 467 460 !!--------------------------------------------------------------------- 468 461 !! *** ROUTINE ice_lim_flx *** 469 !! 462 !! 470 463 !! ** Purpose : update the ice surface boundary condition by averaging and / or 471 !! redistributing fluxes on ice categories 472 !! 473 !! ** Method : average then redistribute 474 !! 475 !! ** Action : 464 !! redistributing fluxes on ice categories 465 !! 466 !! ** Method : average then redistribute 467 !! 468 !! ** Action : 476 469 !!--------------------------------------------------------------------- 477 INTEGER , INTENT(in ) :: k_limflx ! =-1 do nothing; =0 average ; 478 ! ! = 1 average and redistribute ; =2 redistribute479 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: ptn_ice ! ice surface temperature 470 INTEGER , INTENT(in ) :: k_limflx ! =-1 do nothing; =0 average ; 471 ! ! = 1 average and redistribute ; =2 redistribute 472 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: ptn_ice ! ice surface temperature 480 473 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: palb_ice ! ice albedo 481 474 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: pqns_ice ! non solar flux … … 526 519 CALL wrk_alloc( jpi,jpj, zalb_m, ztem_m ) 527 520 ! 528 zalb_m(:,:) = fice_ice_ave ( palb_ice (:,:,:) ) 529 ztem_m(:,:) = fice_ice_ave ( ptn_ice (:,:,:) ) 521 zalb_m(:,:) = fice_ice_ave ( palb_ice (:,:,:) ) 522 ztem_m(:,:) = fice_ice_ave ( ptn_ice (:,:,:) ) 530 523 DO jl = 1, jpl 531 524 pqns_ice (:,:,jl) = pqns_ice (:,:,jl) + pdqn_ice (:,:,jl) * ( ptn_ice(:,:,jl) - ztem_m(:,:) ) 532 525 pevap_ice(:,:,jl) = pevap_ice(:,:,jl) + pdevap_ice(:,:,jl) * ( ptn_ice(:,:,jl) - ztem_m(:,:) ) 533 pqsr_ice (:,:,jl) = pqsr_ice (:,:,jl) * ( 1._wp - palb_ice(:,:,jl) ) / ( 1._wp - zalb_m(:,:) ) 526 pqsr_ice (:,:,jl) = pqsr_ice (:,:,jl) * ( 1._wp - palb_ice(:,:,jl) ) / ( 1._wp - zalb_m(:,:) ) 534 527 END DO 535 528 ! … … 546 539 !! *** ROUTINE sbc_lim_bef *** 547 540 !! 548 !! ** purpose : store ice variables at "before" time step 541 !! ** purpose : store ice variables at "before" time step 549 542 !!---------------------------------------------------------------------- 550 543 a_i_b (:,:,:) = a_i (:,:,:) ! ice area 551 544 e_i_b (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 552 545 v_i_b (:,:,:) = v_i (:,:,:) ! ice volume 553 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 546 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 554 547 e_s_b (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 555 548 smv_i_b(:,:,:) = smv_i(:,:,:) ! salt content … … 557 550 u_ice_b(:,:) = u_ice(:,:) 558 551 v_ice_b(:,:) = v_ice(:,:) 559 ! 552 ! 560 553 END SUBROUTINE sbc_lim_bef 561 554 … … 569 562 !!---------------------------------------------------------------------- 570 563 sfx (:,:) = 0._wp ; 571 sfx_bri(:,:) = 0._wp ; 564 sfx_bri(:,:) = 0._wp ; 572 565 sfx_sni(:,:) = 0._wp ; sfx_opw(:,:) = 0._wp 573 566 sfx_bog(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp … … 580 573 wfx_bom(:,:) = 0._wp ; wfx_sum(:,:) = 0._wp 581 574 wfx_res(:,:) = 0._wp ; wfx_sub(:,:) = 0._wp 582 wfx_spr(:,:) = 0._wp ; 583 ! 584 hfx_thd(:,:) = 0._wp ; 575 wfx_spr(:,:) = 0._wp ; 576 ! 577 hfx_thd(:,:) = 0._wp ; 585 578 hfx_snw(:,:) = 0._wp ; hfx_opw(:,:) = 0._wp 586 579 hfx_bog(:,:) = 0._wp ; hfx_dyn(:,:) = 0._wp 587 580 hfx_bom(:,:) = 0._wp ; hfx_sum(:,:) = 0._wp 588 581 hfx_res(:,:) = 0._wp ; hfx_sub(:,:) = 0._wp 589 hfx_spr(:,:) = 0._wp ; hfx_dif(:,:) = 0._wp 582 hfx_spr(:,:) = 0._wp ; hfx_dif(:,:) = 0._wp 590 583 hfx_err(:,:) = 0._wp ; hfx_err_rem(:,:) = 0._wp 591 584 hfx_err_dif(:,:) = 0._wp … … 595 588 afx_dyn(:,:) = 0._wp ; afx_thd(:,:) = 0._wp 596 589 ! 597 diag_heat(:,:) = 0._wp ; diag_smvi(:,:) = 0._wp ;598 diag_vice(:,:) = 0._wp ; diag_vsnw(:,:) = 0._wp ;590 diag_heat(:,:) = 0._wp ; diag_smvi(:,:) = 0._wp 591 diag_vice(:,:) = 0._wp ; diag_vsnw(:,:) = 0._wp 599 592 ! 600 593 END SUBROUTINE sbc_lim_diag0 601 594 602 595 603 596 FUNCTION fice_cell_ave ( ptab ) 604 597 !!-------------------------------------------------------------------------- … … 608 601 REAL (wp), DIMENSION (jpi,jpj,jpl), INTENT (in) :: ptab 609 602 INTEGER :: jl ! Dummy loop index 610 611 fice_cell_ave (:,:) = 0. 0_wp603 604 fice_cell_ave (:,:) = 0._wp 612 605 DO jl = 1, jpl 613 606 fice_cell_ave (:,:) = fice_cell_ave (:,:) + a_i (:,:,jl) * ptab (:,:,jl) 614 607 END DO 615 608 616 609 END FUNCTION fice_cell_ave 617 618 610 611 619 612 FUNCTION fice_ice_ave ( ptab ) 620 613 !!-------------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r6140 r7280 24 24 USE sbc_oce ! Surface boundary condition: ocean fields 25 25 USE sbc_ice ! Surface boundary condition: ice fields 26 USE sbcblk_core ! Surface boundary condition: CORE bulk 27 USE sbcblk_clio ! Surface boundary condition: CLIO bulk 26 USE sbcblk ! Surface boundary condition: bulk 28 27 USE sbccpl ! Surface boundary condition: coupled interface 29 28 USE albedo … … 93 92 !!--------------------------------------------------------------------- 94 93 INTEGER, INTENT(in) :: kt ! ocean time step 95 INTEGER, INTENT(in) :: ksbc ! type of sbc ( = 3 CLIO bulk ; =4 COREbulk ; =5 coupled )94 INTEGER, INTENT(in) :: ksbc ! type of sbc ( =4 bulk ; =5 coupled ) 96 95 !! 97 96 INTEGER :: ji, jj ! dummy loop indices … … 161 160 162 161 SELECT CASE( ksbc ) 163 CASE( jp_ core , jp_purecpl ) ! COREand COUPLED bulk formulations162 CASE( jp_blk , jp_purecpl ) ! BULK and COUPLED bulk formulations 164 163 165 164 ! albedo depends on cloud fraction because of non-linear spectral effects 166 165 zalb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 167 ! In CLIO the cloud fraction is read in the climatology and the all-sky albedo168 ! (zalb_ice) is computed within the bulk routine169 166 170 167 END SELECT … … 184 181 ! 185 182 SELECT CASE( ksbc ) 186 CASE( jp_clio ) ! CLIO bulk formulation 187 ! CALL blk_ice_clio( zsist, zalb_cs , zalb_os , zalb_ice , & 188 ! & utau_ice , vtau_ice , qns_ice , qsr_ice, & 189 ! & qla_ice , dqns_ice , dqla_ice , & 190 ! & tprecip , sprecip , & 191 ! & fr1_i0 , fr2_i0 , cp_ice_msh , jpl ) 192 CALL blk_ice_clio_tau 193 CALL blk_ice_clio_flx( zsist, zalb_cs, zalb_os, zalb_ice ) 194 195 CASE( jp_core ) ! CORE bulk formulation 196 CALL blk_ice_core_tau 197 CALL blk_ice_core_flx( zsist, zalb_ice ) 198 183 ! 184 CASE( jp_blk ) ! Bulk formulation 185 CALL blk_ice_tau 186 CALL blk_ice_flx( zsist, zalb_ice ) 187 ! 199 188 CASE( jp_purecpl ) ! Coupled formulation : atmosphere-ice stress only (fluxes provided after ice dynamics) 200 189 CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) 190 ! 201 191 END SELECT 202 192 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r7278 r7280 13 13 !! 3.4 ! 2011-11 (C. Harris) CICE added as an option 14 14 !! 3.5 ! 2012-11 (A. Coward, G. Madec) Rethink of heat, mass and salt surface fluxes 15 !! 3.6 ! 2014-11 (P. Mathiot, C. Harris) add ice shelves melting 15 !! 3.6 ! 2014-11 (P. Mathiot, C. Harris) add ice shelves melting 16 !! 4.0 ! 2016-06 (L. Brodeau) new general bulk formulation 16 17 !!---------------------------------------------------------------------- 17 18 … … 30 31 USE sbcssm ! surface boundary condition: sea-surface mean variables 31 32 USE sbcflx ! surface boundary condition: flux formulation 32 USE sbcblk_clio ! surface boundary condition: bulk formulation : CLIO 33 USE sbcblk_core ! surface boundary condition: bulk formulation : CORE 34 USE sbcblk_mfs ! surface boundary condition: bulk formulation : MFS 33 USE sbcblk ! surface boundary condition: bulk formulation 35 34 USE sbcice_if ! surface boundary condition: ice-if sea-ice model 36 35 USE sbcice_lim ! surface boundary condition: LIM 3.0 sea-ice model 37 36 USE sbcice_lim_2 ! surface boundary condition: LIM 2.0 sea-ice model 38 37 USE sbcice_cice ! surface boundary condition: CICE sea-ice model 39 USE sbccpl ! surface boundary condition: coupled f lorulation38 USE sbccpl ! surface boundary condition: coupled formulation 40 39 USE cpl_oasis3 ! OASIS routines for coupling 41 40 USE sbcssr ! surface boundary condition: sea surface restoring … … 63 62 PUBLIC sbc ! routine called by step.F90 64 63 PUBLIC sbc_init ! routine called by opa.F90 65 64 66 65 INTEGER :: nsbc ! type of surface boundary condition (deduced from namsbc informations) 67 66 68 67 !!---------------------------------------------------------------------- 69 68 !! NEMO/OPA 4.0 , NEMO-consortium (2016) … … 85 84 !! - nsbc: type of sbc 86 85 !!---------------------------------------------------------------------- 87 INTEGER :: icpt ! local integer 88 !! 89 NAMELIST/namsbc/ nn_fsbc , ln_usr , ln_flx, ln_blk_clio, ln_blk_core, ln_blk_mfs, & 90 & ln_cpl , ln_mixcpl, nn_components , nn_limflx , & 91 & ln_traqsr, ln_dm2dc , & 92 & nn_ice , nn_ice_embd, & 93 & ln_rnf , ln_ssr , ln_isf , nn_fwb , ln_apr_dyn, & 94 & ln_wave , & 95 & nn_lsm 96 INTEGER :: ios 97 INTEGER :: ierr, ierr0, ierr1, ierr2, ierr3, jpm 98 LOGICAL :: ll_purecpl 86 INTEGER :: ios, icpt ! local integer 87 LOGICAL :: ll_purecpl, ll_opa, ll_not_nemo ! local logical 88 !! 89 NAMELIST/namsbc/ nn_fsbc , & 90 & ln_usr , ln_flx , ln_blk , & 91 & ln_cpl , ln_mixcpl, nn_components, nn_limflx, & 92 & nn_ice , nn_ice_embd, & 93 & ln_traqsr, ln_dm2dc , & 94 & ln_rnf , nn_fwb , ln_ssr , ln_isf , ln_apr_dyn, & 95 & ln_wave , & 96 & nn_lsm 99 97 !!---------------------------------------------------------------------- 100 98 ! … … 105 103 ENDIF 106 104 ! 107 REWIND( numnam_ref ) ! Namelist namsbc in reference namelist : Surface boundary 105 ! !** read Surface Module namelist 106 REWIND( numnam_ref ) !* Namelist namsbc in reference namelist : Surface boundary 108 107 READ ( numnam_ref, namsbc, IOSTAT = ios, ERR = 901) 109 108 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc in reference namelist', lwp ) 110 109 ! 111 REWIND( numnam_cfg ) !Namelist namsbc in configuration namelist : Parameters of the run110 REWIND( numnam_cfg ) !* Namelist namsbc in configuration namelist : Parameters of the run 112 111 READ ( numnam_cfg, namsbc, IOSTAT = ios, ERR = 902 ) 113 112 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc in configuration namelist', lwp ) 114 113 IF(lwm) WRITE( numond, namsbc ) 115 114 ! 116 ! !overwrite namelist parameter using CPP key information115 ! !* overwrite namelist parameter using CPP key information 117 116 IF( Agrif_Root() ) THEN ! AGRIF zoom 118 IF( lk_lim2 ) nn_ice = 2119 IF( lk_lim3 ) nn_ice = 3120 IF( lk_cice ) nn_ice = 4121 ENDIF 122 ! 123 IF(lwp) THEN !Control print117 IF( lk_lim2 ) nn_ice = 2 118 IF( lk_lim3 ) nn_ice = 3 119 IF( lk_cice ) nn_ice = 4 120 ENDIF 121 ! 122 IF(lwp) THEN !* Control print 124 123 WRITE(numout,*) ' Namelist namsbc (partly overwritten with CPP key setting)' 125 WRITE(numout,*) ' Frequency update of sbc (and ice) nn_fsbc = ', nn_fsbc124 WRITE(numout,*) ' frequency update of sbc (and ice) nn_fsbc = ', nn_fsbc 126 125 WRITE(numout,*) ' Type of air-sea fluxes : ' 127 126 WRITE(numout,*) ' user defined formulation ln_usr = ', ln_usr 128 127 WRITE(numout,*) ' flux formulation ln_flx = ', ln_flx 129 WRITE(numout,*) ' CLIO bulk formulation ln_blk_clio = ', ln_blk_clio 130 WRITE(numout,*) ' CORE bulk formulation ln_blk_core = ', ln_blk_core 131 WRITE(numout,*) ' MFS bulk formulation ln_blk_mfs = ', ln_blk_mfs 128 WRITE(numout,*) ' bulk formulation ln_blk = ', ln_blk 132 129 WRITE(numout,*) ' Type of coupling (Ocean/Ice/Atmosphere) : ' 133 130 WRITE(numout,*) ' ocean-atmosphere coupled formulation ln_cpl = ', ln_cpl 134 WRITE(numout,*) ' forced-coupled mixed formulation ln_mixcpl = ', ln_mixcpl 131 WRITE(numout,*) ' mixed forced-coupled formulation ln_mixcpl = ', ln_mixcpl 132 !!gm lk_oasis is controlled by key_oasis3 ===>>> It shoud be removed from the namelist 135 133 WRITE(numout,*) ' OASIS coupling (with atm or sas) lk_oasis = ', lk_oasis 136 134 WRITE(numout,*) ' components of your executable nn_components = ', nn_components 137 135 WRITE(numout,*) ' Multicategory heat flux formulation (LIM3) nn_limflx = ', nn_limflx 138 136 WRITE(numout,*) ' Sea-ice : ' 139 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 137 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 140 138 WRITE(numout,*) ' ice-ocean embedded/levitating (=0/1/2) nn_ice_embd = ', nn_ice_embd 141 139 WRITE(numout,*) ' Misc. options of sbc : ' 142 140 WRITE(numout,*) ' Light penetration in temperature Eq. ln_traqsr = ', ln_traqsr 143 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc 141 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc 144 142 WRITE(numout,*) ' Sea Surface Restoring on SST and/or SSS ln_ssr = ', ln_ssr 145 143 WRITE(numout,*) ' FreshWater Budget control (=0/1/2) nn_fwb = ', nn_fwb … … 149 147 WRITE(numout,*) ' closed sea (=0/1) (set in namdom) nn_closea = ', nn_closea 150 148 WRITE(numout,*) ' nb of iterations if land-sea-mask applied nn_lsm = ', nn_lsm 151 WRITE(numout,*) ' surface wave ln_wave = ', ln_wave 149 WRITE(numout,*) ' surface wave ln_wave = ', ln_wave 152 150 ENDIF 153 151 ! … … 157 155 IF( MOD( rdt , 2. ) /= 0. ) CALL ctl_stop( 'the time step (in second) must be an even number' ) 158 156 ENDIF 159 ! 160 IF(lwp) THEN 161 WRITE(numout,*) 162 SELECT CASE ( nn_limflx ) ! LIM3 Multi-category heat flux formulation 163 CASE ( -1 ) ; WRITE(numout,*) ' LIM3: use per-category fluxes (nn_limflx = -1) ' 164 CASE ( 0 ) ; WRITE(numout,*) ' LIM3: use average per-category fluxes (nn_limflx = 0) ' 165 CASE ( 1 ) ; WRITE(numout,*) ' LIM3: use average then redistribute per-category fluxes (nn_limflx = 1) ' 166 CASE ( 2 ) ; WRITE(numout,*) ' LIM3: Redistribute a single flux over categories (nn_limflx = 2) ' 157 ! !** check option consistency 158 ! 159 IF(lwp) WRITE(numout,*) !* Single / Multi - executable (NEMO / OPA+SAS) 160 SELECT CASE( nn_components ) 161 CASE( jp_iam_nemo ) 162 IF(lwp) WRITE(numout,*) ' NEMO configured as a single executable (i.e. including both OPA and Surface module' 163 CASE( jp_iam_opa ) 164 IF(lwp) WRITE(numout,*) ' Multi executable configuration. Here, OPA component' 165 IF( .NOT.lk_oasis ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 166 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_cpl = T in OPA' ) 167 IF( ln_mixcpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 168 CASE( jp_iam_sas ) 169 IF(lwp) WRITE(numout,*) ' Multi executable configuration. Here, SAS component' 170 IF( .NOT.lk_oasis ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 171 IF( ln_mixcpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 172 CASE DEFAULT 173 CALL ctl_stop( 'sbc_init : unsupported value for nn_components' ) 174 END SELECT 175 ! !* coupled options 176 IF( ln_cpl ) THEN 177 IF( .NOT. lk_oasis ) CALL ctl_stop( 'sbc_init : coupled mode with an atmosphere model (ln_cpl=T)', & 178 & ' required to defined key_oasis3' ) 179 ENDIF 180 IF( ln_mixcpl ) THEN 181 IF( .NOT. lk_oasis ) CALL ctl_stop( 'sbc_init : mixed forced-coupled mode (ln_mixcpl=T) ', & 182 & ' required to defined key_oasis3' ) 183 IF( .NOT.ln_cpl ) CALL ctl_stop( 'sbc_init : mixed forced-coupled mode (ln_mixcpl=T) requires ln_cpl = T' ) 184 IF( nn_components /= jp_iam_nemo ) & 185 & CALL ctl_stop( 'sbc_init : the mixed forced-coupled mode (ln_mixcpl=T) ', & 186 & ' not yet working with sas-opa coupling via oasis' ) 187 ENDIF 188 ! !* sea-ice 189 SELECT CASE( nn_ice ) 190 CASE( 0 ) !- no ice in the domain 191 CASE( 1 ) !- Ice-cover climatology ("Ice-if" model) 192 CASE( 2 ) !- LIM2 ice model 193 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : LIM2 sea-ice model requires ln_blk or ln_cpl = T' ) 194 CASE( 3 ) !- LIM3 ice model 195 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : LIM3 sea-ice model requires ln_blk or ln_cpl = T' ) 196 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : LIM3 sea-ice models require nn_ice_embd = 1 or 2' ) 197 CASE( 4 ) !- CICE ice model 198 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : CICE sea-ice model requires ln_blk or ln_cpl = T' ) 199 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : CICE sea-ice models require nn_ice_embd = 1 or 2' ) 200 IF( lk_agrif ) CALL ctl_stop( 'sbc_init : CICE sea-ice model not currently available with AGRIF' ) 201 CASE DEFAULT !- not supported 202 END SELECT 203 ! 204 IF( nn_ice == 3 ) THEN !- LIM3 case: multi-category flux option 205 IF(lwp) WRITE(numout,*) 206 SELECT CASE( nn_limflx ) ! LIM3 Multi-category heat flux formulation 207 CASE ( -1 ) 208 IF(lwp) WRITE(numout,*) ' LIM3: use per-category fluxes (nn_limflx = -1) ' 209 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 210 CASE ( 0 ) 211 IF(lwp) WRITE(numout,*) ' LIM3: use average per-category fluxes (nn_limflx = 0) ' 212 CASE ( 1 ) 213 IF(lwp) WRITE(numout,*) ' LIM3: use average then redistribute per-category fluxes (nn_limflx = 1) ' 214 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 215 CASE ( 2 ) 216 IF(lwp) WRITE(numout,*) ' LIM3: Redistribute a single flux over categories (nn_limflx = 2) ' 217 IF( .NOT.ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 218 CASE DEFAULT 219 CALL ctl_stop( 'sbcmod: LIM3 option, nn_limflx, should be between -1 and 2' ) 167 220 END SELECT 168 ENDIF 169 ! 170 IF( nn_components /= jp_iam_nemo .AND. .NOT. lk_oasis ) & 171 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 172 IF( nn_components == jp_iam_opa .AND. ln_cpl ) & 173 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_cpl = T in OPA' ) 174 IF( nn_components == jp_iam_opa .AND. ln_mixcpl ) & 175 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 176 IF( ln_cpl .AND. .NOT. lk_oasis ) & 177 & CALL ctl_stop( 'sbc_init : OASIS-coupled atmosphere model, but key_oasis3 disabled' ) 178 IF( ln_mixcpl .AND. .NOT. lk_oasis ) & 179 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires the cpp key key_oasis3' ) 180 IF( ln_mixcpl .AND. .NOT. ln_cpl ) & 181 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires ln_cpl = T' ) 182 IF( ln_mixcpl .AND. nn_components /= jp_iam_nemo ) & 183 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) is not yet working with sas-opa coupling via oasis' ) 184 185 ! ! allocate sbc arrays 221 ELSE ! other sea-ice model 222 IF( nn_limflx >= 0 ) CALL ctl_warn( 'sbc_init : multi-category flux option (nn_limflx) only available in LIM3' ) 223 ENDIF 224 ! 225 ! !** allocate and set required variables 226 ! 227 ! !* allocate sbc arrays 186 228 IF( sbc_oce_alloc() /= 0 ) CALL ctl_stop( 'sbc_init : unable to allocate sbc_oce arrays' ) 187 188 ! ! Checks: 189 IF( .NOT. ln_isf ) THEN ! variable initialisation if no ice shelf 229 ! 230 IF( .NOT.ln_isf ) THEN !* No ice-shelf in the domain : allocate and set to zero 190 231 IF( sbc_isf_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 191 fwfisf (:,:) = 0. 0_wp ; fwfisf_b (:,:) = 0.0_wp192 risf_tsc(:,:,:) = 0.0_wp ; risf_tsc_b(:,:,:) = 0.0_wp232 fwfisf (:,:) = 0._wp ; risf_tsc (:,:,:) = 0._wp 233 fwfisf_b(:,:) = 0._wp ; risf_tsc_b(:,:,:) = 0._wp 193 234 END IF 194 IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa ) fr_i(:,:) = 0._wp ! no ice in the domain, ice fraction is always zero 195 196 sfx(:,:) = 0._wp ! the salt flux due to freezing/melting will be computed (i.e. will be non-zero) 197 ! only if sea-ice is present 198 199 fmmflx(:,:) = 0._wp ! freezing-melting array initialisation 200 201 taum(:,:) = 0._wp ! Initialise taum for use in gls in case of reduced restart 202 203 ! ! restartability 204 IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. ln_cpl ) ) & 205 & CALL ctl_stop( 'LIM sea-ice model requires a bulk formulation or coupled configuration' ) 206 IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. ln_cpl ) ) & 207 & CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or ln_cpl' ) 208 IF( nn_ice == 4 .AND. lk_agrif ) & 209 & CALL ctl_stop( 'CICE sea-ice model not currently available with AGRIF' ) 210 IF( ( nn_ice == 3 .OR. nn_ice == 4 ) .AND. nn_ice_embd == 0 ) & 211 & CALL ctl_stop( 'LIM3 and CICE sea-ice models require nn_ice_embd = 1 or 2' ) 212 IF( ( nn_ice /= 3 ) .AND. ( nn_limflx >= 0 ) ) & 213 & WRITE(numout,*) 'The nn_limflx>=0 option has no effect if sea ice model is not LIM3' 214 IF( ( nn_ice == 3 ) .AND. ( ln_cpl ) .AND. ( ( nn_limflx == -1 ) .OR. ( nn_limflx == 1 ) ) ) & 215 & CALL ctl_stop( 'The chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 216 IF( ( nn_ice == 3 ) .AND. ( .NOT. ln_cpl ) .AND. ( nn_limflx == 2 ) ) & 217 & CALL ctl_stop( 'The chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 218 219 IF( ln_dm2dc ) nday_qsr = -1 ! initialisation flag 220 221 IF( ln_dm2dc .AND. .NOT.( ln_flx .OR. ln_blk_core ) .AND. nn_components /= jp_iam_opa ) & 222 & CALL ctl_stop( 'diurnal cycle into qsr field from daily values requires a flux or core-bulk formulation' ) 223 224 ! ! Choice of the Surface Boudary Condition (set nsbc) 225 ll_purecpl = ln_cpl .AND. .NOT. ln_mixcpl 226 ! 235 IF( nn_ice == 0 ) THEN !* No sea-ice in the domain : ice fraction is always zero 236 IF( nn_components /= jp_iam_opa ) fr_i(:,:) = 0._wp ! except for OPA in SAS-OPA coupled case 237 ENDIF 238 ! 239 sfx (:,:) = 0._wp !* salt flux due to freezing/melting 240 fmmflx(:,:) = 0._wp !* freezing minus melting flux 241 242 taum(:,:) = 0._wp !* wind stress module (needed in GLS in case of reduced restart) 243 244 IF( ln_dm2dc ) THEN !* daily mean to diurnal cycle 245 nday_qsr = -1 ! allow initialization at the 1st call 246 IF( .NOT.( ln_flx .OR. ln_blk ) .AND. nn_components /= jp_iam_opa ) & 247 & CALL ctl_stop( 'qsr diurnal cycle from daily values requires a flux or bulk formulation' ) 248 ENDIF 249 250 ! !* Choice of the Surface Boudary Condition 251 ! (set nsbc) 252 ! 253 ll_purecpl = ln_cpl .AND. .NOT.ln_mixcpl 254 ll_opa = nn_components == jp_iam_opa 255 ll_not_nemo = nn_components /= jp_iam_nemo 227 256 icpt = 0 257 ! 228 258 IF( ln_usr ) THEN ; nsbc = jp_usr ; icpt = icpt + 1 ; ENDIF ! user defined formulation 229 259 IF( ln_flx ) THEN ; nsbc = jp_flx ; icpt = icpt + 1 ; ENDIF ! flux formulation 230 IF( ln_blk_clio ) THEN ; nsbc = jp_clio ; icpt = icpt + 1 ; ENDIF ! CLIO bulk formulation 231 IF( ln_blk_core ) THEN ; nsbc = jp_core ; icpt = icpt + 1 ; ENDIF ! CORE bulk formulation 232 IF( ln_blk_mfs ) THEN ; nsbc = jp_mfs ; icpt = icpt + 1 ; ENDIF ! MFS bulk formulation 260 IF( ln_blk ) THEN ; nsbc = jp_blk ; icpt = icpt + 1 ; ENDIF ! bulk formulation 233 261 IF( ll_purecpl ) THEN ; nsbc = jp_purecpl ; icpt = icpt + 1 ; ENDIF ! Pure Coupled formulation 234 IF( nn_components == jp_iam_opa ) & 235 & THEN ; nsbc = jp_none ; icpt = icpt + 1 ; ENDIF ! opa coupling via SAS module 236 ! 237 IF( icpt /= 1 ) CALL ctl_stop( 'sbc_init: choose ONE and only ONE sbc option' ) 238 ! 239 IF(lwp) THEN 262 IF( ll_opa ) THEN ; nsbc = jp_none ; icpt = icpt + 1 ; ENDIF ! opa coupling via SAS module 263 ! 264 IF( icpt /= 1 ) CALL ctl_stop( 'sbc_init : choose ONE and only ONE sbc option' ) 265 ! 266 IF(lwp) THEN !- print the choice of surface flux formulation 240 267 WRITE(numout,*) 241 268 SELECT CASE( nsbc ) 242 269 CASE( jp_usr ) ; WRITE(numout,*) ' user defined formulation' 243 CASE( jp_flx ) ; WRITE(numout,*) ' flux formulation' 244 CASE( jp_clio ) ; WRITE(numout,*) ' CLIO bulk formulation' 245 CASE( jp_core ) ; WRITE(numout,*) ' CORE bulk formulation' 246 CASE( jp_purecpl ) ; WRITE(numout,*) ' pure coupled formulation' 247 CASE( jp_mfs ) ; WRITE(numout,*) ' MFS Bulk formulation' 248 CASE( jp_none ) ; WRITE(numout,*) ' OPA coupled to SAS via oasis' 249 IF( ln_mixcpl ) WRITE(numout,*) ' + forced-coupled mixed formulation' 270 CASE( jp_flx ) ; WRITE(numout,*) ' ===>> flux formulation' 271 CASE( jp_blk ) ; WRITE(numout,*) ' ===>> bulk formulation' 272 CASE( jp_purecpl ) ; WRITE(numout,*) ' ===>> pure coupled formulation' 273 !!gm abusive use of jp_none ?? ===>>> need to be check and changed by adding a jp_sas parameter 274 CASE( jp_none ) ; WRITE(numout,*) ' ===>> OPA coupled to SAS via oasis' 275 IF( ln_mixcpl ) WRITE(numout,*) ' + forced-coupled mixed formulation' 250 276 END SELECT 251 IF( nn_components/= jp_iam_nemo ) & 252 & WRITE(numout,*) ' + OASIS coupled SAS' 253 ENDIF 254 ! 255 IF( lk_oasis ) CALL sbc_cpl_init (nn_ice) ! OASIS initialisation. must be done before: (1) first time step 256 ! ! (2) the use of nn_fsbc 277 IF( ll_not_nemo ) WRITE(numout,*) ' + OASIS coupled SAS' 278 ENDIF 279 ! 280 ! !* OASIS initialization 281 ! 282 IF( lk_oasis ) CALL sbc_cpl_init( nn_ice ) ! Must be done before: (1) first time step 283 ! ! (2) the use of nn_fsbc 257 284 ! nn_fsbc initialization if OPA-SAS coupling via OASIS 258 ! sas model timestep has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly285 ! SAS time-step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 259 286 IF( nn_components /= jp_iam_nemo ) THEN 260 287 IF( nn_components == jp_iam_opa ) nn_fsbc = cpl_freq('O_SFLX') / NINT(rdt) … … 268 295 ENDIF 269 296 ! 297 ! !* check consistency between model timeline and nn_fsbc 270 298 IF( MOD( nitend - nit000 + 1, nn_fsbc) /= 0 .OR. & 271 MOD( nstock , nn_fsbc) /= 0 ) THEN 272 WRITE(ctmp1,*) ' experiment length (', nitend - nit000 + 1, ') or nstock (', nstock, &299 MOD( nstock , nn_fsbc) /= 0 ) THEN 300 WRITE(ctmp1,*) 'sbc_init : experiment length (', nitend - nit000 + 1, ') or nstock (', nstock, & 273 301 & ' is NOT a multiple of nn_fsbc (', nn_fsbc, ')' 274 302 CALL ctl_stop( ctmp1, 'Impossible to properly do model restart' ) … … 276 304 ! 277 305 IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 ) & 278 & CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 279 ! 280 IF( ln_dm2dc .AND. ( ( NINT(rday) / ( nn_fsbc * NINT(rdt) ) ) < 8 ) ) & 281 & CALL ctl_warn( 'diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 282 ! 283 CALL sbc_ssm_init ! Sea-surface mean fields initialisation 284 ! 285 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialisation 286 ! 287 CALL sbc_rnf_init ! Runof initialisation 288 ! 289 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialisation 290 ! 291 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation 306 & CALL ctl_warn( 'sbc_init : nn_fsbc is NOT a multiple of the number of time steps in a day' ) 307 ! 308 IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rdt) ) < 8 ) & 309 & CALL ctl_warn( 'sbc_init : diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 310 ! 311 312 ! !** associated modules : initialization 313 ! 314 CALL sbc_ssm_init ! Sea-surface mean fields initialization 315 ! 316 IF( ln_blk ) CALL sbc_blk_init ! bulk formulae initialization 317 318 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialization 319 ! 320 CALL sbc_rnf_init ! Runof initialization 321 ! 322 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialization 323 ! 324 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialization 292 325 ! 293 326 END SUBROUTINE sbc_init … … 297 330 !!--------------------------------------------------------------------- 298 331 !! *** ROUTINE sbc *** 299 !! 332 !! 300 333 !! ** Purpose : provide at each time-step the ocean surface boundary 301 334 !! condition (momentum, heat and freshwater fluxes) 302 335 !! 303 !! ** Method : blah blah to be written ????????? 336 !! ** Method : blah blah to be written ????????? 304 337 !! CAUTION : never mask the surface stress field (tke sbc) 305 338 !! 306 !! ** Action : - set the ocean surface boundary condition at before and now 307 !! time step, i.e. 339 !! ** Action : - set the ocean surface boundary condition at before and now 340 !! time step, i.e. 308 341 !! utau_b, vtau_b, qns_b, qsr_b, emp_n, sfx_b, qrp_b, erp_b 309 342 !! utau , vtau , qns , qsr , emp , sfx , qrp , erp 310 343 !! - updte the ice fraction : fr_i 311 344 !!---------------------------------------------------------------------- 312 INTEGER, INTENT(in) :: kt ! ocean time step 345 INTEGER, INTENT(in) :: kt ! ocean time step 346 ! 347 LOGICAL :: ll_sas, ll_opa ! local logical 313 348 !!--------------------------------------------------------------------- 314 349 ! … … 332 367 ! ! ---------------------------------------- ! 333 368 ! 334 IF( nn_components /= jp_iam_sas ) CALL sbc_ssm ( kt ) ! ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 335 ! ! averaged over nf_sbc time-step 336 IF( ln_wave ) CALL sbc_wave( kt ) ! surface waves 337 338 339 !== sbc formulation ==! 340 369 ll_sas = nn_components == jp_iam_sas ! component flags 370 ll_opa = nn_components == jp_iam_opa 371 ! 372 IF( .NOT.ll_sas ) CALL sbc_ssm ( kt ) ! mean ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 373 IF( ln_wave ) CALL sbc_wave( kt ) ! surface waves 374 375 ! 376 ! !== sbc formulation ==! 377 ! 341 378 SELECT CASE( nsbc ) ! Compute ocean surface boundary condition 342 379 ! ! (i.e. utau,vtau, qns, qsr, emp, sfx) 343 CASE( jp_usr ) ; CALL usr_def_sbc ( kt ) ! user defined formulation 344 CASE( jp_flx ) ; CALL sbc_flx ( kt ) ! flux formulation 345 CASE( jp_clio ) ; CALL sbc_blk_clio( kt ) ! bulk formulation : CLIO for the ocean 346 CASE( jp_core ) 347 IF( nn_components == jp_iam_sas ) & 348 & CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: SAS receiving fields from OPA 349 CALL sbc_blk_core( kt ) ! bulk formulation : CORE for the ocean 350 ! from oce: sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 351 CASE( jp_purecpl ) ; CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! pure coupled formulation 352 ! 353 CASE( jp_mfs ) ; CALL sbc_blk_mfs ( kt ) ! bulk formulation : MFS for the ocean 354 CASE( jp_none ) 355 IF( nn_components == jp_iam_opa ) & 356 & CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: OPA receiving fields from SAS 380 CASE( jp_usr ) ; CALL usr_def_sbc( kt ) ! user defined formulation 381 CASE( jp_flx ) ; CALL sbc_flx ( kt ) ! flux formulation 382 CASE( jp_blk ) 383 IF( ll_sas ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: SAS receiving fields from OPA 384 CALL sbc_blk ( kt ) ! bulk formulation for the ocean 385 ! 386 CASE( jp_purecpl ) ; CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! pure coupled formulation 387 CASE( jp_none ) 388 IF( ll_opa ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: OPA receiving fields from SAS 357 389 END SELECT 358 390 359 IF( ln_mixcpl ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! forced-coupled mixed formulation after forcing391 IF( ln_mixcpl ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! forced-coupled mixed formulation after forcing 360 392 361 393 ! … … 367 399 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM-3 ice model 368 400 CASE( 4 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model 369 END SELECT 401 END SELECT 370 402 371 403 IF( ln_icebergs ) CALL icb_stp( kt ) ! compute icebergs … … 374 406 375 407 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes 376 408 377 409 IF( ln_ssr ) CALL sbc_ssr( kt ) ! add SST/SSS damping term 378 410 379 411 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc ) ! control the freshwater budget 380 412 381 ! treatment of closed sea in the model domain 382 ! (update freshwater fluxes) 413 ! treatment of closed sea in the model domain (update freshwater fluxes) 383 414 ! Should not be ran if ln_diurnal_only 384 415 IF( .NOT.ln_diurnal_only .AND. nn_closea == 1 ) CALL sbc_clo( kt, cn_cfg, nn_cfg ) … … 391 422 ! ! ---------------------------------------- ! 392 423 IF( ln_rstart .AND. & !* Restart: read in restart file 393 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 424 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 394 425 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields red in the restart file' 395 426 CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b ) ! before i-stress (U-point) … … 407 438 ELSE !* no restart: set from nit000 values 408 439 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields set to nit000' 409 utau_b(:,:) = utau(:,:) 440 utau_b(:,:) = utau(:,:) 410 441 vtau_b(:,:) = vtau(:,:) 411 442 qns_b (:,:) = qns (:,:) 412 emp_b (:,:) = emp (:,:)413 sfx_b (:,:) = sfx (:,:)443 emp_b (:,:) = emp (:,:) 444 sfx_b (:,:) = sfx (:,:) 414 445 ENDIF 415 446 ENDIF … … 435 466 CALL iom_put( "empmr" , emp - rnf ) ! upward water flux 436 467 CALL iom_put( "empbmr" , emp_b - rnf ) ! before upward water flux ( needed to recalculate the time evolution of ssh in offline ) 437 CALL iom_put( "saltflx", sfx ) ! downward salt flux 438 ! (includes virtual salt flux beneath ice 439 ! in linear free surface case) 468 CALL iom_put( "saltflx", sfx ) ! downward salt flux (includes virtual salt flux beneath ice in linear free surface case) 440 469 CALL iom_put( "fmmflx", fmmflx ) ! Freezing-melting water flux 441 CALL iom_put( "qt" , qns + qsr ) ! total heat flux 470 CALL iom_put( "qt" , qns + qsr ) ! total heat flux 442 471 CALL iom_put( "qns" , qns ) ! solar heat flux 443 472 CALL iom_put( "qsr" , qsr ) ! solar heat flux 444 IF( nn_ice > 0 .OR. nn_components == jp_iam_opa ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction445 CALL iom_put( "taum" , taum ) ! wind stress module 473 IF( nn_ice > 0 .OR. ll_opa ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction 474 CALL iom_put( "taum" , taum ) ! wind stress module 446 475 CALL iom_put( "wspd" , wndm ) ! wind speed module over free ocean or leads in presence of sea-ice 447 476 ENDIF 448 477 ! 449 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at 450 CALL iom_put( "vtau", vtau ) ! j-wind stress each time step in sea-ice)478 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at each time step in sea-ice) 479 CALL iom_put( "vtau", vtau ) ! j-wind stress 451 480 ! 452 481 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r7278 r7280 279 279 IF(lwp) THEN 280 280 WRITE(numout,*) 281 WRITE(numout,*) 'sbc_rnf : runoff '282 WRITE(numout,*) '~~~~~~~ '281 WRITE(numout,*) 'sbc_rnf_init : runoff ' 282 WRITE(numout,*) '~~~~~~~~~~~~ ' 283 283 WRITE(numout,*) ' Namelist namsbc_rnf' 284 284 WRITE(numout,*) ' specific river mouths treatment ln_rnf_mouth = ', ln_rnf_mouth … … 296 296 IF(lwp) WRITE(numout,*) ' runoffs inflow read in a file' 297 297 IF( ierror > 0 ) THEN 298 CALL ctl_stop( 'sbc_rnf : unable to allocate sf_rnf structure' ) ; RETURN298 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_rnf structure' ) ; RETURN 299 299 ENDIF 300 300 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj,1) ) 301 301 IF( sn_rnf%ln_tint ) ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,1,2) ) 302 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' )302 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf', no_print ) 303 303 ENDIF 304 304 ! … … 312 312 ALLOCATE( sf_t_rnf(1)%fnow(jpi,jpj,1) ) 313 313 IF( sn_t_rnf%ln_tint ) ALLOCATE( sf_t_rnf(1)%fdta(jpi,jpj,1,2) ) 314 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' )314 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf', no_print ) 315 315 ENDIF 316 316 ! … … 324 324 ALLOCATE( sf_s_rnf(1)%fnow(jpi,jpj,1) ) 325 325 IF( sn_s_rnf%ln_tint ) ALLOCATE( sf_s_rnf(1)%fdta(jpi,jpj,1,2) ) 326 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' )326 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf', no_print ) 327 327 ENDIF 328 328 ! … … 452 452 DO WHILE( nkrnf /= jpkm1 .AND. gdepw_1d(nkrnf+1) < rn_hrnf ) ; nkrnf = nkrnf + 1 453 453 END DO 454 IF( ln_sco ) CALL ctl_warn( 'sbc_rnf : number of levels over which Kz is increased is computed for zco...' )454 IF( ln_sco ) CALL ctl_warn( 'sbc_rnf_init: number of levels over which Kz is increased is computed for zco...' ) 455 455 ENDIF 456 456 IF(lwp) WRITE(numout,*) … … 499 499 ! 500 500 IF(lwp) WRITE(numout,*) 501 IF(lwp) WRITE(numout,*) ' rnf_mouth : river mouth mask'502 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~ '501 IF(lwp) WRITE(numout,*) ' rnf_mouth : river mouth mask' 502 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~ ' 503 503 ! 504 504 cl_rnfile = TRIM( cn_dir )//TRIM( sn_cnf%clname ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r7278 r7280 88 88 ! ! ----------------------------------------------- ! 89 89 IF(lwp) WRITE(numout,*) 90 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields initialised to instantaneous values' 90 IF(lwp) WRITE(numout,*) 'sbc_ssm : mean fields initialised to instantaneous values' 91 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 91 92 zcoef = REAL( nn_fsbc - 1, wp ) 92 93 ssu_m(:,:) = zcoef * ub(:,:,1) … … 194 195 ! 195 196 IF(lwp) WRITE(numout,*) 196 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values'197 IF(lwp) WRITE(numout,*) '~~~~~~~ '197 IF(lwp) WRITE(numout,*) 'sbc_ssm_init : sea surface mean fields, nn_fsbc=1 : instantaneous values' 198 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 198 199 ! 199 200 ELSE 200 201 ! 201 202 IF(lwp) WRITE(numout,*) 202 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields'203 IF(lwp) WRITE(numout,*) '~~~~~~~ '203 IF(lwp) WRITE(numout,*) 'sbc_ssm_init : sea surface mean fields' 204 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ ' 204 205 ! 205 206 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN … … 220 221 ! 221 222 IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN ! nn_fsbc has changed between 2 runs 222 IF(lwp) WRITE(numout,*) '~~~~~~~ restart with a change in the frequency of mean ', & 223 & 'from ', zf_sbc, ' to ', nn_fsbc 223 IF(lwp) WRITE(numout,*) ' restart with a change in the frequency of mean from ', zf_sbc, ' to ', nn_fsbc 224 224 zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 225 225 ssu_m(:,:) = zcoef * ssu_m(:,:) … … 231 231 frq_m(:,:) = zcoef * frq_m(:,:) 232 232 ELSE 233 IF(lwp) WRITE(numout,*) ' ~~~~~~~mean fields read in the ocean restart file'233 IF(lwp) WRITE(numout,*) ' mean fields read in the ocean restart file' 234 234 ENDIF 235 235 ENDIF … … 238 238 IF( .NOT. l_ssm_mean ) THEN ! default initialisation. needed by lim_istate 239 239 ! 240 IF(lwp) WRITE(numout,*) ' default initialisation of ss?_m arrays'240 IF(lwp) WRITE(numout,*) ' default initialisation of ss._m arrays' 241 241 ssu_m(:,:) = ub(:,:,1) 242 242 ssv_m(:,:) = vb(:,:,1) 243 243 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 244 ELSE 244 ELSE ; sst_m(:,:) = tsn(:,:,1,jp_tem) 245 245 ENDIF 246 246 sss_m(:,:) = tsn (:,:,1,jp_sal) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90
r6140 r7280 199 199 ! 200 200 ! fill sf_sst with sn_sst and control print 201 CALL fld_fill( sf_sst, (/ sn_sst /), cn_dir, 'sbc_ssr', 'SST restoring term toward SST data', 'namsbc_ssr' )201 CALL fld_fill( sf_sst, (/ sn_sst /), cn_dir, 'sbc_ssr', 'SST restoring term toward SST data', 'namsbc_ssr', no_print ) 202 202 IF( sf_sst(1)%ln_tint ) ALLOCATE( sf_sst(1)%fdta(jpi,jpj,1,2), STAT=ierror ) 203 203 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_ssr: unable to allocate sf_sst data array' ) … … 213 213 ! 214 214 ! fill sf_sss with sn_sss and control print 215 CALL fld_fill( sf_sss, (/ sn_sss /), cn_dir, 'sbc_ssr', 'SSS restoring term toward SSS data', 'namsbc_ssr' )215 CALL fld_fill( sf_sss, (/ sn_sss /), cn_dir, 'sbc_ssr', 'SSS restoring term toward SSS data', 'namsbc_ssr', no_print ) 216 216 IF( sf_sss(1)%ln_tint ) ALLOCATE( sf_sss(1)%fdta(jpi,jpj,1,2), STAT=ierror ) 217 217 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_ssr: unable to allocate sf_sss data array' ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r6140 r7280 25 25 PRIVATE 26 26 27 PUBLIC sbc_wave ! routine called in sbc_blk _core or sbc_blk_mfs27 PUBLIC sbc_wave ! routine called in sbc_blk 28 28 29 29 INTEGER , PARAMETER :: jpfld = 3 ! maximum number of files to read for srokes drift … … 94 94 IF( .NOT.( ln_cdgw .OR. ln_sdw ) ) & 95 95 & CALL ctl_warn( 'ln_sbcwave=T but nor drag coefficient (ln_cdgw=F) neither stokes drift activated (ln_sdw=F)' ) 96 IF( ln_cdgw .AND. .NOT. (ln_blk_mfs .OR. ln_blk_core)) &97 & CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core')96 IF( ln_cdgw .AND. .NOT.ln_blk ) & 97 & CALL ctl_stop( 'drag coefficient read from wave model definable only with bulk formulae') 98 98 ! 99 99 IF( ln_cdgw ) THEN -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r6140 r7280 255 255 WRITE(numout,*) 256 256 SELECT CASE ( nadv ) 257 CASE( np_NO_adv ) ; WRITE(numout,*) ' NO T-S advection'258 CASE( np_CEN ) ; WRITE(numout,*) ' CEN scheme is used. Horizontal order: ', nn_cen_h, &257 CASE( np_NO_adv ) ; WRITE(numout,*) ' ===>> NO T-S advection' 258 CASE( np_CEN ) ; WRITE(numout,*) ' ===>> CEN scheme is used. Horizontal order: ', nn_cen_h, & 259 259 & ' Vertical order: ', nn_cen_v 260 CASE( np_FCT ) ; WRITE(numout,*) ' FCT scheme is used. Horizontal order: ', nn_fct_h, &260 CASE( np_FCT ) ; WRITE(numout,*) ' ===>> FCT scheme is used. Horizontal order: ', nn_fct_h, & 261 261 & ' Vertical order: ', nn_fct_v 262 CASE( np_FCT_zts ) ; WRITE(numout,*) ' use 2nd order FCT with ', nn_fct_zts,'vertical sub-timestepping'263 CASE( np_MUS ) ; WRITE(numout,*) ' MUSCL scheme is used'264 CASE( np_UBS ) ; WRITE(numout,*) ' UBS scheme is used'265 CASE( np_QCK ) ; WRITE(numout,*) ' QUICKEST scheme is used'262 CASE( np_FCT_zts ) ; WRITE(numout,*) ' ===>> use 2nd order FCT with ', nn_fct_zts,'vertical sub-timestepping' 263 CASE( np_MUS ) ; WRITE(numout,*) ' ===>> MUSCL scheme is used' 264 CASE( np_UBS ) ; WRITE(numout,*) ' ===>> UBS scheme is used' 265 CASE( np_QCK ) ; WRITE(numout,*) ' ===>> QUICKEST scheme is used' 266 266 END SELECT 267 267 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90
r7277 r7280 308 308 WRITE(numout,*) 309 309 IF( ln_mle ) THEN 310 WRITE(numout,*) ' Mixed Layer Eddy induced transport added to tracer advection'311 IF( nn_mle == 0 ) WRITE(numout,*) ' Fox-Kemper et al 2010 formulation'312 IF( nn_mle == 1 ) WRITE(numout,*) ' New formulation'310 WRITE(numout,*) ' ===>> Mixed Layer Eddy induced transport added to tracer advection' 311 IF( nn_mle == 0 ) WRITE(numout,*) ' Fox-Kemper et al 2010 formulation' 312 IF( nn_mle == 1 ) WRITE(numout,*) ' New formulation' 313 313 ELSE 314 WRITE(numout,*) ' Mixed Layer Eddy parametrisation NOT used'314 WRITE(numout,*) ' ===>> Mixed Layer Eddy parametrisation NOT used' 315 315 ENDIF 316 316 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90
r6140 r7280 176 176 ! fill sf_chl with sn_chl and control print 177 177 CALL fld_fill( sf_qgh, (/ sn_qgh /), cn_dir, 'tra_bbc_init', & 178 & 'bottom temperature boundary condition', 'nambbc' )178 & 'bottom temperature boundary condition', 'nambbc', no_print ) 179 179 180 180 CALL fld_read( nit000, 1, sf_qgh ) ! Read qgh data -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
r7277 r7280 519 519 WRITE(numout,*) 'tra_bbl_init : bottom boundary layer initialisation' 520 520 WRITE(numout,*) '~~~~~~~~~~~~' 521 WRITE(numout,*) ' 522 WRITE(numout,*) ' 523 WRITE(numout,*) ' 524 WRITE(numout,*) ' 525 WRITE(numout,*) ' 521 WRITE(numout,*) ' Namelist nambbl : set bbl parameters' 522 WRITE(numout,*) ' diffusive bbl (=1) or not (=0) nn_bbl_ldf = ', nn_bbl_ldf 523 WRITE(numout,*) ' advective bbl (=1/2) or not (=0) nn_bbl_adv = ', nn_bbl_adv 524 WRITE(numout,*) ' diffusive bbl coefficient rn_ahtbbl = ', rn_ahtbbl, ' m2/s' 525 WRITE(numout,*) ' advective bbl coefficient rn_gambbl = ', rn_gambbl, ' s' 526 526 ENDIF 527 527 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90
r6140 r7280 192 192 WRITE(numout,*) 193 193 WRITE(numout,*) 'tra_dmp_init : T and S newtonian relaxation' 194 WRITE(numout,*) '~~~~~~~~~~~ '194 WRITE(numout,*) '~~~~~~~~~~~~' 195 195 WRITE(numout,*) ' Namelist namtra_dmp : set relaxation parameters' 196 196 WRITE(numout,*) ' Apply relaxation or not ln_tradmp = ', ln_tradmp -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
r6352 r7280 110 110 WRITE(numout,*) 111 111 WRITE(numout,*) 'tra_ldf_init : lateral tracer diffusive operator' 112 WRITE(numout,*) '~~~~~~~~~~~ '112 WRITE(numout,*) '~~~~~~~~~~~~' 113 113 WRITE(numout,*) ' Namelist namtra_ldf: already read in ldftra module' 114 114 WRITE(numout,*) ' see ldf_tra_init report for lateral mixing parameters' 115 WRITE(numout,*)116 115 ENDIF 117 116 ! ! use of lateral operator or not … … 187 186 WRITE(numout,*) 188 187 SELECT CASE( nldf ) 189 CASE( np_no_ldf ) ; WRITE(numout,*) ' NO lateral diffusion'190 CASE( np_lap ) ; WRITE(numout,*) ' laplacian iso-level operator'191 CASE( np_lap_i ) ; WRITE(numout,*) ' Rotated laplacian operator (standard)'192 CASE( np_lap_it ) ; WRITE(numout,*) ' Rotated laplacian operator (triad)'193 CASE( np_blp ) ; WRITE(numout,*) ' bilaplacian iso-level operator'194 CASE( np_blp_i ) ; WRITE(numout,*) ' Rotated bilaplacian operator (standard)'195 CASE( np_blp_it ) ; WRITE(numout,*) ' Rotated bilaplacian operator (triad)'188 CASE( np_no_ldf ) ; WRITE(numout,*) ' ===>> NO lateral diffusion' 189 CASE( np_lap ) ; WRITE(numout,*) ' ===>> laplacian iso-level operator' 190 CASE( np_lap_i ) ; WRITE(numout,*) ' ===>> Rotated laplacian operator (standard)' 191 CASE( np_lap_it ) ; WRITE(numout,*) ' ===>> Rotated laplacian operator (triad)' 192 CASE( np_blp ) ; WRITE(numout,*) ' ===>> bilaplacian iso-level operator' 193 CASE( np_blp_i ) ; WRITE(numout,*) ' ===>> Rotated bilaplacian operator (standard)' 194 CASE( np_blp_it ) ; WRITE(numout,*) ' ===>> Rotated bilaplacian operator (triad)' 196 195 END SELECT 197 196 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r6403 r7280 406 406 ! ! fill sf_chl with sn_chl and control print 407 407 CALL fld_fill( sf_chl, (/ sn_chl /), cn_dir, 'tra_qsr_init', & 408 & 'Solar penetration function of read chlorophyll', 'namtra_qsr' )408 & 'Solar penetration function of read chlorophyll', 'namtra_qsr' , no_print ) 409 409 ENDIF 410 410 IF( nqsr == np_RGB ) THEN ! constant Chl -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90
r6140 r7280 141 141 WRITE(numout,*) 'tra_zdf_init : vertical tracer physics scheme' 142 142 WRITE(numout,*) '~~~~~~~~~~~' 143 IF( nzdf == 0 ) WRITE(numout,*) ' 144 IF( nzdf == 1 ) WRITE(numout,*) ' 143 IF( nzdf == 0 ) WRITE(numout,*) ' ===>> Explicit time-splitting scheme' 144 IF( nzdf == 1 ) WRITE(numout,*) ' ===>> Implicit (euler backward) scheme' 145 145 ENDIF 146 146 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90
r6140 r7280 57 57 IF(lwp) THEN ! control print 58 58 WRITE(numout,*) 59 WRITE(numout,*) ' 60 WRITE(numout,*) ' ~~~~~~~~~~'59 WRITE(numout,*) 'trd_init : Momentum/Tracers trends' 60 WRITE(numout,*) '~~~~~~~~' 61 61 WRITE(numout,*) ' Namelist namtrd : set trends parameters' 62 62 WRITE(numout,*) ' global domain averaged dyn & tra trends ln_glo_trd = ', ln_glo_trd -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r6140 r7280 99 99 ! 100 100 IF( nn_timing == 1 ) CALL timing_start('zdf_bfr') 101 !102 IF( kt == nit000 .AND. lwp ) THEN103 WRITE(numout,*)104 WRITE(numout,*) 'zdf_bfr : Set bottom friction coefficient (non-linear case)'105 WRITE(numout,*) '~~~~~~~~'106 ENDIF107 101 ! 108 102 IF( nn_bfr == 2 ) THEN ! quadratic bottom friction only … … 259 253 IF(lwp) WRITE(numout,*) 260 254 IF(lwp) WRITE(numout,*) 'zdf_bfr_init : momentum bottom friction' 261 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ ~'255 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 262 256 IF(lwp) WRITE(numout,*) ' Namelist nam_bfr : set bottom friction parameters' 263 257 ! … … 266 260 CASE( 0 ) 267 261 IF(lwp) WRITE(numout,*) ' free-slip ' 268 bfrua(:,:) = 0. e0269 bfrva(:,:) = 0. e0270 tfrua(:,:) = 0. e0271 tfrva(:,:) = 0. e0262 bfrua(:,:) = 0._wp 263 bfrva(:,:) = 0._wp 264 tfrua(:,:) = 0._wp 265 tfrva(:,:) = 0._wp 272 266 ! 273 267 CASE( 1 ) … … 321 315 IF(lwp) WRITE(numout,*) ' log formulation ln_bfr2d = ', ln_loglayer 322 316 IF(lwp) WRITE(numout,*) ' bottom roughness rn_bfrz0 [m] = ', rn_bfrz0 323 IF( rn_bfrz0 <=0.e0) THEN317 IF( rn_bfrz0 <= 0._wp ) THEN 324 318 WRITE(ctmp1,*) ' bottom roughness must be strictly positive' 325 319 CALL ctl_stop( ctmp1 ) … … 336 330 IF(lwp) WRITE(numout,*) ' log formulation ln_tfr2d = ', ln_loglayer 337 331 IF(lwp) WRITE(numout,*) ' top roughness rn_tfrz0 [m] = ', rn_tfrz0 338 IF( rn_tfrz0 <=0.e0) THEN332 IF( rn_tfrz0 <= 0._wp ) THEN 339 333 WRITE(ctmp1,*) ' top roughness must be strictly positive' 340 334 CALL ctl_stop( ctmp1 ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r5836 r7280 66 66 IF(lwp) THEN !* Parameter print 67 67 WRITE(numout,*) 68 WRITE(numout,*) 'zdf_init : vertical physics'68 WRITE(numout,*) 'zdf_init : vertical physics' 69 69 WRITE(numout,*) '~~~~~~~~' 70 70 WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r7277 r7280 560 560 IF(lwp) THEN ! control print 561 561 WRITE(numout,*) 562 WRITE(numout,*) 'namcfg 563 WRITE(numout,*) '~~~~~~ ~'562 WRITE(numout,*) 'namcfg : configuration initialization through namelist read' 563 WRITE(numout,*) '~~~~~~ ' 564 564 WRITE(numout,*) ' Namelist namcfg' 565 565 WRITE(numout,*) ' read domain configuration file ln_read_cfg = ', ln_read_cfg -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90
r6140 r7280 110 110 IF(lwp) THEN 111 111 WRITE(numout,*) 112 WRITE(numout,*) ' trc_oce_rgb : Initialisation of the optical look-up table'113 WRITE(numout,*) ' ~~~~~~~~~~~ '112 WRITE(numout,*) ' trc_oce_rgb : Initialisation of the optical look-up table' 113 WRITE(numout,*) ' ~~~~~~~~~~~ ' 114 114 ENDIF 115 115 !
Note: See TracChangeset
for help on using the changeset viewer.