Changeset 8882 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/TOP_SRC/trc.F90
- Timestamp:
- 2017-12-01T18:44:09+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/TOP_SRC/trc.F90
r8665 r8882 17 17 PUBLIC trc_alloc ! called by nemogcm.F90 18 18 19 !! parameters for the control of passive tracers 20 !! --------------------------------------------- 21 INTEGER, PUBLIC :: numnat_ref = -1 !: logical unit for the reference passive tracer namelist_top_ref 22 INTEGER, PUBLIC :: numnat_cfg = -1 !: logical unit for the reference passive tracer namelist_top_cfg 23 INTEGER, PUBLIC :: numont = -1 !: logical unit for the reference passive tracer namelist output output.namelist.top 24 INTEGER, PUBLIC :: numtrc_ref = -1 !: logical unit for the reference passive tracer namelist_top_ref 25 INTEGER, PUBLIC :: numtrc_cfg = -1 !: logical unit for the reference passive tracer namelist_top_cfg 26 INTEGER, PUBLIC :: numonr = -1 !: logical unit for the reference passive tracer namelist output output.namelist.top 27 INTEGER, PUBLIC :: numstr !: logical unit for tracer statistics 28 INTEGER, PUBLIC :: numrtr !: logical unit for trc restart (read ) 29 INTEGER, PUBLIC :: numrtw !: logical unit for trc restart ( write ) 19 ! !!- logical units of passive tracers 20 INTEGER, PUBLIC :: numnat_ref = -1 !: reference passive tracer namelist_top_ref 21 INTEGER, PUBLIC :: numnat_cfg = -1 !: reference passive tracer namelist_top_cfg 22 INTEGER, PUBLIC :: numont = -1 !: reference passive tracer namelist output output.namelist.top 23 INTEGER, PUBLIC :: numtrc_ref = -1 !: reference passive tracer namelist_top_ref 24 INTEGER, PUBLIC :: numtrc_cfg = -1 !: reference passive tracer namelist_top_cfg 25 INTEGER, PUBLIC :: numonr = -1 !: reference passive tracer namelist output output.namelist.top 26 INTEGER, PUBLIC :: numstr !: tracer statistics 27 INTEGER, PUBLIC :: numrtr !: trc restart (read ) 28 INTEGER, PUBLIC :: numrtw !: trc restart ( write ) 30 29 31 30 !! passive tracers fields (before,now,after) 32 31 !! -------------------------------------------------- 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) 34 REAL(wp), PUBLIC 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: trai !: initial total tracer 33 REAL(wp), PUBLIC :: areatot !: total volume 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: cvol !: volume correction -degrad option- 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trn !: tracer concentration for now time step 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tra !: tracer concentration for next time step 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trb !: tracer concentration for before time step 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc_b !: Before sbc fluxes for tracers 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc !: Now sbc fluxes for tracers 41 40 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) 44 INTEGER , PUBLIC 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: trc_i !: prescribed tracer concentration in sea ice for SBC 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: trc_o !: prescribed tracer concentration in ocean for SBC 43 INTEGER , PUBLIC :: nn_ice_tr !: handling of sea ice tracers 45 44 46 45 !! interpolated gradient 47 46 !!-------------------------------------------------- 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtru !: hor. gradient at u-points at bottom ocean level 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtrv !: hor. gradient at v-points at bottom ocean level 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtrui !: hor. gradient at u-points at top ocean level 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtrvi !: hor. gradient at v-points at top ocean level 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_mean !: daily mean qsr 53 52 54 53 !! passive tracers (input and output) 55 54 !! ------------------------------------------ 56 LOGICAL , PUBLIC :: ln_rsttr!: boolean term for restart i/o for passive tracers (namelist)57 LOGICAL , PUBLIC :: lrst_trc!: logical to control the trc restart write58 INTEGER , PUBLIC :: nn_writetrc!: time step frequency for concentration outputs (namelist)59 INTEGER , PUBLIC :: nutwrs!: output FILE for passive tracers restart60 INTEGER , PUBLIC :: nutrst!: logical unit for restart FILE for passive tracers61 INTEGER , PUBLIC :: nn_rsttr!: control of the time step ( 0 or 1 ) for pass. tr.62 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_in!: suffix of pass. tracer restart name (input)63 CHARACTER(len = 256), PUBLIC :: cn_trcrst_indir!: restart input directory64 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_out!: suffix of pass. tracer restart name (output)65 CHARACTER(len = 256), PUBLIC :: cn_trcrst_outdir!: restart output directory66 REAL(wp) , PUBLIC :: rdttrc!: passive tracer time step67 REAL(wp) , PUBLIC :: r2dttrc!: = 2*rdttrc except at nit000 (=rdttrc) if neuler=068 LOGICAL , PUBLIC :: ln_top_euler!: boolean term for euler integration69 LOGICAL , PUBLIC :: ln_trcdta!: Read inputs data from files70 LOGICAL , PUBLIC :: ln_trcdmp!: internal damping flag71 LOGICAL , PUBLIC :: ln_trcdmp_clo!: internal damping flag on closed seas72 INTEGER , PUBLIC :: nittrc000!: first time step of passive tracers model73 LOGICAL , PUBLIC :: l_trcdm2dc!: Diurnal cycle for TOP55 LOGICAL , PUBLIC :: ln_rsttr !: boolean term for restart i/o for passive tracers (namelist) 56 LOGICAL , PUBLIC :: lrst_trc !: logical to control the trc restart write 57 INTEGER , PUBLIC :: nn_writetrc !: time step frequency for concentration outputs (namelist) 58 INTEGER , PUBLIC :: nutwrs !: output FILE for passive tracers restart 59 INTEGER , PUBLIC :: nutrst !: logical unit for restart FILE for passive tracers 60 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 61 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 62 CHARACTER(len = 256), PUBLIC :: cn_trcrst_indir !: restart input directory 63 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 64 CHARACTER(len = 256), PUBLIC :: cn_trcrst_outdir !: restart output directory 65 REAL(wp) , PUBLIC :: rdttrc !: passive tracer time step 66 REAL(wp) , PUBLIC :: r2dttrc !: = 2*rdttrc except at nit000 (=rdttrc) if neuler=0 67 LOGICAL , PUBLIC :: ln_top_euler !: boolean term for euler integration 68 LOGICAL , PUBLIC :: ln_trcdta !: Read inputs data from files 69 LOGICAL , PUBLIC :: ln_trcdmp !: internal damping flag 70 LOGICAL , PUBLIC :: ln_trcdmp_clo !: internal damping flag on closed seas 71 INTEGER , PUBLIC :: nittrc000 !: first time step of passive tracers model 72 LOGICAL , PUBLIC :: l_trcdm2dc !: Diurnal cycle for TOP 74 73 75 74 !! Information for the ice module for tracers 76 75 !! ------------------------------------------ 77 TYPE TRC_I_NML !---Ice tracer namelist structure78 REAL(wp) :: trc_ratio ! ice-ocean trc ratio79 REAL(wp) :: trc_prescr ! prescribed ice trc cc80 CHARACTER(len=2) :: ctrc_o ! choice of ocean trc cc76 TYPE, PUBLIC :: TRC_I_NML !: Ice tracer namelist structure 77 REAL(wp) :: trc_ratio ! ice-ocean trc ratio 78 REAL(wp) :: trc_prescr ! prescribed ice trc cc 79 CHARACTER(len=2) :: ctrc_o ! choice of ocean trc cc 81 80 END TYPE 82 83 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: trc_ice_ratio !ice-ocean tracer ratio84 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: trc_ice_prescr !prescribed ice trc cc85 CHARACTER(len=2), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: cn_trc_o !choice of ocean tracer cc81 ! 82 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: trc_ice_ratio !: ice-ocean tracer ratio 83 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: trc_ice_prescr !: prescribed ice trc cc 84 CHARACTER(len=2), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: cn_trc_o !: choice of ocean tracer cc 86 85 87 86 88 87 !! information for outputs 89 88 !! -------------------------------------------------- 90 TYPE, PUBLIC :: PTRACER!: Passive tracer type91 CHARACTER(len = 20) :: clsname !:short name92 CHARACTER(len = 80) :: cllname !:long name93 CHARACTER(len = 20) :: clunit !:unit94 LOGICAL :: llinit !:read in a file or not95 LOGICAL :: llsbc !:read in a file or not96 LOGICAL :: llcbc !:read in a file or not97 LOGICAL :: llobc !:read in a file or not89 TYPE, PUBLIC :: PTRACER !: Passive tracer type 90 CHARACTER(len=20) :: clsname ! short name 91 CHARACTER(len=80) :: cllname ! long name 92 CHARACTER(len=20) :: clunit ! unit 93 LOGICAL :: llinit ! read in a file or not 94 LOGICAL :: llsbc ! read in a file or not 95 LOGICAL :: llcbc ! read in a file or not 96 LOGICAL :: llobc ! read in a file or not 98 97 END TYPE PTRACER 99 100 CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcnm!: tracer name101 CHARACTER(len = 80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcln!: trccer field long name102 CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcun!: tracer unit103 104 TYPE, PUBLIC :: DIAG !: passive trcacer ddditional diagnostic type105 CHARACTER(len = 20) :: sname !:short name106 CHARACTER(len = 80) :: lname !:long name107 CHARACTER(len = 20) :: units !:unit98 ! 99 CHARACTER(len=20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcnm !: tracer name 100 CHARACTER(len=80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcln !: trccer field long name 101 CHARACTER(len=20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcun !: tracer unit 102 ! 103 TYPE, PUBLIC :: DIAG !: Passive trcacer ddditional diagnostic type 104 CHARACTER(len=20) :: sname ! short name 105 CHARACTER(len=80) :: lname ! long name 106 CHARACTER(len=20) :: units ! unit 108 107 END TYPE DIAG 109 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc3d!: 3D diagnostics for tracers111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc2d!: 2D diagnostics for tracers108 ! 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc3d !: 3D diagnostics for tracers 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc2d !: 2D diagnostics for tracers 112 111 113 112 !! information for inputs 114 113 !! -------------------------------------------------- 115 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_ini !: Initialisation from data input file 116 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_obc !: Use open boundary condition data 117 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_sbc !: Use surface boundary condition data 118 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_cbc !: Use coastal boundary condition data 119 LOGICAL , PUBLIC :: ln_rnf_ctl !: remove runoff dilution on tracers 120 REAL(wp), PUBLIC :: rn_bc_time !: Time scaling factor for SBC and CBC data (seconds in a day) 121 122 123 !! variables to average over physics over passive tracer sub-steps. 124 !! ---------------------------------------------------------------- 125 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_tm !: i-horizontal velocity average [m/s] 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vn_tm !: j-horizontal velocity average [m/s] 127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tsn_tm !: t/s average [m/s] 128 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_tm !: vertical diffusivity coeff. at w-point [m2/s] 129 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop_tm !: 130 # if defined key_zdfddm 131 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avs_tm !: vertical double diffusivity coeff. at w-point [m/s] 132 # endif 133 #if defined key_trabbl 134 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahu_bbl_tm !: u-, w-points 135 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahv_bbl_tm !: j-direction slope at u-, w-points 136 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utr_bbl_tm !: j-direction slope at u-, w-points 137 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtr_bbl_tm !: j-direction slope at u-, w-points 138 #endif 139 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_tm !: average ssh for the now step [m] 140 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshb_hold !:hold sshb from the beginning of each sub-stepping[m] 141 142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rnf_tm !: river runoff 143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_rnf_tm !: depth in metres to the bottom of the relevant grid box 144 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmld_tm !: mixed layer depth average [m] 145 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr_i_tm !: average ice fraction [m/s] 146 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_tm !: freshwater budget: volume flux [Kg/m2/s] 147 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmflx_tm !: freshwater budget: freezing/melting [Kg/m2/s] 148 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_b_hold !: hold emp from the beginning of each sub-stepping[m] 149 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tm !: solar radiation average [m] 150 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm_tm !: 10m wind average [m] 151 ! 152 153 ! Temporary physical arrays for sub_stepping 154 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tsn_temp 155 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_temp,vn_temp,wn_temp !: hold current values of avt, un, vn, wn 156 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_temp, rhop_temp !: hold current values of avt, un, vn, wn 157 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_temp, sshb_temp, ssha_temp, rnf_temp,h_rnf_temp 158 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdivn_temp, rotn_temp 159 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdivb_temp, rotb_temp 160 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmld_temp, qsr_temp, fr_i_temp,wndm_temp 161 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_temp, fmmflx_temp, emp_b_temp 162 ! 163 #if defined key_trabbl 164 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahu_bbl_temp, ahv_bbl_temp, utr_bbl_temp, vtr_bbl_temp !: hold current values 165 #endif 166 ! 167 # if defined key_zdfddm 168 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avs_temp !: salinity vertical diffusivity coeff. at w-point [m/s] 169 # endif 114 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_ini !: Initialisation from data input file 115 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_obc !: Use open boundary condition data 116 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_sbc !: Use surface boundary condition data 117 LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ln_trc_cbc !: Use coastal boundary condition data 118 LOGICAL , PUBLIC :: ln_rnf_ctl !: remove runoff dilution on tracers 119 REAL(wp), PUBLIC :: rn_bc_time !: Time scaling factor for SBC and CBC data (seconds in a day) 170 120 ! 171 121 CHARACTER(len=20), PUBLIC, DIMENSION(jp_bdy) :: cn_trc_dflt ! Default OBC condition for all tracers … … 174 124 !$AGRIF_DO_NOT_TREAT 175 125 ! External data structure of BDY for TOP. Available elements: cn_obc, ll_trc, trcnow, dmp 176 TYPE(OBC_DATA), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: trcdta_bdy!: bdy external data (local process)126 TYPE(OBC_DATA), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: trcdta_bdy !: bdy external data (local process) 177 127 !$AGRIF_END_DO_NOT_TREAT 128 ! 178 129 !!---------------------------------------------------------------------- 179 !! NEMO/TOP 3.3.1 , NEMO Consortium (2010)130 !! NEMO/TOP 4.0 , NEMO Consortium (2017) 180 131 !! $Id$ 181 132 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 205 156 & STAT = ierr(1) ) 206 157 ! 207 IF ( ln_bdy ) THEN 208 ALLOCATE( trcdta_bdy(jptra, jp_bdy), STAT = ierr(2) ) 209 ENDIF 158 IF( ln_bdy ) ALLOCATE( trcdta_bdy(jptra, jp_bdy) , STAT = ierr(2) ) 210 159 ! 211 IF (jp_dia3d > 0 ) ALLOCATE( trc3d(jpi,jpj,jpk,jp_dia3d), STAT = ierr(3) )160 IF (jp_dia3d > 0 ) ALLOCATE( trc3d(jpi,jpj,jpk,jp_dia3d), STAT = ierr(3) ) 212 161 ! 213 IF (jp_dia2d > 0 ) ALLOCATE( trc2d(jpi,jpj,jpk,jp_dia2d), STAT = ierr(4) )162 IF (jp_dia2d > 0 ) ALLOCATE( trc2d(jpi,jpj,jpk,jp_dia2d), STAT = ierr(4) ) 214 163 ! 215 164 trc_alloc = MAXVAL( ierr )
Note: See TracChangeset
for help on using the changeset viewer.