- Timestamp:
- 2018-09-12T15:59:13+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/par_cfc.F90
r3680 r10115 14 14 USE par_pisces , ONLY : jp_pisces_3d !: number of 3D diag in PISCES 15 15 USE par_pisces , ONLY : jp_pisces_trd !: number of biological diag in PISCES 16 17 USE par_my_trc , ONLY : jp_my_trc !: number of tracers in MY_TRC 18 USE par_my_trc , ONLY : jp_my_trc_2d !: number of 2D diag in MY_TRC 19 USE par_my_trc , ONLY : jp_my_trc_3d !: number of 3D diag in MY_TRC 20 USE par_my_trc , ONLY : jp_my_trc_trd !: number of biological diag in MY_TRC 16 21 17 22 IMPLICIT NONE 18 23 19 INTEGER, PARAMETER :: jp_lc = jp_pisces !: cumulative number of passive tracers20 INTEGER, PARAMETER :: jp_lc_2d = jp_pisces_2d !:21 INTEGER, PARAMETER :: jp_lc_3d = jp_pisces_3d !:22 INTEGER, PARAMETER :: jp_lc_trd = jp_pisces_trd !:24 INTEGER, PARAMETER :: jp_lc = jp_pisces + jp_my_trc !: cumulative number of passive tracers 25 INTEGER, PARAMETER :: jp_lc_2d = jp_pisces_2d + jp_my_trc_2d !: 26 INTEGER, PARAMETER :: jp_lc_3d = jp_pisces_3d + jp_my_trc_3d !: 27 INTEGER, PARAMETER :: jp_lc_trd = jp_pisces_trd + jp_my_trc_trd !: 23 28 24 29 #if defined key_cfc … … 27 32 !!--------------------------------------------------------------------- 28 33 LOGICAL, PUBLIC, PARAMETER :: lk_cfc = .TRUE. !: CFC flag 29 INTEGER, PUBLIC, PARAMETER :: jp_cfc = 1!: number of passive tracers30 INTEGER, PUBLIC, PARAMETER :: jp_cfc_2d = 2 34 INTEGER, PUBLIC, PARAMETER :: jp_cfc = 2 !: number of passive tracers 35 INTEGER, PUBLIC, PARAMETER :: jp_cfc_2d = 2 * jp_cfc !: additional 2d output arrays ('key_trc_diaadd') 31 36 INTEGER, PUBLIC, PARAMETER :: jp_cfc_3d = 0 !: additional 3d output arrays ('key_trc_diaadd') 32 37 INTEGER, PUBLIC, PARAMETER :: jp_cfc_trd = 0 !: number of sms trends for CFC 33 34 ! assign an index in trc arrays for each CFC prognostic variables35 INTEGER, PUBLIC, PARAMETER :: jpc11 = jp_lc + 1 !: CFC-1136 INTEGER, PUBLIC, PARAMETER :: jpc12 = jp_lc + 2 !: CFC-1238 ! Enable trace gases according to total number jp_cfc 39 LOGICAL, PUBLIC, PARAMETER :: lp_cfc11 = .false. !: use CFC11 40 LOGICAL, PUBLIC, PARAMETER :: lp_cfc12 = .true. !: use CFC12 41 LOGICAL, PUBLIC, PARAMETER :: lp_sf6 = .true. !: use SF6 37 42 #else 38 43 !!--------------------------------------------------------------------- … … 44 49 INTEGER, PUBLIC, PARAMETER :: jp_cfc_3d = 0 !: No CFC additional 3d output arrays 45 50 INTEGER, PUBLIC, PARAMETER :: jp_cfc_trd = 0 !: number of sms trends for CFC 51 LOGICAL, PUBLIC, PARAMETER :: lp_cfc11 = .false. !: use CFC11 52 LOGICAL, PUBLIC, PARAMETER :: lp_cfc12 = .false. !: use CFC12 53 LOGICAL, PUBLIC, PARAMETER :: lp_sf6 = .false. !: use SF6 46 54 #endif 47 55 -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcini_cfc.F90
r3294 r10115 22 22 PUBLIC trc_ini_cfc ! called by trcini.F90 module 23 23 24 CHARACTER (len=34) :: clname = 'cfc1112.atm' ! ???25 26 24 INTEGER :: inum ! unit number 27 25 REAL(wp) :: ylats = -10. ! 10 degrees south … … 46 44 INTEGER :: iskip = 6 ! number of 1st descriptor lines 47 45 REAL(wp) :: zyy, zyd 46 CHARACTER(len = 20) :: cltra 48 47 !!---------------------------------------------------------------------- 49 48 … … 51 50 IF(lwp) WRITE(numout,*) ' trc_ini_cfc: initialisation of CFC chemical model' 52 51 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 53 54 55 IF(lwp) WRITE(numout,*) 'read of formatted file cfc1112atm' 52 ! 53 IF(lwp) WRITE(numout,*) 'Read annual atmospheric concentrations from formatted file : ' // TRIM(clnamecfc) 56 54 57 CALL ctl_opn( inum, clname , 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )55 CALL ctl_opn( inum, clnamecfc, 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 58 56 REWIND(inum) 59 57 … … 66 64 END DO 67 65 100 jpyear = jn - 1 - iskip 68 IF ( lwp) WRITE(numout,*) ' ', jpyear ,' years read'66 IF ( lwp) WRITE(numout,*) ' ---> ', jpyear ,' years read' 69 67 ! ! Allocate CFC arrays 70 68 71 ALLOCATE( p_cfc(jpyear,jphem, 2), STAT=ierr )69 ALLOCATE( p_cfc(jpyear,jphem,3), STAT=ierr ) 72 70 IF( ierr > 0 ) THEN 73 71 CALL ctl_stop( 'trc_ini_cfc: unable to allocate p_cfc array' ) ; RETURN … … 87 85 IF(lwp) THEN 88 86 WRITE(numout,*) 89 WRITE(numout,*) 'Initiali zation deqint ; No restart : qint equal zero '87 WRITE(numout,*) 'Initialisation of qint ; No restart : qint equal zero ' 90 88 ENDIF 91 89 qint_cfc(:,:,:) = 0._wp … … 105 103 jn = 31 106 104 DO 107 READ(inum,*, IOSTAT=io) zyy, p_cfc(jn,1 ,1), p_cfc(jn,1,2), p_cfc(jn,2,1), p_cfc(jn,2,2)105 READ(inum,*, IOSTAT=io) zyy, p_cfc(jn,1:2,1), p_cfc(jn,1:2,2), p_cfc(jn,1:2,3) 108 106 IF( io < 0 ) exit 109 107 jn = jn + 1 110 108 END DO 111 109 112 p_cfc(32,1:2,1) = 5.e-4 ! modify the values of the first years113 p_cfc(33,1:2,1) = 8.e-4114 p_cfc(34,1:2,1) = 1.e-6115 p_cfc(35,1:2,1) = 2.e-3116 p_cfc(36,1:2,1) = 4.e-3117 p_cfc(37,1:2,1) = 6.e-3118 p_cfc(38,1:2,1) = 8.e-3119 p_cfc(39,1:2,1) = 1.e-2120 121 110 IF(lwp) THEN ! Control print 122 111 WRITE(numout,*) 123 WRITE(numout,*) ' Year p11HN p11HS p12HN p12HS'112 WRITE(numout,*) ' Year c11NH c11SH c12NH c12SH SF6NH SF6SH' 124 113 DO jn = 30, jpyear 125 WRITE(numout, '( 1I4, 4F9.2)') jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2)114 WRITE(numout, '( 1I4, 6F10.4)') jn, p_cfc(jn,1:2,1), p_cfc(jn,1:2,2), p_cfc(jn,1:2,3) 126 115 END DO 127 116 ENDIF -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcnam_cfc.F90
r4624 r10115 46 46 INTEGER :: numonc = -1 ! Logical unit for output namelist 47 47 INTEGER :: ios ! Local integer output status for namelist read 48 INTEGER :: jl, jn 48 INTEGER :: jl, jn, cnt 49 49 TYPE(DIAG), DIMENSION(jp_cfc_2d) :: cfcdia2d 50 50 !! 51 NAMELIST/namcfcdate/ ndate_beg, nyear_res 51 NAMELIST/namcfcdate/ ndate_beg, nyear_res, clnamecfc 52 52 NAMELIST/namcfcdia/ cfcdia2d ! additional diagnostics 53 53 !!---------------------------------------------------------------------- … … 66 66 IF(lwm) WRITE ( numonc, namcfcdate ) 67 67 68 jn = jp_cfc0 - 1 69 ! Variables setting 70 IF( lp_cfc11 ) THEN 71 jn = jn + 1 72 ctrcnm (jn) = 'CFC11' 73 ctrcln (jn) = 'Chlorofluoro carbon 11 Concentration' 74 ctrcun (jn) = 'umolC/L' 75 ln_trc_ini(jn) = .false. 76 ln_trc_wri(jn) = .true. 77 ENDIF 78 ! 79 IF( lp_cfc12 ) THEN 80 jn = jn + 1 81 ctrcnm (jn) = 'CFC12' 82 ctrcln (jn) = 'Chlorofluoro carbon 12 Concentration' 83 ctrcun (jn) = 'umolC/L' 84 ln_trc_ini(jn) = .false. 85 ln_trc_wri(jn) = .true. 86 ENDIF 87 ! 88 IF( lp_sf6 ) THEN 89 jn = jn + 1 90 ctrcnm (jn) = 'SF6' 91 ctrcln (jn) = 'Sulfur hexafluoride Concentration' 92 ctrcun (jn) = 'umol/L' 93 ln_trc_ini(jn) = .false. 94 ln_trc_wri(jn) = .true. 95 ENDIF 96 68 97 IF(lwp) THEN ! control print 69 WRITE(numout,*) 98 WRITE(numout,*) ' ' 99 WRITE(numout,*) ' CFCs' 100 WRITE(numout,*) ' ' 70 101 WRITE(numout,*) ' trc_nam: Read namdates, namelist for CFC chemical model' 71 102 WRITE(numout,*) ' ~~~~~~~' 72 103 WRITE(numout,*) ' initial calendar date (aammjj) for CFC ndate_beg = ', ndate_beg 73 104 WRITE(numout,*) ' restoring time constant (year) nyear_res = ', nyear_res 105 WRITE(numout,*) ' Atmospheric CFC concentrations file clnamecfc = ', TRIM(clnamecfc) 106 WRITE(numout,*) ' Compute dynamics for CFC-11 lp_cfc11 = ', lp_cfc11 107 WRITE(numout,*) ' Compute dynamics for CFC-12 lp_cfc12 = ', lp_cfc12 108 WRITE(numout,*) ' Compute dynamics for SF6 lp_sf6 = ', lp_sf6 74 109 ENDIF 75 110 nyear_beg = ndate_beg / 10000 76 111 IF(lwp) WRITE(numout,*) ' initial year (aa) nyear_beg = ', nyear_beg 112 ! 113 ! check consistency between CFC namelist and par_cfc setting 114 if ( jn - jp_cfc0 + 1 .ne. jp_cfc ) & 115 CALL ctl_stop( 'trc_nam_cfc: Number of selected CFCs is different from total CFC number (jp_cfc) specified in par_cfc.F90' ) 77 116 ! 78 117 -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r4996 r10115 29 29 30 30 INTEGER , PUBLIC, PARAMETER :: jphem = 2 ! parameter for the 2 hemispheres 31 INTEGER , PUBLIC :: jpyear ! Number of years read in CFC1112 file31 INTEGER , PUBLIC :: jpyear ! Number of years read in input data file (in trcini_cfc) 32 32 INTEGER , PUBLIC :: ndate_beg ! initial calendar date (aammjj) for CFC 33 33 INTEGER , PUBLIC :: nyear_res ! restoring time constant (year) 34 34 INTEGER , PUBLIC :: nyear_beg ! initial year (aa) 35 CHARACTER(len=200), PUBLIC :: clnamecfc ! Input filename of CFCs atm. concentrations 35 36 36 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: p_cfc ! partial hemispheric pressure for CFC … … 38 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qtr_cfc ! flux at surface 39 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qint_cfc ! cumulative flux 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: atm_cfc ! partial hemispheric pressure for used CFC 40 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: patm ! atmospheric function 41 43 42 REAL(wp), DIMENSION(4,2) :: soa ! coefficient for solubility of CFC [mol/l/atm] 43 REAL(wp), DIMENSION(3,2) :: sob ! " " 44 REAL(wp), DIMENSION(4,2) :: sca ! coefficients for schmidt number in degre Celcius 45 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: soa ! coefficient for solubility of CFC [mol/l/atm] 45 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sob ! " " 46 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sca ! coefficients for schmidt number in degrees Celsius 46 47 ! ! coefficients for conversion 47 48 REAL(wp) :: xconv1 = 1.0 ! conversion from to … … 82 83 INTEGER :: im1, im2, ierr 83 84 REAL(wp) :: ztap, zdtap 84 REAL(wp) :: zt1, zt2, zt3, z v285 REAL(wp) :: zt1, zt2, zt3, zt4, zv2 85 86 REAL(wp) :: zsol ! solubility 86 87 REAL(wp) :: zsch ! schmidt number … … 93 94 ! 94 95 IF( nn_timing == 1 ) CALL timing_start('trc_sms_cfc') 96 97 IF(lwp) WRITE(numout,*) 98 IF(lwp) WRITE(numout,*) ' trc_sms_cfc: CFC model' 99 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 95 100 ! 96 101 ALLOCATE( zpatm(jphem,jp_cfc), STAT=ierr ) … … 112 117 im2 = nmonth - 7 113 118 ENDIF 119 ! Avoid bad interpolation if starting date is =< 1900 120 if( iyear_beg .LE. 0 ) iyear_beg = 1 121 ! 114 122 iyear_end = iyear_beg + 1 115 116 123 ! !------------! 117 124 DO jl = 1, jp_cfc ! CFC loop ! … … 120 127 ! time interpolation at time kt 121 128 DO jm = 1, jphem 122 zpatm(jm,jl) = ( p_cfc(iyear_beg, jm, jl) * FLOAT (im1) &123 & + p_cfc(iyear_end, jm, jl) * FLOAT (im2) ) / 12.129 zpatm(jm,jl) = ( atm_cfc(iyear_beg, jm, jl) * REAL(im1, wp) & 130 & + atm_cfc(iyear_end, jm, jl) * REAL(im2, wp) ) / 12. 124 131 END DO 125 132 … … 148 155 149 156 ! Computation of speed transfert 150 ! Schmidt number 157 ! Schmidt number revised in Wanninkhof (2014) 151 158 zt1 = tsn(ji,jj,1,jp_tem) 152 159 zt2 = zt1 * zt1 153 160 zt3 = zt1 * zt2 154 zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 155 156 ! speed transfert : formulae of wanninkhof 1992 161 zt4 = zt2 * zt2 162 zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 + sca(5,jl) * zt4 163 164 ! speed transfert : formulae revised in Wanninkhof (2014) 157 165 zv2 = wndm(ji,jj) * wndm(ji,jj) 158 166 zsch = zsch / 660. 159 zak_cfc = ( 0.3 9* xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1)167 zak_cfc = ( 0.31 * xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1) 160 168 161 169 ! Input function : speed *( conc. at equil - concen at surface ) … … 188 196 ! 189 197 IF( lk_iomput ) THEN 190 CALL iom_put( "qtrCFC11" , qtr_cfc (:,:,1) ) 191 CALL iom_put( "qintCFC11" , qint_cfc(:,:,1) ) 198 jl = 0 199 DO jn = jp_cfc0, jp_cfc1 200 jl = jl + 1 201 CALL iom_put( 'qtr_'//TRIM(ctrcnm(jn)) , qtr_cfc (:,:,jl) ) 202 CALL iom_put( 'qint_'//TRIM(ctrcnm(jn)), qint_cfc(:,:,jl) ) 203 ENDDO 192 204 ELSE 193 205 IF( ln_diatrc ) THEN 194 trc2d(:,:,jp_cfc0_2d ) = qtr_cfc (:,:,1) 195 trc2d(:,:,jp_cfc0_2d + 1) = qint_cfc(:,:,1) 206 jl = 0 207 DO jn = jp_cfc0_2d, jp_cfc1_2d, 2 208 jl = jl + 1 209 trc2d(:,:,jn ) = qtr_cfc (:,:,jl) 210 trc2d(:,:,jn + 1) = qint_cfc(:,:,jl) 211 ENDDO 196 212 END IF 197 213 END IF … … 215 231 !!--------------------------------------------------------------------- 216 232 INTEGER :: jn 217 233 !!---------------------------------------------------------------------- 234 ! 235 jn = 0 218 236 ! coefficient for CFC11 219 237 !---------------------- 220 221 ! Solubility 222 soa(1,1) = -229.9261 223 soa(2,1) = 319.6552 224 soa(3,1) = 119.4471 225 soa(4,1) = -1.39165 226 227 sob(1,1) = -0.142382 228 sob(2,1) = 0.091459 229 sob(3,1) = -0.0157274 230 231 ! Schmidt number 232 sca(1,1) = 3501.8 233 sca(2,1) = -210.31 234 sca(3,1) = 6.1851 235 sca(4,1) = -0.07513 238 if ( lp_cfc11 ) then 239 jn = jn + 1 240 ! Solubility 241 soa(1,jn) = -229.9261 242 soa(2,jn) = 319.6552 243 soa(3,jn) = 119.4471 244 soa(4,jn) = -1.39165 245 246 sob(1,jn) = -0.142382 247 sob(2,jn) = 0.091459 248 sob(3,jn) = -0.0157274 249 250 ! Schmidt number 251 sca(1,jn) = 3579.2 252 sca(2,jn) = -222.63 253 sca(3,jn) = 7.5749 254 sca(4,jn) = -0.14595 255 sca(5,jn) = 0.0011874 256 257 ! atm. concentration 258 atm_cfc(:,:,jn) = p_cfc(:,:,1) 259 endif 236 260 237 261 ! coefficient for CFC12 238 262 !---------------------- 239 240 ! Solubility 241 soa(1,2) = -218.0971 242 soa(2,2) = 298.9702 243 soa(3,2) = 113.8049 244 soa(4,2) = -1.39165 245 246 sob(1,2) = -0.143566 247 sob(2,2) = 0.091015 248 sob(3,2) = -0.0153924 249 250 ! schmidt number 251 sca(1,2) = 3845.4 252 sca(2,2) = -228.95 253 sca(3,2) = 6.1908 254 sca(4,2) = -0.067430 263 if ( lp_cfc12 ) then 264 jn = jn + 1 265 ! Solubility 266 soa(1,jn) = -218.0971 267 soa(2,jn) = 298.9702 268 soa(3,jn) = 113.8049 269 soa(4,jn) = -1.39165 270 271 sob(1,jn) = -0.143566 272 sob(2,jn) = 0.091015 273 sob(3,jn) = -0.0153924 274 275 ! schmidt number 276 sca(1,jn) = 3828.1 277 sca(2,jn) = -249.86 278 sca(3,jn) = 8.7603 279 sca(4,jn) = -0.1716 280 sca(5,jn) = 0.001408 281 282 ! atm. concentration 283 atm_cfc(:,:,jn) = p_cfc(:,:,2) 284 endif 285 286 ! coefficient for SF6 287 !---------------------- 288 if ( lp_sf6 ) then 289 jn = jn + 1 290 ! Solubility 291 soa(1,jn) = -80.0343 292 soa(2,jn) = 117.232 293 soa(3,jn) = 29.5817 294 soa(4,jn) = 0.0 295 296 sob(1,jn) = 0.0335183 297 sob(2,jn) = -0.0373942 298 sob(3,jn) = 0.00774862 299 300 ! schmidt number 301 sca(1,jn) = 3177.5 302 sca(2,jn) = -200.57 303 sca(3,jn) = 6.8865 304 sca(4,jn) = -0.13335 305 sca(5,jn) = 0.0010877 306 307 ! atm. concentration 308 atm_cfc(:,:,jn) = p_cfc(:,:,3) 309 endif 255 310 256 311 IF( ln_rsttr ) THEN … … 272 327 !! *** ROUTINE trc_sms_cfc_alloc *** 273 328 !!---------------------------------------------------------------------- 274 ALLOCATE( xphem (jpi,jpj) , & 275 & qtr_cfc (jpi,jpj,jp_cfc) , & 276 & qint_cfc(jpi,jpj,jp_cfc) , STAT=trc_sms_cfc_alloc ) 329 ALLOCATE( xphem (jpi,jpj) , atm_cfc(jpyear,jphem,jp_cfc) , & 330 & qtr_cfc (jpi,jpj,jp_cfc) , qint_cfc(jpi,jpj,jp_cfc) , & 331 & soa(4,jp_cfc) , sob(3,jp_cfc) , sca(5,jp_cfc) , & 332 & STAT=trc_sms_cfc_alloc ) 277 333 ! 278 334 IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.')
Note: See TracChangeset
for help on using the changeset viewer.