- Timestamp:
- 2011-08-09T10:29:53+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r2715 r2819 18 18 !! trc_nam : Read and print options for the passive tracer run (namelist) 19 19 !!---------------------------------------------------------------------- 20 USE oce_trc 21 USE trc 20 USE oce_trc ! shared variables between ocean and passive tracers 21 USE trc ! passive tracers common variables 22 22 USE trcnam_trp ! Transport namelist 23 23 USE trcnam_lobster ! LOBSTER namelist … … 26 26 USE trcnam_c14b ! C14 SMS namelist 27 27 USE trcnam_my_trc ! MY_TRC SMS namelist 28 USE trdmod_oce 28 29 USE trdmod_trc_oce 30 USE iom ! I/O manager 29 31 30 32 IMPLICIT NONE … … 53 55 !! ( (LOBSTER, PISCES, CFC, MY_TRC ) 54 56 !!--------------------------------------------------------------------- 55 INTEGER :: jn 56 57 INTEGER :: jn, ierr 57 58 ! Definition of a tracer as a structure 58 TYPE PTRACER 59 CHARACTER(len = 20) :: clsname !: short name 60 CHARACTER(len = 80 ) :: cllname !: long name 61 CHARACTER(len = 20 ) :: clunit !: unit 62 LOGICAL :: llinit !: read in a file or not 63 LOGICAL :: llsave !: save the tracer or not 64 END TYPE PTRACER 65 66 TYPE(PTRACER) , DIMENSION(jptra) :: sn_tracer 67 59 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 68 60 !! 69 NAMELIST/namtrc/ 70 cn_trcrst_in, cn_trcrst_out, sn_tracer61 NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, & 62 & cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta 71 63 #if defined key_trdmld_trc || defined key_trdtrc 72 64 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 73 ln_trdmld_trc_restart, ln_trdmld_trc_instant, &74 cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc65 & ln_trdmld_trc_restart, ln_trdmld_trc_instant, & 66 & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 75 67 #endif 68 NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 76 69 77 70 !!--------------------------------------------------------------------- … … 84 77 ! Namelist nattrc (files) 85 78 ! ---------------------------------------------- 86 nn_dttrc = 1 ! default values87 nn_writetrc = 1088 ln_rsttr = .FALSE.89 nn_rsttr = 079 nn_dttrc = 1 ! default values 80 nn_writetrc = 10 81 ln_rsttr = .FALSE. 82 nn_rsttr = 0 90 83 cn_trcrst_in = 'restart_trc' 91 84 cn_trcrst_out = 'restart_trc' 85 ! 92 86 DO jn = 1, jptra 93 WRITE( ctrcnm(jn),'("TR_",I1)' ) jn94 WRITE( ctrcnl(jn),'("TRACER NUMBER ",I1)') jn95 ctrcun(jn)= 'mmole/m3'96 lutini(jn) = .FALSE.97 lutsav(jn) = .TRUE.87 WRITE( sn_tracer(jn)%clsname,'("TR_",I1)' ) jn 88 WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn 89 sn_tracer(jn)%clunit = 'mmole/m3' 90 sn_tracer(jn)%llinit = .FALSE. 91 sn_tracer(jn)%llsave = .TRUE. 98 92 END DO 93 ln_trcdta = .FALSE. 94 99 95 100 96 REWIND( numnat ) ! read nattrc … … 102 98 103 99 DO jn = 1, jptra 104 ctrcnm (jn) = TRIM( sn_tracer(jn)%clsname )105 ctrc nl(jn) = TRIM( sn_tracer(jn)%cllname )106 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit )107 l utini(jn) = sn_tracer(jn)%llinit108 l utsav(jn) = sn_tracer(jn)%llsave100 ctrcnm (jn) = TRIM( sn_tracer(jn)%clsname ) 101 ctrcln (jn) = TRIM( sn_tracer(jn)%cllname ) 102 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit ) 103 ln_trc_ini(jn) = sn_tracer(jn)%llinit 104 ln_trc_wri(jn) = sn_tracer(jn)%llsave 109 105 END DO 110 106 … … 113 109 WRITE(numout,*) 114 110 WRITE(numout,*) ' Namelist : namtrc' 115 WRITE(numout,*) ' time step freq. for pass. trac. nn_dttrc= ', nn_dttrc116 WRITE(numout,*) ' frequency of outputs for passive tracers nn_writetrc = ', nn_writetrc117 WRITE(numout,*) ' restart LOGICAL for passive tr. ln_rsttr = ', ln_rsttr118 WRITE(numout,*) ' control of time step for p. tr. nn_rsttr = ', nn_rsttr111 WRITE(numout,*) ' time step freq. for passive tracer nn_dttrc = ', nn_dttrc 112 WRITE(numout,*) ' restart for passive tracer ln_rsttr = ', ln_rsttr 113 WRITE(numout,*) ' control of time step for passive tracer nn_rsttr = ', nn_rsttr 114 WRITE(numout,*) ' Read inputs data from file ln_trcdta = ', ln_trcdta 119 115 WRITE(numout,*) ' ' 120 116 DO jn = 1, jptra 121 WRITE(numout,*) ' tracer nb : ', jn 122 WRITE(numout,*) ' short name : ', ctrcnm(jn) 123 WRITE(numout,*) ' long name : ', ctrcnl(jn) 124 WRITE(numout,*) ' unit : ', ctrcun(jn) 125 WRITE(numout,*) ' initial value in FILE : ', lutini(jn) 126 WRITE(numout,*) ' ' 117 WRITE(numout,*) ' tracer nb : ', jn, ' short name : ', ctrcnm(jn) 127 118 END DO 119 WRITE(numout,*) ' ' 128 120 ENDIF 129 121 130 122 rdttrc(:) = rdttra(:) * FLOAT( nn_dttrc ) ! vertical profile of passive tracer time-step 131 123 132 IF(lwp) WRITE(numout,*) 133 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rdttrc = ', rdttrc(1) 134 IF(lwp) WRITE(numout,*) 135 136 #if defined key_trdmld_trc || defined key_trdtrc 137 nn_trd_trc = 20 138 nn_ctls_trc = 9 139 rn_ucf_trc = 1. 140 ln_trdmld_trc_instant = .TRUE. 141 ln_trdmld_trc_restart =.FALSE. 142 cn_trdrst_trc_in = "restart_mld_trc" 143 cn_trdrst_trc_out = "restart_mld_trc" 144 ln_trdtrc(:) = .FALSE. 124 IF(lwp) THEN ! control print 125 WRITE(numout,*) 126 WRITE(numout,*) ' Passive Tracer time step rdttrc = ', rdttrc(1) 127 WRITE(numout,*) 128 ENDIF 129 130 ln_diatrc = .FALSE. 131 ln_diabio = .FALSE. 132 nn_writedia = 10 133 nn_writebio = 10 145 134 146 135 REWIND( numnat ) ! namelist namtoptrd : passive tracer trends diagnostic 147 READ ( numnat, namtrc_ trd)148 149 IF(lwp) THEN136 READ ( numnat, namtrc_dia ) 137 138 IF(lwp) THEN 150 139 WRITE(numout,*) 151 WRITE(numout,*) ' trd_mld_trc_init : read namelist namtrc_trd ' 152 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 153 WRITE(numout,*) ' * frequency of trends diagnostics nn_trd_trc = ', nn_trd_trc 154 WRITE(numout,*) ' * control surface type nn_ctls_trc = ', nn_ctls_trc 155 WRITE(numout,*) ' * restart for ML diagnostics ln_trdmld_trc_restart = ', ln_trdmld_trc_restart 156 WRITE(numout,*) ' * flag to diagnose trends of ' 157 WRITE(numout,*) ' instantantaneous or mean ML T/S ln_trdmld_trc_instant = ', ln_trdmld_trc_instant 158 WRITE(numout,*) ' * unit conversion factor rn_ucf_trc = ', rn_ucf_trc 159 DO jn = 1, jptra 160 IF( ln_trdtrc(jn) ) WRITE(numout,*) ' compute ML trends for tracer number :', jn 161 END DO 162 ENDIF 163 #endif 140 WRITE(numout,*) 141 WRITE(numout,*) ' Namelist : namtrc_dia' 142 WRITE(numout,*) ' save additionnal diagnostics arrays ln_diatrc = ', ln_diatrc 143 WRITE(numout,*) ' save additionnal biology diagnostics arrays ln_diabio = ', ln_diabio 144 WRITE(numout,*) ' frequency of outputs for additional arrays nn_writedia = ', nn_writedia 145 WRITE(numout,*) ' frequency of outputs for biological trends nn_writebio = ', nn_writebio 146 WRITE(numout,*) ' ' 147 ENDIF 148 149 IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN 150 ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), & 151 & ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) , & 152 & ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) , STAT = ierr ) 153 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 154 ENDIF 155 156 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 157 ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 158 & ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr ) 159 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 160 ENDIF 164 161 165 162 ! namelist of transport 166 163 ! --------------------- 167 164 CALL trc_nam_trp 165 166 167 IF( ln_trcdmp .AND. .NOT.ln_trcdta ) THEN 168 CALL ctl_warn( 'trc_nam: passive tracer damping requires data from files we set ln_trcdta to TRUE' ) 169 ln_trcdta = .TRUE. 170 ENDIF 171 ! 172 IF( ln_rsttr .AND. .NOT.ln_trcdmp .AND. ln_trcdta ) THEN 173 CALL ctl_warn( 'trc_nam: passive tracer restart and data intialisation, ', & 174 & 'we keep the restart values and set ln_trcdta to FALSE' ) 175 ln_trcdta = .FALSE. 176 ENDIF 177 ! 178 IF( .NOT.ln_trcdta ) THEN 179 ln_trc_ini(:) = .FALSE. 180 ENDIF 181 182 IF(lwp) THEN ! control print 183 IF( ln_rsttr ) THEN 184 WRITE(numout,*) 185 WRITE(numout,*) ' read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 186 WRITE(numout,*) 187 ELSE 188 IF( .NOT.ln_trcdta ) THEN 189 WRITE(numout,*) 190 WRITE(numout,*) ' All the passive tracers are initialised with constant values ' 191 WRITE(numout,*) 192 ENDIF 193 ENDIF 194 ENDIF 195 196 197 #if defined key_trdmld_trc || defined key_trdtrc 198 nn_trd_trc = 20 199 nn_ctls_trc = 9 200 rn_ucf_trc = 1. 201 ln_trdmld_trc_instant = .TRUE. 202 ln_trdmld_trc_restart =.FALSE. 203 cn_trdrst_trc_in = "restart_mld_trc" 204 cn_trdrst_trc_out = "restart_mld_trc" 205 ln_trdtrc(:) = .FALSE. 206 207 REWIND( numnat ) ! namelist namtoptrd : passive tracer trends diagnostic 208 READ ( numnat, namtrc_trd ) 209 210 IF(lwp) THEN 211 WRITE(numout,*) 212 WRITE(numout,*) ' trd_mld_trc_init : read namelist namtrc_trd ' 213 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 214 WRITE(numout,*) ' * frequency of trends diagnostics nn_trd_trc = ', nn_trd_trc 215 WRITE(numout,*) ' * control surface type nn_ctls_trc = ', nn_ctls_trc 216 WRITE(numout,*) ' * restart for ML diagnostics ln_trdmld_trc_restart = ', ln_trdmld_trc_restart 217 WRITE(numout,*) ' * flag to diagnose trends of ' 218 WRITE(numout,*) ' instantantaneous or mean ML T/S ln_trdmld_trc_instant = ', ln_trdmld_trc_instant 219 WRITE(numout,*) ' * unit conversion factor rn_ucf_trc = ', rn_ucf_trc 220 DO jn = 1, jptra 221 IF( ln_trdtrc(jn) ) WRITE(numout,*) ' compute ML trends for tracer number :', jn 222 END DO 223 ENDIF 224 #endif 168 225 169 226
Note: See TracChangeset
for help on using the changeset viewer.