Changeset 15602 for NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias
- Timestamp:
- 2021-12-16T10:11:36+01:00 (3 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias/cfgs/SHARED/namelist_ref
r14075 r15602 1379 1379 cn_storst_out = "restart_sto" ! suffix of stochastic parameter restart file (output) 1380 1380 / 1381 !----------------------------------------------------------------------- 1382 &nambias ! Bias pressure correctiom 1383 !----------------------------------------------------------------------- 1384 ln_bias = .false. 1385 ln_bias_asm = .false. 1386 ln_bias_rlx = .false. 1387 ln_bias_ofl = .false. 1388 ln_bias_ts_app = .false. 1389 ln_bias_pc_app = .false. 1390 fb_t_asm = 0.0 1391 fb_t_rlx = 0.0 1392 fb_t_ofl = 1.0 1393 fb_p_asm = 1.0 1394 fb_p_rlx = 1.0 1395 fb_p_ofl = 0.0 1396 eft_rlx = 365.0 1397 eft_asm = 365.0 1398 t_rlx_upd = 0.1 1399 t_asm_upd = 0.1 1400 nn_lat_ramp = 0 1401 bias_time_unit_asm = 86400.0 1402 bias_time_unit_rlx = 1.0 1403 bias_time_unit_ofl = 1.0 1404 cn_bias_tot = "bias_tot.nc" 1405 cn_bias_asm = "bias_asm.nc" 1406 cn_dir = './' 1407 ln_bsyncro = .FALSE. 1408 fctamp = 1. 1409 rn_maxlat_bias = 23.0 1410 rn_minlat_bias = 10.0 1411 nn_bias_itwrt = 15 1412 ln_itdecay = .FALSE. 1413 ln_incpc = .FALSE. 1414 / -
NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias/src/OCE/ASM/bias.F90
r15359 r15602 31 31 !! fb_p_asm * (t/s)bias_asm_p 32 32 !! (t/s)bias is applied directely to correct T and S 33 !! (t/s)bias_p is used to compute rhd_pc and gru/v_pc33 !! (t/s)bias_p is used to compute rhd_pc 34 34 !! 35 35 !! Note: the above is an adhoc /simple way of making the partition … … 76 76 USE oce, ONLY: & 77 77 & tsb, tsn, tsa, & 78 & rhop, & 79 & gtsu, gtsv 78 & rhop 80 79 USE tradmp 81 80 USE dtatsd, ONLY: & … … 326 325 & tbias_i(jpi,jpj,jpk), & 327 326 & sbias_i(jpi,jpj,jpk), & 328 & rhd_pc(jpi,jpj,jpk) , & 329 & gru_pc(jpi,jpj) , & 330 & grv_pc(jpi,jpj) ) 327 & rhd_pc(jpi,jpj,jpk) ) 331 328 332 329 ALLOCATE( fbcoef(jpi,jpj), fbcoef_stscale(jpi,jpj) ) … … 391 388 tbias_i(:,:,:) = 0.0_wp 392 389 sbias_i(:,:,:) = 0.0_wp 393 gru_pc(:,:) = 0.0_wp 394 grv_pc(:,:) = 0.0_wp 390 rhd_pc(:,:,:) = 0.0_wp 395 391 396 392 IF ( ln_bias_rlx ) THEN … … 896 892 !! *** ROUTINE dyn_bias *** 897 893 !! 898 !! ** Purpose : Computes rhd_pc , gru/v_pcbias corrected894 !! ** Purpose : Computes rhd_pc bias corrected 899 895 !! for hydrostatic pressure gradient 900 896 !! depending on time step (semi-implicit/centered) … … 914 910 !! 915 911 !! ** Action : - rhd_pc ready. rhop will be overwriten later 916 !! - if ln_zps, bottom density gradients gru/v_pc ready.917 912 !!---------------------------------------------------------------------- 918 913 !! … … 926 921 ! gtu,gsu,gtv,gsv rhop will be overwritten later in step. 927 922 ! 928 tsw(:,:,:,jp_tem) = ts b(:,:,:,jp_tem) - tbias_p(:,:,:)929 tsw(:,:,:,jp_sal) = ts b(:,:,:,jp_sal) - sbias_p(:,:,:)923 tsw(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) - tbias_p(:,:,:) 924 tsw(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) - sbias_p(:,:,:) 930 925 IF ( ln_incpc ) THEN 931 tsw(:,:,:,jp_tem) = ts b(:,:,:,jp_tem) - tbias_p(:,:,:) - tbias_i(:,:,:)932 tsw(:,:,:,jp_sal) = ts b(:,:,:,jp_sal) - sbias_p(:,:,:) - sbias_i(:,:,:)926 tsw(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) - tbias_p(:,:,:) - tbias_i(:,:,:) 927 tsw(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) - sbias_p(:,:,:) - sbias_i(:,:,:) 933 928 IF ( ln_incpc_only ) THEN 934 929 IF(lwp) WRITE(numout,*) 'ln_incpc_only =', ln_incpc_only, 'tsw updated with IPC only' 935 tsw(:,:,:,jp_tem) = ts b(:,:,:,jp_tem) - tbias_i(:,:,:)936 tsw(:,:,:,jp_sal) = ts b(:,:,:,jp_sal) - sbias_i(:,:,:)930 tsw(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) - tbias_i(:,:,:) 931 tsw(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) - sbias_i(:,:,:) 937 932 ENDIF 938 933 ENDIF … … 941 936 IF(lwp) WRITE(numout,*) 'dyn_bias( kt ) calculating rhd_pc, kt =', kt 942 937 CALL eos( tsw, rhd_pc, rhop, gdept_n(:,:,:) ) 943 944 CALL lbc_lnk( 'bias', rhd_pc, 'T', 1. ) 945 946 947 ! Partial steps: now horizontal gradient of t,s,rd 948 ! at the bottom ocean level 949 950 IF( ln_zps ) THEN 951 CALL zps_hde( kt, jpts, tsw, gtsu, gtsv, & 952 & rhd_pc, gru_pc , grv_pc ) 953 ENDIF 938 954 939 955 940 END SUBROUTINE dyn_bias -
NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias/src/OCE/ASM/biaspar.F90
r15359 r15602 34 34 35 35 36 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: &37 & gru_pc, & !: Press corrtd bottom pressure gradient (x-dir)38 & grv_pc !: Press corrtd bottom pressure gradient (y-dir)39 40 41 42 36 END MODULE biaspar -
NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias/src/OCE/DYN/dynhpg.F90
r14075 r15602 46 46 USE timing ! Timing 47 47 USE iom 48 USE biaspar ! bias correction variables 48 49 49 50 IMPLICIT NONE … … 92 93 !!---------------------------------------------------------------------- 93 94 INTEGER, INTENT(in) :: kt ! ocean time-step index 94 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 95 INTEGER :: ji, jj, jk ! dummy loop indices 96 INTEGER :: iku, ikv ! k indices for bottom level at u and v points 97 INTEGER :: numf 98 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdu, ztrdv 99 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_rhd_st, z_rhd_diff ! tmp density storage for pressure corr 100 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_ua, z_va ! tmp store for ua and va including hpg but not pressure correction 101 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_ua_bpc, z_va_bpc ! ua calculated with bias pressure correction 102 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z_ua_bpc_bot, z_va_bpc_bot ! bias pc fields calculated at the ocean bottom 95 103 !!---------------------------------------------------------------------- 96 104 ! … … 102 110 ztrdv(:,:,:) = va(:,:,:) 103 111 ENDIF 112 ! 113 IF ( ln_bias .AND. ln_bias_pc_app ) THEN 114 115 ! allocate space for tempory variables for the bias pressure correction (bpc) 116 ALLOCATE( z_rhd_st(jpi,jpj,jpk), & 117 & z_ua(jpi,jpj,jpk), & 118 & z_va(jpi,jpj,jpk), & 119 & z_ua_bpc(jpi,jpj,jpk), & 120 & z_va_bpc(jpi,jpj,jpk), & 121 & z_ua_bpc_bot(jpi,jpj), & 122 & z_va_bpc_bot(jpi,jpj), & 123 & z_rhd_diff(jpi,jpj,jpk)& 124 & ) 125 126 ! save the original acceleration trends 127 ! (z_ua_bpc, z_va_bpc are used as temporary storage) 128 z_ua_bpc(:,:,:) = ua(:,:,:) 129 z_va_bpc(:,:,:) = va(:,:,:) 130 131 END IF 104 132 ! 105 133 SELECT CASE ( nhpg ) ! Hydrostatic pressure gradient computation … … 112 140 END SELECT 113 141 ! 142 IF ( ln_bias .AND. ln_bias_pc_app ) THEN 143 144 ! The aim here is to calculate the contribution of the bpc to the acceleration terms. 145 ! This is done so that the effect of the bpc on the hpg at the bottom can be removed. 146 ! In order to do that: 147 ! 1. The hpg calculation is done again, but with the contributions of the bpc included. 148 ! 2. The difference between the acceleration terms (w and w/o bpc) is then calculated. 149 ! 3. The effect of the bpc on the bottom hpg is then removed. 150 ! 4. The total change to the acceleration terms is then calculated. 151 152 ! The original density field (without the bpc) is stored. 153 z_rhd_st(:,:,:) = rhd(:,:,:) 154 155 ! Set the density used in the hpc calculations to the value including the effect of the bpc. 156 rhd(:,:,:) = rhd_pc(:,:,:) 157 158 ! save the acceleration trends including hpg field but calculated without the bpc fields 159 z_ua(:,:,:) = ua(:,:,:) 160 z_va(:,:,:) = va(:,:,:) 161 162 ! reset the acceleration trends to their original values 163 ua(:,:,:) = z_ua_bpc(:,:,:) 164 va(:,:,:) = z_va_bpc(:,:,:) 165 166 ! re-calculate the horizontal pressure gradients with the bpc fields 167 SELECT CASE ( nhpg ) ! Hydrostatic pressure gradient computation 168 CASE ( np_zco ) ; CALL hpg_zco ( kt ) ! z-coordinate 169 CASE ( np_zps ) ; CALL hpg_zps ( kt ) ! z-coordinate plus partial steps (interpolation) 170 CASE ( np_sco ) ; CALL hpg_sco ( kt ) ! s-coordinate (standard jacobian formulation) 171 CASE ( np_djc ) ; CALL hpg_djc ( kt ) ! s-coordinate (Density Jacobian with Cubic polynomial) 172 CASE ( np_prj ) ; CALL hpg_prj ( kt ) ! s-coordinate (Pressure Jacobian scheme) 173 CASE ( np_isf ) ; CALL hpg_isf ( kt ) ! s-coordinate similar to sco modify for ice shelf 174 END SELECT 175 176 ! calculate the bpc contribution to ua and va 177 z_ua_bpc(:,:,:) = ua(:,:,:) - z_ua(:,:,:) 178 z_va_bpc(:,:,:) = va(:,:,:) - z_va(:,:,:) 179 180 ! calculate the bpc contribution to ua and va at the bottom 181 DO jj = 2, jpjm1 182 DO ji = 2, jpim1 183 iku = mbku(ji,jj) 184 ikv = mbkv(ji,jj) 185 z_ua_bpc_bot(ji,jj) = z_ua_bpc(ji,jj,iku) 186 z_va_bpc_bot(ji,jj) = z_va_bpc(ji,jj,ikv) 187 END DO ! ji 188 END DO ! jj 189 190 ! subtract off the bottom values of bpc contribution to ua and va 191 DO jk = 1, jpk - 1 192 z_ua_bpc(:,:,jk) = z_ua_bpc(:,:,jk) - z_ua_bpc_bot(:,:) 193 z_va_bpc(:,:,jk) = z_va_bpc(:,:,jk) - z_va_bpc_bot(:,:) 194 END DO 195 196 ! calculate ua using the original hpg (z_ua) and the bias hpg 197 ! with the bottom pressure gradients subtracted off 198 ua(:,:,:) = z_ua(:,:,:) + z_ua_bpc(:,:,:) 199 va(:,:,:) = z_va(:,:,:) + z_va_bpc(:,:,:) 200 201 ! restore original density field 202 rhd(:,:,:) = z_rhd_st(:,:,:) 203 204 ! deallocate tempory variables 205 DEALLOCATE( z_rhd_st, z_ua, z_va, z_ua_bpc, & 206 & z_va_bpc, z_ua_bpc_bot, & 207 & z_va_bpc_bot, z_rhd_diff & 208 & ) 209 210 ENDIF ! ln_bias .AND. ln_bias_pc_app 211 212 114 213 IF( l_trddyn ) THEN ! save the hydrostatic pressure gradient trends for momentum trend diagnostics 115 214 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) -
NEMO/branches/UKMO/NEMO_4.0.4_FOAM_pcbias/src/OCE/step.F90
r15359 r15602 179 179 CALL dyn_ldf ( kstp ) ! lateral mixing 180 180 IF( ln_zdfosm ) CALL dyn_osm ( kstp ) ! OSMOSIS non-local velocity fluxes 181 IF( ln_bias ) CALL tra_bias ( kstp ) ! tracer bias 182 IF( ln_bias ) CALL dyn_bias ( kstp ) 181 183 CALL dyn_hpg ( kstp ) ! horizontal gradient of Hydrostatic pressure 182 184 CALL dyn_spg ( kstp ) ! surface pressure gradient … … 232 234 IF( ln_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 233 235 IF( ln_tradmp ) CALL tra_dmp ( kstp ) ! internal damping trends 234 IF( ln_bias ) CALL tra_bias ( kstp ) ! tracer bias235 236 IF( ln_bdy ) CALL bdy_tra_dmp ( kstp ) ! bdy damping trends 236 237 #if defined key_agrif … … 265 266 !!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine 266 267 CALL tra_nxt ( kstp ) ! finalize (bcs) tracer fields at next time step and swap 267 IF( ln_bias ) CALL dyn_bias ( kstp )268 268 CALL dyn_nxt ( kstp ) ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 269 269 CALL ssh_swp ( kstp ) ! swap of sea surface height
Note: See TracChangeset
for help on using the changeset viewer.