Changeset 14021
- Timestamp:
- 2020-12-02T20:53:00+01:00 (3 months ago)
- Location:
- NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice
- Files:
-
- 50 added
- 63 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_cfg
r13558 r14021 90 90 ! ! =2 annual global mean of e-p-r set to zero 91 91 ln_wave = .false. ! Activate coupling with wave (T => fill namsbc_wave) 92 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => ln_wave=.true. & fill namsbc_wave)93 ln_sdw = .false. ! Read 2D Surf Stokes Drift & Computation of 3D stokes drift (T => ln_wave=.true. & fill namsbc_wave)94 nn_sdrift = 0 ! Parameterization for the calculation of 3D-Stokes drift from the surface Stokes drift95 ! ! = 0 Breivik 2015 parameterization: v_z=v_0*[exp(2*k*z)/(1-8*k*z)]96 ! ! = 1 Phillips: v_z=v_o*[exp(2*k*z)-beta*sqrt(-2*k*pi*z)*erfc(sqrt(-2*k*z))]97 ! ! = 2 Phillips as (1) but using the wave frequency from a wave model98 ln_tauwoc = .false. ! Activate ocean stress modified by external wave induced stress (T => ln_wave=.true. & fill namsbc_wave)99 ln_tauw = .false. ! Activate ocean stress components from wave model100 ln_stcor = .false. ! Activate Stokes Coriolis term (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave)101 92 / 102 93 !----------------------------------------------------------------------- … … 167 158 &namsbc_wave ! External fields from wave model (ln_wave=T) 168 159 !----------------------------------------------------------------------- 160 ln_sdw = .false. ! get the 2D Surf Stokes Drift & Compute the 3D stokes drift 161 ln_stcor = .false. ! add Stokes Coriolis and tracer advection terms 162 ln_cdgw = .false. ! Neutral drag coefficient read from wave model 163 ln_tauoc = .false. ! ocean stress is modified by wave induced stress 164 ln_wave_test= .false. ! Test case with constant wave fields 165 ! 166 ln_charn = .false. ! Charnock coefficient read from wave model (IFS only) 167 ln_taw = .false. ! ocean stress is modified by wave induced stress (coupled mode) 168 ln_phioc = .false. ! TKE flux from wave model 169 ln_bern_srfc= .false. ! wave induced pressure. Bernoulli head J term 170 ln_breivikFV_2016 = .false. ! breivik 2016 vertical stokes profile 171 ln_vortex_force = .false. 172 ! 173 cn_dir = './' ! root directory for the waves data location 174 !___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________! 175 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights filename ! rotation ! land/sea mask ! 176 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! ! pairing ! filename ! 177 sn_cdg = 'sdw_ecwaves_orca2' , 6. , 'drag_coeff' , .true. , .true. , 'yearly' , '' , '' , '' 178 sn_usd = 'sdw_ecwaves_orca2' , 6. , 'u_sd2d' , .true. , .true. , 'yearly' , '' , '' , '' 179 sn_vsd = 'sdw_ecwaves_orca2' , 6. , 'v_sd2d' , .true. , .true. , 'yearly' , '' , '' , '' 180 sn_hsw = 'sdw_ecwaves_orca2' , 6. , 'hs' , .true. , .true. , 'yearly' , '' , '' , '' 181 sn_wmp = 'sdw_ecwaves_orca2' , 6. , 'wmp' , .true. , .true. , 'yearly' , '' , '' , '' 182 sn_wnum = 'sdw_ecwaves_orca2' , 6. , 'wave_num' , .true. , .true. , 'yearly' , '' , '' , '' 169 183 / 170 184 !----------------------------------------------------------------------- … … 378 392 ! = 2 add a tke source just at the base of the ML 379 393 ! = 3 as = 1 applied on HF part of the stress (ln_cpl=T) 394 ln_mxhsw = .false. ! surface mixing length scale = F(wave height) 380 395 / 381 396 !----------------------------------------------------------------------- -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/axis_def_nemo.xml
r12377 r14021 1 1 <!-- 2 ============================================================================================================3 = Axis definition = = DO NOT CHANGE =4 ============================================================================================================5 2 ============================================================================================================ 3 = Axis definition = = DO NOT CHANGE = 4 ============================================================================================================ 5 --> 6 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 7 <axis_definition> 8 <axis id="deptht" long_name="Vertical T levels" unit="m" positive="down" /> 9 <!-- Vertical zoom for a 31-levels ORCA2 grid for eORCA1 300m corresponds to n=35 --> 10 <axis id="deptht300" axis_ref="deptht" > 11 <zoom_axis begin="0" n="19" /> 12 </axis> 13 <axis id="depthu" long_name="Vertical U levels" unit="m" positive="down" /> 14 <axis id="depthv" long_name="Vertical V levels" unit="m" positive="down" /> 15 <axis id="depthw" long_name="Vertical W levels" unit="m" positive="down" /> 16 <axis id="nfloat" long_name="Float number" unit="-" /> 17 <axis id="icbcla" long_name="Iceberg class" unit="1" /> 18 <axis id="ncatice" long_name="Ice category" unit="1" /> 19 <axis id="iax_20C" long_name="20 degC isotherm" unit="degC" /> 20 <axis id="iax_26C" long_name="26 degC isotherm" unit="degC" /> 21 <axis id="iax_28C" long_name="28 degC isotherm" unit="degC" /> 22 <axis id="basin" long_name="Sub-basin mask (1=Global 2=Atlantic 3=Indo-Pacific 4=Indian, 5=Pacific)" unit="1" /> 23 <axis id="nstrait" long_name="Number of straits" unit="1" /> 24 <!-- ABL vertical axis definition --> 25 <axis id="ght_abl" long_name="ABL Vertical T levels" unit="m" positive="up" /> 26 <axis id="ghw_abl" long_name="ABL Vertical W levels" unit="m" positive="up" /> 27 <axis id="section" n_glo="16" /> 28 <axis id="section_ice" n_glo="4" /> 29 <axis id="gau" /> 30 </axis_definition> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/domain_def_nemo.xml
r12276 r14021 1 1 2 2 <domain_definition> 3 3 4 <!-- T grid --> 5 <domain id="grid_T" long_name="grid T"/> 6 7 <!-- My zoom: example of hand defined zoom --> 8 <domain id="myzoomT" domain_ref="grid_T" > 9 <zoom_domain ibegin="1" jbegin="1" ni="2" nj="3"/> 10 </domain> 4 <!-- T grid --> 5 <domain id="grid_T" long_name="grid T"/> 11 6 12 <domain id="1point" domain_ref="grid_T" > 13 <zoom_domain ibegin="139" jbegin="119" ni="1" nj="1"/> 14 </domain> 7 <!-- My zoom: example of hand defined zoom --> 8 <domain id="myzoomT" domain_ref="grid_T" > 9 <zoom_domain ibegin="1" jbegin="1" ni="2" nj="3"/> 10 </domain> 11 12 <domain id="1point" domain_ref="grid_T" > 13 <zoom_domain ibegin="139" jbegin="119" ni="1" nj="1"/> 14 </domain> 15 15 16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 17 <!-- Eq section --> 18 <domain id="EqT" domain_ref="grid_T" > <zoom_domain id="EqT"/> </domain> 19 <!-- TAO : see example above --> 20 <!-- 137e --> 21 <domain id="2n137eT" domain_ref="grid_T" > <zoom_domain id="2n137eT"/> </domain> 22 <domain id="5n137eT" domain_ref="grid_T" > <zoom_domain id="5n137eT"/> </domain> 23 <domain id="8n137eT" domain_ref="grid_T" > <zoom_domain id="8n137eT"/> </domain> 24 <!-- <\!-- 147e -\-> --> 25 <domain id="0n147eT" domain_ref="grid_T" > <zoom_domain id="0n147eT"/> </domain> 26 <domain id="2n147eT" domain_ref="grid_T" > <zoom_domain id="2n147eT"/> </domain> 27 <domain id="5n147eT" domain_ref="grid_T" > <zoom_domain id="5n147eT"/> </domain> 28 <!-- <\!-- 156e -\-> --> 29 <domain id="5s156eT" domain_ref="grid_T" > <zoom_domain id="5s156eT"/> </domain> 30 <domain id="2s156eT" domain_ref="grid_T" > <zoom_domain id="2s156eT"/> </domain> 31 <domain id="0n156eT" domain_ref="grid_T" > <zoom_domain id="0n156eT"/> </domain> 32 <domain id="2n156eT" domain_ref="grid_T" > <zoom_domain id="2n156eT"/> </domain> 33 <domain id="5n156eT" domain_ref="grid_T" > <zoom_domain id="5n156eT"/> </domain> 34 <domain id="8n156eT" domain_ref="grid_T" > <zoom_domain id="8n156eT"/> </domain> 35 <!-- <\!-- 165e -\-> --> 36 <domain id="8s165eT" domain_ref="grid_T" > <zoom_domain id="8s165eT"/> </domain> 37 <domain id="5s165eT" domain_ref="grid_T" > <zoom_domain id="5s165eT"/> </domain> 38 <domain id="2s165eT" domain_ref="grid_T" > <zoom_domain id="2s165eT"/> </domain> 39 <domain id="0n165eT" domain_ref="grid_T" > <zoom_domain id="0n165eT"/> </domain> 40 <domain id="2n165eT" domain_ref="grid_T" > <zoom_domain id="2n165eT"/> </domain> 41 <domain id="5n165eT" domain_ref="grid_T" > <zoom_domain id="5n165eT"/> </domain> 42 <domain id="8n165eT" domain_ref="grid_T" > <zoom_domain id="8n165eT"/> </domain> 43 <!-- <\!-- 180w -\-> --> 44 <domain id="8s180wT" domain_ref="grid_T" > <zoom_domain id="8s180wT"/> </domain> 45 <domain id="5s180wT" domain_ref="grid_T" > <zoom_domain id="5s180wT"/> </domain> 46 <domain id="2s180wT" domain_ref="grid_T" > <zoom_domain id="2s180wT"/> </domain> 47 <domain id="0n180wT" domain_ref="grid_T" > <zoom_domain id="0n180wT"/> </domain> 48 <domain id="2n180wT" domain_ref="grid_T" > <zoom_domain id="2n180wT"/> </domain> 49 <domain id="5n180wT" domain_ref="grid_T" > <zoom_domain id="5n180wT"/> </domain> 50 <domain id="8n180wT" domain_ref="grid_T" > <zoom_domain id="8n180wT"/> </domain> 51 <!-- <\!-- 170w -\-> --> 52 <domain id="8s170wT" domain_ref="grid_T" > <zoom_domain id="8s170wT"/> </domain> 53 <domain id="5s170wT" domain_ref="grid_T" > <zoom_domain id="5s170wT"/> </domain> 54 <domain id="2s170wT" domain_ref="grid_T" > <zoom_domain id="2s170wT"/> </domain> 55 <domain id="0n170wT" domain_ref="grid_T" > <zoom_domain id="0n170wT"/> </domain> 56 <domain id="2n170wT" domain_ref="grid_T" > <zoom_domain id="2n170wT"/> </domain> 57 <domain id="5n170wT" domain_ref="grid_T" > <zoom_domain id="5n170wT"/> </domain> 58 <domain id="8n170wT" domain_ref="grid_T" > <zoom_domain id="8n170wT"/> </domain> 59 <!-- <\!-- 155w -\-> --> 60 <domain id="8s155wT" domain_ref="grid_T" > <zoom_domain id="8s155wT"/> </domain> 61 <domain id="5s155wT" domain_ref="grid_T" > <zoom_domain id="5s155wT"/> </domain> 62 <domain id="2s155wT" domain_ref="grid_T" > <zoom_domain id="2s155wT"/> </domain> 63 <domain id="0n155wT" domain_ref="grid_T" > <zoom_domain id="0n155wT"/> </domain> 64 <domain id="2n155wT" domain_ref="grid_T" > <zoom_domain id="2n155wT"/> </domain> 65 <domain id="5n155wT" domain_ref="grid_T" > <zoom_domain id="5n155wT"/> </domain> 66 <domain id="8n155wT" domain_ref="grid_T" > <zoom_domain id="8n155wT"/> </domain> 67 <!-- <\!-- 140w -\-> --> 68 <domain id="8s140wT" domain_ref="grid_T" > <zoom_domain id="8s140wT"/> </domain> 69 <domain id="5s140wT" domain_ref="grid_T" > <zoom_domain id="5s140wT"/> </domain> 70 <domain id="2s140wT" domain_ref="grid_T" > <zoom_domain id="2s140wT"/> </domain> 71 <domain id="0n140wT" domain_ref="grid_T" > <zoom_domain id="0n140wT"/> </domain> 72 <domain id="2n140wT" domain_ref="grid_T" > <zoom_domain id="2n140wT"/> </domain> 73 <domain id="5n140wT" domain_ref="grid_T" > <zoom_domain id="5n140wT"/> </domain> 74 <domain id="8n140wT" domain_ref="grid_T" > <zoom_domain id="8n140wT"/> </domain> 75 <!-- <\!-- 125w -\-> --> 76 <domain id="8s125wT" domain_ref="grid_T" > <zoom_domain id="8s125wT"/> </domain> 77 <domain id="5s125wT" domain_ref="grid_T" > <zoom_domain id="5s125wT"/> </domain> 78 <domain id="2s125wT" domain_ref="grid_T" > <zoom_domain id="2s125wT"/> </domain> 79 <domain id="0n125wT" domain_ref="grid_T" > <zoom_domain id="0n125wT"/> </domain> 80 <domain id="2n125wT" domain_ref="grid_T" > <zoom_domain id="2n125wT"/> </domain> 81 <domain id="5n125wT" domain_ref="grid_T" > <zoom_domain id="5n125wT"/> </domain> 82 <domain id="8n125wT" domain_ref="grid_T" > <zoom_domain id="8n125wT"/> </domain> 83 <!-- <\!-- 110w -\-> --> 84 <domain id="8s110wT" domain_ref="grid_T" > <zoom_domain id="8s110wT"/> </domain> 85 <domain id="5s110wT" domain_ref="grid_T" > <zoom_domain id="5s110wT"/> </domain> 86 <domain id="2s110wT" domain_ref="grid_T" > <zoom_domain id="2s110wT"/> </domain> 87 <domain id="0n110wT" domain_ref="grid_T" > <zoom_domain id="0n110wT"/> </domain> 88 <domain id="2n110wT" domain_ref="grid_T" > <zoom_domain id="2n110wT"/> </domain> 89 <domain id="5n110wT" domain_ref="grid_T" > <zoom_domain id="5n110wT"/> </domain> 90 <domain id="8n110wT" domain_ref="grid_T" > <zoom_domain id="8n110wT"/> </domain> 91 <!-- <\!-- 95w -\-> --> 92 <domain id="8s95wT" domain_ref="grid_T" > <zoom_domain id="8s95wT"/> </domain> 93 <domain id="5s95wT" domain_ref="grid_T" > <zoom_domain id="5s95wT"/> </domain> 94 <domain id="2s95wT" domain_ref="grid_T" > <zoom_domain id="2s95wT"/> </domain> 95 <domain id="0n95wT" domain_ref="grid_T" > <zoom_domain id="0n95wT"/> </domain> 96 <domain id="2n95wT" domain_ref="grid_T" > <zoom_domain id="2n95wT"/> </domain> 97 <domain id="5n95wT" domain_ref="grid_T" > <zoom_domain id="5n95wT"/> </domain> 98 <domain id="8n95wT" domain_ref="grid_T" > <zoom_domain id="8n95wT"/> </domain> 99 <!-- <\!-- RAMA -\-> --> 100 <!-- <\!-- 55e -\-> --> 101 <domain id="16s55eT" domain_ref="grid_T" > <zoom_domain id="16s55eT" /> </domain> 102 <domain id="12s55eT" domain_ref="grid_T" > <zoom_domain id="12s55eT" /> </domain> 103 <domain id="8s55eT" domain_ref="grid_T" > <zoom_domain id="8s55eT" /> </domain> 104 <domain id="4s55eT" domain_ref="grid_T" > <zoom_domain id="4s55eT" /> </domain> 105 <domain id="1.5s55eT" domain_ref="grid_T" > <zoom_domain id="1.5s55eT" /> </domain> 106 <domain id="0n55eT" domain_ref="grid_T" > <zoom_domain id="0n55eT" /> </domain> 107 <domain id="1.5n55eT" domain_ref="grid_T" > <zoom_domain id="1.5n55eT" /> </domain> 108 <domain id="4n55eT" domain_ref="grid_T" > <zoom_domain id="4n55eT" /> </domain> 109 <!-- <\!-- 65e -\-> --> 110 <domain id="15n65eT" domain_ref="grid_T" > <zoom_domain id="15n65eT" /> </domain> 111 <!-- <\!-- 67e -\-> --> 112 <domain id="16s67eT" domain_ref="grid_T" > <zoom_domain id="16s67eT" /> </domain> 113 <domain id="12s67eT" domain_ref="grid_T" > <zoom_domain id="12s67eT" /> </domain> 114 <domain id="8s67eT" domain_ref="grid_T" > <zoom_domain id="8s67eT" /> </domain> 115 <domain id="4s67eT" domain_ref="grid_T" > <zoom_domain id="4s67eT" /> </domain> 116 <domain id="1.5s67eT" domain_ref="grid_T" > <zoom_domain id="1.5s67eT" /> </domain> 117 <domain id="0n67eT" domain_ref="grid_T" > <zoom_domain id="0n67eT" /> </domain> 118 <domain id="1.5n67eT" domain_ref="grid_T" > <zoom_domain id="1.5n67eT" /> </domain> 119 <domain id="4n67eT" domain_ref="grid_T" > <zoom_domain id="4n67eT" /> </domain> 120 <domain id="8n67eT" domain_ref="grid_T" > <zoom_domain id="8n67eT" /> </domain> 121 <!-- <\!-- 80.5e -\-> --> 122 <domain id="16s80.5eT" domain_ref="grid_T" > <zoom_domain id="16s80.5eT" /> </domain> 123 <domain id="12s80.5eT" domain_ref="grid_T" > <zoom_domain id="12s80.5eT" /> </domain> 124 <domain id="8s80.5eT" domain_ref="grid_T" > <zoom_domain id="8s80.5eT" /> </domain> 125 <domain id="4s80.5eT" domain_ref="grid_T" > <zoom_domain id="4s80.5eT" /> </domain> 126 <domain id="1.5s80.5eT" domain_ref="grid_T" > <zoom_domain id="1.5s80.5eT"/> </domain> 127 <domain id="0n80.5eT" domain_ref="grid_T" > <zoom_domain id="0n80.5eT" /> </domain> 128 <domain id="1.5n80.5eT" domain_ref="grid_T" > <zoom_domain id="1.5n80.5eT"/> </domain> 129 <domain id="4n80.5eT" domain_ref="grid_T" > <zoom_domain id="4n80.5eT" /> </domain> 130 <!-- <\!-- 90e -\-> --> 131 <domain id="1.5s90eT" domain_ref="grid_T" > <zoom_domain id="1.5s90eT" /> </domain> 132 <domain id="0n90eT" domain_ref="grid_T" > <zoom_domain id="0n90eT" /> </domain> 133 <domain id="1.5n90eT" domain_ref="grid_T" > <zoom_domain id="1.5n90eT" /> </domain> 134 <domain id="4n90eT" domain_ref="grid_T" > <zoom_domain id="4n90eT" /> </domain> 135 <domain id="8n90eT" domain_ref="grid_T" > <zoom_domain id="8n90eT" /> </domain> 136 <domain id="12n90eT" domain_ref="grid_T" > <zoom_domain id="12n90eT" /> </domain> 137 <domain id="15n90eT" domain_ref="grid_T" > <zoom_domain id="15n90eT" /> </domain> 138 <!-- <\!-- 95e -\-> --> 139 <domain id="16s95eT" domain_ref="grid_T" > <zoom_domain id="16s95eT" /> </domain> 140 <domain id="12s95eT" domain_ref="grid_T" > <zoom_domain id="12s95eT" /> </domain> 141 <domain id="8s95eT" domain_ref="grid_T" > <zoom_domain id="8s95eT" /> </domain> 142 <domain id="5s95eT" domain_ref="grid_T" > <zoom_domain id="5s95eT" /> </domain> 143 <!-- <\!-- PIRATA -\-> --> 144 <!-- <\!-- 38w-30w -\-> --> 145 <domain id="19s34wT" domain_ref="grid_T" > <zoom_domain id="19s34wT"/> </domain> 146 <domain id="14s32wT" domain_ref="grid_T" > <zoom_domain id="14s32wT"/> </domain> 147 <domain id="8s30wT" domain_ref="grid_T" > <zoom_domain id="8s30wT" /> </domain> 148 <domain id="0n35wT" domain_ref="grid_T" > <zoom_domain id="0n35wT" /> </domain> 149 <domain id="4n38wT" domain_ref="grid_T" > <zoom_domain id="4n38wT" /> </domain> 150 <domain id="8n38wT" domain_ref="grid_T" > <zoom_domain id="8n38wT" /> </domain> 151 <domain id="12n38wT" domain_ref="grid_T" > <zoom_domain id="12n38wT"/> </domain> 152 <domain id="15n38wT" domain_ref="grid_T" > <zoom_domain id="15n38wT"/> </domain> 153 <domain id="20n38wT" domain_ref="grid_T" > <zoom_domain id="20n38wT"/> </domain> 154 <!-- <\!-- 23w -\-> --> 155 <domain id="0n23wT" domain_ref="grid_T" > <zoom_domain id="0n23wT" /> </domain> 156 <domain id="4n23wT" domain_ref="grid_T" > <zoom_domain id="4n23wT" /> </domain> 157 <domain id="12n23wT" domain_ref="grid_T" > <zoom_domain id="12n23wT"/> </domain> 158 <domain id="21n23wT" domain_ref="grid_T" > <zoom_domain id="21n23wT"/> </domain> 159 <!-- <\!-- 10w -\-> --> 160 <domain id="10s10wT" domain_ref="grid_T" > <zoom_domain id="10s10wT"/> </domain> 161 <domain id="6s10wT" domain_ref="grid_T" > <zoom_domain id="6s10wT" /> </domain> 162 <domain id="0n10wT" domain_ref="grid_T" > <zoom_domain id="0n10wT" /> </domain> 163 <!-- <\!-- 0e -\-> --> 164 <domain id="0n0eT" domain_ref="grid_T" > <zoom_domain id="0n0eT" /> </domain> 165 165 166 167 <!-- U grid -->168 <domain id="grid_U" long_name="grid U"/>169 <!-- Eq section -->170 <domain id="EqU" domain_ref="grid_U" > <zoom_domain id="EqU"/> </domain>171 166 172 173 <!-- V grid -->174 <domain id="grid_V" long_name="grid V"/>175 <!-- Eq section : no V point on the Equator... -->167 <!-- U grid --> 168 <domain id="grid_U" long_name="grid U"/> 169 <!-- Eq section --> 170 <domain id="EqU" domain_ref="grid_U" > <zoom_domain id="EqU"/> </domain> 176 171 177 178 <!-- W grid -->179 <domain id="grid_W" long_name="grid W"/>180 <!-- Eq section -->181 <domain id="EqW" domain_ref="grid_W" > <zoom_domain id="EqW"/> </domain>182 172 183 <!-- zonal mean grid --> 184 <domain_group id="gznl"> 185 <domain id="gznl" long_name="gznl"/> 186 <domain id="ptr" domain_ref="gznl" > 187 <zoom_domain id="ptr" ibegin="0000" jbegin="0" ni="1" nj="0000" /> 188 </domain> 189 </domain_group> 173 <!-- V grid --> 174 <domain id="grid_V" long_name="grid V"/> 175 <!-- Eq section : no V point on the Equator... --> 190 176 191 192 <!-- other grids -->193 <domain id="scalarpoint" long_name="scalar"/>194 195 177 196 </domain_definition> 197 178 <!-- W grid --> 179 <domain id="grid_W" long_name="grid W"/> 180 <!-- Eq section --> 181 <domain id="EqW" domain_ref="grid_W" > <zoom_domain id="EqW"/> </domain> 182 183 <!-- zonal mean grid --> 184 <domain_group id="gznl"> 185 <domain id="gznl" long_name="gznl"/> 186 <domain id="ptr" domain_ref="gznl" > 187 <zoom_domain id="ptr" ibegin="0000" jbegin="0" ni="1" nj="0000" /> 188 </domain> 189 </domain_group> 190 191 192 <!-- other grids --> 193 <domain id="scalarpoint" long_name="scalar"/> 194 195 196 </domain_definition> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-ice.xml
r14017 r14021 51 51 <field id="icehlid" long_name="melt pond lid depth" standard_name="sea_ice_meltpondlid_depth" unit="m" /> 52 52 <field id="icevlid" long_name="melt pond lid volume" standard_name="sea_ice_meltpondlid_volume" unit="m" /> 53 <field id="dvpn_mlt" long_name="pond volume tendency due to surface melt" standard_name="sea_ice_pondvolume_tendency_melt" unit="kg/m2/s" /> 54 <field id="dvpn_lid" long_name="pond volume tendency due to exchanges with lid" standard_name="sea_ice_pondvolume_tendency_lids" unit="kg/m2/s" /> 55 <field id="dvpn_rnf" long_name="pond volume tendency due to runoff" standard_name="sea_ice_pondvolume_tendency_runoff" unit="kg/m2/s" /> 56 <field id="dvpn_drn" long_name="pond volume tendency due to drainage" standard_name="sea_ice_pondvolume_tendency_drainage" unit="kg/m2/s" /> 53 57 54 58 <!-- heat --> … … 309 313 <field id="snwtemp_cat" long_name="Snow temperature per category" unit="degC" detect_missing_value="true" /> 310 314 <field id="icettop_cat" long_name="Ice/snow surface temperature per category" unit="degC" detect_missing_value="true" /> 311 <field id="iceapnd_cat" long_name="Ice melt pond concentration per category" unit="" /> 315 <field id="iceapnd_cat" long_name="Ice melt pond grid fraction per category" unit="" /> 316 <field id="icevpnd_cat" long_name="Ice melt pond volume per grid area per category" unit="m" /> 312 317 <field id="icehpnd_cat" long_name="Ice melt pond thickness per category" unit="m" detect_missing_value="true" /> 313 318 <field id="icehlid_cat" long_name="Ice melt pond lid thickness per category" unit="m" detect_missing_value="true" /> 314 <field id="iceafpnd_cat" long_name="Ice melt pond fraction per category"unit="" />319 <field id="iceafpnd_cat" long_name="Ice melt pond ice fraction per category" unit="" /> 315 320 <field id="iceaepnd_cat" long_name="Ice melt pond effective fraction per category" unit="" /> 316 321 <field id="icemask_cat" long_name="Fraction of time step with sea ice (per category)" unit="" /> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-innerttrc.xml
r9539 r14021 1 <?xml version="1.0"?> 2 3 4 <!-- 1 <?xml version="1.0"?> 2 <!-- $id$ --> 3 4 <!-- 5 5 ============================================================================================================ 6 6 = definition of all existing variables = 7 7 = DO NOT CHANGE = 8 8 ============================================================================================================ 9 10 9 --> 10 <field_definition level="1" prec="4" operation="average" enabled=".TRUE." default_value="1.e20" > <!-- time step automaticaly defined --> 11 11 12 <!--13 ============================================================================================================14 15 ============================================================================================================16 12 <!-- 13 ============================================================================================================ 14 Inert tracers variables 15 ============================================================================================================ 16 --> 17 17 18 18 19 19 <field_group id="inerttrc" grid_ref="grid_T_2D"> 20 20 21 22 23 24 25 21 <!-- CFC11 : variables available with ln_cfc11 --> 22 <field id="CFC11" long_name="Chlorofluoro carbon11 Concentration" unit="umol/m3" grid_ref="grid_T_3D" /> 23 <field id="CFC11_e3t" long_name="CFC11 * e3t" unit="umol/m2" grid_ref="grid_T_3D" > CFC11 * e3t </field > 24 <field id="qtr_CFC11" long_name="Air-sea flux of CFC-11" unit="mol/m2/s" /> 25 <field id="qint_CFC11" long_name="Cumulative air-sea flux of CFC-11" unit="mol/m2" /> 26 26 27 28 29 30 31 27 <!-- CFC12 : variables available with ln_cfc12 --> 28 <field id="CFC12" long_name="Chlorofluoro carbon12 Concentration" unit="umol/m3" grid_ref="grid_T_3D" /> 29 <field id="CFC12_e3t" long_name="CFC12 * e3t" unit="umol/m2" grid_ref="grid_T_3D" > CFC12 * e3t </field > 30 <field id="qtr_CFC12" long_name="Air-sea flux of CFC12" unit="mol/m2/s" /> 31 <field id="qint_CFC12" long_name="Cumulative air-sea flux of CFC12" unit="mol/m2" /> 32 32 33 34 35 36 37 33 <!-- SF6 : variables available with ln_sf6 --> 34 <field id="SF6" long_name="Sulfur hexafluoride Concentration" unit="umol/m3" grid_ref="grid_T_3D" /> 35 <field id="SF6_e3t" long_name="SF6 * e3t" unit="umol/m2" grid_ref="grid_T_3D" > SF6 * e3t </field > 36 <field id="qtr_SF6" long_name="Air-sea flux of SF6" unit="mol/m2/s" /> 37 <field id="qint_SF6" long_name="Cumulative air-sea flux of SF6" unit="mol/m2" /> 38 38 39 40 41 42 43 44 45 46 47 48 49 50 51 39 <!-- C14 : variables available with ln_c14 --> 40 <field id="RC14" long_name="Radiocarbon ratio" unit="-" grid_ref="grid_T_3D" /> 41 <field id="RC14_e3t" long_name="RC14 * e3t" unit="m" grid_ref="grid_T_3D" > RC14 * e3t </field > 42 <field id="DeltaC14" long_name="Delta C14" unit="permil" grid_ref="grid_T_3D" /> 43 <field id="C14Age" long_name="Radiocarbon age" unit="yr" grid_ref="grid_T_3D" /> 44 <field id="RAge" long_name="Reservoir Age" unit="yr" /> 45 <field id="qtr_C14" long_name="Air-sea flux of C14" unit="1/m2/s" /> 46 <field id="qint_C14" long_name="Cumulative air-sea flux of C14" unit="1/m2" /> 47 <field id="AtmCO2" long_name="Global atmospheric CO2" unit="ppm" /> 48 <field id="AtmC14" long_name="Global atmospheric DeltaC14" unit="permil" /> 49 <field id="K_C14" long_name="Global 14C/C exchange velocity" unit="m/yr" /> 50 <field id="K_CO2" long_name="Global CO2 piston velocity" unit="cm/h" /> 51 <field id="C14Inv" long_name="global Radiocarbon ocean inventory" unit="10^26 atoms" /> 52 52 53 54 55 53 <!-- AGE : variables available with ln_age --> 54 <field id="Age" long_name="Sea water age since surface contact" unit="yr" grid_ref="grid_T_3D" /> 55 <field id="Age_e3t" long_name="Age * e3t" unit="yr * m" grid_ref="grid_T_3D" > Age * e3t </field > 56 56 57 57 </field_group> 58 58 59 59 </field_definition> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-oce.xml
r13981 r14021 234 234 <field id="cfl_cw" long_name="w-courant number" unit="#" /> 235 235 236 <!-- variables available with ln_zdfmfc=.true. --> 237 <field id="mf_Tp" long_name="plume_temperature" standard_name="plume_temperature" unit="degC" grid_ref="grid_T_3D" /> 238 <field id="mf_Sp" long_name="plume_salinity" standard_name="plume_salinity" unit="1e-3" grid_ref="grid_T_3D" /> 239 <field id="mf_mf" long_name="mass flux" standard_name="mf_mass_flux" unit="m" grid_ref="grid_T_3D" /> 240 236 241 </field_group> <!-- grid_T --> 237 242 … … 651 656 <field id="avm_evd" long_name="convective enhancement of vertical viscosity" standard_name="ocean_vertical_momentum_diffusivity_due_to_convection" unit="m2/s" /> 652 657 658 <!-- mf_app and mf_wp: available with ln_zdfmfc --> 659 <field id="mf_app" long_name="convective area" standard_name="mf_convective_area" unit="%" grid_ref="grid_W_3D" /> 660 <field id="mf_wp" long_name="convective velocity" standard_name="mf_convective_velo" unit="m/s" grid_ref="grid_W_3D" /> 661 662 653 663 <!-- avt_tide: available with ln_zdfiwm=T --> 654 664 <field id="av_ratio" long_name="S over T diffusivity ratio" standard_name="salinity_over_temperature_diffusivity_ratio" unit="1" /> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-pisces.xml
r12377 r14021 1 <?xml version="1.0"?> 2 3 4 <!-- 1 <?xml version="1.0"?> 2 <!-- $id$ --> 3 4 <!-- 5 5 ============================================================================================================ 6 6 = definition of all existing variables = 7 7 = DO NOT CHANGE = 8 8 ============================================================================================================ 9 10 11 12 <!--13 ============================================================================================================14 15 ============================================================================================================16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 </field_group>160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 <field id="INTPPPHYD" long_name="Vertically integrated primary production by diatom" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PPPHYD * e3t </field >273 <field id="INTPPPHYP" long_name="Vertically integrated primary production by picophy" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PPPHYP * e3t </field >274 <field id="INTPP" long_name="Vertically integrated primary production by phyto" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPP * e3t </field >275 <field id="INTPNEW" long_name="Vertically integrated new primary production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPNEW * e3t </field >276 <field id="INTPBFE" long_name="Vertically integrated of biogenic iron production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPBFE * e3t </field >277 <field id="INTPBSI" long_name="Vertically integrated of biogenic Si production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PBSi * e3t </field >278 279 280 <field id="FNO3PHY" long_name="FNO3PHY" unit="" grid_ref="grid_T_3D" />281 <field id="FNH4PHY" long_name="FNH4PHY" unit="" grid_ref="grid_T_3D" />282 <field id="FNH4NO3" long_name="FNH4NO3" unit="" grid_ref="grid_T_3D" />283 <field id="TNO3PHY" long_name="TNO3PHY" unit="" />284 <field id="TNH4PHY" long_name="TNH4PHY" unit="" />285 <field id="TPHYDOM" long_name="TPHYDOM" unit="" />286 <field id="TPHYNH4" long_name="TPHYNH4" unit="" />287 <field id="TPHYZOO" long_name="TPHYZOO" unit="" />288 <field id="TPHYDET" long_name="TPHYDET" unit="" />289 <field id="TDETZOO" long_name="TDETZOO" unit="" />290 <field id="TZOODET" long_name="TZOODET" unit="" />291 <field id="TZOOBOD" long_name="TZOOBOD" unit="" />292 <field id="TZOONH4" long_name="TZOONH4" unit="" />293 <field id="TZOODOM" long_name="TZOODOM" unit="" />294 <field id="TNH4NO3" long_name="TNH4NO3" unit="" />295 <field id="TDOMNH4" long_name="TDOMNH4" unit="" />296 <field id="TDETNH4" long_name="TDETNH4" unit="" />297 <field id="TPHYTOT" long_name="TPHYTOT" unit="" />298 <field id="TZOOTOT" long_name="TZOOTOT" unit="" />299 <field id="SEDPOC" long_name="SEDPOC" unit="" />300 <field id="TDETSED" long_name="TDETSED" unit="" />301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 9 --> 10 <field_definition level="1" prec="4" operation="average" enabled=".TRUE." default_value="1.e20" > <!-- time step automaticaly defined --> 11 12 <!-- 13 ============================================================================================================ 14 Biogeochemistry model variables 15 ============================================================================================================ 16 --> 17 18 <!-- ptrc on T grid --> 19 20 <field_group id="ptrc_T" grid_ref="grid_T_3D"> 21 <!-- PISCES standard : variables available with ln_p4z --> 22 <field id="DIC" long_name="Dissolved inorganic Concentration" unit="mmol/m3" /> 23 <field id="DIC_e3t" long_name="DIC * e3t" unit="mmol/m2" > DIC * e3t </field > 24 <field id="Alkalini" long_name="Total Alkalinity Concentration" unit="mmol/m3" /> 25 <field id="Alkalini_e3t" long_name="Alkalini * e3t" unit="mmol/m2" > Alkalini * e3t </field > 26 <field id="O2" long_name="Oxygen Concentration" unit="mmol/m3" /> 27 <field id="O2_e3t" long_name="O2 * e3t" unit="mmol/m2" > O2 * e3t </field > 28 <field id="CaCO3" long_name="Calcite Concentration" unit="mmol/m3" /> 29 <field id="CaCO3_e3t" long_name="CaCO3 * e3t" unit="mmol/m2" > CaCO3 * e3t </field > 30 <field id="PO4" long_name="Phosphate Concentration" unit="mmol/m3" /> 31 <field id="PO4_e3t" long_name="PO4 * e3t" unit="mmol/m2" > PO4 * e3t </field > 32 <field id="POC" long_name="Small organic carbon Concentration" unit="mmol/m3" /> 33 <field id="POC_e3t" long_name="POC * e3t" unit="mmol/m2" > POC * e3t </field > 34 <field id="Si" long_name="Silicate Concentration" unit="mmol/m3" /> 35 <field id="Si_e3t" long_name="Si * e3t" unit="mmol/m2" > Si * e3t </field > 36 <field id="PHY" long_name="(Nano)Phytoplankton Concentration" unit="mmol/m3" /> 37 <field id="PHY_e3t" long_name="PHY * e3t" unit="mmol/m2" > PHY * e3t </field > 38 <field id="ZOO" long_name="(Micro)Zooplankton Concentration" unit="mmol/m3" /> 39 <field id="ZOO_e3t" long_name="ZOO2 * e3t" unit="mmol/m2" > ZOO * e3t </field > 40 <field id="DOC" long_name="Dissolved organic Concentration" unit="mmol/m3" /> 41 <field id="DOC_e3t" long_name="DOC * e3t" unit="mmol/m2" > DOC * e3t </field > 42 <field id="PHY2" long_name="Diatoms Concentration" unit="mmol/m3" /> 43 <field id="PHY2_e3t" long_name="PHY2 * e3t" unit="mmol/m2" > PHY2 * e3t </field > 44 <field id="ZOO2" long_name="Mesozooplankton Concentration" unit="mmol/m3" /> 45 <field id="ZOO2_e3t" long_name="ZOO2 * e3t" unit="mmol/m2" > ZOO2 * e3t </field > 46 <field id="DSi" long_name="Diatoms Silicate Concentration" unit="mmol/m3" /> 47 <field id="DSi_e3t" long_name="Dsi * e3t" unit="mmol/m2" > DSi * e3t </field > 48 <field id="Fer" long_name="Dissolved Iron Concentration" unit="mmol/m3" /> 49 <field id="Fer_e3t" long_name="Fer * e3t" unit="mmol/m2" > Fer * e3t </field > 50 <field id="BFe" long_name="Big iron particles Concentration" unit="mmol/m3" /> 51 <field id="BFe_e3t" long_name="BFe * e3t" unit="mmol/m2" > BFe * e3t </field > 52 <field id="GOC" long_name="Big organic carbon Concentration" unit="mmol/m3" /> 53 <field id="GOC_e3t" long_name="GOC * e3t" unit="mmol/m2" > GOC * e3t </field > 54 <field id="SFe" long_name="Small iron particles Concentration" unit="mmol/m3" /> 55 <field id="SFe_e3t" long_name="SFe * e3t" unit="mmol/m2" > SFe * e3t </field > 56 <field id="DFe" long_name="Diatoms iron Concentration" unit="mmol/m3" /> 57 <field id="DFe_e3t" long_name="DFe * e3t" unit="mmol/m2" > DFe * e3t </field > 58 <field id="GSi" long_name="Sinking biogenic Silicate Concentration" unit="mmol/m3" /> 59 <field id="GSi_e3t" long_name="GSi * e3t" unit="mmol/m2" > GSi * e3t </field > 60 <field id="NFe" long_name="Nano iron Concentration" unit="mmol/m3" /> 61 <field id="NFe_e3t" long_name="NFe * e3t" unit="mmol/m2" > NFe * e3t </field > 62 <field id="NCHL" long_name="Nano chlorophyl Concentration" unit="gChl/m3" /> 63 <field id="NCHL_e3t" long_name="NCHL * e3t" unit="mmol/m2" > NCHL * e3t </field > 64 <field id="DCHL" long_name="Diatoms chlorophyl Concentration" unit="gChl/m3" /> 65 <field id="DCHL_e3t" long_name="DCHL * e3t" unit="mmol/m2" > DCHL * e3t </field > 66 <field id="NO3" long_name="Nitrate Concentration" unit="mmol/m3" /> 67 <field id="NO3_e3t" long_name="NO3 * e3t" unit="mmol/m2" > NO3 * e3t </field > 68 <field id="NH4" long_name="Ammonium Concentration" unit="mmol/m3" /> 69 <field id="NH4_e3t" long_name="NH4 * e3t" unit="mmol/m2" > NH4 * e3t </field > 70 71 <!-- PISCES quota : variables available with ln_p5z --> 72 73 <field id="DON" long_name="Dissolved organic N Concentration" unit="mmol/m3" /> 74 <field id="DON_e3t" long_name="DON * e3t" unit="mmol/m2" > DON * e3t </field > 75 <field id="DOP" long_name="Dissolved organic P Concentration" unit="mmol/m3" /> 76 <field id="DOP_e3t" long_name="DOP * e3t" unit="mmol/m2" > DOP * e3t </field > 77 <field id="PON" long_name="Small PON Concentration" unit="mmol/m3" /> 78 <field id="PON_e3t" long_name="PON * e3t" unit="mmol/m2" > PON * e3t </field > 79 <field id="POP" long_name="Small POP Concentration" unit="mmol/m3" /> 80 <field id="POP_e3t" long_name="POP * e3t" unit="mmol/m2" > POP * e3t </field > 81 <field id="GON" long_name="Big PON Concentration" unit="mmol/m3" /> 82 <field id="GON_e3t" long_name="GON * e3t" unit="mmol/m2" > GON * e3t </field > 83 <field id="GOP" long_name="Big POP Concentration" unit="mmol/m3" /> 84 <field id="GOP_e3t" long_name="GOP * e3t" unit="mmol/m2" > GOP * e3t </field > 85 <field id="PHYN" long_name="Nanophytoplankton N biomass" unit="mmol/m3" /> 86 <field id="PHYN_e3t" long_name="PHYN * e3t" unit="mmol/m2" > PHYN * e3t </field > 87 <field id="PHYP" long_name="Nanophytoplankton P biomass" unit="mmol/m3" /> 88 <field id="PHYP_e3t" long_name="PHYP * e3t" unit="mmol/m2" > PHYP * e3t </field > 89 <field id="DIAN" long_name="Diatoms N biomass" unit="mmol/m3" /> 90 <field id="DIAN_e3t" long_name="DIAN * e3t" unit="mmol/m2" > DIAN * e3t </field > 91 <field id="DIAP" long_name="Diatoms P biomass" unit="mmol/m3" /> 92 <field id="DIAP_e3t" long_name="DIAP * e3t" unit="mmol/m2" > DIAP * e3t </field > 93 <field id="PIC" long_name="Picophytoplankton C biomass" unit="mmol/m3" /> 94 <field id="PIC_e3t" long_name="PIC * e3t" unit="mmol/m2" > PIC * e3t </field > 95 <field id="PICN" long_name="Picophytoplankton N biomass" unit="mmol/m3" /> 96 <field id="PICN_e3t" long_name="PICN * e3t" unit="mmol/m2" > PICN * e3t </field > 97 <field id="PICP" long_name="Picophytoplankton P biomass" unit="mmol/m3" /> 98 <field id="PICP_e3t" long_name="PICP * e3t" unit="mmol/m2" > PICP * e3t </field > 99 <field id="PFe" long_name="Picophytoplankton Fe biomass" unit="mmol/m3" /> 100 <field id="PFe_e3t" long_name="PFe * e3t" unit="mmol/m2" > PFe * e3t </field > 101 <field id="PCHL" long_name="Picophytoplankton Chl biomass" unit="gChl/m3" /> 102 <field id="PCHL_e3t" long_name="PCHL * e3t" unit="mmol/m2" > PCHL * e3t </field > 103 104 <!-- PISCES with ligand parametisation : variables available namelist paramter ln_ligand --> 105 <field id="LGW" long_name="Weak ligands concentration" unit="mmol/m3" /> 106 <field id="LGW_e3t" long_name="LGW * e3t" unit="mmol/m2" > LGW * e3t </field > 107 108 <!-- PISCES light : variables available with ln_p2z --> 109 <field id="DET" long_name="Detritus" unit="mmol-N/m3" /> 110 <field id="DET_e3t" long_name="DET * e3t" unit="mmol-N/m2" > DET * e3t </field > 111 <field id="DOM" long_name="Dissolved Organic Matter" unit="mmol-N/m3" /> 112 <field id="DOM_e3t" long_name="DOM * e3t" unit="mmol-N/m2" > DOM * e3t </field > 113 114 </field_group> 115 116 <!-- SEDIMENT variables on T sediment grid --> 117 <field_group id="sed_T" grid_ref="grid_T_3DS"> 118 <field id="SedDIC" long_name="Dissolved inorganic Concentration" unit="mmol/m3" /> 119 <field id="SedAlkalini" long_name="Total Alkalinity Concentration" unit="mmol/m3" /> 120 <field id="SedO2" long_name="Oxygen Concentration" unit="mmol/m3" /> 121 <field id="SedCaCO3" long_name="Calcite Concentration" unit="%" /> 122 <field id="SedPOS" long_name="Semi-ref POC Concentration" unit="%" /> 123 <field id="SedPOR" long_name="Refractory POC Concentration" unit="%" /> 124 <field id="SedPO4" long_name="Phosphate Concentration" unit="mmol/m3" /> 125 <field id="SedPOC" long_name="Labile POC Concentration" unit="%" /> 126 <field id="SedSil" long_name="Silicate Concentration" unit="mmol/m3" /> 127 <field id="SedFe2" long_name="Fe2+ Concentration" unit="mmol/m3" /> 128 <field id="SedBSi" long_name="Biogenic Silicate Concentration" unit="%" /> 129 <field id="SedNO3" long_name="Nitrate Concentration" unit="mmol/m3" /> 130 <field id="SedNH4" long_name="Ammonium Concentration" unit="mmol/m3" /> 131 <field id="SedH2S" long_name="H2S Concentration" unit="mmol/m3" /> 132 <field id="SedSO4" long_name="SO4 Concentration" unit="mmol/m3" /> 133 <field id="SedClay" long_name="Clay Concentration" unit="%" /> 134 <field id="SedFeO" long_name="Fe(OH)3 Concentration" unit="%" /> 135 <field id="SedFeS" long_name="FeS Concentration" unit="%" /> 136 <field id="SedpH" long_name="PH" unit="1" /> 137 <field id="SedCO3por" long_name="Bicarbonates" unit="mol/m3" /> 138 </field_group> 139 140 <!-- SEDIMENT additional variables on T sediment grid --> 141 <field_group id="Diag_S" grid_ref="grid_T_2D"> 142 <field id="FlxSi" long_name="Si sediment flux" unit="mol/cm2/s" /> 143 <field id="FlxO2" long_name="O2 sediment flux" unit="mol/cm2/s" /> 144 <field id="FlxDIC" long_name="DIC sediment flux" unit="mol/cm2/s" /> 145 <field id="FlxNO3" long_name="NO3 sediment flux" unit="mol/cm2/s" /> 146 <field id="FlxPO4" long_name="PO4 sediment flux" unit="mol/cm2/s" /> 147 <field id="FlxAlkalini" long_name="Alkalinity sediment flux" unit="mol/cm2/s" /> 148 <field id="FlxNH4" long_name="Ammonium sediment flux" unit="mol/cm2/s" /> 149 <field id="FlxH2S" long_name="H2S sediment flux" unit="mol/cm2/s" /> 150 <field id="FlxSO4" long_name="SO4 sediment flux" unit="mol/cm2/s" /> 151 <field id="FlxFe2" long_name="Fe2+ sediment flux" unit="mol/cm2/s" /> 152 <field id="Flxtot" long_name="Sediment net burial rate" unit="cm/s" /> 153 <field id="dzdep" long_name="Sedimentation rate" unit="cm/s" /> 154 <field id="sflxclay" long_name="Clay sedimentation rate" unit="g/m2/s" /> 155 <field id="sflxcal" long_name="Calcite sedimentation rate" unit="mol/m2/s" /> 156 <field id="sflxbsi" long_name="BSi Sedimentation rate" unit="mol/m2/s" /> 157 <field id="sflxpoc" long_name="POC Sedimentation rate" unit="mol/m2/s" /> 158 <field id="sflxfeo" long_name="Fe(OH)3 Sedimentation rate" unit="mol/m2/s" /> 159 </field_group> 160 161 <!-- PISCES additional diagnostics on T grid --> 162 163 <field_group id="diad_T" grid_ref="grid_T_2D"> 164 <field id="PH" long_name="PH" unit="1" grid_ref="grid_T_3D" /> 165 <field id="CO3" long_name="Bicarbonates" unit="mol/m3" grid_ref="grid_T_3D" /> 166 <field id="CO3sat" long_name="CO3 saturation" unit="mol/m3" grid_ref="grid_T_3D" /> 167 <field id="PAR" long_name="Photosynthetically Available Radiation" unit="W/m2" grid_ref="grid_T_3D" /> 168 <field id="PARDM" long_name="Daily mean PAR" unit="W/m2" grid_ref="grid_T_3D" /> 169 <field id="PPPHYN" long_name="Primary production of nanophyto" unit="molC/m3/s" grid_ref="grid_T_3D" /> 170 <field id="PPPHYP" long_name="Primary production of picophyto" unit="molC/m3/s" grid_ref="grid_T_3D" /> 171 <field id="PPPHYD" long_name="Primary production of diatoms" unit="molC/m3/s" grid_ref="grid_T_3D" /> 172 <field id="PPNEWN" long_name="New Primary production of nanophyto" unit="molC/m3/s" grid_ref="grid_T_3D" /> 173 <field id="PPNEWP" long_name="New Primary production of picophyto" unit="molC/m3/s" grid_ref="grid_T_3D" /> 174 <field id="PPNEWD" long_name="New Primary production of diatoms" unit="molC/m3/s" grid_ref="grid_T_3D" /> 175 <field id="PBSi" long_name="Primary production of Si diatoms" unit="molC/m3/s" grid_ref="grid_T_3D" /> 176 <field id="PFeN" long_name="Primary production of nano iron" unit="molC/m3/s" grid_ref="grid_T_3D" /> 177 <field id="PFeP" long_name="Primary production of pico iron" unit="molC/m3/s" grid_ref="grid_T_3D" /> 178 <field id="PFeD" long_name="Primary production of diatoms iron" unit="mol/m3/s" grid_ref="grid_T_3D" /> 179 <field id="xfracal" long_name="Calcifying fraction" unit="1" grid_ref="grid_T_3D" /> 180 <field id="PCAL" long_name="Calcite production" unit="mol/m3/s" grid_ref="grid_T_3D" /> 181 <field id="DCAL" long_name="Calcite dissolution" unit="mol/m3/s" grid_ref="grid_T_3D" /> 182 <field id="GRAZ1" long_name="Grazing by microzooplankton" unit="mol/m3/s" grid_ref="grid_T_3D" /> 183 <field id="GRAZ2" long_name="Grazing by mesozooplankton" unit="mol/m3/s" grid_ref="grid_T_3D" /> 184 <field id="REMIN" long_name="Oxic remineralization of OM" unit="mol/m3/s" grid_ref="grid_T_3D" /> 185 <field id="DENIT" long_name="Anoxic remineralization of OM" unit="mol/m3/s" grid_ref="grid_T_3D" /> 186 <field id="REMINP" long_name="Oxic remineralization rate of POC" unit="d-1" grid_ref="grid_T_3D" /> 187 <field id="REMING" long_name="Oxic remineralization rate of GOC" unit="d-1" grid_ref="grid_T_3D" /> 188 <field id="Nfix" long_name="Nitrogen fixation" unit="mol/m3/s" grid_ref="grid_T_3D" /> 189 <field id="Mumax" long_name="Maximum growth rate" unit="s-1" grid_ref="grid_T_3D" /> 190 <field id="MuN" long_name="Realized growth rate for nanophyto" unit="s-1" grid_ref="grid_T_3D" /> 191 <field id="MuP" long_name="Realized growth rate for picophyto" unit="s-1" grid_ref="grid_T_3D" /> 192 <field id="MuD" long_name="Realized growth rate for diatomes" unit="s-1" grid_ref="grid_T_3D" /> 193 <field id="MunetN" long_name="Net growth rate for nanophyto" unit="s-1" grid_ref="grid_T_3D" /> 194 <field id="MunetP" long_name="Net growth rate for picophyto" unit="s-1" grid_ref="grid_T_3D" /> 195 <field id="MunetD" long_name="Net growth rate for diatomes" unit="s-1" grid_ref="grid_T_3D" /> 196 <field id="LNnut" long_name="Nutrient limitation term in Nanophyto" unit="" grid_ref="grid_T_3D" /> 197 <field id="LPnut" long_name="Nutrient limitation term in Picophyto" unit="-" grid_ref="grid_T_3D" /> 198 <field id="LDnut" long_name="Nutrient limitation term in Diatoms" unit="" grid_ref="grid_T_3D" /> 199 <field id="LNFe" long_name="Iron limitation term in Nanophyto" unit="" grid_ref="grid_T_3D" /> 200 <field id="LPFe" long_name="Iron limitation term in Picophyto" unit="-" grid_ref="grid_T_3D" /> 201 <field id="LDFe" long_name="Iron limitation term in Diatoms" unit="" grid_ref="grid_T_3D" /> 202 <field id="LNlight" long_name="Light limitation term in Nanophyto" unit="" grid_ref="grid_T_3D" /> 203 <field id="LPlight" long_name="Light limitation term in Picophyto" unit="-" grid_ref="grid_T_3D" /> 204 <field id="LDlight" long_name="Light limitation term in Diatoms" unit="" grid_ref="grid_T_3D" /> 205 <field id="SIZEN" long_name="Mean relative size of nanophyto." unit="-" grid_ref="grid_T_3D" /> 206 <field id="SIZEP" long_name="Mean relative size of picophyto." unit="-" grid_ref="grid_T_3D" /> 207 <field id="SIZED" long_name="Mean relative size of diatoms" unit="-" grid_ref="grid_T_3D" /> 208 <field id="Fe3" long_name="Iron III concentration" unit="nmol/m3" grid_ref="grid_T_3D" /> 209 <field id="FeL1" long_name="Complexed Iron concentration with L1" unit="nmol/m3" grid_ref="grid_T_3D" /> 210 <field id="TL1" long_name="Total L1 concentration" unit="nmol/m3" grid_ref="grid_T_3D" /> 211 <field id="pdust" long_name="dust concentration" unit="g/m3" /> 212 <field id="Totlig" long_name="Total ligand concentation" unit="nmol/m3" grid_ref="grid_T_3D" /> 213 <field id="Biron" long_name="Bioavailable iron" unit="nmol/m3" grid_ref="grid_T_3D" /> 214 <field id="Sdenit" long_name="Nitrate reduction in the sediments" unit="mol/m2/s" /> 215 <field id="Ironice" long_name="Iron input/uptake due to sea ice" unit="mol/m2/s" /> 216 <field id="SedCal" long_name="Calcite burial in the sediments" unit="molC/m2/s" /> 217 <field id="SedSi" long_name="Silicon burial in the sediments" unit="molSi/m2/s" /> 218 <field id="SedC" long_name="Organic C burial in the sediments" unit="molC/m2/s" /> 219 <field id="HYDR" long_name="Iron input from hydrothemal vents" unit="mol/m2/s" grid_ref="grid_T_3D" /> 220 <field id="EPC100" long_name="Export of carbon particles at 100 m" unit="mol/m2/s" /> 221 <field id="EPFE100" long_name="Export of biogenic iron at 100 m" unit="mol/m2/s" /> 222 <field id="EPSI100" long_name="Export of Silicate at 100 m" unit="mol/m2/s" /> 223 <field id="EPCAL100" long_name="Export of Calcite at 100 m" unit="mol/m2/s" /> 224 <field id="EXPC" long_name="Export of carbon" unit="mol/m2/s" grid_ref="grid_T_3D" /> 225 <field id="EXPFE" long_name="Export of biogenic iron" unit="mol/m2/s" grid_ref="grid_T_3D" /> 226 <field id="EXPSI" long_name="Export of Silicate" unit="mol/m2/s" grid_ref="grid_T_3D" /> 227 <field id="EXPCAL" long_name="Export of Calcite" unit="mol/m2/s" grid_ref="grid_T_3D" /> 228 <field id="Cflx" long_name="DIC flux" unit="mol/m2/s" /> 229 <field id="Oflx" long_name="Oxygen flux" unit="mol/m2/s" /> 230 <field id="Kg" long_name="Gas transfer" unit="mol/m2/s/uatm" /> 231 <field id="Dpco2" long_name="Delta CO2" unit="uatm" /> 232 <field id="pCO2sea" long_name="surface ocean pCO2" unit="uatm" /> 233 <field id="Dpo2" long_name="Delta O2" unit="uatm" /> 234 <field id="Heup" long_name="Euphotic layer depth" unit="m" /> 235 <field id="AtmCo2" long_name="Atmospheric CO2 concentration" unit="ppm" /> 236 <field id="Irondep" long_name="Iron deposition from dust" unit="mol/m2/s" /> 237 <field id="Ironsed" long_name="Iron deposition from sediment" unit="mol/m2/s" grid_ref="grid_T_3D" /> 238 <field id="FESCAV" long_name="Scavenging of Iron" unit="mmol-Fe/m3/s" grid_ref="grid_T_3D" /> 239 <field id="FECOLL" long_name="Colloidal Pumping of FeL" unit="mmol-FeL/m3/s" grid_ref="grid_T_3D" /> 240 <field id="LGWCOLL" long_name="Coagulation loss of ligands" unit="mmol-L/m3/s" grid_ref="grid_T_3D" /> 241 <field id="REMINF" long_name="Oxic remineralization suppy of Fe" unit="mmol-Fe/m3/s" grid_ref="grid_T_3D" /> 242 <field id="BACT" long_name="Bacterial Biomass" unit="mmol/m3" grid_ref="grid_T_3D" /> 243 <field id="FEBACT" long_name="Bacterial uptake of Fe" unit="molFe/m3/s" grid_ref="grid_T_3D" /> 244 <field id="LPRODR" long_name="OM remineralisation ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 245 <field id="LPRODP" long_name="phytoplankton ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 246 <field id="LIGREM" long_name="Remineralisation loss of ligands" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 247 <field id="LIGPR" long_name="Photochemical loss of ligands" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 248 <field id="LDETP" long_name="Ligand destruction during phytoplankton uptake" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 249 <field id="LPRODZ2" long_name="mesozooplankton ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 250 <field id="LPRODZ" long_name="microzooplankton ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 251 <field id="FEZOO" long_name="microzooplankton iron recycling rate" unit="nmol-FeL/m3/s" grid_ref="grid_T_3D" /> 252 <field id="FEZOO2" long_name="mesozooplankton iron recycling rate" unit="nmol-FeL/m3/s" grid_ref="grid_T_3D" /> 253 254 <!-- PISCES tracers trends --> 255 <field id="INTdtAlk" long_name="Vertically int. of change of alkalinity" unit="mol/m2/s" /> 256 <field id="INTdtDIC" long_name="Vertically int. of change of dissic " unit="mol/m2/s" /> 257 <field id="INTdtFer" long_name="Vertically int. of change of iron " unit="mol/m2/s" /> 258 <field id="INTdtDIN" long_name="Vertically int. of change of nitrogen " unit="mol/m2/s" /> 259 <field id="INTdtDIP" long_name="Vertically int. of change of phophate " unit="mol/m2/s" /> 260 <field id="INTdtSil" long_name="Vertically int. of change of silicon " unit="mol/m2/s" /> 261 262 263 <!-- dbio_T on T grid : variables available with diaar5 --> 264 <field id="TPP" long_name="Total Primary production of phyto" unit="mol/m3/s" grid_ref="grid_T_3D" /> 265 <field id="TPNEW" long_name="New Primary production of phyto" unit="mol/m3/s" grid_ref="grid_T_3D" /> 266 <field id="TPBFE" long_name="Total biogenic iron production" unit="mol/m3/s" grid_ref="grid_T_3D" /> 267 <field id="INTDIC" long_name="DIC content" unit="kg/m2" /> 268 <field id="O2MIN" long_name="Oxygen minimum concentration" unit="mol/m3" /> 269 <field id="ZO2MIN" long_name="Depth of oxygen minimum concentration" unit="m" /> 270 <field id="INTNFIX" long_name="Nitrogen fixation rate : vert. integrated" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > Nfix * e3t </field > 271 <field id="INTPPPHYN" long_name="Vertically integrated primary production by nanophy" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PPPHYN * e3t </field > 272 <field id="INTPPPHYD" long_name="Vertically integrated primary production by diatom" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PPPHYD * e3t </field > 273 <field id="INTPPPHYP" long_name="Vertically integrated primary production by picophy" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PPPHYP * e3t </field > 274 <field id="INTPP" long_name="Vertically integrated primary production by phyto" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPP * e3t </field > 275 <field id="INTPNEW" long_name="Vertically integrated new primary production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPNEW * e3t </field > 276 <field id="INTPBFE" long_name="Vertically integrated of biogenic iron production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > TPBFE * e3t </field > 277 <field id="INTPBSI" long_name="Vertically integrated of biogenic Si production" unit="mol/m2/s" grid_ref="grid_T_vsum" detect_missing_value="true" > PBSi * e3t </field > 278 279 <!-- PISCES light : variables available with key_pisces_reduced --> 280 <field id="FNO3PHY" long_name="FNO3PHY" unit="" grid_ref="grid_T_3D" /> 281 <field id="FNH4PHY" long_name="FNH4PHY" unit="" grid_ref="grid_T_3D" /> 282 <field id="FNH4NO3" long_name="FNH4NO3" unit="" grid_ref="grid_T_3D" /> 283 <field id="TNO3PHY" long_name="TNO3PHY" unit="" /> 284 <field id="TNH4PHY" long_name="TNH4PHY" unit="" /> 285 <field id="TPHYDOM" long_name="TPHYDOM" unit="" /> 286 <field id="TPHYNH4" long_name="TPHYNH4" unit="" /> 287 <field id="TPHYZOO" long_name="TPHYZOO" unit="" /> 288 <field id="TPHYDET" long_name="TPHYDET" unit="" /> 289 <field id="TDETZOO" long_name="TDETZOO" unit="" /> 290 <field id="TZOODET" long_name="TZOODET" unit="" /> 291 <field id="TZOOBOD" long_name="TZOOBOD" unit="" /> 292 <field id="TZOONH4" long_name="TZOONH4" unit="" /> 293 <field id="TZOODOM" long_name="TZOODOM" unit="" /> 294 <field id="TNH4NO3" long_name="TNH4NO3" unit="" /> 295 <field id="TDOMNH4" long_name="TDOMNH4" unit="" /> 296 <field id="TDETNH4" long_name="TDETNH4" unit="" /> 297 <field id="TPHYTOT" long_name="TPHYTOT" unit="" /> 298 <field id="TZOOTOT" long_name="TZOOTOT" unit="" /> 299 <field id="SEDPOC" long_name="SEDPOC" unit="" /> 300 <field id="TDETSED" long_name="TDETSED" unit="" /> 301 </field_group> 302 303 <field_group id="tracer_scalar" grid_ref="grid_scalar" > 304 <!-- PISCES scalar --> 305 <field id="pno3tot" long_name="Global mean nitrate concentration" unit="mol/m3" /> 306 <field id="ppo4tot" long_name="global mean phosphorus concentration" unit="mol/m3" /> 307 <field id="psiltot" long_name="Global mean silicate concentration" unit="mol/m3" /> 308 <field id="palktot" long_name="Global mean alkalinity concentration" unit="mol/m3" /> 309 <field id="pfertot" long_name="Global mean iron concentration" unit="mol/m3" /> 310 <field id="tcflx" long_name="Total Flux of Carbon out of the ocean" unit="mol/s" /> 311 <field id="tcflxcum" long_name="Cumulative total Flux of Carbon out of the ocean" unit="mol/s" /> 312 <field id="tcexp" long_name="Total Carbon export at 100m" unit="mol/s" /> 313 <field id="tintpp" long_name="Global total integrated primary production" unit="mol/s" /> 314 <field id="tnfix" long_name="Global total nitrogen fixation" unit="mol/s" /> 315 <field id="tdenit" long_name="Total denitrification" unit="mol/s" /> 316 </field_group> 317 318 </field_definition> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/grid_def_nemo.xml
r12377 r14021 4 4 = grid definition = = DO NOT CHANGE = 5 5 ============================================================================================================ 6 7 8 <grid_definition> 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 6 --> 7 8 <grid_definition> 9 10 <!-- --> 11 <grid id="grid_T_2D" > 12 <domain domain_ref="grid_T" /> 13 </grid> 14 <!-- --> 15 <grid id="grid_T_ncatice" > 16 <domain domain_ref="grid_T" /> 17 <axis axis_ref="ncatice" /> 18 </grid> 19 <!-- --> 20 <grid id="grid_T_3D" > 21 <domain domain_ref="grid_T" /> 22 <axis axis_ref="deptht" /> 23 </grid> 24 <!-- --> 25 <grid id="grid_T_3DS" > 26 <domain domain_ref="grid_T" /> 27 <axis axis_ref="profsed" /> 28 </grid> 29 <!-- --> 30 <grid id="grid_U_2D" > 31 <domain domain_ref="grid_U" /> 32 </grid> 33 <!-- --> 34 <grid id="grid_U_3D" > 35 <domain domain_ref="grid_U" /> 36 <axis axis_ref="depthu" /> 37 </grid> 38 <!-- --> 39 <grid id="grid_V_2D" > 40 <domain domain_ref="grid_V" /> 41 </grid> 42 <!-- --> 43 <grid id="grid_V_3D" > 44 <domain domain_ref="grid_V" /> 45 <axis axis_ref="depthv" /> 46 </grid> 47 <!-- --> 48 <grid id="grid_W_2D" > 49 <domain domain_ref="grid_W" /> 50 </grid> 51 <!-- --> 52 <grid id="grid_W_3D" > 53 <domain domain_ref="grid_W" /> 54 <axis axis_ref="depthw" /> 55 </grid> 56 <!-- --> 57 <grid id="grid_1point" > 58 <domain domain_ref="1point"/> 59 </grid> 60 <!-- --> 61 <grid id="grid_T_nfloat" > 62 <domain domain_ref="grid_T" /> 63 <axis axis_ref="nfloat" /> 64 </grid> 65 <!-- --> 66 <grid id="grid_EqT" > 67 <domain domain_ref="EqT" /> 68 </grid> 69 <!-- --> 70 71 72 <grid id="grid_znl_T_2D"> 73 <domain domain_ref="gznl" /> 74 <axis axis_ref="basin" /> 75 </grid> 76 77 <grid id="grid_znl_T_3D"> 78 <domain domain_ref="gznl" /> 79 <axis axis_ref="deptht" /> 80 <axis axis_ref="basin" /> 81 </grid> 82 83 <grid id="grid_znl_W_3D"> 84 <domain domain_ref="gznl" /> 85 <axis axis_ref="depthw" /> 86 <axis axis_ref="basin" /> 87 </grid> 88 89 <grid id="grid_ptr_T_2D"> 90 <domain domain_ref="ptr" /> 91 <axis axis_ref="basin" /> 92 </grid> 93 94 <grid id="grid_ptr_T_3D"> 95 <domain domain_ref="ptr" /> 96 <axis axis_ref="deptht" /> 97 <axis axis_ref="basin" /> 98 </grid> 99 100 <grid id="grid_ptr_W_3D"> 101 <domain domain_ref="ptr" /> 102 <axis axis_ref="depthw" /> 103 <axis axis_ref="basin" /> 104 </grid> 105 106 <grid id="grid_ptr_W_GLO"> 107 <domain domain_ref="ptr" /> 108 <axis axis_ref="depthw" /> 109 <scalar> 110 <extract_axis position="0" /> 111 </scalar> 112 </grid> 113 114 <grid id="grid_ptr_W_ATL"> 115 <domain domain_ref="ptr" /> 116 <axis axis_ref="depthw" /> 117 <scalar> 118 <extract_axis position="1" /> 119 </scalar> 120 </grid> 121 122 <grid id="grid_ptr_W_IND"> 123 <domain domain_ref="ptr" /> 124 <axis axis_ref="depthw" /> 125 <scalar> 126 <extract_axis position="2" /> 127 </scalar> 128 </grid> 129 130 <grid id="grid_T_SFC"> 131 <domain domain_ref="grid_T" /> 132 <scalar> 133 <extract_axis position="0" /> 134 </scalar> 135 </grid> 136 137 <grid id="grid_T_vsum"> 138 <domain domain_ref="grid_T"/> 139 <scalar> 140 <reduce_axis operation="sum" /> 141 </scalar> 142 </grid> 143 144 <grid id="grid_U_vsum"> 145 <domain domain_ref="grid_U"/> 146 <scalar> 147 <reduce_axis operation="sum" /> 148 </scalar> 149 </grid> 150 151 <grid id="grid_V_vsum"> 152 <domain domain_ref="grid_V"/> 153 <scalar> 154 <reduce_axis operation="sum" /> 155 </scalar> 156 </grid> 157 158 <!-- for ORCA2 grid --> 159 <grid id="cumul_U"> 160 <axis axis_ref="cumul_U" n_glo="182" > 161 <reduce_domain local="true" operation="sum" direction="jDir" /> 162 <reduce_axis operation="sum" /> 163 </axis> 164 <axis axis_ref="depthu" /> 165 </grid> 166 167 <!-- for eORCA1 grid 168 169 <grid id="cumul_U"> 170 <axis axis_ref="cumul_U" n_glo="362" > 171 <reduce_domain local="true" operation="sum" direction="jDir" /> 172 <reduce_axis operation="sum" /> 173 </axis> 174 <axis axis_ref="depthu" /> 175 </grid> 176 177 --> 178 179 180 <grid id="grid_T_zoom_300"> 181 <domain domain_ref="grid_T" /> 182 <axis axis_ref="deptht300" /> 183 </grid> 184 185 <grid id="grid_U_scalar" > 186 <domain domain_ref="grid_U" /> 187 <scalar/> 188 </grid> 189 190 <grid id="grid_V_scalar" > 191 <domain domain_ref="grid_V" /> 192 <scalar/> 193 </grid> 194 195 <grid id="grid_U_4strait"> 196 <domain domain_ref="grid_U" /> 197 <axis axis_ref="section"> 198 <duplicate_scalar/> 199 </axis> 200 </grid> 201 202 <grid id="grid_V_4strait"> 203 <domain domain_ref="grid_V" /> 204 <axis axis_ref="section"> 205 <duplicate_scalar/> 206 </axis> 207 </grid> 208 209 <grid id="grid_U_4strait_hsum"> 210 <scalar > 211 <reduce_domain operation="sum" local="true"/> 212 <reduce_scalar operation="sum" /> 213 </scalar> 214 <axis axis_ref="section"/> 215 </grid> 216 217 <grid id="grid_V_4strait_hsum"> 218 <scalar > 219 <reduce_domain operation="sum" local="true"/> 220 <reduce_scalar operation="sum" /> 221 </scalar> 222 <axis axis_ref="section"/> 223 </grid> 224 225 <grid id="grid_4strait"> 226 <axis axis_ref="section"/> 227 </grid> 228 229 <grid id="grid_U_4strait_ice"> 230 <domain domain_ref="grid_U" /> 231 <axis axis_ref="section_ice"> 232 <duplicate_scalar/> 233 </axis> 234 </grid> 235 236 <grid id="grid_V_4strait_ice"> 237 <domain domain_ref="grid_V" /> 238 <axis axis_ref="section_ice"> 239 <duplicate_scalar/> 240 </axis> 241 </grid> 242 243 <grid id="grid_U_4strait_ice_hsum"> 244 <scalar > 245 <reduce_domain operation="sum" local="true"/> 246 <reduce_scalar operation="sum" /> 247 </scalar> 248 <axis axis_ref="section_ice"/> 249 </grid> 250 251 <grid id="grid_V_4strait_ice_hsum"> 252 <scalar > 253 <reduce_domain operation="sum" local="true"/> 254 <reduce_scalar operation="sum" /> 255 </scalar> 256 <axis axis_ref="section_ice"/> 257 </grid> 258 259 <grid id="grid_4strait_ice"> 260 <axis axis_ref="section_ice"/> 261 </grid> 262 263 <!-- scalars --> 264 <grid id="grid_scalar" > 265 <scalar/> 266 </grid> 267 268 <!-- ABL grid definition --> 269 <grid id="grid_TA_2D"> 270 <domain domain_ref="grid_T" /> 271 </grid> 272 <grid id="grid_TA_3D"> 273 <domain domain_ref="grid_T" /> 274 <axis id="ght_abl" /> 275 </grid> 276 <grid id="grid_WA_3D"> 277 <domain domain_ref="grid_T" /> 278 <axis id="ghw_abl" /> 279 </grid> 280 <!-- --> 281 282 <!-- grid definitions for multiple-linear-regression analysis (diamlr) --> 283 <grid id="diamlr_grid_scalar" > 284 <scalar /> 285 <scalar /> 286 </grid> 287 <grid id="diamlr_grid_T_2D" > 288 <domain domain_ref="grid_T" /> 289 <scalar /> 290 </grid> 291 <grid id="diamlr_grid_U_2D" > 292 <domain domain_ref="grid_U" /> 293 <scalar /> 294 </grid> 295 <grid id="diamlr_grid_V_2D" > 296 <domain domain_ref="grid_V" /> 297 <scalar /> 298 </grid> 299 <grid id="diamlr_grid_W_2D" > 300 <domain domain_ref="grid_W" /> 301 <scalar /> 302 </grid> 303 <grid id="diamlr_grid_2D_to_grid_T_3D" > 304 <domain domain_ref="grid_T" /> 305 <axis axis_ref="deptht"> 306 <duplicate_scalar /> 307 </axis> 308 </grid> 309 <grid id="diamlr_grid_2D_to_grid_U_3D" > 310 <domain domain_ref="grid_U" /> 311 <axis axis_ref="depthu"> 312 <duplicate_scalar /> 313 </axis> 314 </grid> 315 <grid id="diamlr_grid_2D_to_grid_V_3D" > 316 <domain domain_ref="grid_V" /> 317 <axis axis_ref="depthv"> 318 <duplicate_scalar /> 319 </axis> 320 </grid> 321 <grid id="diamlr_grid_2D_to_grid_W_3D" > 322 <domain domain_ref="grid_W" /> 323 <axis axis_ref="depthw"> 324 <duplicate_scalar /> 325 </axis> 326 </grid> 327 <grid id="diamlr_grid_2D_to_scalar" > 328 <scalar> 329 <reduce_domain operation="average" /> 330 </scalar> 331 <scalar /> 332 </grid> 333 <!-- grid definitions for the computation of daily detided model diagnostics (diadetide) --> 334 <grid id="diadetide_grid_T_2D" > 335 <domain domain_ref="grid_T" /> 336 <scalar /> 337 </grid> 338 <grid id="diadetide_grid_U_2D" > 339 <domain domain_ref="grid_U" /> 340 <scalar /> 341 </grid> 342 <grid id="diadetide_grid_V_2D" > 343 <domain domain_ref="grid_V" /> 344 <scalar /> 345 </grid> 346 <grid id="diadetide_grid_2D_to_grid_T_3D" > 347 <domain domain_ref="grid_T" /> 348 <axis axis_ref="deptht"> 349 <duplicate_scalar /> 350 </axis> 351 </grid> 352 <grid id="diadetide_grid_2D_to_grid_U_3D" > 353 <domain domain_ref="grid_U" /> 354 <axis axis_ref="depthu"> 355 <duplicate_scalar /> 356 </axis> 357 </grid> 358 <grid id="diadetide_grid_2D_to_grid_V_3D" > 359 <domain domain_ref="grid_V" /> 360 <axis axis_ref="depthv"> 361 <duplicate_scalar /> 362 </axis> 363 </grid> 364 <grid id="diadetide_grid_2D_to_grid_W_3D" > 365 <domain domain_ref="grid_W" /> 366 <axis axis_ref="depthw"> 367 <duplicate_scalar /> 368 </axis> 369 </grid> 370 371 </grid_definition> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/namelist_ref
r14017 r14021 237 237 ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) 238 238 ln_wave = .false. ! Activate coupling with wave (T => fill namsbc_wave) 239 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => ln_wave=.true. & fill namsbc_wave)240 ln_sdw = .false. ! Read 2D Surf Stokes Drift & Computation of 3D stokes drift (T => ln_wave=.true. & fill namsbc_wave)241 nn_sdrift = 0 ! Parameterization for the calculation of 3D-Stokes drift from the surface Stokes drift242 ! ! = 0 Breivik 2015 parameterization: v_z=v_0*[exp(2*k*z)/(1-8*k*z)]243 ! ! = 1 Phillips: v_z=v_o*[exp(2*k*z)-beta*sqrt(-2*k*pi*z)*erfc(sqrt(-2*k*z))]244 ! ! = 2 Phillips as (1) but using the wave frequency from a wave model245 ln_tauwoc = .false. ! Activate ocean stress modified by external wave induced stress (T => ln_wave=.true. & fill namsbc_wave)246 ln_tauw = .false. ! Activate ocean stress components from wave model247 ln_stcor = .false. ! Activate Stokes Coriolis term (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave)248 239 nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , 249 240 ! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) … … 386 377 sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' 387 378 sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' 388 sn_rcv_hsig = 'none' , 'no' , '' , '' , ''389 379 sn_rcv_iceflx = 'none' , 'no' , '' , '' , '' 390 380 sn_rcv_mslp = 'none' , 'no' , '' , '' , '' 391 sn_rcv_phioc = 'none' , 'no' , '' , '' , ''392 sn_rcv_sdrfx = 'none' , 'no' , '' , '' , ''393 sn_rcv_sdrfy = 'none' , 'no' , '' , '' , ''394 sn_rcv_wper = 'none' , 'no' , '' , '' , ''395 sn_rcv_wnum = 'none' , 'no' , '' , '' , ''396 sn_rcv_wfreq = 'none' , 'no' , '' , '' , ''397 sn_rcv_wdrag = 'none' , 'no' , '' , '' , ''398 381 sn_rcv_ts_ice = 'none' , 'no' , '' , '' , '' 399 382 sn_rcv_isf = 'none' , 'no' , '' , '' , '' 400 383 sn_rcv_icb = 'none' , 'no' , '' , '' , '' 401 sn_rcv_tauwoc = 'none' , 'no' , '' , '' , '' 402 sn_rcv_tauw = 'none' , 'no' , '' , '' , '' 403 sn_rcv_wdrag = 'none' , 'no' , '' , '' , '' 384 sn_rcv_hsig = 'none' , 'no' , '' ' '' , 'T' 385 sn_rcv_phioc = 'none' , 'no' , '' , '' , 'T' 386 sn_rcv_sdrfx = 'none' , 'no' , '' , '' , 'T' 387 sn_rcv_sdrfy = 'none' , 'no' , '' ' '' , 'T' 388 sn_rcv_wper = 'none' , 'no' , '' ' '' , 'T' 389 sn_rcv_wnum = 'none' , 'no' , '' ' '' , 'T' 390 sn_rcv_wstrf = 'none' , 'no' , '' ' '' , 'T' 391 sn_rcv_wdrag = 'none' , 'no' , '' ' '' , 'T' 392 sn_rcv_charn = 'none' , 'no' , '' , '' , 'T' 393 sn_rcv_taw = 'none' , 'no' , '' , '' , 'U,V' 394 sn_rcv_bhd = 'none' , 'no' , '' ' '' , 'T' 395 sn_rcv_tusd = 'none' , 'no' , '' ' '' , 'T' 396 sn_rcv_tvsd = 'none' , 'no' , '' ' '' , 'T' 404 397 / 405 398 !----------------------------------------------------------------------- … … 586 579 &namsbc_wave ! External fields from wave model (ln_wave=T) 587 580 !----------------------------------------------------------------------- 581 ln_sdw = .false. ! get the 2D Surf Stokes Drift & Compute the 3D stokes drift 582 ln_stcor = .false. ! add Stokes Coriolis and tracer advection terms 583 ln_cdgw = .false. ! Neutral drag coefficient read from wave model 584 ln_tauoc = .false. ! ocean stress is modified by wave induced stress 585 ln_wave_test= .false. ! Test case with constant wave fields 586 ! 587 ln_charn = .false. ! Charnock coefficient read from wave model (IFS only) 588 ln_taw = .false. ! ocean stress is modified by wave induced stress (coupled mode) 589 ln_phioc = .false. ! TKE flux from wave model 590 ln_bern_srfc= .false. ! wave induced pressure. Bernoulli head J term 591 ln_breivikFV_2016 = .false. ! breivik 2016 vertical stokes profile 592 ln_vortex_force = .false. ! Vortex Force term 593 ln_stshear = .false. ! include stokes shear in EKE computation 594 ! 588 595 cn_dir = './' ! root directory for the waves data location 589 596 !___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________! … … 595 602 sn_hsw = 'sdw_ecwaves_orca2' , 6. , 'hs' , .true. , .true. , 'yearly' , '' , '' , '' 596 603 sn_wmp = 'sdw_ecwaves_orca2' , 6. , 'wmp' , .true. , .true. , 'yearly' , '' , '' , '' 597 sn_wfr = 'sdw_ecwaves_orca2' , 6. , 'wfr' , .true. , .true. , 'yearly' , '' , '' , ''598 604 sn_wnum = 'sdw_ecwaves_orca2' , 6. , 'wave_num' , .true. , .true. , 'yearly' , '' , '' , '' 599 sn_tauwoc = 'sdw_ecwaves_orca2' , 6. , 'wave_stress', .true. , .true. , 'yearly' , '' , '' , '' 600 sn_tauwx = 'sdw_ecwaves_orca2' , 6. , 'wave_stress', .true. , .true. , 'yearly' , '' , '' , '' 601 sn_tauwy = 'sdw_ecwaves_orca2' , 6. , 'wave_stress', .true. , .true. , 'yearly' , '' , '' , '' 605 sn_tauoc = 'sdw_ecwaves_orca2' , 6. , 'wave_stress', .true. , .true. , 'yearly' , '' , '' , '' 602 606 / 603 607 !----------------------------------------------------------------------- … … 1126 1130 nn_npc = 1 ! frequency of application of npc 1127 1131 nn_npcp = 365 ! npc control print frequency 1132 ln_zdfmfc = .false. ! Mass Flux Convection 1128 1133 ! 1129 1134 ln_zdfddm = .false. ! double diffusive mixing … … 1176 1181 rn_mxlice = 10. ! max constant ice thickness value when scaling under sea-ice ( nn_mxlice=1) 1177 1182 rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value 1183 ln_mxhsw = .false. ! surface mixing length scale = F(wave height) 1178 1184 ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) 1179 1185 rn_lc = 0.15 ! coef. associated to Langmuir cells … … 1191 1197 ! ! = 2 weighted by 1-fr_i 1192 1198 ! ! = 3 weighted by 1-MIN(1,4*fr_i) 1199 nn_bc_surf = 1 ! surface condition (0/1=Dir/Neum) ! Only applicable for wave coupling (ln_cplwave=1) 1200 nn_bc_bot = 1 ! bottom condition (0/1=Dir/Neum) ! Only applicable for wave coupling (ln_cplwave=1) 1193 1201 / 1194 1202 !----------------------------------------------------------------------- … … 1235 1243 ! ! = 1: Pierson Moskowitz wave spectrum 1236 1244 ! ! = 0: Constant La# = 0.3 1245 / 1246 !----------------------------------------------------------------------- 1247 &namzdf_mfc ! Mass Flux Convection 1248 !----------------------------------------------------------------------- 1249 ln_edmfuv = .false. ! Activate on velocity fields (Not available yet) 1250 rn_cemf = 1. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1251 rn_cwmf = -0. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1252 rn_cent = 2.e-5 ! entrain of convective area 1253 rn_cdet = 3.e-5 ! detrain of convective area 1254 rn_cap = 0.9 ! Coef. for CAP estimation 1255 App_max = 0.1 ! Maximum convection area (% of the cell) 1237 1256 / 1238 1257 !----------------------------------------------------------------------- -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/ice.F90
r14017 r14021 150 150 ! 151 151 ! !!** ice-rheology namelist (namdyn_rhg) ** 152 ! -- evp 152 153 LOGICAL , PUBLIC :: ln_rhg_EVP ! EVP rheology switch, used for rdgrft and rheology 153 154 LOGICAL , PUBLIC :: ln_rhg_EAP ! EAP rheology switch, used for rdgrft and rheology 154 155 LOGICAL , PUBLIC :: ln_aEVP !: using adaptive EVP (T or F) 155 REAL(wp), PUBLIC :: rn_creepl !: creep limit : has to be under 1.0e-9156 REAL(wp), PUBLIC :: rn_creepl !: creep limit (has to be low enough, circa 10-9 m/s, depending on rheology) 156 157 REAL(wp), PUBLIC :: rn_ecc !: eccentricity of the elliptical yield curve 157 158 INTEGER , PUBLIC :: nn_nevp !: number of iterations for subcycling 158 159 REAL(wp), PUBLIC :: rn_relast !: ratio => telast/rDt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 159 160 INTEGER , PUBLIC :: nn_rhg_chkcvg !: check ice rheology convergence 161 ! -- vp 162 LOGICAL , PUBLIC :: ln_rhg_VP !: VP rheology 163 INTEGER , PUBLIC :: nn_vp_nout !: Number of outer iterations 164 INTEGER , PUBLIC :: nn_vp_ninn !: Number of inner iterations (linear system solver) 165 INTEGER , PUBLIC :: nn_vp_chkcvg !: Number of iterations every each convergence is checked 160 166 ! 161 167 ! !!** ice-advection namelist (namdyn_adv) ** … … 210 216 ! !!** ice-ponds namelist (namthd_pnd) 211 217 LOGICAL , PUBLIC :: ln_pnd !: Melt ponds (T) or not (F) 212 LOGICAL , PUBLIC :: ln_pnd_LEV !: Melt ponds scheme from Holland et al (2012), Flocco et al (2007, 2010) 213 REAL(wp), PUBLIC :: rn_apnd_min !: Minimum ice fraction that contributes to melt ponds 214 REAL(wp), PUBLIC :: rn_apnd_max !: Maximum ice fraction that contributes to melt ponds 218 LOGICAL , PUBLIC :: ln_pnd_TOPO !: Topographic Melt ponds scheme (Flocco et al 2007, 2010) 219 LOGICAL , PUBLIC :: ln_pnd_LEV !: Simple melt pond scheme 220 REAL(wp), PUBLIC :: rn_apnd_min !: Minimum fraction of melt water contributing to ponds 221 REAL(wp), PUBLIC :: rn_apnd_max !: Maximum fraction of melt water contributing to ponds 222 REAL(wp), PUBLIC :: rn_pnd_flush !: Pond flushing efficiency (tuning parameter) 215 223 LOGICAL , PUBLIC :: ln_pnd_CST !: Melt ponds scheme with constant fraction and depth 216 224 REAL(wp), PUBLIC :: rn_apnd !: prescribed pond fraction (0<rn_apnd<1) … … 345 353 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: om_i !: mean ice age over all categories (s) 346 354 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tau_icebfr !: ice friction on ocean bottom (landfast param activated) 355 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: icb_mask !: mask of grounded icebergs if landfast [0-1] 347 356 348 357 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: t_s !: Snow temperatures [K] … … 366 375 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vt_il !: total melt pond lid volume per gridcell area [m] 367 376 377 ! meltwater arrays to save for melt ponds (mv - could be grouped in a single meltwater volume array) 378 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dh_i_sum_2d !: surface melt (2d arrays for ponds) [m] 379 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dh_s_mlt_2d !: snow surf melt (2d arrays for ponds) [m] 380 368 381 !!---------------------------------------------------------------------- 369 382 !! * Global variables at before time step 370 383 !!---------------------------------------------------------------------- 371 384 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: v_s_b, v_i_b, h_s_b, h_i_b !: snow and ice volumes/thickness 385 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: v_ip_b, v_il_b !: ponds and lids volumes 372 386 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i_b, sv_i_b !: 373 387 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e_s_b !: snow heat content … … 396 410 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_vsnw !: snw volume variation [m/s] 397 411 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_aice !: ice conc. variation [s-1] 412 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_vpnd !: pond volume variation [m/s] 398 413 ! 399 414 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_adv_mass !: advection of mass (kg/m2/s) … … 473 488 & et_i (jpi,jpj) , et_s (jpi,jpj) , tm_i(jpi,jpj) , tm_s(jpi,jpj) , & 474 489 & sm_i (jpi,jpj) , tm_su(jpi,jpj) , hm_i(jpi,jpj) , hm_s(jpi,jpj) , & 475 & om_i (jpi,jpj) , bvm_i(jpi,jpj) , tau_icebfr(jpi,jpj) 490 & om_i (jpi,jpj) , bvm_i(jpi,jpj) , tau_icebfr(jpi,jpj), icb_mask(jpi,jpj), STAT=ierr(ii) ) 476 491 477 492 ii = ii + 1 … … 483 498 ii = ii + 1 484 499 ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , h_ip(jpi,jpj,jpl), & 485 & v_il(jpi,jpj,jpl) , h_il(jpi,jpj,jpl) , a_ip_eff (jpi,jpj,jpl) , STAT = ierr(ii) ) 500 & v_il(jpi,jpj,jpl) , h_il(jpi,jpj,jpl) , a_ip_eff (jpi,jpj,jpl) , & 501 & dh_i_sum_2d(jpi,jpj,jpl) , dh_s_mlt_2d(jpi,jpj,jpl) , STAT = ierr(ii) ) 486 502 487 503 ii = ii + 1 … … 491 507 ii = ii + 1 492 508 ALLOCATE( v_s_b (jpi,jpj,jpl) , v_i_b (jpi,jpj,jpl) , h_s_b(jpi,jpj,jpl) , h_i_b(jpi,jpj,jpl), & 509 & v_ip_b(jpi,jpj,jpl) , v_il_b(jpi,jpj,jpl) , & 493 510 & a_i_b (jpi,jpj,jpl) , sv_i_b(jpi,jpj,jpl) , e_i_b(jpi,jpj,nlay_i,jpl) , e_s_b(jpi,jpj,nlay_s,jpl) , & 494 511 & STAT=ierr(ii) ) … … 505 522 ALLOCATE( diag_trp_vi(jpi,jpj) , diag_trp_vs (jpi,jpj) , diag_trp_ei(jpi,jpj), & 506 523 & diag_trp_es(jpi,jpj) , diag_trp_sv (jpi,jpj) , diag_heat (jpi,jpj), & 507 & diag_sice (jpi,jpj) , diag_vice (jpi,jpj) , diag_vsnw (jpi,jpj), diag_aice(jpi,jpj), &524 & diag_sice (jpi,jpj) , diag_vice (jpi,jpj) , diag_vsnw (jpi,jpj), diag_aice(jpi,jpj), diag_vpnd(jpi,jpj), & 508 525 & diag_adv_mass(jpi,jpj), diag_adv_salt(jpi,jpj), diag_adv_heat(jpi,jpj), STAT=ierr(ii) ) 509 526 -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icectl.F90
r13601 r14021 12 12 !! 'key_si3' SI3 sea-ice model 13 13 !!---------------------------------------------------------------------- 14 !! ice_cons_hsm : conservation tests on heat, salt and mass during a time step (global) 14 !! ice_cons_hsm : conservation tests on heat, salt and mass during a time step (global) 15 15 !! ice_cons_final : conservation tests on heat, salt and mass at end of time step (global) 16 16 !! ice_cons2D : conservation tests on heat, salt and mass at each gridcell … … 55 55 CHARACTER(LEN=50) :: clname="icedrift_diagnostics.ascii" ! ascii filename 56 56 INTEGER :: numicedrift ! outfile unit 57 REAL(wp) :: rdiag_icemass, rdiag_icesalt, rdiag_iceheat 58 REAL(wp) :: rdiag_adv_icemass, rdiag_adv_icesalt, rdiag_adv_iceheat 59 57 REAL(wp) :: rdiag_icemass, rdiag_icesalt, rdiag_iceheat 58 REAL(wp) :: rdiag_adv_icemass, rdiag_adv_icesalt, rdiag_adv_iceheat 59 60 60 !! * Substitutions 61 61 # include "do_loop_substitute.h90" … … 77 77 !! It prints in ocean.output if there is a violation of conservation at each time-step 78 78 !! The thresholds (zchk_m, zchk_s, zchk_t) determine violations 79 !! For salt and heat thresholds, ice is considered to have a salinity of 10 80 !! and a heat content of 3e5 J/kg (=latent heat of fusion) 79 !! For salt and heat thresholds, ice is considered to have a salinity of 10 80 !! and a heat content of 3e5 J/kg (=latent heat of fusion) 81 81 !!------------------------------------------------------------------- 82 82 INTEGER , INTENT(in) :: icount ! called at: =0 the begining of the routine, =1 the end … … 85 85 !! 86 86 REAL(wp) :: zdiag_mass, zdiag_salt, zdiag_heat, & 87 & zdiag_vmin, zdiag_amin, zdiag_amax, zdiag_eimin, zdiag_esmin, zdiag_smin 87 & zdiag_vimin, zdiag_vsmin, zdiag_vpmin, zdiag_vlmin, zdiag_aimin, zdiag_aimax, & 88 & zdiag_eimin, zdiag_esmin, zdiag_simin 88 89 REAL(wp) :: zvtrp, zetrp 89 90 REAL(wp) :: zarea … … 92 93 IF( icount == 0 ) THEN 93 94 94 pdiag_v = glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos , dim=3 ) * e1e2t )95 pdiag_v = glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos + ( v_ip + v_il ) * rhow, dim=3 ) * e1e2t ) 95 96 pdiag_s = glob_sum( 'icectl', SUM( sv_i * rhoi , dim=3 ) * e1e2t ) 96 97 pdiag_t = glob_sum( 'icectl', ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) ) * e1e2t ) … … 112 113 113 114 ! -- mass diag -- ! 114 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos, dim=3 ) * e1e2t ) - pdiag_v ) * r1_Dt_ice & 115 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos + ( v_ip + v_il ) * rhow, dim=3 ) * e1e2t ) & 116 & - pdiag_v ) * r1_Dt_ice & 115 117 & + glob_sum( 'icectl', ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + & 116 118 & wfx_lam + wfx_pnd + wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + & … … 132 134 133 135 ! -- min/max diag -- ! 134 zdiag_amax = glob_max( 'icectl', SUM( a_i, dim=3 ) ) 135 zdiag_vmin = glob_min( 'icectl', v_i ) 136 zdiag_amin = glob_min( 'icectl', a_i ) 137 zdiag_smin = glob_min( 'icectl', sv_i ) 136 zdiag_aimax = glob_max( 'icectl', SUM( a_i, dim=3 ) ) 137 zdiag_vimin = glob_min( 'icectl', v_i ) 138 zdiag_vsmin = glob_min( 'icectl', v_s ) 139 zdiag_vpmin = glob_min( 'icectl', v_ip ) 140 zdiag_vlmin = glob_min( 'icectl', v_il ) 141 zdiag_aimin = glob_min( 'icectl', a_i ) 142 zdiag_simin = glob_min( 'icectl', sv_i ) 138 143 zdiag_eimin = glob_min( 'icectl', SUM( e_i, dim=3 ) ) 139 144 zdiag_esmin = glob_min( 'icectl', SUM( e_s, dim=3 ) ) … … 143 148 zetrp = glob_sum( 'icectl', diag_adv_heat * e1e2t ) 144 149 145 ! ice area (+epsi10 to set a threshold > 0 when there is no ice) 150 ! ice area (+epsi10 to set a threshold > 0 when there is no ice) 146 151 zarea = glob_sum( 'icectl', SUM( a_i + epsi10, dim=3 ) * e1e2t ) 147 152 … … 155 160 & WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * rDt_ice 156 161 ! check negative values 157 IF( zdiag_vmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_i < 0 = ',zdiag_vmin 158 IF( zdiag_amin < 0. ) WRITE(numout,*) cd_routine,' : violation a_i < 0 = ',zdiag_amin 159 IF( zdiag_smin < 0. ) WRITE(numout,*) cd_routine,' : violation s_i < 0 = ',zdiag_smin 160 IF( zdiag_eimin < 0. ) WRITE(numout,*) cd_routine,' : violation e_i < 0 = ',zdiag_eimin 161 IF( zdiag_esmin < 0. ) WRITE(numout,*) cd_routine,' : violation e_s < 0 = ',zdiag_esmin 162 IF( zdiag_vimin < 0. ) WRITE(numout,*) cd_routine,' : violation v_i < 0 = ',zdiag_vimin 163 IF( zdiag_vsmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_s < 0 = ',zdiag_vsmin 164 IF( zdiag_vpmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_ip < 0 = ',zdiag_vpmin 165 IF( zdiag_vlmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_il < 0 = ',zdiag_vlmin 166 IF( zdiag_aimin < 0. ) WRITE(numout,*) cd_routine,' : violation a_i < 0 = ',zdiag_aimin 167 IF( zdiag_simin < 0. ) WRITE(numout,*) cd_routine,' : violation s_i < 0 = ',zdiag_simin 168 IF( zdiag_eimin < 0. ) WRITE(numout,*) cd_routine,' : violation e_i < 0 = ',zdiag_eimin 169 IF( zdiag_esmin < 0. ) WRITE(numout,*) cd_routine,' : violation e_s < 0 = ',zdiag_esmin 162 170 ! check maximum ice concentration 163 IF( zdiag_a max >MAX(rn_amax_n,rn_amax_s)+epsi10 .AND. cd_routine /= 'icedyn_adv' .AND. cd_routine /= 'icedyn_rdgrft' ) &164 & WRITE(numout,*) cd_routine,' : violation a_i > amax = ',zdiag_a max171 IF( zdiag_aimax>MAX(rn_amax_n,rn_amax_s)+epsi10 .AND. cd_routine /= 'icedyn_adv' .AND. cd_routine /= 'icedyn_rdgrft' ) & 172 & WRITE(numout,*) cd_routine,' : violation a_i > amax = ',zdiag_aimax 165 173 ! check if advection scheme is conservative 166 174 IF( ABS(zvtrp) > zchk_m * rn_icechk_glo * zarea .AND. cd_routine == 'icedyn_adv' ) & 167 & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * r dt_ice175 & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * rDt_ice 168 176 IF( ABS(zetrp) > zchk_t * rn_icechk_glo * zarea .AND. cd_routine == 'icedyn_adv' ) & 169 & WRITE(numout,*) cd_routine,' : violation adv scheme [J] = ',zetrp * r dt_ice177 & WRITE(numout,*) cd_routine,' : violation adv scheme [J] = ',zetrp * rDt_ice 170 178 ENDIF 171 179 ! … … 183 191 !! It prints in ocean.output if there is a violation of conservation at each time-step 184 192 !! The thresholds (zchk_m, zchk_s, zchk_t) determine the violations 185 !! For salt and heat thresholds, ice is considered to have a salinity of 10 186 !! and a heat content of 3e5 J/kg (=latent heat of fusion) 193 !! For salt and heat thresholds, ice is considered to have a salinity of 10 194 !! and a heat content of 3e5 J/kg (=latent heat of fusion) 187 195 !!------------------------------------------------------------------- 188 196 CHARACTER(len=*), INTENT(in) :: cd_routine ! name of the routine … … 193 201 ! water flux 194 202 ! -- mass diag -- ! 195 zdiag_mass = glob_sum( 'icectl', ( wfx_ice + wfx_snw + wfx_spr + wfx_sub&196 & + diag_vice + diag_vsnw - diag_adv_mass ) * e1e2t )203 zdiag_mass = glob_sum( 'icectl', ( wfx_ice + wfx_snw + wfx_spr + wfx_sub + wfx_pnd & 204 & + diag_vice + diag_vsnw + diag_vpnd - diag_adv_mass ) * e1e2t ) 197 205 198 206 ! -- salt diag -- ! … … 200 208 201 209 ! -- heat diag -- ! 202 zdiag_heat 210 zdiag_heat = glob_sum( 'icectl', ( qt_oce_ai - qt_atm_oi + diag_heat - diag_adv_heat ) * e1e2t ) 203 211 ! equivalent to this: 204 212 !!zdiag_heat = glob_sum( 'icectl', ( -diag_heat + hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & … … 206 214 !! & ) * e1e2t ) 207 215 208 ! ice area (+epsi10 to set a threshold > 0 when there is no ice) 216 ! ice area (+epsi10 to set a threshold > 0 when there is no ice) 209 217 zarea = glob_sum( 'icectl', SUM( a_i + epsi10, dim=3 ) * e1e2t ) 210 218 … … 235 243 !! 236 244 REAL(wp), DIMENSION(jpi,jpj) :: zdiag_mass, zdiag_salt, zdiag_heat, & 237 & zdiag_amin, zdiag_vmin, zdiag_smin, zdiag_emin !!, zdiag_amax 245 & zdiag_amin, zdiag_vmin, zdiag_smin, zdiag_emin !!, zdiag_amax 238 246 INTEGER :: jl, jk 239 247 LOGICAL :: ll_stop_m = .FALSE. … … 245 253 IF( icount == 0 ) THEN 246 254 247 pdiag_v = SUM( v_i * rhoi + v_s * rhos , dim=3 )248 pdiag_s = SUM( sv_i * rhoi 255 pdiag_v = SUM( v_i * rhoi + v_s * rhos + ( v_ip + v_il ) * rhow, dim=3 ) 256 pdiag_s = SUM( sv_i * rhoi , dim=3 ) 249 257 pdiag_t = SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) 250 258 … … 253 261 & wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + wfx_ice_sub + wfx_spr 254 262 ! salt flux 255 pdiag_fs = sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam 263 pdiag_fs = sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam 256 264 ! heat flux 257 pdiag_ft = hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 265 pdiag_ft = hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 258 266 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr 259 267 … … 261 269 262 270 ! -- mass diag -- ! 263 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos , dim=3 ) - pdiag_v ) * r1_Dt_ice&271 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos + ( v_ip + v_il ) * rhow, dim=3 ) - pdiag_v ) * r1_Dt_ice & 264 272 & + ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + wfx_lam + wfx_pnd + & 265 273 & wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + wfx_ice_sub + wfx_spr ) & … … 275 283 ! -- heat diag -- ! 276 284 zdiag_heat = ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) - pdiag_t ) * r1_Dt_ice & 277 & + ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 285 & + ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 278 286 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr ) & 279 287 & - pdiag_ft … … 316 324 IF( ll_stop_s ) CALL ctl_stop( 'STOP', cd_routine//': ice salt conservation issue' ) 317 325 IF( ll_stop_t ) CALL ctl_stop( 'STOP', cd_routine//': ice heat conservation issue' ) 318 326 319 327 ENDIF 320 328 … … 324 332 !!--------------------------------------------------------------------- 325 333 !! *** ROUTINE ice_cons_wri *** 326 !! 327 !! ** Purpose : create a NetCDF file named cdfile_name which contains 334 !! 335 !! ** Purpose : create a NetCDF file named cdfile_name which contains 328 336 !! the instantaneous fields when conservation issue occurs 329 337 !! … … 332 340 CHARACTER(len=*), INTENT( in ) :: cdfile_name ! name of the file created 333 341 REAL(wp), DIMENSION(:,:), INTENT( in ) :: pdiag_mass, pdiag_salt, pdiag_heat, & 334 & pdiag_amin, pdiag_vmin, pdiag_smin, pdiag_emin !!, pdiag_amax 342 & pdiag_amin, pdiag_vmin, pdiag_smin, pdiag_emin !!, pdiag_amax 335 343 !! 336 344 INTEGER :: inum 337 345 !!---------------------------------------------------------------------- 338 ! 346 ! 339 347 IF(lwp) WRITE(numout,*) 340 348 IF(lwp) WRITE(numout,*) 'ice_cons_wri : single instantaneous ice state' 341 349 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~ named :', cdfile_name, '...nc' 342 IF(lwp) WRITE(numout,*) 350 IF(lwp) WRITE(numout,*) 343 351 344 352 CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 345 353 346 354 CALL iom_rstput( 0, 0, inum, 'cons_mass', pdiag_mass(:,:) , ktype = jp_r8 ) ! ice mass spurious lost/gain 347 355 CALL iom_rstput( 0, 0, inum, 'cons_salt', pdiag_salt(:,:) , ktype = jp_r8 ) ! ice salt spurious lost/gain 348 356 CALL iom_rstput( 0, 0, inum, 'cons_heat', pdiag_heat(:,:) , ktype = jp_r8 ) ! ice heat spurious lost/gain 349 357 ! other diags 350 CALL iom_rstput( 0, 0, inum, 'aneg_count', pdiag_amin(:,:) , ktype = jp_r8 ) ! 351 CALL iom_rstput( 0, 0, inum, 'vneg_count', pdiag_vmin(:,:) , ktype = jp_r8 ) ! 352 CALL iom_rstput( 0, 0, inum, 'sneg_count', pdiag_smin(:,:) , ktype = jp_r8 ) ! 353 CALL iom_rstput( 0, 0, inum, 'eneg_count', pdiag_emin(:,:) , ktype = jp_r8 ) ! 354 358 CALL iom_rstput( 0, 0, inum, 'aneg_count', pdiag_amin(:,:) , ktype = jp_r8 ) ! 359 CALL iom_rstput( 0, 0, inum, 'vneg_count', pdiag_vmin(:,:) , ktype = jp_r8 ) ! 360 CALL iom_rstput( 0, 0, inum, 'sneg_count', pdiag_smin(:,:) , ktype = jp_r8 ) ! 361 CALL iom_rstput( 0, 0, inum, 'eneg_count', pdiag_emin(:,:) , ktype = jp_r8 ) ! 362 ! mean state 363 CALL iom_rstput( 0, 0, inum, 'icecon' , SUM(a_i ,dim=3) , ktype = jp_r8 ) ! 364 CALL iom_rstput( 0, 0, inum, 'icevol' , SUM(v_i ,dim=3) , ktype = jp_r8 ) ! 365 CALL iom_rstput( 0, 0, inum, 'snwvol' , SUM(v_s ,dim=3) , ktype = jp_r8 ) ! 366 CALL iom_rstput( 0, 0, inum, 'pndvol' , SUM(v_ip,dim=3) , ktype = jp_r8 ) ! 367 CALL iom_rstput( 0, 0, inum, 'lidvol' , SUM(v_il,dim=3) , ktype = jp_r8 ) ! 368 355 369 CALL iom_close( inum ) 356 370 357 371 END SUBROUTINE ice_cons_wri 358 372 359 373 SUBROUTINE ice_ctl( kt ) 360 374 !!------------------------------------------------------------------- 361 !! *** ROUTINE ice_ctl *** 362 !! 375 !! *** ROUTINE ice_ctl *** 376 !! 363 377 !! ** Purpose : control checks 364 378 !!------------------------------------------------------------------- … … 372 386 inb_alp(:) = 0 373 387 ialert_id = 0 374 388 375 389 ! Alert if very high salinity 376 390 ialert_id = ialert_id + 1 ! reference number of this alert … … 416 430 END_3D 417 431 END DO 418 432 419 433 ! Alert if very warm ice 420 434 ialert_id = ialert_id + 1 ! reference number of this alert … … 430 444 END_3D 431 445 END DO 432 446 433 447 ! Alerte if very thick ice 434 448 ialert_id = ialert_id + 1 ! reference number of this alert 435 449 cl_alname(ialert_id) = ' Very thick ice ' ! name of the alert 436 jl = jpl 450 jl = jpl 437 451 DO_2D( 1, 1, 1, 1 ) 438 452 IF( h_i(ji,jj,jl) > 50._wp ) THEN … … 446 460 ialert_id = ialert_id + 1 ! reference number of this alert 447 461 cl_alname(ialert_id) = ' Very thin ice ' ! name of the alert 448 jl = 1 462 jl = 1 449 463 DO_2D( 1, 1, 1, 1 ) 450 464 IF( h_i(ji,jj,jl) < rn_himin ) THEN … … 470 484 cl_alname(ialert_id) = ' Ice on continents ' ! name of the alert 471 485 DO_2D( 1, 1, 1, 1 ) 472 IF( tmask(ji,jj,1) == 0._wp .AND. ( at_i(ji,jj) > 0._wp .OR. vt_i(ji,jj) > 0._wp ) ) THEN 486 IF( tmask(ji,jj,1) == 0._wp .AND. ( at_i(ji,jj) > 0._wp .OR. vt_i(ji,jj) > 0._wp ) ) THEN 473 487 WRITE(numout,*) ' ALERTE : Ice on continents ',at_i(ji,jj),vt_i(ji,jj) 474 488 WRITE(numout,*) ' at i,j = ',ji,jj … … 482 496 DO_2D( 1, 1, 1, 1 ) 483 497 IF( ( vt_i(ji,jj) == 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. & 484 & ( vt_i(ji,jj) > 0._wp .AND. at_i(ji,jj) == 0._wp ) ) THEN 498 & ( vt_i(ji,jj) > 0._wp .AND. at_i(ji,jj) == 0._wp ) ) THEN 485 499 WRITE(numout,*) ' ALERTE : Incompatible ice conc and vol ',at_i(ji,jj),vt_i(ji,jj) 486 500 WRITE(numout,*) ' at i,j = ',ji,jj … … 506 520 ! 507 521 END SUBROUTINE ice_ctl 508 522 509 523 SUBROUTINE ice_prt( kt, ki, kj, kn, cd1 ) 510 524 !!------------------------------------------------------------------- 511 !! *** ROUTINE ice_prt *** 512 !! 513 !! ** Purpose : Writes global ice state on the (i,j) point 514 !! in ocean.ouput 515 !! 3 possibilities exist 525 !! *** ROUTINE ice_prt *** 526 !! 527 !! ** Purpose : Writes global ice state on the (i,j) point 528 !! in ocean.ouput 529 !! 3 possibilities exist 516 530 !! n = 1/-1 -> simple ice state 517 531 !! n = 2 -> exhaustive state 518 532 !! n = 3 -> ice/ocean salt fluxes 519 533 !! 520 !! ** input : point coordinates (i,j) 534 !! ** input : point coordinates (i,j) 521 535 !! n : number of the option 522 536 !!------------------------------------------------------------------- … … 536 550 ! Simple state 537 551 !---------------- 538 552 539 553 IF ( kn == 1 .OR. kn == -1 ) THEN 540 554 WRITE(numout,*) ' ice_prt - Point : ',ji,jj … … 552 566 WRITE(numout,*) ' - Cell values ' 553 567 WRITE(numout,*) ' ~~~~~~~~~~~ ' 554 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 555 WRITE(numout,*) ' ato_i : ', ato_i(ji,jj) 556 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 557 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 568 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 569 WRITE(numout,*) ' ato_i : ', ato_i(ji,jj) 570 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 571 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 558 572 DO jl = 1, jpl 559 573 WRITE(numout,*) ' - Category (', jl,')' … … 578 592 ! Exhaustive state 579 593 !-------------------- 580 594 581 595 IF ( kn .EQ. 2 ) THEN 582 596 WRITE(numout,*) ' ice_prt - Point : ',ji,jj … … 584 598 WRITE(numout,*) ' Exhaustive state ' 585 599 WRITE(numout,*) ' lat - long ', gphit(ji,jj), glamt(ji,jj) 586 WRITE(numout,*) 600 WRITE(numout,*) 587 601 WRITE(numout,*) ' - Cell values ' 588 602 WRITE(numout,*) ' ~~~~~~~~~~~ ' 589 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 590 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 591 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 603 WRITE(numout,*) ' at_i : ', at_i(ji,jj) 604 WRITE(numout,*) ' vt_i : ', vt_i(ji,jj) 605 WRITE(numout,*) ' vt_s : ', vt_s(ji,jj) 592 606 WRITE(numout,*) ' u_ice(i-1,j) : ', u_ice(ji-1,jj) 593 607 WRITE(numout,*) ' u_ice(i ,j) : ', u_ice(ji,jj) … … 596 610 WRITE(numout,*) ' strength : ', strength(ji,jj) 597 611 WRITE(numout,*) 598 612 599 613 DO jl = 1, jpl 600 614 WRITE(numout,*) ' - Category (',jl,')' 601 WRITE(numout,*) ' ~~~~~~~~ ' 615 WRITE(numout,*) ' ~~~~~~~~ ' 602 616 WRITE(numout,*) ' h_i : ', h_i(ji,jj,jl) , ' h_s : ', h_s(ji,jj,jl) 603 617 WRITE(numout,*) ' t_i : ', t_i(ji,jj,1:nlay_i,jl) 604 618 WRITE(numout,*) ' t_su : ', t_su(ji,jj,jl) , ' t_s : ', t_s(ji,jj,1:nlay_s,jl) 605 619 WRITE(numout,*) ' s_i : ', s_i(ji,jj,jl) , ' o_i : ', o_i(ji,jj,jl) 606 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' a_i_b : ', a_i_b(ji,jj,jl) 607 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' v_i_b : ', v_i_b(ji,jj,jl) 608 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' v_s_b : ', v_s_b(ji,jj,jl) 609 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl) , ' ei1 : ', e_i_b(ji,jj,1,jl) 610 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl) , ' ei2_b : ', e_i_b(ji,jj,2,jl) 611 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' e_snow_b : ', e_s_b(ji,jj,1,jl) 612 WRITE(numout,*) ' sv_i : ', sv_i(ji,jj,jl) , ' sv_i_b : ', sv_i_b(ji,jj,jl) 620 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' a_i_b : ', a_i_b(ji,jj,jl) 621 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' v_i_b : ', v_i_b(ji,jj,jl) 622 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' v_s_b : ', v_s_b(ji,jj,jl) 623 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl) , ' ei1 : ', e_i_b(ji,jj,1,jl) 624 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl) , ' ei2_b : ', e_i_b(ji,jj,2,jl) 625 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' e_snow_b : ', e_s_b(ji,jj,1,jl) 626 WRITE(numout,*) ' sv_i : ', sv_i(ji,jj,jl) , ' sv_i_b : ', sv_i_b(ji,jj,jl) 613 627 END DO !jl 614 628 615 629 WRITE(numout,*) 616 630 WRITE(numout,*) ' - Heat / FW fluxes ' … … 620 634 WRITE(numout,*) ' qns_ini : ', (1._wp-at_i_b(ji,jj)) * qns(ji,jj) + SUM( a_i_b(ji,jj,:) * qns_ice(ji,jj,:) ) 621 635 WRITE(numout,*) 622 WRITE(numout,*) 623 WRITE(numout,*) ' sst : ', sst_m(ji,jj) 624 WRITE(numout,*) ' sss : ', sss_m(ji,jj) 625 WRITE(numout,*) 636 WRITE(numout,*) 637 WRITE(numout,*) ' sst : ', sst_m(ji,jj) 638 WRITE(numout,*) ' sss : ', sss_m(ji,jj) 639 WRITE(numout,*) 626 640 WRITE(numout,*) ' - Stresses ' 627 641 WRITE(numout,*) ' ~~~~~~~~ ' 628 WRITE(numout,*) ' utau_ice : ', utau_ice(ji,jj) 642 WRITE(numout,*) ' utau_ice : ', utau_ice(ji,jj) 629 643 WRITE(numout,*) ' vtau_ice : ', vtau_ice(ji,jj) 630 WRITE(numout,*) ' utau : ', utau (ji,jj) 644 WRITE(numout,*) ' utau : ', utau (ji,jj) 631 645 WRITE(numout,*) ' vtau : ', vtau (ji,jj) 632 646 ENDIF 633 647 634 648 !--------------------- 635 649 ! Salt / heat fluxes 636 650 !--------------------- 637 651 638 652 IF ( kn .EQ. 3 ) THEN 639 653 WRITE(numout,*) ' ice_prt - Point : ',ji,jj … … 650 664 WRITE(numout,*) ' qt_atm_oi : ', qt_atm_oi(ji,jj) 651 665 WRITE(numout,*) ' qt_oce_ai : ', qt_oce_ai(ji,jj) 652 WRITE(numout,*) ' dhc : ', diag_heat(ji,jj) 666 WRITE(numout,*) ' dhc : ', diag_heat(ji,jj) 653 667 WRITE(numout,*) 654 668 WRITE(numout,*) ' hfx_dyn : ', hfx_dyn(ji,jj) 655 669 WRITE(numout,*) ' hfx_thd : ', hfx_thd(ji,jj) 656 670 WRITE(numout,*) ' hfx_res : ', hfx_res(ji,jj) 657 WRITE(numout,*) ' qsb_ice_bot : ', qsb_ice_bot(ji,jj) 671 WRITE(numout,*) ' qsb_ice_bot : ', qsb_ice_bot(ji,jj) 658 672 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_Dt_ice 659 673 WRITE(numout,*) … … 666 680 WRITE(numout,*) 667 681 WRITE(numout,*) ' - Momentum fluxes ' 668 WRITE(numout,*) ' utau : ', utau(ji,jj) 682 WRITE(numout,*) ' utau : ', utau(ji,jj) 669 683 WRITE(numout,*) ' vtau : ', vtau(ji,jj) 670 ENDIF 684 ENDIF 671 685 WRITE(numout,*) ' ' 672 686 ! … … 680 694 !! *** ROUTINE ice_prt3D *** 681 695 !! 682 !! ** Purpose : CTL prints of ice arrays in case sn_cfctl%prtctl is activated 696 !! ** Purpose : CTL prints of ice arrays in case sn_cfctl%prtctl is activated 683 697 !! 684 698 !!------------------------------------------------------------------- 685 699 CHARACTER(len=*), INTENT(in) :: cd_routine ! name of the routine 686 700 INTEGER :: jk, jl ! dummy loop indices 687 701 688 702 CALL prt_ctl_info(' ========== ') 689 703 CALL prt_ctl_info( cd_routine ) … … 704 718 CALL prt_ctl(tab2d_1=delta_i , clinfo1=' delta_i :') 705 719 CALL prt_ctl(tab2d_1=u_ice , clinfo1=' u_ice :', tab2d_2=v_ice , clinfo2=' v_ice :') 706 720 707 721 DO jl = 1, jpl 708 722 CALL prt_ctl_info(' ') … … 721 735 CALL prt_ctl(tab2d_1=sv_i (:,:,jl) , clinfo1= ' sv_i : ') 722 736 CALL prt_ctl(tab2d_1=oa_i (:,:,jl) , clinfo1= ' oa_i : ') 723 737 724 738 DO jk = 1, nlay_i 725 739 CALL prt_ctl_info(' - Layer : ', ivar=jk) … … 728 742 END DO 729 743 END DO 730 744 731 745 CALL prt_ctl_info(' ') 732 746 CALL prt_ctl_info(' - Stresses : ') … … 734 748 CALL prt_ctl(tab2d_1=utau , clinfo1= ' utau : ', tab2d_2=vtau , clinfo2= ' vtau : ') 735 749 CALL prt_ctl(tab2d_1=utau_ice , clinfo1= ' utau_ice : ', tab2d_2=vtau_ice , clinfo2= ' vtau_ice : ') 736 750 737 751 END SUBROUTINE ice_prt3D 738 752 … … 776 790 ! -- mass diag -- ! 777 791 zdiag_mass = glob_sum( 'icectl', ( wfx_ice + wfx_snw + wfx_spr + wfx_sub & 778 & + diag_vice + diag_vsnw - diag_adv_mass ) * e1e2t ) * r dt_ice792 & + diag_vice + diag_vsnw - diag_adv_mass ) * e1e2t ) * rDt_ice 779 793 zdiag_adv_mass = glob_sum( 'icectl', diag_adv_mass * e1e2t ) * rDt_ice 780 794 781 795 ! -- salt diag -- ! 782 zdiag_salt = glob_sum( 'icectl', ( sfx + diag_sice - diag_adv_salt ) * e1e2t ) * r dt_ice * 1.e-3796 zdiag_salt = glob_sum( 'icectl', ( sfx + diag_sice - diag_adv_salt ) * e1e2t ) * rDt_ice * 1.e-3 783 797 zdiag_adv_salt = glob_sum( 'icectl', diag_adv_salt * e1e2t ) * rDt_ice * 1.e-3 784 798 … … 839 853 !!---------------------------------------------------------------------- 840 854 !! *** ROUTINE ice_drift_init *** 841 !! 855 !! 842 856 !! ** Purpose : create output file, initialise arrays 843 857 !!---------------------------------------------------------------------- … … 865 879 ! 866 880 END SUBROUTINE ice_drift_init 867 881 868 882 #else 869 883 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn.F90
r13472 r14021 2 2 !!====================================================================== 3 3 !! *** MODULE icedyn *** 4 !! Sea-Ice dynamics : master routine for sea ice dynamics 4 !! Sea-Ice dynamics : master routine for sea ice dynamics 5 5 !!====================================================================== 6 6 !! history : 4.0 ! 2018 (C. Rousset) original code SI3 [aka Sea Ice cube] … … 29 29 USE lbclnk ! lateral boundary conditions (or mpp links) 30 30 USE timing ! Timing 31 USE fldread ! read input fields 31 32 32 33 IMPLICIT NONE … … 35 36 PUBLIC ice_dyn ! called by icestp.F90 36 37 PUBLIC ice_dyn_init ! called by icestp.F90 37 38 38 39 INTEGER :: nice_dyn ! choice of the type of dynamics 39 40 ! ! associated indices: 40 41 INTEGER, PARAMETER :: np_dynALL = 1 ! full ice dynamics (rheology + advection + ridging/rafting + correction) 41 INTEGER, PARAMETER :: np_dynRHGADV = 2 ! pure dynamics (rheology + advection) 42 INTEGER, PARAMETER :: np_dynRHGADV = 2 ! pure dynamics (rheology + advection) 42 43 INTEGER, PARAMETER :: np_dynADV1D = 3 ! only advection 1D - test case from Schar & Smolarkiewicz 1996 43 44 INTEGER, PARAMETER :: np_dynADV2D = 4 ! only advection 2D w prescribed vel.(rn_uvice + advection) … … 50 51 REAL(wp) :: rn_uice ! prescribed u-vel (case np_dynADV1D & np_dynADV2D) 51 52 REAL(wp) :: rn_vice ! prescribed v-vel (case np_dynADV1D & np_dynADV2D) 52 53 54 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_icbmsk ! structure of input grounded icebergs mask (file informations, fields read) 55 53 56 !! * Substitutions 54 57 # include "do_loop_substitute.h90" … … 63 66 !!------------------------------------------------------------------- 64 67 !! *** ROUTINE ice_dyn *** 65 !! 68 !! 66 69 !! ** Purpose : this routine manages sea ice dynamics 67 70 !! … … 81 84 ! 82 85 ! controls 83 IF( ln_timing ) CALL timing_start('ice dyn')86 IF( ln_timing ) CALL timing_start('ice_dyn') 84 87 ! 85 88 IF( kt == nit000 .AND. lwp ) THEN … … 88 91 WRITE(numout,*)'~~~~~~~' 89 92 ENDIF 90 ! 93 ! 91 94 ! retrieve thickness from volume for landfast param. and UMx advection scheme 92 95 WHERE( a_i(:,:,:) >= epsi20 ) … … 106 109 END WHERE 107 110 ! 111 IF( ln_landfast_L16 ) THEN 112 CALL fld_read( kt, 1, sf_icbmsk ) 113 icb_mask(:,:) = sf_icbmsk(1)%fnow(:,:,1) 114 ENDIF 108 115 ! 109 116 SELECT CASE( nice_dyn ) !-- Set which dynamics is running … … 111 118 CASE ( np_dynALL ) !== all dynamical processes ==! 112 119 ! 113 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 120 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 114 121 CALL ice_dyn_adv ( kt ) ! -- advection of ice 115 CALL ice_dyn_rdgrft( kt ) ! -- ridging/rafting 122 CALL ice_dyn_rdgrft( kt ) ! -- ridging/rafting 116 123 CALL ice_cor ( kt , 1 ) ! -- Corrections 117 124 ! 118 125 CASE ( np_dynRHGADV ) !== no ridge/raft & no corrections ==! 119 126 ! 120 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 127 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 121 128 CALL ice_dyn_adv ( kt ) ! -- advection of ice 122 129 CALL Hpiling ! -- simple pile-up (replaces ridging/rafting) … … 127 134 ! --- monotonicity test from Schar & Smolarkiewicz 1996 --- ! 128 135 ! CFL = 0.5 at a distance from the bound of 1/6 of the basin length 129 ! Then for dx = 2m and dt = 1s => rn_uice = u (1/6th) = 1m/s 136 ! Then for dx = 2m and dt = 1s => rn_uice = u (1/6th) = 1m/s 130 137 DO_2D( 1, 1, 1, 1 ) 131 138 zcoefu = ( REAL(jpiglo+1)*0.5_wp - REAL(ji+nimpp-1) ) / ( REAL(jpiglo+1)*0.5_wp - 1._wp ) … … 149 156 ! 150 157 ! 151 ! diagnostics: divergence at T points 158 ! diagnostics: divergence at T points 152 159 IF( iom_use('icediv') ) THEN 153 160 ! … … 172 179 ! 173 180 ! controls 174 IF( ln_timing ) CALL timing_stop ('ice dyn')181 IF( ln_timing ) CALL timing_stop ('ice_dyn') 175 182 ! 176 183 END SUBROUTINE ice_dyn … … 216 223 !! ** input : Namelist namdyn 217 224 !!------------------------------------------------------------------- 218 INTEGER :: ios, ioptio ! Local integer output status for namelist read 225 INTEGER :: ios, ioptio, ierror ! Local integer output status for namelist read 226 ! 227 CHARACTER(len=256) :: cn_dir ! Root directory for location of ice files 228 TYPE(FLD_N) :: sn_icbmsk ! informations about the grounded icebergs field to be read 219 229 !! 220 230 NAMELIST/namdyn/ ln_dynALL, ln_dynRHGADV, ln_dynADV1D, ln_dynADV2D, rn_uice, rn_vice, & 221 231 & rn_ishlat , & 222 & ln_landfast_L16, rn_lf_depfra, rn_lf_bfr, rn_lf_relax, rn_lf_tensile 232 & ln_landfast_L16, rn_lf_depfra, rn_lf_bfr, rn_lf_relax, rn_lf_tensile, & 233 & sn_icbmsk, cn_dir 223 234 !!------------------------------------------------------------------- 224 235 ! … … 248 259 ENDIF 249 260 ! !== set the choice of ice dynamics ==! 250 ioptio = 0 261 ioptio = 0 251 262 ! !--- full dynamics (rheology + advection + ridging/rafting + correction) 252 263 IF( ln_dynALL ) THEN ; ioptio = ioptio + 1 ; nice_dyn = np_dynALL ; ENDIF … … 269 280 IF( .NOT.ln_landfast_L16 ) tau_icebfr(:,:) = 0._wp 270 281 ! 282 ! !--- allocate and fill structure for grounded icebergs mask 283 IF( ln_landfast_L16 ) THEN 284 ALLOCATE( sf_icbmsk(1), STAT=ierror ) 285 IF( ierror > 0 ) THEN 286 CALL ctl_stop( 'ice_dyn_init: unable to allocate sf_icbmsk structure' ) ; RETURN 287 ENDIF 288 ! 289 CALL fld_fill( sf_icbmsk, (/ sn_icbmsk /), cn_dir, 'ice_dyn_init', & 290 & 'landfast ice is a function of read grounded icebergs', 'icedyn' ) 291 ! 292 ALLOCATE( sf_icbmsk(1)%fnow(jpi,jpj,1) ) 293 IF( sf_icbmsk(1)%ln_tint ) ALLOCATE( sf_icbmsk(1)%fdta(jpi,jpj,1,2) ) 294 IF( TRIM(sf_icbmsk(1)%clrootname) == 'NOT USED' ) sf_icbmsk(1)%fnow(:,:,1) = 0._wp ! not used field (set to 0) 295 ELSE 296 icb_mask(:,:) = 0._wp 297 ENDIF 298 ! !--- other init 271 299 CALL ice_dyn_rdgrft_init ! set ice ridging/rafting parameters 272 300 CALL ice_dyn_rhg_init ! set ice rheology parameters … … 279 307 !! Default option Empty module NO SI3 sea-ice model 280 308 !!---------------------------------------------------------------------- 281 #endif 309 #endif 282 310 283 311 !!====================================================================== -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_adv_pra.F90
r14017 r14021 156 156 157 157 ! diagnostics 158 zdiag_adv_mass(:,:) = SUM( pv_i(:,:,:) , dim=3 ) * rhoi + SUM( pv_s(:,:,:) , dim=3 ) * rhos 158 zdiag_adv_mass(:,:) = SUM( pv_i (:,:,:) , dim=3 ) * rhoi + SUM( pv_s (:,:,:) , dim=3 ) * rhos & 159 & + SUM( pv_ip(:,:,:) , dim=3 ) * rhow + SUM( pv_il(:,:,:) , dim=3 ) * rhow 159 160 zdiag_adv_salt(:,:) = SUM( psv_i(:,:,:) , dim=3 ) * rhoi 160 161 zdiag_adv_heat(:,:) = - SUM(SUM( pe_i(:,:,1:nlay_i,:) , dim=4 ), dim=3 ) & … … 178 179 z0ei(:,:,jk,jl) = pe_i(:,:,jk,jl) * e1e2t(:,:) ! Ice heat content 179 180 END DO 180 IF ( ln_pnd_LEV ) THEN181 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 181 182 z0ap(:,:,jl) = pa_ip(:,:,jl) * e1e2t(:,:) ! Melt pond fraction 182 183 z0vp(:,:,jl) = pv_ip(:,:,jl) * e1e2t(:,:) ! Melt pond volume … … 214 215 END DO 215 216 ! 216 IF ( ln_pnd_LEV ) THEN217 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 217 218 CALL adv_x( zdt , zudy , 1._wp , zarea , z0ap , sxap , sxxap , syap , syyap , sxyap ) !--- melt pond fraction 218 219 CALL adv_y( zdt , zvdx , 0._wp , zarea , z0ap , sxap , sxxap , syap , syyap , sxyap ) … … 249 250 & sxxe(:,:,jk,:), sye(:,:,jk,:), syye(:,:,jk,:), sxye(:,:,jk,:) ) 250 251 END DO 251 IF ( ln_pnd_LEV ) THEN252 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 252 253 CALL adv_y( zdt , zvdx , 1._wp , zarea , z0ap , sxap , sxxap , syap , syyap , sxyap ) !--- melt pond fraction 253 254 CALL adv_x( zdt , zudy , 0._wp , zarea , z0ap , sxap , sxxap , syap , syyap , sxyap ) … … 278 279 CALL lbc_lnk_multi( 'icedyn_adv_pra', z0ei , 'T', 1._wp, sxe , 'T', -1._wp, sye , 'T', -1._wp & ! ice enthalpy 279 280 & , sxxe , 'T', 1._wp, syye , 'T', 1._wp, sxye , 'T', 1._wp ) 280 IF ( ln_pnd_LEV ) THEN281 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 281 282 CALL lbc_lnk_multi( 'icedyn_adv_pra', z0ap , 'T', 1._wp, sxap , 'T', -1._wp, syap , 'T', -1._wp & ! melt pond fraction 282 283 & , sxxap, 'T', 1._wp, syyap, 'T', 1._wp, sxyap, 'T', 1._wp & … … 302 303 pe_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:) * tmask(:,:,1) 303 304 END DO 304 IF ( ln_pnd_LEV ) THEN305 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 305 306 pa_ip(:,:,jl) = z0ap(:,:,jl) * r1_e1e2t(:,:) * tmask(:,:,1) 306 307 pv_ip(:,:,jl) = z0vp(:,:,jl) * r1_e1e2t(:,:) * tmask(:,:,1) … … 320 321 ! 321 322 ! --- diagnostics --- ! 322 diag_adv_mass(:,:) = diag_adv_mass(:,:) + ( SUM( pv_i(:,:,:) , dim=3 ) * rhoi + SUM( pv_s(:,:,:) , dim=3 ) * rhos & 323 diag_adv_mass(:,:) = diag_adv_mass(:,:) + ( SUM( pv_i (:,:,:) , dim=3 ) * rhoi + SUM( pv_s (:,:,:) , dim=3 ) * rhos & 324 & + SUM( pv_ip(:,:,:) , dim=3 ) * rhow + SUM( pv_il(:,:,:) , dim=3 ) * rhow & 323 325 & - zdiag_adv_mass(:,:) ) * z1_dt 324 326 diag_adv_salt(:,:) = diag_adv_salt(:,:) + ( SUM( psv_i(:,:,:) , dim=3 ) * rhoi & … … 769 771 ! ! -- check h_ip -- ! 770 772 ! if h_ip is larger than the surrounding 9 pts => reduce h_ip and increase a_ip 771 IF( ln_pnd_LEV . AND. pv_ip(ji,jj,jl) > 0._wp ) THEN773 IF( ln_pnd_LEV .OR. ln_pnd_TOPO .AND. pv_ip(ji,jj,jl) > 0._wp ) THEN 772 774 zhip = pv_ip(ji,jj,jl) / MAX( epsi20, pa_ip(ji,jj,jl) ) 773 775 IF( zhip > phip_max(ji,jj,jl) .AND. pa_ip(ji,jj,jl) < 0.15 ) THEN … … 1015 1017 END DO 1016 1018 ! 1017 IF( ln_pnd_LEV ) THEN ! melt pond fraction1019 IF( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN ! melt pond fraction 1018 1020 IF( iom_varid( numrir, 'sxap', ldstop = .FALSE. ) > 0 ) THEN 1019 1021 CALL iom_get( numrir, jpdom_auto, 'sxap' , sxap , psgn = -1._wp ) … … 1057 1059 sxc0 = 0._wp ; syc0 = 0._wp ; sxxc0 = 0._wp ; syyc0 = 0._wp ; sxyc0 = 0._wp ! snow layers heat content 1058 1060 sxe = 0._wp ; sye = 0._wp ; sxxe = 0._wp ; syye = 0._wp ; sxye = 0._wp ! ice layers heat content 1059 IF( ln_pnd_LEV ) THEN1061 IF( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 1060 1062 sxap = 0._wp ; syap = 0._wp ; sxxap = 0._wp ; syyap = 0._wp ; sxyap = 0._wp ! melt pond fraction 1061 1063 sxvp = 0._wp ; syvp = 0._wp ; sxxvp = 0._wp ; syyvp = 0._wp ; sxyvp = 0._wp ! melt pond volume … … 1135 1137 END DO 1136 1138 ! 1137 IF( ln_pnd_LEV ) THEN ! melt pond fraction1139 IF( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN ! melt pond fraction 1138 1140 CALL iom_rstput( iter, nitrst, numriw, 'sxap' , sxap ) 1139 1141 CALL iom_rstput( iter, nitrst, numriw, 'syap' , syap ) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_adv_umx.F90
r13633 r14021 14 14 !! ultimate_x(_y) : compute a tracer value at velocity points using ULTIMATE scheme at various orders 15 15 !! macho : compute the fluxes 16 !! nonosc_ice : limit the fluxes using a non-oscillatory algorithm 16 !! nonosc_ice : limit the fluxes using a non-oscillatory algorithm 17 17 !!---------------------------------------------------------------------- 18 18 USE phycst ! physical constant … … 63 63 !!---------------------------------------------------------------------- 64 64 !! *** ROUTINE ice_dyn_adv_umx *** 65 !! 66 !! ** Purpose : Compute the now trend due to total advection of 65 !! 66 !! ** Purpose : Compute the now trend due to total advection of 67 67 !! tracers and add it to the general trend of tracer equations 68 68 !! using an "Ultimate-Macho" scheme 69 69 !! 70 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 70 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 71 71 !!---------------------------------------------------------------------- 72 72 INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2) … … 103 103 REAL(wp), DIMENSION(jpi,jpj,nlay_s,jpl) :: ze_s, zes_max 104 104 ! 105 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zuv_ho, zvv_ho, zuv_ups, zvv_ups, z1_vi, z1_vs 105 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zuv_ho, zvv_ho, zuv_ups, zvv_ups, z1_vi, z1_vs 106 106 !! diagnostics 107 REAL(wp), DIMENSION(jpi,jpj) :: zdiag_adv_mass, zdiag_adv_salt, zdiag_adv_heat 107 REAL(wp), DIMENSION(jpi,jpj) :: zdiag_adv_mass, zdiag_adv_salt, zdiag_adv_heat 108 108 !!---------------------------------------------------------------------- 109 109 ! … … 131 131 ELSEWHERE ; ze_s(:,:,jk,:) = 0._wp 132 132 END WHERE 133 END DO 133 END DO 134 134 CALL icemax4D( ze_i , zei_max ) 135 135 CALL icemax4D( ze_s , zes_max ) … … 143 143 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 144 144 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 145 145 146 146 ! non-blocking global communication send zcflnow and receive zcflprv 147 147 CALL mpp_delay_max( 'icedyn_adv_umx', 'cflice', zcflnow(:), zcflprv(:), kt == nitend - nn_fsbc + 1 ) … … 157 157 zvdx(:,:) = pv_ice(:,:) * e1v(:,:) 158 158 ! 159 ! setup transport for each ice cat 159 ! setup transport for each ice cat 160 160 DO jl = 1, jpl 161 161 zu_cat(:,:,jl) = zudy(:,:) … … 182 182 183 183 ! diagnostics 184 zdiag_adv_mass(:,:) = SUM( pv_i(:,:,:) , dim=3 ) * rhoi + SUM( pv_s(:,:,:) , dim=3 ) * rhos 184 zdiag_adv_mass(:,:) = SUM( pv_i (:,:,:) , dim=3 ) * rhoi + SUM( pv_s (:,:,:) , dim=3 ) * rhos & 185 & + SUM( pv_ip(:,:,:) , dim=3 ) * rhow + SUM( pv_il(:,:,:) , dim=3 ) * rhow 185 186 zdiag_adv_salt(:,:) = SUM( psv_i(:,:,:) , dim=3 ) * rhoi 186 187 zdiag_adv_heat(:,:) = - SUM(SUM( pe_i(:,:,1:nlay_i,:) , dim=4 ), dim=3 ) & … … 189 190 ! record at_i before advection (for open water) 190 191 zati1(:,:) = SUM( pa_i(:,:,:), dim=3 ) 191 192 192 193 ! inverse of A and Ap 193 194 WHERE( pa_i(:,:,:) >= epsi20 ) ; z1_ai(:,:,:) = 1._wp / pa_i(:,:,:) … … 200 201 ! setup a mask where advection will be upstream 201 202 IF( ll_neg ) THEN 202 IF( .NOT. ALLOCATED(imsk_small) ) ALLOCATE( imsk_small(jpi,jpj,jpl) ) 203 IF( .NOT. ALLOCATED(jmsk_small) ) ALLOCATE( jmsk_small(jpi,jpj,jpl) ) 203 IF( .NOT. ALLOCATED(imsk_small) ) ALLOCATE( imsk_small(jpi,jpj,jpl) ) 204 IF( .NOT. ALLOCATED(jmsk_small) ) ALLOCATE( jmsk_small(jpi,jpj,jpl) ) 204 205 DO jl = 1, jpl 205 206 DO_2D( 1, 0, 1, 0 ) … … 231 232 CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 232 233 & zhvar, pv_i, zua_ups, zva_ups ) 233 !== Snw volume ==! 234 !== Snw volume ==! 234 235 zhvar(:,:,:) = pv_s(:,:,:) * z1_ai(:,:,:) 235 236 CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & … … 259 260 CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 260 261 & zhvar, pv_i, zua_ups, zva_ups ) 261 !== Snw volume ==! 262 !== Snw volume ==! 262 263 zhvar(:,:,:) = pv_s(:,:,:) * z1_ai(:,:,:) 263 264 CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & … … 315 316 & zhvar, pe_i(:,:,jk,:), zuv_ups, zvv_ups ) 316 317 END DO 317 !== Snow volume ==! 318 !== Snow volume ==! 318 319 zuv_ups = zua_ups 319 320 zvv_ups = zva_ups … … 338 339 ! 339 340 !== melt ponds ==! 340 IF ( ln_pnd_LEV ) THEN341 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 341 342 ! concentration 342 343 zamsk = 1._wp … … 358 359 359 360 ! --- Lateral boundary conditions --- ! 360 IF ( ln_pnd_LEV.AND. ln_pnd_lids ) THEN361 IF ( ( ln_pnd_LEV .OR. ln_pnd_TOPO ) .AND. ln_pnd_lids ) THEN 361 362 CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 362 363 & , pa_ip,'T',1._wp, pv_ip,'T',1._wp, pv_il,'T',1._wp ) 363 ELSEIF( ln_pnd_LEV.AND. .NOT.ln_pnd_lids ) THEN364 ELSEIF( ( ln_pnd_LEV .OR. ln_pnd_TOPO ) .AND. .NOT.ln_pnd_lids ) THEN 364 365 CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 365 366 & , pa_ip,'T',1._wp, pv_ip,'T',1._wp ) … … 373 374 zati2(:,:) = SUM( pa_i(:,:,:), dim=3 ) 374 375 DO_2D( 0, 0, 0, 0 ) 375 pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) & 376 pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) & 376 377 & - ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) ) * r1_e1e2t(ji,jj) * zdt 377 378 END_2D … … 379 380 ! 380 381 ! --- diagnostics --- ! 381 diag_adv_mass(:,:) = diag_adv_mass(:,:) + ( SUM( pv_i(:,:,:) , dim=3 ) * rhoi + SUM( pv_s(:,:,:) , dim=3 ) * rhos & 382 diag_adv_mass(:,:) = diag_adv_mass(:,:) + ( SUM( pv_i (:,:,:) , dim=3 ) * rhoi + SUM( pv_s (:,:,:) , dim=3 ) * rhos & 383 & + SUM( pv_ip(:,:,:) , dim=3 ) * rhow + SUM( pv_il(:,:,:) , dim=3 ) * rhow & 382 384 & - zdiag_adv_mass(:,:) ) * z1_dt 383 385 diag_adv_salt(:,:) = diag_adv_salt(:,:) + ( SUM( psv_i(:,:,:) , dim=3 ) * rhoi & … … 404 406 END SUBROUTINE ice_dyn_adv_umx 405 407 406 408 407 409 SUBROUTINE adv_umx( pamsk, kn_umx, jt, kt, pdt, pu, pv, puc, pvc, pubox, pvbox, & 408 410 & pt, ptc, pua_ups, pva_ups, pua_ho, pva_ho ) 409 411 !!---------------------------------------------------------------------- 410 412 !! *** ROUTINE adv_umx *** 411 !! 412 !! ** Purpose : Compute the now trend due to total advection of 413 !! 414 !! ** Purpose : Compute the now trend due to total advection of 413 415 !! tracers and add it to the general trend of tracer equations 414 416 !! … … 432 434 !! 433 435 !! in eq. c), one can solve the equation for S (ln_advS=T), then dVS/dt = -div(uV * uS / u) 434 !! or for HS (ln_advS=F), then dVS/dt = -div(uA * uHS / u) 436 !! or for HS (ln_advS=F), then dVS/dt = -div(uA * uHS / u) 435 437 !! 436 438 !! ** Note : - this method can lead to tiny negative V (-1.e-20) => set it to 0 while conserving mass etc. … … 460 462 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out), OPTIONAL :: pua_ho, pva_ho ! high order u*a fluxes 461 463 ! 462 INTEGER :: ji, jj, jl ! dummy loop indices 464 INTEGER :: ji, jj, jl ! dummy loop indices 463 465 REAL(wp) :: ztra ! local scalar 464 466 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zfu_ho , zfv_ho , zpt … … 466 468 !!---------------------------------------------------------------------- 467 469 ! 468 ! Upstream (_ups) fluxes 470 ! Upstream (_ups) fluxes 469 471 ! ----------------------- 470 472 CALL upstream( pamsk, jt, kt, pdt, pt, pu, pv, zt_ups, zfu_ups, zfv_ups ) 471 472 ! High order (_ho) fluxes 473 474 ! High order (_ho) fluxes 473 475 ! ----------------------- 474 476 SELECT CASE( kn_umx ) … … 504 506 zfv_ups(ji,jj,jl) = zfv_ups(ji,jj,jl) * pva_ups(ji,jj,jl) / pv(ji,jj) 505 507 ELSE 506 zfv_ho (ji,jj,jl) = 0._wp 507 zfv_ups(ji,jj,jl) = 0._wp 508 zfv_ho (ji,jj,jl) = 0._wp 509 zfv_ups(ji,jj,jl) = 0._wp 508 510 ENDIF 509 511 END_2D … … 549 551 DO jl = 1, jpl 550 552 DO_2D( 0, 0, 0, 0 ) 551 ztra = - ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) + zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) ) 552 ! 553 ptc(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1) 553 ztra = - ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) + zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) ) 554 ! 555 ptc(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1) 554 556 END_2D 555 557 END DO … … 561 563 !!--------------------------------------------------------------------- 562 564 !! *** ROUTINE upstream *** 563 !! 565 !! 564 566 !! ** Purpose : compute the upstream fluxes and upstream guess of tracer 565 567 !!---------------------------------------------------------------------- … … 570 572 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt ! tracer fields 571 573 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pu, pv ! 2 ice velocity components 572 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_ups ! upstream guess of tracer 573 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ups, pfv_ups ! upstream fluxes 574 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_ups ! upstream guess of tracer 575 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ups, pfv_ups ! upstream fluxes 574 576 ! 575 577 INTEGER :: ji, jj, jl ! dummy loop indices … … 636 638 ! 637 639 ENDIF 638 640 639 641 ENDIF 640 642 ! … … 653 655 END SUBROUTINE upstream 654 656 655 657 656 658 SUBROUTINE cen2( pamsk, jt, kt, pdt, pt, pu, pv, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 657 659 !!--------------------------------------------------------------------- 658 660 !! *** ROUTINE cen2 *** 659 !! 661 !! 660 662 !! ** Purpose : compute the high order fluxes using a centered 661 !! second order scheme 663 !! second order scheme 662 664 !!---------------------------------------------------------------------- 663 665 REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0) … … 667 669 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt ! tracer fields 668 670 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pu, pv ! 2 ice velocity components 669 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt_ups ! upstream guess of tracer 670 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes 671 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes 671 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt_ups ! upstream guess of tracer 672 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes 673 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes 672 674 ! 673 675 INTEGER :: ji, jj, jl ! dummy loop indices … … 748 750 ENDIF 749 751 IF( np_limiter == 1 ) CALL nonosc_ice( pamsk, pdt, pu, pv, pt, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 750 752 751 753 ENDIF 752 754 753 755 END SUBROUTINE cen2 754 756 755 757 756 758 SUBROUTINE macho( pamsk, kn_umx, jt, kt, pdt, pt, pu, pv, pubox, pvbox, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 757 759 !!--------------------------------------------------------------------- 758 760 !! *** ROUTINE macho *** 759 !! 760 !! ** Purpose : compute the high order fluxes using Ultimate-Macho scheme 761 !! 762 !! ** Purpose : compute the high order fluxes using Ultimate-Macho scheme 761 763 !! 762 764 !! ** Method : ... 763 765 !! 764 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 766 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 765 767 !!---------------------------------------------------------------------- 766 768 REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0) … … 772 774 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pu, pv ! 2 ice velocity components 773 775 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pubox, pvbox ! upstream velocity 774 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt_ups ! upstream guess of tracer 775 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes 776 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes 776 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt_ups ! upstream guess of tracer 777 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes 778 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes 777 779 ! 778 780 INTEGER :: ji, jj, jl ! dummy loop indices … … 805 807 ! !-- limiter in y --! 806 808 IF( np_limiter == 2 .OR. np_limiter == 3 ) CALL limiter_y( pdt, pv, pt, pfv_ups, pfv_ho ) 807 ! 809 ! 808 810 ! 809 811 ELSE !== even ice time step: adv_y then adv_x ==! … … 819 821 & + pt (ji,jj,jl) * ( pv (ji,jj ) - pv (ji,jj-1 ) ) * r1_e1e2t(ji,jj) & 820 822 & * pamsk & 821 & ) * pdt ) * tmask(ji,jj,1) 823 & ) * pdt ) * tmask(ji,jj,1) 822 824 END_2D 823 825 END DO … … 843 845 !!--------------------------------------------------------------------- 844 846 !! *** ROUTINE ultimate_x *** 845 !! 846 !! ** Purpose : compute tracer at u-points 847 !! 848 !! ** Purpose : compute tracer at u-points 847 849 !! 848 850 !! ** Method : ... 849 851 !! 850 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 852 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 851 853 !!---------------------------------------------------------------------- 852 854 REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0) … … 855 857 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pu ! ice i-velocity component 856 858 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt ! tracer fields 857 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_u ! tracer at u-point 858 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho ! high order flux 859 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_u ! tracer at u-point 860 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfu_ho ! high order flux 859 861 ! 860 862 INTEGER :: ji, jj, jl ! dummy loop indices … … 895 897 ! 896 898 CASE( 1 ) !== 1st order central TIM ==! (Eq. 21) 897 ! 899 ! 898 900 DO jl = 1, jpl 899 901 DO_2D( 0, 0, 1, 0 ) … … 909 911 zcu = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 910 912 pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * ( pt(ji+1,jj,jl) + pt(ji,jj,jl) & 911 & - zcu * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) ) 912 END_2D 913 END DO 914 ! 913 & - zcu * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) ) 914 END_2D 915 END DO 916 ! 915 917 CASE( 3 ) !== 3rd order central TIM ==! (Eq. 24) 916 918 ! … … 981 983 ! 982 984 END SUBROUTINE ultimate_x 983 984 985 986 985 987 SUBROUTINE ultimate_y( pamsk, kn_umx, pdt, pt, pv, pt_v, pfv_ho ) 986 988 !!--------------------------------------------------------------------- 987 989 !! *** ROUTINE ultimate_y *** 988 !! 989 !! ** Purpose : compute tracer at v-points 990 !! 991 !! ** Purpose : compute tracer at v-points 990 992 !! 991 993 !! ** Method : ... 992 994 !! 993 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 995 !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 994 996 !!---------------------------------------------------------------------- 995 997 REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0) … … 998 1000 REAL(wp), DIMENSION(:,: ) , INTENT(in ) :: pv ! ice j-velocity component 999 1001 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pt ! tracer fields 1000 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_v ! tracer at v-point 1001 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfv_ho ! high order flux 1002 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pt_v ! tracer at v-point 1003 REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT( out) :: pfv_ho ! high order flux 1002 1004 ! 1003 1005 INTEGER :: ji, jj, jl ! dummy loop indices … … 1113 1115 ! 1114 1116 END SUBROUTINE ultimate_y 1115 1117 1116 1118 1117 1119 SUBROUTINE nonosc_ice( pamsk, pdt, pu, pv, pt, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 1118 1120 !!--------------------------------------------------------------------- 1119 1121 !! *** ROUTINE nonosc_ice *** 1120 !! 1121 !! ** Purpose : compute monotonic tracer fluxes from the upstream 1122 !! scheme and the before field by a non-oscillatory algorithm 1122 !! 1123 !! ** Purpose : compute monotonic tracer fluxes from the upstream 1124 !! scheme and the before field by a non-oscillatory algorithm 1123 1125 !! 1124 1126 !! ** Method : ... … … 1139 1141 !!---------------------------------------------------------------------- 1140 1142 zbig = 1.e+40_wp 1141 1143 1142 1144 ! antidiffusive flux : high order minus low order 1143 1145 ! -------------------------------------------------- … … 1155 1157 ! pfu_ho 1156 1158 ! * ---> 1157 ! | | * | | 1158 ! | | | * | 1159 ! | | * | | 1160 ! | | | * | 1159 1161 ! | | | | * 1160 ! t_ups : i-1 i i+1 i+2 1162 ! t_ups : i-1 i i+1 i+2 1161 1163 IF( ll_prelim ) THEN 1162 1164 1163 1165 DO jl = 1, jpl 1164 1166 DO_2D( 0, 0, 0, 0 ) … … 1198 1200 z1_dt = 1._wp / pdt 1199 1201 DO jl = 1, jpl 1200 1202 1201 1203 DO_2D( 1, 1, 1, 1 ) 1202 1204 IF ( pt(ji,jj,jl) <= 0._wp .AND. pt_ups(ji,jj,jl) <= 0._wp ) THEN … … 1242 1244 ! if all the points are outside ice cover 1243 1245 IF( zup == -zbig ) zbetup(ji,jj,jl) = 0._wp ! zbig 1244 IF( zdo == zbig ) zbetdo(ji,jj,jl) = 0._wp ! zbig 1246 IF( zdo == zbig ) zbetdo(ji,jj,jl) = 0._wp ! zbig 1245 1247 ! 1246 1248 END_2D … … 1248 1250 CALL lbc_lnk_multi( 'icedyn_adv_umx', zbetup, 'T', 1.0_wp, zbetdo, 'T', 1.0_wp ) ! lateral boundary cond. (unchanged sign) 1249 1251 1250 1252 1251 1253 ! monotonic flux in the y direction 1252 1254 ! --------------------------------- … … 1278 1280 END SUBROUTINE nonosc_ice 1279 1281 1280 1282 1281 1283 SUBROUTINE limiter_x( pdt, pu, pt, pfu_ups, pfu_ho ) 1282 1284 !!--------------------------------------------------------------------- 1283 1285 !! *** ROUTINE limiter_x *** 1284 !! 1285 !! ** Purpose : compute flux limiter 1286 !! 1287 !! ** Purpose : compute flux limiter 1286 1288 !!---------------------------------------------------------------------- 1287 1289 REAL(wp) , INTENT(in ) :: pdt ! tracer time-step … … 1293 1295 REAL(wp) :: Cr, Rjm, Rj, Rjp, uCFL, zpsi, zh3, zlimiter, Rr 1294 1296 INTEGER :: ji, jj, jl ! dummy loop indices 1295 REAL(wp), DIMENSION (jpi,jpj,jpl) :: zslpx ! tracer slopes 1297 REAL(wp), DIMENSION (jpi,jpj,jpl) :: zslpx ! tracer slopes 1296 1298 !!---------------------------------------------------------------------- 1297 1299 ! … … 1302 1304 END DO 1303 1305 CALL lbc_lnk( 'icedyn_adv_umx', zslpx, 'U', -1.0_wp) ! lateral boundary cond. 1304 1306 1305 1307 DO jl = 1, jpl 1306 1308 DO_2D( 0, 0, 0, 0 ) 1307 1309 uCFL = pdt * ABS( pu(ji,jj) ) * r1_e1e2t(ji,jj) 1308 1310 1309 1311 Rjm = zslpx(ji-1,jj,jl) 1310 1312 Rj = zslpx(ji ,jj,jl) … … 1317 1319 ENDIF 1318 1320 1319 zh3 = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl) 1321 zh3 = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl) 1320 1322 IF( Rj > 0. ) THEN 1321 1323 zlimiter = MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(pu(ji,jj)), & … … 1369 1371 END SUBROUTINE limiter_x 1370 1372 1371 1373 1372 1374 SUBROUTINE limiter_y( pdt, pv, pt, pfv_ups, pfv_ho ) 1373 1375 !!--------------------------------------------------------------------- 1374 1376 !! *** ROUTINE limiter_y *** 1375 !! 1376 !! ** Purpose : compute flux limiter 1377 !! 1378 !! ** Purpose : compute flux limiter 1377 1379 !!---------------------------------------------------------------------- 1378 1380 REAL(wp) , INTENT(in ) :: pdt ! tracer time-step … … 1384 1386 REAL(wp) :: Cr, Rjm, Rj, Rjp, vCFL, zpsi, zh3, zlimiter, Rr 1385 1387 INTEGER :: ji, jj, jl ! dummy loop indices 1386 REAL(wp), DIMENSION (jpi,jpj,jpl) :: zslpy ! tracer slopes 1388 REAL(wp), DIMENSION (jpi,jpj,jpl) :: zslpy ! tracer slopes 1387 1389 !!---------------------------------------------------------------------- 1388 1390 ! … … 1408 1410 ENDIF 1409 1411 1410 zh3 = pfv_ho(ji,jj,jl) - pfv_ups(ji,jj,jl) 1412 zh3 = pfv_ho(ji,jj,jl) - pfv_ups(ji,jj,jl) 1411 1413 IF( Rj > 0. ) THEN 1412 1414 zlimiter = MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(pv(ji,jj)), & … … 1497 1499 ! ! -- check h_ip -- ! 1498 1500 ! if h_ip is larger than the surrounding 9 pts => reduce h_ip and increase a_ip 1499 IF( ln_pnd_LEV.AND. pv_ip(ji,jj,jl) > 0._wp ) THEN1501 IF( ( ln_pnd_LEV .OR. ln_pnd_TOPO ) .AND. pv_ip(ji,jj,jl) > 0._wp ) THEN 1500 1502 zhip = pv_ip(ji,jj,jl) / MAX( epsi20, pa_ip(ji,jj,jl) ) 1501 1503 IF( zhip > phip_max(ji,jj,jl) .AND. pa_ip(ji,jj,jl) < 0.15 ) THEN … … 1522 1524 pe_s(ji,jj,1:nlay_s,jl) = pe_s(ji,jj,1:nlay_s,jl) * zfra 1523 1525 pv_s(ji,jj,jl) = pa_i(ji,jj,jl) * phs_max(ji,jj,jl) 1524 ENDIF 1525 ! 1526 ENDIF 1527 ! 1526 1528 ! ! -- check s_i -- ! 1527 1529 ! if s_i is larger than the surrounding 9 pts => put salt excess in the ocean … … 1535 1537 ENDIF 1536 1538 END_2D 1537 END DO 1539 END DO 1538 1540 ! 1539 1541 ! ! -- check e_i/v_i -- ! … … 1622 1624 SUBROUTINE icemax3D( pice , pmax ) 1623 1625 !!--------------------------------------------------------------------- 1624 !! *** ROUTINE icemax3D *** 1626 !! *** ROUTINE icemax3D *** 1625 1627 !! ** Purpose : compute the max of the 9 points around 1626 1628 !!---------------------------------------------------------------------- … … 1631 1633 !!---------------------------------------------------------------------- 1632 1634 DO jl = 1, jpl 1633 DO jj = Njs0-1, Nje0+1 1635 DO jj = Njs0-1, Nje0+1 1634 1636 DO ji = Nis0, Nie0 1635 1637 zmax(ji,jj) = MAX( epsi20, pice(ji,jj,jl), pice(ji-1,jj,jl), pice(ji+1,jj,jl) ) 1636 1638 END DO 1637 1639 END DO 1638 DO jj = Njs0, Nje0 1640 DO jj = Njs0, Nje0 1639 1641 DO ji = Nis0, Nie0 1640 1642 pmax(ji,jj,jl) = MAX( epsi20, zmax(ji,jj), zmax(ji,jj-1), zmax(ji,jj+1) ) … … 1646 1648 SUBROUTINE icemax4D( pice , pmax ) 1647 1649 !!--------------------------------------------------------------------- 1648 !! *** ROUTINE icemax4D *** 1650 !! *** ROUTINE icemax4D *** 1649 1651 !! ** Purpose : compute the max of the 9 points around 1650 1652 !!---------------------------------------------------------------------- … … 1657 1659 DO jl = 1, jpl 1658 1660 DO jk = 1, jlay 1659 DO jj = Njs0-1, Nje0+1 1661 DO jj = Njs0-1, Nje0+1 1660 1662 DO ji = Nis0, Nie0 1661 1663 zmax(ji,jj) = MAX( epsi20, pice(ji,jj,jk,jl), pice(ji-1,jj,jk,jl), pice(ji+1,jj,jk,jl) ) 1662 1664 END DO 1663 1665 END DO 1664 DO jj = Njs0, Nje0 1666 DO jj = Njs0, Nje0 1665 1667 DO ji = Nis0, Nie0 1666 1668 pmax(ji,jj,jk,jl) = MAX( epsi20, zmax(ji,jj), zmax(ji,jj-1), zmax(ji,jj+1) ) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_rdgrft.F90
r14017 r14021 186 186 ! closing_net = rate at which open water area is removed + ice area removed by ridging 187 187 ! - ice area added in new ridges 188 IF( ln_rhg_EVP ) closing_net(ji) = rn_csrdg * 0.5_wp * ( zdelt(ji) - ABS( zdivu(ji) ) ) - MIN( zdivu(ji), 0._wp ) 189 IF( ln_rhg_EAP ) closing_net(ji) = zconv(ji) 188 IF( ln_rhg_EVP .OR. ln_rhg_VP ) & 189 & closing_net(ji) = rn_csrdg * 0.5_wp * ( zdelt(ji) - ABS( zdivu(ji) ) ) - MIN( zdivu(ji), 0._wp ) 190 IF( ln_rhg_EAP ) closing_net(ji) = zconv(ji) 190 191 ! 191 192 IF( zdivu(ji) < 0._wp ) closing_net(ji) = MAX( closing_net(ji), -zdivu(ji) ) ! make sure the closing rate is large enough … … 578 579 oirft2(ji) = oa_i_2d(ji,jl1) * afrft * hi_hrft 579 580 580 IF ( ln_pnd_LEV ) THEN581 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 581 582 aprdg1 = a_ip_2d(ji,jl1) * afrdg 582 583 aprdg2(ji) = a_ip_2d(ji,jl1) * afrdg * hi_hrdg(ji,jl1) … … 615 616 sv_i_2d(ji,jl1) = sv_i_2d(ji,jl1) - sirdg1 - sirft(ji) 616 617 oa_i_2d(ji,jl1) = oa_i_2d(ji,jl1) - oirdg1 - oirft1 617 IF ( ln_pnd_LEV ) THEN618 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 618 619 a_ip_2d(ji,jl1) = a_ip_2d(ji,jl1) - aprdg1 - aprft1 619 620 v_ip_2d(ji,jl1) = v_ip_2d(ji,jl1) - vprdg(ji) - vprft(ji) … … 712 713 v_s_2d (ji,jl2) = v_s_2d (ji,jl2) + ( vsrdg (ji) * rn_fsnwrdg * fvol(ji) + & 713 714 & vsrft (ji) * rn_fsnwrft * zswitch(ji) ) 714 IF ( ln_pnd_LEV ) THEN715 IF ( ln_pnd_LEV .OR. ln_pnd_TOPO ) THEN 715 716 v_ip_2d (ji,jl2) = v_ip_2d(ji,jl2) + ( vprdg (ji) * rn_fpndrdg * fvol (ji) & 716 717 & + vprft (ji) * rn_fpndrft * zswitch(ji) ) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_rhg.F90
r14017 r14021 18 18 USE icedyn_rhg_evp ! sea-ice: EVP rheology 19 19 USE icedyn_rhg_eap ! sea-ice: EAP rheology 20 USE icedyn_rhg_vp ! sea-ice: VP rheology 20 21 USE icectl ! sea-ice: control prints 21 22 ! … … 35 36 INTEGER, PARAMETER :: np_rhgEVP = 1 ! EVP rheology 36 37 INTEGER, PARAMETER :: np_rhgEAP = 2 ! EAP rheology 38 INTEGER, PARAMETER :: np_rhgVP = 3 ! VP rheology 37 39 38 ! ** namelist (namrhg) **39 40 ! 40 41 !!---------------------------------------------------------------------- … … 78 79 CALL ice_dyn_rhg_evp( kt, Kmm, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i ) 79 80 ! 81 ! !------------------------! 82 CASE( np_rhgVP ) ! Viscous-Plastic ! 83 ! !------------------------! 84 CALL ice_dyn_rhg_vp ( kt, shear_i, divu_i, delta_i ) 85 ! 80 86 ! !----------------------------! 81 87 CASE( np_rhgEAP ) ! Elasto-Anisotropic-Plastic ! … … 84 90 END SELECT 85 91 ! 86 IF( lrst_ice ) THEN !* write EVP fields in the restart file87 IF( ln_rhg_EVP ) CALL rhg_evp_rst( 'WRITE', kt ) 92 IF( lrst_ice ) THEN 93 IF( ln_rhg_EVP ) CALL rhg_evp_rst( 'WRITE', kt ) !* write EVP fields in the restart file 88 94 IF( ln_rhg_EAP ) CALL rhg_eap_rst( 'WRITE', kt ) !* write EAP fields in the restart file 95 ! MV note: no restart needed for VP as there is no time equation for stress tensor 89 96 ENDIF 90 97 ! … … 113 120 INTEGER :: ios, ioptio ! Local integer output status for namelist read 114 121 !! 115 NAMELIST/namdyn_rhg/ ln_rhg_EVP, ln_aEVP, ln_rhg_EAP, rn_creepl, rn_ecc , nn_nevp, rn_relast, nn_rhg_chkcvg 122 NAMELIST/namdyn_rhg/ ln_rhg_EVP, ln_aEVP, ln_rhg_EAP, rn_creepl, rn_ecc , nn_nevp, rn_relast, nn_rhg_chkcvg, & !-- evp 123 & ln_rhg_VP, nn_vp_nout, nn_vp_ninn, nn_vp_chkcvg !-- vp 116 124 !!------------------------------------------------------------------- 117 125 ! … … 129 137 WRITE(numout,*) ' rheology EVP (icedyn_rhg_evp) ln_rhg_EVP = ', ln_rhg_EVP 130 138 WRITE(numout,*) ' use adaptive EVP (aEVP) ln_aEVP = ', ln_aEVP 131 WRITE(numout,*) ' creep limit rn_creepl = ', rn_creepl 132 WRITE(numout,*) ' eccentricity of the elliptical yield curve rn_ecc = ', rn_ecc 139 WRITE(numout,*) ' creep limit rn_creepl = ', rn_creepl ! also used by vp 140 WRITE(numout,*) ' eccentricity of the elliptical yield curve rn_ecc = ', rn_ecc ! also used by vp 133 141 WRITE(numout,*) ' number of iterations for subcycling nn_nevp = ', nn_nevp 134 142 WRITE(numout,*) ' ratio of elastic timescale over ice time step rn_relast = ', rn_relast 135 WRITE(numout,*) ' check convergence of rheology nn_rhg_chkcvg = ', nn_rhg_chkcvg 136 IF ( nn_rhg_chkcvg == 0 ) THEN ; WRITE(numout,*) ' no check' 137 ELSEIF( nn_rhg_chkcvg == 1 ) THEN ; WRITE(numout,*) ' check cvg at the main time step' 138 ELSEIF( nn_rhg_chkcvg == 2 ) THEN ; WRITE(numout,*) ' check cvg at both main and rheology time steps' 143 WRITE(numout,*) ' check convergence of rheology nn_rhg_chkcvg = ', nn_rhg_chkcvg 144 WRITE(numout,*) ' rheology VP (icedyn_rhg_VP) ln_rhg_VP = ', ln_rhg_VP 145 WRITE(numout,*) ' number of outer iterations nn_vp_nout = ', nn_vp_nout 146 WRITE(numout,*) ' number of inner iterations nn_vp_ninn = ', nn_vp_ninn 147 WRITE(numout,*) ' iteration step for convergence check nn_vp_chkcvg = ', nn_vp_chkcvg 148 IF( ln_rhg_EVP ) THEN 149 IF ( nn_rhg_chkcvg == 0 ) THEN ; WRITE(numout,*) ' no check cvg' 150 ELSEIF( nn_rhg_chkcvg == 1 ) THEN ; WRITE(numout,*) ' check cvg at the main time step' 151 ELSEIF( nn_rhg_chkcvg == 2 ) THEN ; WRITE(numout,*) ' check cvg at both main and rheology time steps' 152 ENDIF 139 153 ENDIF 140 154 WRITE(numout,*) ' rheology EAP (icedyn_rhg_eap) ln_rhg_EAP = ', ln_rhg_EAP … … 145 159 IF( ln_rhg_EVP ) THEN ; ioptio = ioptio + 1 ; nice_rhg = np_rhgEVP ; ENDIF 146 160 IF( ln_rhg_EAP ) THEN ; ioptio = ioptio + 1 ; nice_rhg = np_rhgEAP ; ENDIF 161 IF( ln_rhg_VP ) THEN ; ioptio = ioptio + 1 ; nice_rhg = np_rhgVP ; ENDIF 147 162 IF( ioptio /= 1 ) CALL ctl_stop( 'ice_dyn_rhg_init: choose one and only one ice rheology' ) 148 163 ! 149 164 IF( ln_rhg_EVP ) CALL rhg_evp_rst( 'READ' ) !* read or initialize all required files 150 165 IF( ln_rhg_EAP ) CALL rhg_eap_rst( 'READ' ) !* read or initialize all required files 166 ! no restart for VP as there is no explicit time dependency in the equation 151 167 ! 152 168 END SUBROUTINE ice_dyn_rhg_init -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/icedyn_rhg_evp.F90
r14017 r14021 326 326 zvV = 0.5_wp * ( vt_i(ji,jj) * e1e2t(ji,jj) + vt_i(ji,jj+1) * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1) 327 327 ! ice-bottom stress at U points 328 zvCr = zaU(ji,jj) * rn_lf_depfra * hu(ji,jj,Kmm) 328 zvCr = zaU(ji,jj) * rn_lf_depfra * hu(ji,jj,Kmm) * ( 1._wp - icb_mask(ji,jj) ) ! if grounded icebergs are read: ocean depth = 0 329 329 ztaux_base(ji,jj) = - rn_lf_bfr * MAX( 0._wp, zvU - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaU(ji,jj) ) ) 330 330 ! ice-bottom stress at V points 331 zvCr = zaV(ji,jj) * rn_lf_depfra * hv(ji,jj,Kmm) 331 zvCr = zaV(ji,jj) * rn_lf_depfra * hv(ji,jj,Kmm) * ( 1._wp - icb_mask(ji,jj) ) ! if grounded icebergs are read: ocean depth = 0 332 332 ztauy_base(ji,jj) = - rn_lf_bfr * MAX( 0._wp, zvV - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaV(ji,jj) ) ) 333 333 ! ice_bottom stress at T points 334 zvCr = at_i(ji,jj) * rn_lf_depfra * ht(ji,jj) 334 zvCr = at_i(ji,jj) * rn_lf_depfra * ht(ji,jj) * ( 1._wp - icb_mask(ji,jj) ) ! if grounded icebergs are read: ocean depth = 0 335 335 tau_icebfr(ji,jj) = - rn_lf_bfr * MAX( 0._wp, vt_i(ji,jj) - zvCr ) * EXP( -rn_crhg * ( 1._wp - at_i(ji,jj) ) ) 336 336 END_2D -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/iceistate.F90
r13472 r14021 18 18 USE oce ! dynamics and tracers variables 19 19 USE dom_oce ! ocean domain 20 USE sbc_oce , ONLY : sst_m, sss_m, ln_ice_embd 20 USE sbc_oce , ONLY : sst_m, sss_m, ln_ice_embd 21 21 USE sbc_ice , ONLY : tn_ice, snwice_mass, snwice_mass_b 22 22 USE eosbn2 ! equation of state … … 36 36 USE agrif_oce 37 37 USE agrif_ice 38 USE agrif_ice_interp 39 # endif 38 USE agrif_ice_interp 39 # endif 40 40 41 41 IMPLICIT NONE … … 87 87 !! 88 88 !! ** Method : This routine will put some ice where ocean 89 !! is at the freezing point, then fill in ice 90 !! state variables using prescribed initial 91 !! values in the namelist 89 !! is at the freezing point, then fill in ice 90 !! state variables using prescribed initial 91 !! values in the namelist 92 92 !! 93 93 !! ** Steps : 1) Set initial surface and basal temperatures … … 99 99 !! where there is no ice 100 100 !!-------------------------------------------------------------------- 101 INTEGER, INTENT(in) :: kt ! time step 101 INTEGER, INTENT(in) :: kt ! time step 102 102 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! ocean time level indices 103 103 ! … … 125 125 ! basal temperature (considered at freezing point) [Kelvin] 126 126 CALL eos_fzp( sss_m(:,:), t_bo(:,:) ) 127 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) 127 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) 128 128 ! 129 129 ! surface temperature and conductivity … … 150 150 e_i (:,:,:,:) = 0._wp 151 151 e_s (:,:,:,:) = 0._wp 152 152 153 153 ! general fields 154 154 a_i (:,:,:) = 0._wp … … 225 225 IF( TRIM(si(jp_apd)%clrootname) == 'NOT USED' ) & 226 226 & si(jp_apd)%fnow(:,:,1) = ( rn_apd_ini_n * zswitch + rn_apd_ini_s * (1._wp - zswitch) ) * tmask(:,:,1) & ! rn_apd = pond fraction => rn_apnd * a_i = pond conc. 227 & * si(jp_ati)%fnow(:,:,1) 227 & * si(jp_ati)%fnow(:,:,1) 228 228 ! 229 229 ! pond depth … … 244 244 ! 245 245 ! change the switch for the following 246 WHERE( zat_i_ini(:,:) > 0._wp ) ; zswitch(:,:) = tmask(:,:,1) 246 WHERE( zat_i_ini(:,:) > 0._wp ) ; zswitch(:,:) = tmask(:,:,1) 247 247 ELSEWHERE ; zswitch(:,:) = 0._wp 248 248 END WHERE … … 252 252 ! !---------------! 253 253 ! no ice if (sst - Tfreez) >= thresold 254 WHERE( ( sst_m(:,:) - (t_bo(:,:) - rt0) ) * tmask(:,:,1) >= rn_thres_sst ) ; zswitch(:,:) = 0._wp 254 WHERE( ( sst_m(:,:) - (t_bo(:,:) - rt0) ) * tmask(:,:,1) >= rn_thres_sst ) ; zswitch(:,:) = 0._wp 255 255 ELSEWHERE ; zswitch(:,:) = tmask(:,:,1) 256 256 END WHERE … … 265 265 zt_su_ini(:,:) = rn_tsu_ini_n * zswitch(:,:) 266 266 ztm_s_ini(:,:) = rn_tms_ini_n * zswitch(:,:) 267 zapnd_ini(:,:) = rn_apd_ini_n * zswitch(:,:) * zat_i_ini(:,:) ! rn_apd = pond fraction => rn_apd * a_i = pond conc. 267 zapnd_ini(:,:) = rn_apd_ini_n * zswitch(:,:) * zat_i_ini(:,:) ! rn_apd = pond fraction => rn_apd * a_i = pond conc. 268 268 zhpnd_ini(:,:) = rn_hpd_ini_n * zswitch(:,:) 269 269 zhlid_ini(:,:) = rn_hld_ini_n * zswitch(:,:) … … 291 291 zhlid_ini(:,:) = 0._wp 292 292 ENDIF 293 293 294 294 IF ( .NOT.ln_pnd_lids ) THEN 295 295 zhlid_ini(:,:) = 0._wp 296 296 ENDIF 297 297 298 298 !----------------! 299 299 ! 3) fill fields ! … … 319 319 CALL tab_2d_1d( npti, nptidx(1:npti), h_ip_1d(1:npti) , zhpnd_ini ) 320 320 CALL tab_2d_1d( npti, nptidx(1:npti), h_il_1d(1:npti) , zhlid_ini ) 321 321 322 322 ! allocate temporary arrays 323 323 ALLOCATE( zhi_2d (npti,jpl), zhs_2d (npti,jpl), zai_2d (npti,jpl), & … … 373 373 DO jl = 1, jpl 374 374 DO_3D( 1, 1, 1, 1, 1, nlay_i ) 375 t_i (ji,jj,jk,jl) = zti_3d(ji,jj,jl) 375 t_i (ji,jj,jk,jl) = zti_3d(ji,jj,jl) 376 376 ztmelts = - rTmlt * sz_i(ji,jj,jk,jl) + rt0 ! melting temperature in K 377 377 e_i(ji,jj,jk,jl) = zswitch(ji,jj) * v_i(ji,jj,jl) * r1_nlay_i * & … … 381 381 END_3D 382 382 END DO 383 383 384 384 #if defined key_agrif 385 385 ELSE 386 386 387 387 Agrif_SpecialValue = -9999. 388 388 Agrif_UseSpecialValue = .TRUE. … … 395 395 use_sign_north = .FALSE. 396 396 Agrif_UseSpecialValue = .FALSE. 397 ! lbc ???? 397 ! lbc ???? 398 398 ! Here we know : a_i, v_i, v_s, sv_i, oa_i, a_ip, v_ip, v_il, t_su, e_s, e_i 399 399 CALL ice_var_glo2eqv … … 409 409 v_ip(:,:,:) = h_ip(:,:,:) * a_ip(:,:,:) 410 410 v_il(:,:,:) = h_il(:,:,:) * a_ip(:,:,:) 411 411 412 412 ! specific temperatures for coupled runs 413 413 tn_ice(:,:,:) = t_su(:,:,:) … … 426 426 ! 4) Snow-ice mass (case ice is fully embedded) 427 427 !---------------------------------------------- 428 snwice_mass (:,:) = tmask(:,:,1) * SUM( rhos * v_s (:,:,:) + rhoi * v_i(:,:,:), dim=3 ) ! snow+ice mass428 snwice_mass (:,:) = tmask(:,:,1) * SUM( rhos * v_s + rhoi * v_i + rhow * ( v_ip + v_il ), dim=3 ) ! snow+ice mass 429 429 snwice_mass_b(:,:) = snwice_mass(:,:) 430 430 ! … … 487 487 !!------------------------------------------------------------------- 488 488 !! *** ROUTINE ice_istate_init *** 489 !! 490 !! ** Purpose : Definition of initial state of the ice 491 !! 492 !! ** Method : Read the namini namelist and check the parameter 489 !! 490 !! ** Purpose : Definition of initial state of the ice 491 !! 492 !! ** Method : Read the namini namelist and check the parameter 493 493 !! values called at the first timestep (nit000) 494 494 !! … … 531 531 WRITE(numout,*) ' max ocean temp. above Tfreeze with initial ice rn_thres_sst = ', rn_thres_sst 532 532 IF( ln_iceini .AND. nn_iceini_file == 0 ) THEN 533 WRITE(numout,*) ' initial snw thickness in the north-south rn_hts_ini = ', rn_hts_ini_n,rn_hts_ini_s 533 WRITE(numout,*) ' initial snw thickness in the north-south rn_hts_ini = ', rn_hts_ini_n,rn_hts_ini_s 534 534 WRITE(numout,*) ' initial ice thickness in the north-south rn_hti_ini = ', rn_hti_ini_n,rn_hti_ini_s 535 535 WRITE(numout,*) ' initial ice concentr in the north-south rn_ati_ini = ', rn_ati_ini_n,rn_ati_ini_s -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/ICE/iceitd.F90
r13618 r14021 18 18 !!---------------------------------------------------------------------- 19 19 USE dom_oce ! ocean domain 20 USE phycst ! physical constants 20 USE phycst ! physical constants 21 21 USE ice1D ! sea-ice: thermodynamic variables 22 22 USE ice ! sea-ice: variables … … 29 29 USE lib_fortran ! fortran utilities (glob_sum + no signed zero) 30 30 USE prtctl ! Print control 31 USE timing ! Timing 31 32 32 33 IMPLICIT NONE … … 65 66 !! after thermodynamic growth of ice thickness 66 67 !! 67 !! ** Method : Linear remapping 68 !! ** Method : Linear remapping 68 69 !! 69 70 !! References : W.H. Lipscomb, JGR 2001 70 71 !!------------------------------------------------------------------ 71 INTEGER , INTENT (in) :: kt ! Ocean time step 72 INTEGER , INTENT (in) :: kt ! Ocean time step 72 73 ! 73 74 INTEGER :: ji, jj, jl, jcat ! dummy loop index … … 75 76 REAL(wp) :: zx1, zwk1, zdh0, zetamin, zdamax ! local scalars 76 77 REAL(wp) :: zx2, zwk2, zda0, zetamax ! - - 77 REAL(wp) :: zx3 78 REAL(wp) :: zx3 78 79 REAL(wp) :: zslope ! used to compute local thermodynamic "speeds" 79 80 ! … … 87 88 REAL(wp), DIMENSION(jpij,0:jpl) :: zhbnew ! new boundaries of ice categories 88 89 !!------------------------------------------------------------------ 89 90 IF( kt == nit000 .AND. lwp ) WRITE(numout,*) '-- ice_itd_rem: remapping ice thickness distribution' 90 IF( ln_timing ) CALL timing_start('iceitd_rem') 91 92 IF( kt == nit000 .AND. lwp ) WRITE(numout,*) '-- ice_itd_rem: remapping ice thickness distribution' 91 93 92 94 IF( ln_icediachk ) CALL ice_cons_hsm(0, 'iceitd_rem', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) … … 105 107 ENDIF 106 108 END_2D 107 109 108 110 !----------------------------------------------------------------------------------------------- 109 111 ! 2) Compute new category boundaries … … 141 143 ELSEIF( a_ib_2d(ji,jl) <= epsi10 .AND. a_ib_2d(ji,jl+1) > epsi10 ) THEN ! a(jl)=0 => Hn* = Hn + fn+1*dt 142 144 zhbnew(ji,jl) = hi_max(jl) + zdhice(ji,jl+1) 143 ELSE ! a(jl+1) & a(jl) = 0 145 ELSE ! a(jl+1) & a(jl) = 0 144 146 zhbnew(ji,jl) = hi_max(jl) 145 147 ENDIF 146 148 ! 147 149 ! --- 2 conditions for remapping --- ! 148 ! 1) hn(t+1)+espi < Hn* < hn+1(t+1)-epsi 149 ! Note: hn(t+1) must not be too close to either HR or HL otherwise a division by nearly 0 is possible 150 ! 1) hn(t+1)+espi < Hn* < hn+1(t+1)-epsi 151 ! Note: hn(t+1) must not be too close to either HR or HL otherwise a division by nearly 0 is possible 150 152 ! in itd_glinear in the case (HR-HL) = 3(Hice - HL) or = 3(HR - Hice) 151 153 # if defined key_single … … 157 159 # endif 158 160 ! 159 ! 2) Hn-1 < Hn* < Hn+1 161 ! 2) Hn-1 < Hn* < Hn+1 160 162 IF( zhbnew(ji,jl) < hi_max(jl-1) ) nptidx(ji) = 0 161 163 IF( zhbnew(ji,jl) > hi_max(jl+1) ) nptidx(ji) = 0 … … 169 171 zhbnew(ji,jpl) = MAX( hi_max(jpl-1), 3._wp * h_i_2d(ji,jpl) - 2._wp * zhbnew(ji,jpl-1) ) 170 172 ELSE 171 zhbnew(ji,jpl) = hi_max(jpl) 173 zhbnew(ji,jpl) = hi_max(jpl) 172 174 ENDIF 173 175 ! 174 176 ! --- 1 additional condition for remapping (1st category) --- ! 175 ! H0+epsi < h1(t) < H1-epsi 176 ! h1(t) must not be too close to either HR or HL otherwise a division by nearly 0 is possible 177 ! H0+epsi < h1(t) < H1-epsi 178 ! &n