Changeset 7567 for branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC
- Timestamp:
- 2017-01-16T20:11:00+01:00 (7 years ago)
- Location:
- branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 1 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90
r7566 r7567 18 18 USE trd_oce 19 19 USE trdtrc 20 USE trcbc, only : trc_bc_read 20 21 21 22 IMPLICIT NONE … … 55 56 56 57 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrmyt ) 58 59 CALL trc_bc_read ( kt ) ! tracers: surface and lateral Boundary Conditions 57 60 58 61 IF( l_trdtrc ) THEN ! Save the trends in the ixed layer -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcwri_my_trc.F90
r7566 r7567 19 19 20 20 PUBLIC trc_wri_my_trc 21 #if defined key_tracer_budget 22 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:), SAVE :: trb_temp ! slwa 23 #endif 24 21 25 22 26 # include "top_substitute.h90" 23 27 CONTAINS 24 28 29 #if defined key_tracer_budget 30 SUBROUTINE trc_wri_my_trc (kt, fl) ! slwa 31 #else 25 32 SUBROUTINE trc_wri_my_trc 33 #endif 26 34 !!--------------------------------------------------------------------- 27 35 !! *** ROUTINE trc_wri_trc *** … … 29 37 !! ** Purpose : output passive tracers fields 30 38 !!--------------------------------------------------------------------- 39 #if defined key_tracer_budget 40 INTEGER, INTENT( in ), OPTIONAL :: fl 41 INTEGER, INTENT( in ) :: kt 42 REAL(wp), DIMENSION(jpi,jpj,jpk) :: trpool !tracer pool temporary output 43 #endif 31 44 CHARACTER (len=20) :: cltra 32 INTEGER :: jn 45 INTEGER :: jn,jk 33 46 !!--------------------------------------------------------------------- 34 47 35 48 ! write the tracer concentrations in the file 36 49 ! --------------------------------------- 50 51 52 #if defined key_tracer_budget 53 IF( PRESENT(fl)) THEN 54 ! depth integrated 55 ! for strict budgetting write this out at end of timestep as an average between 'now' and 'after' at kt 56 DO jn = jp_myt0, jp_myt1 57 trpool(:,:,:) = 0.5 * ( trn(:,:,:,jn) * fse3t_a(:,:,:) + & 58 trb_temp(:,:,:,jn) * fse3t(:,:,:) ) 59 ! 60 cltra = TRIM( ctrcnm(jn) ) ! output of tracer density 61 CALL iom_put( cltra, trpool(:,:,:) / (0.5* (fse3t(:,:,:) + fse3t_a(:,:,:) ) ) ) 62 ! 63 cltra = TRIM( ctrcnm(jn) )//"_pool" ! volume integrated output 64 DO jk = 1, jpk 65 trpool(:,:,jk) = trpool(:,:,jk) * e1t(:,:) * e2t(:,:) 66 END DO 67 CALL iom_put( cltra, trpool) 68 69 ! cltra = TRIM( ctrcnm(jn) )//"_pool" ! volume integrated output 70 ! DO jk = 1, jpk 71 ! trpool(:,:,jk) = 0.5 * ( trn(:,:,jk,jn) * fse3t_a(:,:,jk) + & 72 ! trb_temp(:,:,jk,jn) * fse3t(:,:,jk) ) * & 73 ! e1t(:,:) * e2t(:,:) 74 ! END DO 75 ! CALL iom_put( cltra, trpool) 76 ! cltra = TRIM( ctrcnm(jn) ) ! output of tracer density 77 ! CALL iom_put( cltra, trpool(:,:,:) / (0.5* (fse3t(:,:,:) + fse3t_a(:,:,:) ) ) ) 78 END DO 79 CALL iom_put( "DEPTH" , 0.5* (fse3t(:,:,:) + fse3t_a(:,:,:) ) ) ! equivalent 'depth' at same time as tracer pool output 80 ELSE 81 82 IF( kt == nittrc000 ) THEN 83 ALLOCATE(trb_temp(jpi,jpj,jpk,jptra)) ! slwa 84 ENDIF 85 trb_temp(:,:,:,:)=trn(:,:,:,:) ! slwa save for tracer budget (unfiltered trn) 86 87 ! DO jn = jp_myt0, jp_myt1 88 ! cltra = TRIM( ctrcnm(jn) ) ! short title for tracer 89 ! CALL iom_put( cltra, trn(:,:,:,jn) ) 90 ! END DO 91 ! write out depths and areas in double precision for tracer budget calculations 92 CALL iom_put( "AREA" , e1t(:,:) * e2t(:,:)) 93 ! CALL iom_put( "DEPTH" , fse3t(:,:,:) ) ! need depth at same time as tracer output 94 95 END IF 96 #else 37 97 DO jn = jp_myt0, jp_myt1 38 98 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer 39 99 CALL iom_put( cltra, trn(:,:,:,jn) ) 40 100 END DO 101 #endif 41 102 ! 42 103 END SUBROUTINE trc_wri_my_trc -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90
r7566 r7567 56 56 INTEGER, INTENT( in ) :: kt ! ocean time-step index 57 57 !! 58 INTEGER :: jn 58 INTEGER :: jn, jk 59 59 CHARACTER (len=22) :: charout 60 60 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrtrd … … 105 105 DO jn = 1, jptra 106 106 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 107 #if defined key_tracer_budget 108 DO jk = 1, jpkm1 109 ztrtrd(:,:,jk,jn) = ztrtrd(:,:,jk,jn) * e1t(:,:) * e2t(:,:) * fse3t(:,:,jk) ! slwa 110 END DO 111 #endif 107 112 CALL trd_tra( kt, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) ) 108 113 END DO -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r7566 r7567 33 33 USE trdtra 34 34 USE tranxt 35 USE trcbdy ! BDY open boundaries 36 USE bdy_par, only: lk_bdy 37 USE iom 35 38 # if defined key_agrif 36 39 USE agrif_top_interp … … 93 96 CHARACTER (len=22) :: charout 94 97 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrdt 98 #if defined key_tracer_budget 99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: ztrdt_m1 ! slwa 100 #endif 95 101 !!---------------------------------------------------------------------- 96 102 ! … … 101 107 WRITE(numout,*) 'trc_nxt : time stepping on passive tracers' 102 108 ENDIF 109 #if defined key_tracer_budget 110 IF( kt == nittrc000 .AND. l_trdtrc ) THEN 111 ALLOCATE( ztrdt_m1(jpi,jpj,jpk,jptra) ) ! slwa 112 IF( ln_rsttr .AND. & ! Restart: read in restart file 113 iom_varid( numrtr, 'atf_trend_'//TRIM(ctrcnm(1)), ldstop = .FALSE. ) > 0 ) THEN 114 IF(lwp) WRITE(numout,*) ' nittrc000-nn_dttrc ATF tracer trend read in the restart file' 115 DO jn = 1, jptra 116 CALL iom_get( numrtr, jpdom_autoglo, 'atf_trend_'//TRIM(ctrcnm(jn)), ztrdt_m1(:,:,:,jn) ) ! before tracer trend for atf 117 END DO 118 ELSE 119 ztrdt_m1=0.0 120 ENDIF 121 ENDIF 122 #endif 103 123 104 124 #if defined key_agrif … … 111 131 112 132 113 #if defined key_bdy 114 !! CALL bdy_trc( kt ) ! BDY open boundaries 115 #endif 133 IF( lk_bdy ) CALL trc_bdy( kt ) ! BDY open boundaries 116 134 117 135 … … 149 167 zfact = 1.e0 / r2dt(jk) 150 168 ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact 151 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 169 !slwa CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 170 #if defined key_tracer_budget 171 ztrdt(:,:,jk,jn) = ztrdt(:,:,jk,jn) * e1t(:,:) * e2t(:,:) * e3t_n(:,:,jk) ! slwa vvl 172 !ztrdt(:,:,jk,jn) = ztrdt(:,:,jk,jn) * e1t(:,:) * e2t(:,:) * e3t_0(:,:,jk) ! slwa CHANGE for vvl 173 #endif 152 174 END DO 175 #if defined key_tracer_budget 176 ! slwa budget code 177 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt_m1(:,:,:,jn) ) 178 #else 179 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 180 #endif 153 181 END DO 182 #if defined key_tracer_budget 183 ztrdt_m1(:,:,:,:) = ztrdt(:,:,:,:) ! need previous time step for budget slwa 184 #endif 154 185 CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt ) 155 186 END IF 187 188 #if defined key_tracer_budget 189 ! Write in the tracer restart file 190 ! ******************************* 191 IF( lrst_trc ) THEN 192 IF(lwp) WRITE(numout,*) 193 IF(lwp) WRITE(numout,*) 'trc : ATF trend at last time step for tracer budget written in tracer restart file ', & 194 & 'at it= ', kt,' date= ', ndastp 195 IF(lwp) WRITE(numout,*) '~~~~' 196 DO jn = 1, jptra 197 CALL iom_rstput( kt, nitrst, numrtw, 'atf_trend_'//TRIM(ctrcnm(jn)), ztrdt_m1(:,:,:,jn) ) 198 END DO 199 ENDIF 200 #endif 201 156 202 ! 157 203 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
r7566 r7567 18 18 USE trdtra 19 19 USE prtctl_trc ! Print control for debbuging 20 #if defined key_tracer_budget 21 USE iom 22 #endif 20 23 21 24 IMPLICIT NONE … … 110 113 REAL(wp) :: zcoef, ztrcorn, ztrmasn ! " " 111 114 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrtrdb, ztrtrdn ! workspace arrays 115 #if defined key_tracer_budget 116 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: ztrtrdb_m1 ! slwa 117 #endif 112 118 REAL(wp) :: zs2rdt 113 119 LOGICAL :: lldebug = .FALSE. … … 116 122 117 123 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 124 #if defined key_tracer_budget 125 IF( kt == nittrc000 .AND. l_trdtrc) THEN 126 ALLOCATE( ztrtrdb_m1(jpi,jpj,jpk,jptra) ) ! slwa 127 IF( ln_rsttr .AND. & ! Restart: read in restart file 128 iom_varid( numrtr, 'rdb_trend_'//TRIM(ctrcnm(1)), ldstop = .FALSE. ) > 0 ) THEN 129 IF(lwp) WRITE(numout,*) ' nittrc000-nn_dttrc RDB tracer trend read in the restart file' 130 DO jn = 1, jptra 131 CALL iom_get( numrtr, jpdom_autoglo, 'rdb_trend_'//TRIM(ctrcnm(jn)), ztrtrdb_m1(:,:,:,jn) ) ! before tracer trend for rdb 132 END DO 133 ELSE 134 ztrtrdb_m1=0.0 135 ENDIF 136 ENDIF 137 #endif 118 138 119 139 IF( PRESENT( cpreserv ) ) THEN ! total tracer concentration is preserved … … 156 176 ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 157 177 ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt 178 #if defined key_tracer_budget 179 ! slwa budget code 180 DO jk = 1, jpkm1 181 ztrtrdb(:,:,jk) = ztrtrdb(:,:,jk) * e1t(:,:) * e2t(:,:) * fse3t(:,:,jk) 182 ztrtrdn(:,:,jk) = ztrtrdn(:,:,jk) * e1t(:,:) * e2t(:,:) * fse3t(:,:,jk) 183 END DO 184 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb_m1(:,:,:,jn) ) 185 ztrtrdb_m1(:,:,:,jn)=ztrtrdb(:,:,:) 186 #else 158 187 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb ) ! Asselin-like trend handling 188 #endif 159 189 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn ) ! standard trend handling 160 190 ! … … 187 217 ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 188 218 ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt 219 #if defined key_tracer_budget 220 ! slwa budget code 221 DO jk = 1, jpkm1 222 ztrtrdb(:,:,jk) = ztrtrdb(:,:,jk) * e1t(:,:) * e2t(:,:) * fse3t(:,:,jk) 223 ztrtrdn(:,:,jk) = ztrtrdn(:,:,jk) * e1t(:,:) * e2t(:,:) * fse3t(:,:,jk) 224 END DO 225 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb_m1(:,:,:,jn) ) 226 ztrtrdb_m1(:,:,:,jn)=ztrtrdb(:,:,:) 227 #else 189 228 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb ) ! Asselin-like trend handling 229 #endif 190 230 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn ) ! standard trend handling 191 231 ! … … 195 235 196 236 ENDIF 237 238 #if defined key_tracer_budget 239 ! Write in the tracer restart file 240 ! ******************************* 241 IF( lrst_trc ) THEN 242 IF(lwp) WRITE(numout,*) 243 IF(lwp) WRITE(numout,*) 'trc : RDB trend at last time step for tracer budget written in tracer restart file ', & 244 & 'at it= ', kt,' date= ', ndastp 245 IF(lwp) WRITE(numout,*) '~~~~' 246 DO jn = 1, jptra 247 CALL iom_rstput( kt, nitrst, numrtw, 'rdb_trend_'//TRIM(ctrcnm(jn)), ztrtrdb_m1(:,:,:,jn) ) 248 END DO 249 ENDIF 250 #endif 197 251 198 252 IF( l_trdtrc ) CALL wrk_dealloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r7566 r7567 113 113 sbc_trc_b(:,:,:) = 0._wp 114 114 ENDIF 115 sbc_trc(:,:,:) = 0._wp !slwa initialise for vvl 115 116 ELSE ! Swap of forcing fields 116 117 IF( ln_top_euler ) THEN -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r7566 r7567 27 27 USE trcsbc ! surface boundary condition (trc_sbc routine) 28 28 USE zpshde ! partial step: hor. derivative (zps_hde routine) 29 USE trcbdy ! BDY open boundaries 30 USE bdy_par, only: lk_bdy 29 31 30 32 #if defined key_agrif … … 68 70 IF( ln_trcdmp ) CALL trc_dmp( kstp ) ! internal damping trends 69 71 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kstp ) ! internal damping trends on closed seas only 72 IF( lk_bdy ) CALL trc_bdy_dmp( kstp ) ! BDY damping trends 70 73 CALL trc_adv( kstp ) ! horizontal & vertical advection 71 74 CALL trc_ldf( kstp ) ! lateral mixing -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trc.F90
r7566 r7567 14 14 USE par_oce 15 15 USE par_trc 16 #if defined key_bdy 17 USE bdy_oce, only: nb_bdy, OBC_DATA 18 #endif 16 19 17 20 IMPLICIT NONE … … 91 94 CHARACTER(len = 20) :: clunit !: unit 92 95 LOGICAL :: llinit !: read in a file or not 96 #if defined key_my_trc 97 LOGICAL :: llsbc !: read in a file or not 98 LOGICAL :: llcbc !: read in a file or not 99 LOGICAL :: llobc !: read in a file or not 100 #endif 93 101 LOGICAL :: llsave !: save the tracer or not 94 102 END TYPE PTRACER … … 191 199 # endif 192 200 ! 201 #if defined key_bdy 202 CHARACTER(len=20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: cn_trc_dflt ! Default OBC condition for all tracers 203 CHARACTER(len=20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: cn_trc ! Choice of boundary condition for tracers 204 INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: nn_trcdmp_bdy !: =T Tracer damping 205 ! External data structure of BDY for TOP. Available elements: cn_obc, ll_trc, trcnow, dmp 206 TYPE(OBC_DATA), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: trcdta_bdy !: bdy external data (local process) 207 #endif 193 208 194 209 !!---------------------------------------------------------------------- … … 213 228 & cvol(jpi,jpj,jpk) , rdttrc(jpk) , trai(jptra) , & 214 229 & ctrcnm(jptra) , ctrcln(jptra) , ctrcun(jptra) , & 230 #if defined key_my_trc 231 & ln_trc_sbc(jptra) , ln_trc_cbc(jptra) , ln_trc_obc(jptra) , & 232 #endif 233 #if defined key_bdy 234 & cn_trc_dflt(nb_bdy) , cn_trc(nb_bdy) , nn_trcdmp_bdy(nb_bdy) , & 235 & trcdta_bdy(jptra,nb_bdy) , & 236 #endif 215 237 & ln_trc_ini(jptra) , ln_trc_wri(jptra) , qsr_mean(jpi,jpj) , STAT = trc_alloc ) 216 238 -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcbc.F90
r7566 r7567 4 4 !! TOP : module for passive tracer boundary conditions 5 5 !!===================================================================== 6 !! History : 3.5 ! 2014-04 (M. Vichi, T. Lovato) Original 7 !! 3.6 ! 2015-03 (T . Lovato) Revision and BDY support 6 8 !!---------------------------------------------------------------------- 7 9 #if defined key_top … … 9 11 !! 'key_top' TOP model 10 12 !!---------------------------------------------------------------------- 11 !! trc_ dta : read and time interpolated passive tracer data13 !! trc_bc : read and time interpolated tracer Boundary Conditions 12 14 !!---------------------------------------------------------------------- 13 15 USE par_trc ! passive tracers parameters … … 17 19 USE lib_mpp ! MPP library 18 20 USE fldread ! read input fields 21 #if defined key_bdy 22 USE bdy_oce, only: nb_bdy , idx_bdy, ln_coords_file, rn_time_dmp, rn_time_dmp_out 23 #endif 19 24 20 25 IMPLICIT NONE … … 30 35 INTEGER , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: n_trc_indsbc ! index of tracer with SBC data 31 36 INTEGER , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: n_trc_indcbc ! index of tracer with CBC data 32 INTEGER , SAVE, PUBLIC :: ntra_obc ! MAX( 1, nb_trcxxx ) to avoid compilation error with bounds checking33 INTEGER , SAVE, PUBLIC :: ntra_sbc ! MAX( 1, nb_trcxxx ) to avoid compilation error with bounds checking34 INTEGER , SAVE, PUBLIC :: ntra_cbc ! MAX( 1, nb_trcxxx ) to avoid compilation error with bounds checking35 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trofac ! multiplicative factor for OBCtracer values36 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trcobc ! structure of data input OBC (file informations, fields read)37 37 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trsfac ! multiplicative factor for SBC tracer values 38 38 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trcsbc ! structure of data input SBC (file informations, fields read) 39 39 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trcfac ! multiplicative factor for CBC tracer values 40 40 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trccbc ! structure of data input CBC (file informations, fields read) 41 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: rf_trofac ! multiplicative factor for OBCtracer values 42 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: sf_trcobc ! structure of data input OBC (file informations, fields read) 43 TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:,:) :: nbmap_ptr ! array of pointers to nbmap 41 44 42 45 !! * Substitutions 43 46 # include "domzgr_substitute.h90" 44 47 !!---------------------------------------------------------------------- 45 !! NEMO/OPA 3. 3 , NEMO Consortium (2010)48 !! NEMO/OPA 3.6 , NEMO Consortium (2015) 46 49 !! $Id$ 47 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 60 63 ! 61 64 INTEGER,INTENT(IN) :: ntrc ! number of tracers 62 INTEGER :: jl, jn 65 INTEGER :: jl, jn , ib, ibd, ii, ij, ik ! dummy loop indices 63 66 INTEGER :: ierr0, ierr1, ierr2, ierr3 ! temporary integers 64 67 INTEGER :: ios ! Local integer output status for namelist read 68 INTEGER :: nblen, igrd ! support arrays for BDY 65 69 CHARACTER(len=100) :: clndta, clntrc 66 70 ! 67 CHARACTER(len=100) :: cn_dir 71 CHARACTER(len=100) :: cn_dir_sbc, cn_dir_cbc, cn_dir_obc 72 68 73 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: slf_i ! local array of namelist informations on the fields to read 69 TYPE(FLD_N), DIMENSION(jpmaxtrc) :: sn_trcobc ! open 74 TYPE(FLD_N), DIMENSION(jpmaxtrc,2) :: sn_trcobc ! open 75 TYPE(FLD_N), DIMENSION(jpmaxtrc) :: sn_trcobc2 ! to read in multiple (2) open bdy 70 76 TYPE(FLD_N), DIMENSION(jpmaxtrc) :: sn_trcsbc ! surface 71 77 TYPE(FLD_N), DIMENSION(jpmaxtrc) :: sn_trccbc ! coastal … … 74 80 REAL(wp) , DIMENSION(jpmaxtrc) :: rn_trcfac ! multiplicative factor for tracer values 75 81 !! 76 NAMELIST/namtrc_bc/ cn_dir, sn_trcobc, rn_trofac, sn_trcsbc, rn_trsfac, sn_trccbc, rn_trcfac 82 NAMELIST/namtrc_bc/ cn_dir_sbc, cn_dir_cbc, cn_dir_obc, sn_trcobc2, rn_trofac, sn_trcsbc, rn_trsfac, sn_trccbc, rn_trcfac 83 #if defined key_bdy 84 NAMELIST/namtrc_bdy/ cn_trc_dflt, cn_trc, nn_trcdmp_bdy 85 #endif 77 86 !!---------------------------------------------------------------------- 78 87 IF( nn_timing == 1 ) CALL timing_start('trc_bc_init') 79 88 ! 89 IF( lwp ) THEN 90 WRITE(numout,*) ' ' 91 WRITE(numout,*) 'trc_bc_init : Tracers Boundary Conditions (BC)' 92 WRITE(numout,*) '~~~~~~~~~~~ ' 93 ENDIF 80 94 ! Initialisation and local array allocation 81 95 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 … … 107 121 n_trc_indcbc(:) = 0 108 122 ! 109 DO jn = 1, ntrc 110 IF( ln_trc_obc(jn) ) THEN 111 nb_trcobc = nb_trcobc + 1 112 n_trc_indobc(jn) = nb_trcobc 113 ENDIF 114 IF( ln_trc_sbc(jn) ) THEN 115 nb_trcsbc = nb_trcsbc + 1 116 n_trc_indsbc(jn) = nb_trcsbc 117 ENDIF 118 IF( ln_trc_cbc(jn) ) THEN 119 nb_trccbc = nb_trccbc + 1 120 n_trc_indcbc(jn) = nb_trccbc 121 ENDIF 122 ENDDO 123 ntra_obc = MAX( 1, nb_trcobc ) ! To avoid compilation error with bounds checking 124 IF( lwp ) WRITE(numout,*) ' ' 125 IF( lwp ) WRITE(numout,*) ' Number of passive tracers to be initialized with open boundary data :', nb_trcobc 126 IF( lwp ) WRITE(numout,*) ' ' 127 ntra_sbc = MAX( 1, nb_trcsbc ) ! To avoid compilation error with bounds checking 128 IF( lwp ) WRITE(numout,*) ' ' 129 IF( lwp ) WRITE(numout,*) ' Number of passive tracers to be initialized with surface boundary data :', nb_trcsbc 130 IF( lwp ) WRITE(numout,*) ' ' 131 ntra_cbc = MAX( 1, nb_trccbc ) ! To avoid compilation error with bounds checking 132 IF( lwp ) WRITE(numout,*) ' ' 133 IF( lwp ) WRITE(numout,*) ' Number of passive tracers to be initialized with coastal boundary data :', nb_trccbc 134 IF( lwp ) WRITE(numout,*) ' ' 135 123 ! Read Boundary Conditions Namelists 136 124 REWIND( numnat_ref ) ! Namelist namtrc_bc in reference namelist : Passive tracer data structure 137 125 READ ( numnat_ref, namtrc_bc, IOSTAT = ios, ERR = 901) … … 139 127 140 128 REWIND( numnat_cfg ) ! Namelist namtrc_bc in configuration namelist : Passive tracer data structure 129 #if defined key_bdy 130 DO ib = 1, nb_bdy 131 #endif 141 132 READ ( numnat_cfg, namtrc_bc, IOSTAT = ios, ERR = 902 ) 142 133 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_bc in configuration namelist', lwp ) 143 134 IF(lwm) WRITE ( numont, namtrc_bc ) 144 145 ! print some information for each 135 #if defined key_bdy 136 sn_trcobc(:,ib)=sn_trcobc2(:) 137 ENDDO 138 #endif 139 140 #if defined key_bdy 141 REWIND( numnat_ref ) ! Namelist namtrc_bc in reference namelist : Passive tracer data structure 142 READ ( numnat_ref, namtrc_bdy, IOSTAT = ios, ERR = 903) 143 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_bdy in reference namelist', lwp ) 144 145 REWIND( numnat_cfg ) ! Namelist namtrc_bc in configuration namelist : Passive tracer data structure 146 READ ( numnat_cfg, namtrc_bdy, IOSTAT = ios, ERR = 904 ) 147 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_bdy in configuration namelist', lwp ) 148 IF(lwm) WRITE ( numont, namtrc_bdy ) 149 ! setup up preliminary informations for BDY structure 150 DO jn = 1, ntrc 151 DO ib = 1, nb_bdy 152 ! Set type of obc in BDY data structure (around here we may plug user override of obc type from nml) 153 IF ( ln_trc_obc(jn) ) THEN 154 trcdta_bdy(jn,ib)%cn_obc = TRIM( cn_trc(ib) ) 155 ELSE 156 trcdta_bdy(jn,ib)%cn_obc = TRIM( cn_trc_dflt(ib) ) 157 ENDIF 158 ! set damping use in BDY data structure 159 trcdta_bdy(jn,ib)%dmp = .false. 160 IF(nn_trcdmp_bdy(ib) .EQ. 1 .AND. ln_trc_obc(jn) ) trcdta_bdy(jn,ib)%dmp = .true. 161 IF(nn_trcdmp_bdy(ib) .EQ. 2 ) trcdta_bdy(jn,ib)%dmp = .true. 162 IF(trcdta_bdy(jn,ib)%cn_obc == 'frs' .AND. nn_trcdmp_bdy(ib) .NE. 0 ) & 163 & CALL ctl_stop( 'Use FRS OR relaxation' ) 164 IF (nn_trcdmp_bdy(ib) .LT. 0 .OR. nn_trcdmp_bdy(ib) .GT. 2) & 165 & CALL ctl_stop( 'Not a valid option for nn_trcdmp_bdy. Allowed: 0,1,2.' ) 166 ENDDO 167 ENDDO 168 169 #else 170 ! Force all tracers OBC to false if bdy not used 171 ln_trc_obc = .false. 172 #endif 173 ! compose BC data indexes 174 DO jn = 1, ntrc 175 IF( ln_trc_obc(jn) ) THEN 176 nb_trcobc = nb_trcobc + 1 ; n_trc_indobc(jn) = nb_trcobc 177 ENDIF 178 IF( ln_trc_sbc(jn) ) THEN 179 nb_trcsbc = nb_trcsbc + 1 ; n_trc_indsbc(jn) = nb_trcsbc 180 ENDIF 181 IF( ln_trc_cbc(jn) ) THEN 182 nb_trccbc = nb_trccbc + 1 ; n_trc_indcbc(jn) = nb_trccbc 183 ENDIF 184 ENDDO 185 186 ! Print summmary of Boundary Conditions 146 187 IF( lwp ) THEN 188 WRITE(numout,*) ' ' 189 WRITE(numout,'(a,i3)') ' Total tracers to be initialized with SURFACE BCs data:', nb_trcsbc 190 IF ( nb_trcsbc > 0 ) THEN 191 WRITE(numout,*) ' #trc NAME Boundary Mult.Fact. ' 147 192 DO jn = 1, ntrc 148 IF( ln_trc_obc(jn) ) THEN 149 clndta = TRIM( sn_trcobc(jn)%clvar ) 150 IF(lwp) WRITE(numout,*) 'Preparing to read OBC data file for passive tracer number :', jn, ' name : ', clndta, & 151 & ' multiplicative factor : ', rn_trofac(jn) 152 ENDIF 153 IF( ln_trc_sbc(jn) ) THEN 154 clndta = TRIM( sn_trcsbc(jn)%clvar ) 155 IF(lwp) WRITE(numout,*) 'Preparing to read SBC data file for passive tracer number :', jn, ' name : ', clndta, & 156 & ' multiplicative factor : ', rn_trsfac(jn) 157 ENDIF 158 IF( ln_trc_cbc(jn) ) THEN 159 clndta = TRIM( sn_trccbc(jn)%clvar ) 160 IF(lwp) WRITE(numout,*) 'Preparing to read CBC data file for passive tracer number :', jn, ' name : ', clndta, & 161 & ' multiplicative factor : ', rn_trcfac(jn) 193 IF ( ln_trc_sbc(jn) ) WRITE(numout,9001) jn, TRIM( sn_trcsbc(jn)%clvar ), 'SBC', rn_trsfac(jn) 194 ENDDO 195 ENDIF 196 WRITE(numout,'(2a)') ' SURFACE BC data repository : ', TRIM(cn_dir_sbc) 197 198 WRITE(numout,*) ' ' 199 WRITE(numout,'(a,i3)') ' Total tracers to be initialized with COASTAL BCs data:', nb_trccbc 200 IF ( nb_trccbc > 0 ) THEN 201 WRITE(numout,*) ' #trc NAME Boundary Mult.Fact. ' 202 DO jn = 1, ntrc 203 IF ( ln_trc_cbc(jn) ) WRITE(numout, 9001) jn, TRIM( sn_trccbc(jn)%clvar ), 'CBC', rn_trcfac(jn) 204 ENDDO 205 ENDIF 206 WRITE(numout,'(2a)') ' COASTAL BC data repository : ', TRIM(cn_dir_cbc) 207 208 WRITE(numout,*) ' ' 209 WRITE(numout,'(a,i3)') ' Total tracers to be initialized with OPEN BCs data:', nb_trcobc 210 #if defined key_bdy 211 IF ( nb_trcobc > 0 ) THEN 212 WRITE(numout,*) ' #trc NAME Boundary Mult.Fact. OBC Settings' 213 DO jn = 1, ntrc 214 DO ib = 1, nb_bdy 215 IF ( ln_trc_obc(jn) ) WRITE(numout, 9001) jn, TRIM( sn_trcobc(jn,ib)%clvar ), 'OBC', rn_trofac(jn), (trcdta_bdy(jn,ib)%cn_obc) 216 ENDDO 217 !IF ( ln_trc_obc(jn) ) WRITE(numout, 9001) jn, TRIM( sn_trcobc(jn,ib)%clvar ), 'OBC', rn_trofac(jn), (trcdta_bdy(jn,ib)%cn_obc,ib=1,nb_bdy) 218 IF ( .NOT. ln_trc_obc(jn) ) WRITE(numout, 9002) jn, 'Set data to IC and use default condition', (trcdta_bdy(jn,ib)%cn_obc,ib=1,nb_bdy) 219 ENDDO 220 WRITE(numout,*) ' ' 221 DO ib = 1, nb_bdy 222 IF (nn_trcdmp_bdy(ib) .EQ. 0) WRITE(numout,9003) ' Boundary ',ib,' -> NO damping of tracers' 223 IF (nn_trcdmp_bdy(ib) .EQ. 1) WRITE(numout,9003) ' Boundary ',ib,' -> damping ONLY for tracers with external data provided' 224 IF (nn_trcdmp_bdy(ib) .EQ. 2) WRITE(numout,9003) ' Boundary ',ib,' -> damping of ALL tracers' 225 IF (nn_trcdmp_bdy(ib) .GT. 0) THEN 226 WRITE(numout,9003) ' USE damping parameters from nambdy for boundary ', ib,' : ' 227 WRITE(numout,'(a,f10.2,a)') ' - Inflow damping time scale : ',rn_time_dmp(ib),' days' 228 WRITE(numout,'(a,f10.2,a)') ' - Outflow damping time scale : ',rn_time_dmp_out(ib),' days' 162 229 ENDIF 163 230 END DO 164 231 ENDIF 165 ! 166 ! The following code is written this way to reduce memory usage and repeated for each boundary data 167 ! MAV: note that this is just a placeholder and the dimensions must be changed according to 168 ! what will be done with BDY. A new structure will probably need to be included 169 ! 232 #endif 233 WRITE(numout,'(2a)') ' OPEN BC data repository : ', TRIM(cn_dir_obc) 234 ENDIF 235 9001 FORMAT(2x,i5, 3x, a15, 3x, a5, 6x, e11.3, 4x, 10a13) 236 9002 FORMAT(2x,i5, 3x, a41, 3x, 10a13) 237 9003 FORMAT(a, i5, a) 238 239 ! 240 #if defined key_bdy 170 241 ! OPEN Lateral boundary conditions 171 IF( nb_trcobc > 0 ) THEN ! allocate only if the number of tracer to initialise is greater than zero172 ALLOCATE ( sf_trcobc(nb_trcobc), rf_trofac(nb_trcobc), STAT=ierr1 )242 IF( nb_trcobc > 0 ) THEN 243 ALLOCATE ( sf_trcobc(nb_trcobc,nb_bdy), rf_trofac(nb_trcobc,nb_bdy), nbmap_ptr(nb_trcobc,nb_bdy), STAT=ierr1 ) 173 244 IF( ierr1 > 0 ) THEN 174 245 CALL ctl_stop( 'trc_bc_init: unable to allocate sf_trcobc structure' ) ; RETURN 175 246 ENDIF 176 ! 247 248 igrd = 1 ! Everything is at T-points here 249 250 DO ib = 1, nb_bdy 177 251 DO jn = 1, ntrc 178 IF( ln_trc_obc(jn) ) THEN ! update passive tracers arrays with input data read from file 252 253 nblen = idx_bdy(ib)%nblen(igrd) 254 255 IF ( ln_trc_obc(jn) ) THEN 256 ! Initialise from external data 179 257 jl = n_trc_indobc(jn) 180 slf_i(jl) = sn_trcobc(jn)181 rf_trofac(jl) = rn_trofac(jn)182 ALLOCATE( sf_trcobc(jl)%fnow(jpi,jpj,jpk) , STAT=ierr2 )183 IF( sn_trcobc(jn)%ln_tint ) ALLOCATE( sf_trcobc(jl)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 )258 slf_i(jl) = sn_trcobc(jn,ib) 259 rf_trofac(jl,ib) = rn_trofac(jn) 260 ALLOCATE( sf_trcobc(jl,ib)%fnow(nblen,1,jpk) , STAT=ierr2 ) 261 IF( sn_trcobc(jn,ib)%ln_tint ) ALLOCATE( sf_trcobc(jl,ib)%fdta(nblen,1,jpk,2) , STAT=ierr3 ) 184 262 IF( ierr2 + ierr3 > 0 ) THEN 185 263 CALL ctl_stop( 'trc_bc_init : unable to allocate passive tracer OBC data arrays' ) ; RETURN 186 264 ENDIF 187 ENDIF 188 ! 265 trcdta_bdy(jn,ib)%trc => sf_trcobc(jl,ib)%fnow(:,1,:) 266 trcdta_bdy(jn,ib)%rn_fac = rf_trofac(jl,ib) 267 ! create OBC mapping array 268 nbmap_ptr(jl,ib)%ptr => idx_bdy(ib)%nbmap(:,igrd) 269 nbmap_ptr(jl,ib)%ll_unstruc = ln_coords_file(igrd) 270 ELSE 271 ! Initialise obc arrays from initial conditions 272 ALLOCATE ( trcdta_bdy(jn,ib)%trc(nblen,jpk) ) 273 DO ibd = 1, nblen 274 DO ik = 1, jpkm1 275 ii = idx_bdy(ib)%nbi(ibd,igrd) 276 ij = idx_bdy(ib)%nbj(ibd,igrd) 277 trcdta_bdy(jn,ib)%trc(ibd,ik) = trn(ii,ij,ik,jn) * tmask(ii,ij,ik) 278 END DO 279 END DO 280 trcdta_bdy(jn,ib)%rn_fac = 1._wp 281 ENDIF 189 282 ENDDO 190 ! ! fill sf_trcdta with slf_i and control print191 CALL fld_fill( sf_trcobc, slf_i, cn_dir, 'trc_bc_init', 'Passive tracer OBC data', 'namtrc_bc' )192 ! 193 ENDIF 194 ! 283 CALL fld_fill( sf_trcobc(:,ib), slf_i, cn_dir_obc, 'trc_bc_init', 'Passive tracer OBC data', 'namtrc_bc' ) 284 ENDDO 285 286 ENDIF 287 #endif 195 288 ! SURFACE Boundary conditions 196 289 IF( nb_trcsbc > 0 ) THEN ! allocate only if the number of tracer to initialise is greater than zero … … 214 307 ENDDO 215 308 ! ! fill sf_trcsbc with slf_i and control print 216 CALL fld_fill( sf_trcsbc, slf_i, cn_dir , 'trc_bc_init', 'Passive tracer SBC data', 'namtrc_bc' )309 CALL fld_fill( sf_trcsbc, slf_i, cn_dir_sbc, 'trc_bc_init', 'Passive tracer SBC data', 'namtrc_bc' ) 217 310 ! 218 311 ENDIF … … 239 332 ENDDO 240 333 ! ! fill sf_trccbc with slf_i and control print 241 CALL fld_fill( sf_trccbc, slf_i, cn_dir , 'trc_bc_init', 'Passive tracer CBC data', 'namtrc_bc' )334 CALL fld_fill( sf_trccbc, slf_i, cn_dir_cbc, 'trc_bc_init', 'Passive tracer CBC data', 'namtrc_bc' ) 242 335 ! 243 336 ENDIF … … 249 342 250 343 251 SUBROUTINE trc_bc_read(kt )344 SUBROUTINE trc_bc_read(kt, jit) 252 345 !!---------------------------------------------------------------------- 253 346 !! *** ROUTINE trc_bc_init *** … … 264 357 !! * Arguments 265 358 INTEGER, INTENT( in ) :: kt ! ocean time-step index 266 359 INTEGER, INTENT( in ), OPTIONAL :: jit ! subcycle time-step index (for timesplitting option) 360 INTEGER :: ib 267 361 !!--------------------------------------------------------------------- 268 362 ! 269 363 IF( nn_timing == 1 ) CALL timing_start('trc_bc_read') 270 364 271 IF( kt == nit000 ) THEN 272 IF(lwp) WRITE(numout,*) 273 IF(lwp) WRITE(numout,*) 'trc_bc_read : Surface boundary conditions for passive tracers.' 274 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 275 ENDIF 276 277 ! OPEN boundary conditions: DOES NOT WORK. Waiting for stable BDY 365 IF( kt == nit000 .AND. lwp) THEN 366 WRITE(numout,*) 367 WRITE(numout,*) 'trc_bc_read : Surface boundary conditions for passive tracers.' 368 WRITE(numout,*) '~~~~~~~~~~~ ' 369 ENDIF 370 371 IF ( PRESENT(jit) ) THEN 372 373 ! OPEN boundary conditions (use time_offset=+1 as they are applied at the end of the step) 278 374 IF( nb_trcobc > 0 ) THEN 279 if (lwp) write(numout,'(a,i5,a,i5)') ' reading OBC data for ', nb_trcobc ,' variables at step ', kt 280 CALL fld_read(kt,1,sf_trcobc) 281 ! vertical interpolation on s-grid and partial step to be added 375 if (lwp) write(numout,'(a,i5,a,i10)') ' reading OBC data for ', nb_trcobc ,' variable(s) at step ', kt 376 DO ib = 1,nb_bdy 377 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcobc(:,ib), map=nbmap_ptr(:,ib), kit=jit, kt_offset=+1) 378 ENDDO 282 379 ENDIF 283 380 284 381 ! SURFACE boundary conditions 285 382 IF( nb_trcsbc > 0 ) THEN 286 if (lwp) write(numout,'(a,i5,a,i5)') ' reading SBC data for ', nb_trcsbc ,' variablesat step ', kt287 CALL fld_read(kt,1,sf_trcsbc)383 if (lwp) write(numout,'(a,i5,a,i10)') ' reading SBC data for ', nb_trcsbc ,' variable(s) at step ', kt 384 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcsbc, kit=jit) 288 385 ENDIF 289 386 290 387 ! COASTAL boundary conditions 291 388 IF( nb_trccbc > 0 ) THEN 292 if (lwp) write(numout,'(a,i5,a,i5)') ' reading CBC data for ', nb_trccbc ,' variablesat step ', kt293 CALL fld_read(kt,1,sf_trccbc)389 if (lwp) write(numout,'(a,i5,a,i10)') ' reading CBC data for ', nb_trccbc ,' variable(s) at step ', kt 390 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trccbc, kit=jit) 294 391 ENDIF 392 393 ELSE 394 395 ! OPEN boundary conditions (use time_offset=+1 as they are applied at the end of the step) 396 IF( nb_trcobc > 0 ) THEN 397 if (lwp) write(numout,'(a,i5,a,i10)') ' reading OBC data for ', nb_trcobc ,' variable(s) at step ', kt 398 DO ib = 1,nb_bdy 399 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcobc(:,ib), map=nbmap_ptr(:,ib), kt_offset=+1) 400 ENDDO 401 ENDIF 402 403 ! SURFACE boundary conditions 404 IF( nb_trcsbc > 0 ) THEN 405 if (lwp) write(numout,'(a,i5,a,i10)') ' reading SBC data for ', nb_trcsbc ,' variable(s) at step ', kt 406 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcsbc) 407 ENDIF 408 409 ! COASTAL boundary conditions 410 IF( nb_trccbc > 0 ) THEN 411 if (lwp) write(numout,'(a,i5,a,i10)') ' reading CBC data for ', nb_trccbc ,' variable(s) at step ', kt 412 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trccbc) 413 ENDIF 414 415 ENDIF 416 295 417 ! 296 418 IF( nn_timing == 1 ) CALL timing_stop('trc_bc_read') … … 303 425 !!---------------------------------------------------------------------- 304 426 CONTAINS 427 428 SUBROUTINE trc_bc_init( ntrc ) ! Empty routine 429 INTEGER,INTENT(IN) :: ntrc ! number of tracers 430 WRITE(*,*) 'trc_bc_init: You should not have seen this print! error?', kt 431 END SUBROUTINE trc_bc_init 432 305 433 SUBROUTINE trc_bc_read( kt ) ! Empty routine 306 434 WRITE(*,*) 'trc_bc_read: You should not have seen this print! error?', kt -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r7566 r7567 9 9 !! 3.4 ! 2010-11 (C. Ethe, G. Madec) use of fldread + dynamical allocation 10 10 !! 3.5 ! 2013-08 (M. Vichi) generalization for other BGC models 11 !! 3.6 ! 2015-03 (T. Lovato) revision of code log info 11 12 !!---------------------------------------------------------------------- 12 13 #if defined key_top … … 72 73 IF( nn_timing == 1 ) CALL timing_start('trc_dta_init') 73 74 ! 75 IF( lwp ) THEN 76 WRITE(numout,*) ' ' 77 WRITE(numout,*) ' trc_dta_init : Tracers Initial Conditions (IC)' 78 WRITE(numout,*) ' ~~~~~~~~~~~ ' 79 ENDIF 80 ! 74 81 ! Initialisation 75 82 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 … … 77 84 ALLOCATE( n_trc_index(ntrc), slf_i(ntrc), STAT=ierr0 ) 78 85 IF( ierr0 > 0 ) THEN 79 CALL ctl_stop( 'trc_ nam: unable to allocate n_trc_index' ) ; RETURN86 CALL ctl_stop( 'trc_dta_init: unable to allocate n_trc_index' ) ; RETURN 80 87 ENDIF 81 88 nb_trcdta = 0 … … 97 104 REWIND( numnat_ref ) ! Namelist namtrc_dta in reference namelist : Passive tracer input data 98 105 READ ( numnat_ref, namtrc_dta, IOSTAT = ios, ERR = 901) 99 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta in reference namelist', lwp )106 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_init in reference namelist', lwp ) 100 107 101 108 REWIND( numnat_cfg ) ! Namelist namtrc_dta in configuration namelist : Passive tracer input data 102 109 READ ( numnat_cfg, namtrc_dta, IOSTAT = ios, ERR = 902 ) 103 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta in configuration namelist', lwp )110 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_init in configuration namelist', lwp ) 104 111 IF(lwm) WRITE ( numont, namtrc_dta ) 105 112 … … 109 116 clndta = TRIM( sn_trcdta(jn)%clvar ) 110 117 clntrc = TRIM( ctrcnm (jn) ) 118 if (jn > jptra) clntrc='Dummy' ! By pass weird formats in ocean.output if ntrc > jptra 111 119 zfact = rn_trfac(jn) 112 120 IF( clndta /= clntrc ) THEN 113 CALL ctl_warn( 'trc_dta_init: passive tracer data initialisation :', &114 & ' the variable name in the data file : '//clndta// &115 & ' must be the same than the name of the passive tracer : '//clntrc//' ')121 CALL ctl_warn( 'trc_dta_init: passive tracer data initialisation ', & 122 & 'Input name of data file : '//TRIM(clndta)// & 123 & ' differs from that of tracer : '//TRIM(clntrc)//' ') 116 124 ENDIF 117 WRITE(numout,*) ' read an initial file for passive tracer number :', jn, ' name : ', clndta, & 118 & ' multiplicative factor : ', zfact 125 WRITE(numout,*) ' ' 126 WRITE(numout,'(a, i3,3a,e11.3)') ' Read IC file for tracer number :', & 127 & jn, ', name : ', TRIM(clndta), ', Multiplicative Scaling factor : ', zfact 119 128 ENDIF 120 129 END DO … … 124 133 ALLOCATE( sf_trcdta(nb_trcdta), rf_trfac(nb_trcdta), STAT=ierr1 ) 125 134 IF( ierr1 > 0 ) THEN 126 CALL ctl_stop( 'trc_dta_ini : unable to allocate sf_trcdta structure' ) ; RETURN135 CALL ctl_stop( 'trc_dta_init: unable to allocate sf_trcdta structure' ) ; RETURN 127 136 ENDIF 128 137 ! … … 135 144 IF( sn_trcdta(jn)%ln_tint ) ALLOCATE( sf_trcdta(jl)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 136 145 IF( ierr2 + ierr3 > 0 ) THEN 137 CALL ctl_stop( 'trc_dta : unable to allocate passive tracer data arrays' ) ; RETURN146 CALL ctl_stop( 'trc_dta_init : unable to allocate passive tracer data arrays' ) ; RETURN 138 147 ENDIF 139 148 ENDIF … … 141 150 ENDDO 142 151 ! ! fill sf_trcdta with slf_i and control print 143 CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta ', 'Passive tracer data', 'namtrc' )152 CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta_init', 'Passive tracer data', 'namtrc' ) 144 153 ! 145 154 ENDIF -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r7566 r7567 32 32 USE sbc_oce 33 33 USE trcice ! tracers in sea ice 34 USE trcbc, only : trc_bc_init ! generalized Boundary Conditions 34 35 35 36 IMPLICIT NONE … … 110 111 ENDIF 111 112 113 ! Initialisation of tracers Initial Conditions 112 114 IF( ln_trcdta ) CALL trc_dta_init(jptra) 113 114 115 115 116 IF( ln_rsttr ) THEN … … 140 141 CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 141 142 ENDIF 143 ! slwa temporary insert initialise tracer 144 trn(:,:,:,:) = 0._wp 145 if(nproc.eq.39)then 146 DO jn = 1, jptra 147 trn(:,:,:,jn) = 100._wp * tmask(:,:,:) 148 ENDDO 149 endif 150 !!!! slwa temp 142 151 ! 143 152 trb(:,:,:,:) = trn(:,:,:,:) 144 153 ! 145 154 ENDIF 155 ! Initialisation of tracers Boundary Conditions - here so that you can use initial condition as boundary 156 IF( lk_my_trc ) CALL trc_bc_init(jptra) 146 157 147 158 tra(:,:,:,:) = 0._wp -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r7566 r7567 34 34 PUBLIC trc_nam_run ! called in trcini 35 35 PUBLIC trc_nam ! called in trcini 36 PUBLIC trc_nam_dia 37 #if defined key_trdmxl_trc || defined key_trdtrc 38 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 39 & ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 40 & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 41 #endif 36 42 37 43 !! * Substitutions … … 57 63 !!--------------------------------------------------------------------- 58 64 INTEGER :: jn ! dummy loop indice 65 #if defined key_trdmxl_trc || defined key_trdtrc 66 INTEGER :: ios 67 #endif 68 59 69 ! ! Parameters of the run 60 70 IF( .NOT. lk_offline ) CALL trc_nam_run … … 304 314 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit ) 305 315 ln_trc_ini(jn) = sn_tracer(jn)%llinit 316 #if defined key_my_trc 317 ln_trc_sbc(jn) = sn_tracer(jn)%llsbc 318 ln_trc_cbc(jn) = sn_tracer(jn)%llcbc 319 ln_trc_obc(jn) = sn_tracer(jn)%llobc 320 #endif 306 321 ln_trc_wri(jn) = sn_tracer(jn)%llsave 307 322 END DO … … 322 337 INTEGER :: ierr 323 338 #if defined key_trdmxl_trc || defined key_trdtrc 324 325 326 339 ! NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 340 ! & ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 341 ! & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 327 342 #endif 328 343 NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio … … 330 345 INTEGER :: ios ! Local integer output status for namelist read 331 346 !!--------------------------------------------------------------------- 332 333 IF(lwp) WRITE(numout,*)334 IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options'335 IF(lwp) WRITE(numout,*) '~~~~~~~'336 347 337 348 IF(lwp) WRITE(numout,*) -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r7566 r7567 100 100 IF( lrst_trc ) CALL trc_rst_wri ( kt ) ! write tracer restart file 101 101 IF( lk_trdmxl_trc ) CALL trd_mxl_trc ( kt ) ! trends: Mixed-layer 102 #if defined key_tracer_budget 103 !slwa tracer budget 104 IF( lk_iomput ) CALL trc_wri (kt, 2) 105 #endif 102 106 ! 103 107 IF( nn_dttrc /= 1 ) CALL trc_sub_reset( kt ) ! resetting physical variables when sub-stepping -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
r7566 r7567 20 20 #endif 21 21 #if defined key_zdfgls 22 22 ! USE zdfgls, ONLY: en 23 23 #endif 24 24 USE trabbl -
branches/UKMO/CO6_shelfclimate/NEMOGCM/NEMO/TOP_SRC/trcwri.F90
r7566 r7567 32 32 CONTAINS 33 33 34 #if defined key_tracer_budget 35 SUBROUTINE trc_wri( kt , fl) !slwa 36 #else 34 37 SUBROUTINE trc_wri( kt ) 38 #endif 35 39 !!--------------------------------------------------------------------- 36 40 !! *** ROUTINE trc_wri *** … … 39 43 !!--------------------------------------------------------------------- 40 44 INTEGER, INTENT( in ) :: kt 45 #if defined key_tracer_budget 46 INTEGER, INTENT( in ), OPTIONAL :: fl ! slwa 47 #endif 41 48 ! 42 49 INTEGER :: jn … … 59 66 IF( lk_cfc ) CALL trc_wri_cfc ! surface fluxes of CFC 60 67 IF( lk_c14b ) CALL trc_wri_c14b ! surface fluxes of C14 68 #if defined key_tracer_budget 69 IF( .NOT.PRESENT(fl) .AND. lk_my_trc ) CALL trc_wri_my_trc (kt) ! MY_TRC tracers slwa 70 IF( PRESENT(fl) .AND. lk_my_trc ) CALL trc_wri_my_trc (kt, fl) ! MY_TRC tracers for budget slwa 71 #else 61 72 IF( lk_my_trc ) CALL trc_wri_my_trc ! MY_TRC tracers 73 #endif 62 74 ! 63 75 IF( nn_timing == 1 ) CALL timing_stop('trc_wri')
Note: See TracChangeset
for help on using the changeset viewer.