- Timestamp:
- 2013-10-15T19:54:10+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r3882 r4064 32 32 PRIVATE 33 33 34 PUBLIC trc_nam_run ! called in trcini 34 35 PUBLIC trc_nam ! called in trcini 35 36 … … 44 45 CONTAINS 45 46 47 46 48 SUBROUTINE trc_nam 47 49 !!--------------------------------------------------------------------- … … 54 56 !! ( (PISCES, CFC, MY_TRC ) 55 57 !!--------------------------------------------------------------------- 56 INTEGER :: jn, ierr 57 ! Definition of a tracer as a structure 58 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 59 !! 60 NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, & 61 & cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, & 62 & ln_trcdmp, ln_trcdmp_clo, ln_top_euler 63 #if defined key_trdmld_trc || defined key_trdtrc 64 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 65 & ln_trdmld_trc_restart, ln_trdmld_trc_instant, & 66 & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 67 #endif 68 NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 69 70 !!--------------------------------------------------------------------- 71 72 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 73 IF(lwp) WRITE(numout,*) '~~~~~~~' 74 75 CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', 1, numout, .FALSE. ) 76 77 ! Namelist nattrc (files) 78 ! ---------------------------------------------- 79 nn_dttrc = 1 ! default values 80 nn_writetrc = 10 81 ln_top_euler = .FALSE. 82 ln_rsttr = .FALSE. 83 nn_rsttr = 0 84 cn_trcrst_in = 'restart_trc' 85 cn_trcrst_out = 'restart_trc' 86 ! 87 DO jn = 1, jptra 88 WRITE( sn_tracer(jn)%clsname,'("TR_",I1)' ) jn 89 WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn 90 sn_tracer(jn)%clunit = 'mmole/m3' 91 sn_tracer(jn)%llinit = .FALSE. 92 sn_tracer(jn)%llsave = .TRUE. 93 END DO 94 ln_trcdta = .FALSE. 95 ln_trcdmp = .FALSE. 96 ln_trcdmp_clo = .FALSE. 97 98 99 REWIND( numnat ) ! read nattrc 100 READ ( numnat, namtrc ) 101 102 DO jn = 1, jptra 103 ctrcnm (jn) = TRIM( sn_tracer(jn)%clsname ) 104 ctrcln (jn) = TRIM( sn_tracer(jn)%cllname ) 105 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit ) 106 ln_trc_ini(jn) = sn_tracer(jn)%llinit 107 ln_trc_wri(jn) = sn_tracer(jn)%llsave 108 END DO 109 110 !!KPE computes the first time step of tracer model 111 nittrc000 = nit000 + nn_dttrc - 1 112 58 INTEGER :: jn 59 60 ! ! Parameters of the run 61 IF( .NOT. lk_offline ) CALL trc_nam_run 62 63 ! ! passive tracer informations 64 CALL trc_nam_trc 65 66 ! ! Parameters of additional diagnostics 67 CALL trc_nam_dia 68 69 ! ! namelist of transport 70 CALL trc_nam_trp 71 72 73 IF( ln_rsttr ) ln_trcdta = .FALSE. ! restart : no need of clim data 74 ! 75 IF( ln_trcdmp .OR. ln_trcdmp_clo ) ln_trcdta = .TRUE. ! damping : need to have clim data 76 ! 77 IF( .NOT.ln_trcdta ) THEN 78 ln_trc_ini(:) = .FALSE. 79 ENDIF 80 113 81 114 82 IF(lwp) THEN ! control print 115 83 WRITE(numout,*) 116 84 WRITE(numout,*) ' Namelist : namtrc' 117 WRITE(numout,*) ' time step freq. for passive tracer nn_dttrc = ', nn_dttrc118 WRITE(numout,*) ' restart for passive tracer ln_rsttr = ', ln_rsttr119 WRITE(numout,*) ' control of time step for passive tracer nn_rsttr = ', nn_rsttr120 WRITE(numout,*) ' first time step for pass. trac. nittrc000 = ', nittrc000121 WRITE(numout,*) ' frequency of outputs for passive tracers nn_writetrc = ', nn_writetrc122 85 WRITE(numout,*) ' Read inputs data from file (y/n) ln_trcdta = ', ln_trcdta 123 86 WRITE(numout,*) ' Damping of passive tracer (y/n) ln_trcdmp = ', ln_trcdmp 124 87 WRITE(numout,*) ' Restoring of tracer on closed seas ln_trcdmp_clo = ', ln_trcdmp_clo 125 WRITE(numout,*) ' Use euler integration for TRC (y/n) ln_top_euler = ', ln_top_euler126 88 WRITE(numout,*) ' ' 127 89 DO jn = 1, jptra … … 131 93 ENDIF 132 94 95 IF(lwp) THEN ! control print 96 IF( ln_rsttr ) THEN 97 WRITE(numout,*) 98 WRITE(numout,*) ' Read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 99 WRITE(numout,*) 100 ENDIF 101 IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN 102 WRITE(numout,*) 103 WRITE(numout,*) ' Some of the passive tracers are initialised from climatologies ' 104 WRITE(numout,*) 105 ENDIF 106 IF( .NOT.ln_trcdta ) THEN 107 WRITE(numout,*) 108 WRITE(numout,*) ' All the passive tracers are initialised with constant values ' 109 WRITE(numout,*) 110 ENDIF 111 ENDIF 112 113 133 114 rdttrc(:) = rdttra(:) * FLOAT( nn_dttrc ) ! vertical profile of passive tracer time-step 134 115 … … 137 118 WRITE(numout,*) ' Passive Tracer time step rdttrc = ', rdttrc(1) 138 119 WRITE(numout,*) 139 ENDIF140 141 ln_diatrc = .FALSE.142 ln_diabio = .FALSE.143 nn_writedia = 10144 nn_writebio = 10145 146 REWIND( numnat ) ! namelist namtoptrd : passive tracer trends diagnostic147 READ ( numnat, namtrc_dia )148 149 IF(lwp) THEN150 WRITE(numout,*)151 WRITE(numout,*)152 WRITE(numout,*) ' Namelist : namtrc_dia'153 WRITE(numout,*) ' save additionnal diagnostics arrays ln_diatrc = ', ln_diatrc154 WRITE(numout,*) ' save additionnal biology diagnostics arrays ln_diabio = ', ln_diabio155 WRITE(numout,*) ' frequency of outputs for additional arrays nn_writedia = ', nn_writedia156 WRITE(numout,*) ' frequency of outputs for biological trends nn_writebio = ', nn_writebio157 WRITE(numout,*) ' '158 ENDIF159 160 IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN161 ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), &162 & ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) , &163 & ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) , STAT = ierr )164 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' )165 !166 trc2d(:,:,: ) = 0._wp ; ctrc2d(:) = ' ' ; ctrc2l(:) = ' ' ; ctrc2u(:) = ' '167 trc3d(:,:,:,:) = 0._wp ; ctrc3d(:) = ' ' ; ctrc3l(:) = ' ' ; ctrc3u(:) = ' '168 !169 ENDIF170 171 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN172 ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , &173 & ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )174 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' )175 !176 trbio(:,:,:,:) = 0._wp ; ctrbio(:) = ' ' ; ctrbil(:) = ' ' ; ctrbiu(:) = ' '177 !178 ENDIF179 180 ! namelist of transport181 ! ---------------------182 CALL trc_nam_trp183 184 185 IF( ln_rsttr ) ln_trcdta = .FALSE. ! restart : no need of clim data186 !187 IF( ln_trcdmp .OR. ln_trcdmp_clo ) ln_trcdta = .TRUE. ! damping : need to have clim data188 !189 IF( .NOT.ln_trcdta ) THEN190 ln_trc_ini(:) = .FALSE.191 ENDIF192 193 IF(lwp) THEN ! control print194 IF( ln_rsttr ) THEN195 WRITE(numout,*)196 WRITE(numout,*) ' Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )197 WRITE(numout,*)198 ENDIF199 IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN200 WRITE(numout,*)201 WRITE(numout,*) ' Some of the passive tracers are initialised from climatologies '202 WRITE(numout,*)203 ENDIF204 IF( .NOT.ln_trcdta ) THEN205 WRITE(numout,*)206 WRITE(numout,*) ' All the passive tracers are initialised with constant values '207 WRITE(numout,*)208 ENDIF209 120 ENDIF 210 121 … … 260 171 END SUBROUTINE trc_nam 261 172 173 SUBROUTINE trc_nam_run 174 !!--------------------------------------------------------------------- 175 !! *** ROUTINE trc_nam *** 176 !! 177 !! ** Purpose : read options for the passive tracer run (namelist) 178 !! 179 !!--------------------------------------------------------------------- 180 NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 181 & cn_trcrst_in, cn_trcrst_out 182 183 !!--------------------------------------------------------------------- 184 185 IF(lwp) WRITE(numout,*) 186 IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists' 187 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 188 189 CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. ) 190 191 ! Namelist nattrc (files) 192 ! ---------------------------------------------- 193 nn_dttrc = 1 ! default values 194 nn_writetrc = 10 195 ln_top_euler = .FALSE. 196 ln_rsttr = .FALSE. 197 nn_rsttr = 0 198 cn_trcrst_in = 'restart_trc' 199 cn_trcrst_out = 'restart_trc' 200 ! 201 REWIND( numnat ) ! read nattrc 202 READ ( numnat, namtrc_run ) 203 204 ! computes the first time step of tracer model 205 nittrc000 = nit000 + nn_dttrc - 1 206 207 IF(lwp) THEN ! control print 208 WRITE(numout,*) 209 WRITE(numout,*) ' Namelist : namtrc' 210 WRITE(numout,*) ' time step freq. for passive tracer nn_dttrc = ', nn_dttrc 211 WRITE(numout,*) ' restart for passive tracer ln_rsttr = ', ln_rsttr 212 WRITE(numout,*) ' control of time step for passive tracer nn_rsttr = ', nn_rsttr 213 WRITE(numout,*) ' first time step for pass. trac. nittrc000 = ', nittrc000 214 WRITE(numout,*) ' frequency of outputs for passive tracers nn_writetrc = ', nn_writetrc 215 WRITE(numout,*) ' ' 216 ENDIF 217 ! 218 END SUBROUTINE trc_nam_run 219 220 221 SUBROUTINE trc_nam_trc 222 !!--------------------------------------------------------------------- 223 !! *** ROUTINE trc_nam *** 224 !! 225 !! ** Purpose : read options for the passive tracer run (namelist) 226 !! 227 !!--------------------------------------------------------------------- 228 INTEGER :: jn 229 ! Definition of a tracer as a structure 230 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 231 !! 232 NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 233 234 !!--------------------------------------------------------------------- 235 236 IF(lwp) WRITE(numout,*) 237 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 238 IF(lwp) WRITE(numout,*) '~~~~~~~' 239 240 ! 241 DO jn = 1, jptra 242 WRITE( sn_tracer(jn)%clsname,'("TR_",I1)' ) jn 243 WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn 244 sn_tracer(jn)%clunit = 'mmole/m3' 245 sn_tracer(jn)%llinit = .FALSE. 246 sn_tracer(jn)%llsave = .TRUE. 247 END DO 248 ln_trcdta = .FALSE. 249 ln_trcdmp = .FALSE. 250 ln_trcdmp_clo = .FALSE. 251 252 REWIND( numnat ) ! read nattrc 253 READ ( numnat, namtrc ) 254 255 DO jn = 1, jptra 256 ctrcnm (jn) = TRIM( sn_tracer(jn)%clsname ) 257 ctrcln (jn) = TRIM( sn_tracer(jn)%cllname ) 258 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit ) 259 ln_trc_ini(jn) = sn_tracer(jn)%llinit 260 ln_trc_wri(jn) = sn_tracer(jn)%llsave 261 END DO 262 263 END SUBROUTINE trc_nam_trc 264 265 266 SUBROUTINE trc_nam_dia 267 !!--------------------------------------------------------------------- 268 !! *** ROUTINE trc_nam_dia *** 269 !! 270 !! ** Purpose : read options for the passive tracer diagnostics 271 !! 272 !! ** Method : - read passive tracer namelist 273 !! - read namelist of each defined SMS model 274 !! ( (PISCES, CFC, MY_TRC ) 275 !!--------------------------------------------------------------------- 276 INTEGER :: ierr 277 #if defined key_trdmld_trc || defined key_trdtrc 278 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 279 & ln_trdmld_trc_restart, ln_trdmld_trc_instant, & 280 & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 281 #endif 282 NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 283 284 !!--------------------------------------------------------------------- 285 286 IF(lwp) WRITE(numout,*) 287 IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 288 IF(lwp) WRITE(numout,*) '~~~~~~~' 289 290 ln_diatrc = .FALSE. 291 ln_diabio = .FALSE. 292 nn_writedia = 10 293 nn_writebio = 10 294 295 REWIND( numnat ) ! namelist namtoptrd : passive tracer trends diagnostic 296 READ ( numnat, namtrc_dia ) 297 298 IF(lwp) THEN 299 WRITE(numout,*) 300 WRITE(numout,*) 301 WRITE(numout,*) ' Namelist : namtrc_dia' 302 WRITE(numout,*) ' save additionnal diagnostics arrays ln_diatrc = ', ln_diatrc 303 WRITE(numout,*) ' save additionnal biology diagnostics arrays ln_diabio = ', ln_diabio 304 WRITE(numout,*) ' frequency of outputs for additional arrays nn_writedia = ', nn_writedia 305 WRITE(numout,*) ' frequency of outputs for biological trends nn_writebio = ', nn_writebio 306 WRITE(numout,*) ' ' 307 ENDIF 308 309 IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN 310 ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), & 311 & ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) , & 312 & ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) , STAT = ierr ) 313 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 314 ! 315 trc2d(:,:,: ) = 0._wp ; ctrc2d(:) = ' ' ; ctrc2l(:) = ' ' ; ctrc2u(:) = ' ' 316 trc3d(:,:,:,:) = 0._wp ; ctrc3d(:) = ' ' ; ctrc3l(:) = ' ' ; ctrc3u(:) = ' ' 317 ! 318 ENDIF 319 320 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 321 ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 322 & ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr ) 323 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 324 ! 325 trbio(:,:,:,:) = 0._wp ; ctrbio(:) = ' ' ; ctrbil(:) = ' ' ; ctrbiu(:) = ' ' 326 ! 327 ENDIF 328 ! 329 END SUBROUTINE trc_nam_dia 330 262 331 #else 263 332 !!---------------------------------------------------------------------- … … 267 336 SUBROUTINE trc_nam ! Empty routine 268 337 END SUBROUTINE trc_nam 338 SUBROUTINE trc_nam_run ! Empty routine 339 END SUBROUTINE trc_nam_run 269 340 #endif 270 341
Note: See TracChangeset
for help on using the changeset viewer.