Changeset 1534
- Timestamp:
- 2009-07-24T12:35:25+02:00 (15 years ago)
- Location:
- trunk/NEMO
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/SBC/sbc_oce.F90
r1244 r1534 54 54 !!$ REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: calving !: calving 55 55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: fr_i !: ice fraction (between 0 to 1) - 56 #if defined key_cpl_carbon_cycle 57 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: atm_co2 !: atmospheric pCO2 [ppm] 58 #endif 56 59 57 60 !!---------------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/SBC/sbccpl.F90
r1523 r1534 6 6 !! History : 2.0 ! 06-2007 (R. Redler, N. Keenlyside, W. Park) Original code split into flxmod & taumod 7 7 !! 3.0 ! 02-2008 (G. Madec, C Talandier) surface module 8 !! 3.1 ! 02-2009 ( G. Madec,S. Masson, E. Maisonave, A. Caubel) generic coupled interface8 !! 3.1 ! 02-2009 (S. Masson, E. Maisonave, A. Caubel) generic coupled interface 9 9 !!---------------------------------------------------------------------- 10 10 #if defined key_oasis3 || defined key_oasis4 … … 27 27 #endif 28 28 #if defined key_lim2 29 USE ice_2, ONLY : hicif, hsnif ! Ice and Snow thickness 29 USE par_ice_2 ! ice parameters 30 USE ice_2 ! ice variables 30 31 #endif 31 32 USE cpl_oasis3 ! OASIS3 coupling … … 41 42 USE mod_prism_proto ! OASIS3 prism module: PRISM_* variables... 42 43 USE phycst, ONLY : xlsn, rhosn 44 #if defined key_cpl_carbon_cycle 45 USE p4zflx, ONLY : oce_co2 46 #endif 43 47 IMPLICIT NONE 44 48 PRIVATE … … 78 82 INTEGER, PARAMETER :: jpr_rnf = 28 ! 79 83 INTEGER, PARAMETER :: jpr_cal = 29 ! 84 #if ! defined key_cpl_carbon_cycle 80 85 INTEGER, PARAMETER :: jprcv = 29 ! total number of fields recieved 81 86 #else 87 INTEGER, PARAMETER :: jpr_co2 = 30 88 INTEGER, PARAMETER :: jprcv = 30 ! total number of fields recieved 89 #endif 82 90 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction 83 91 INTEGER, PARAMETER :: jps_toce = 2 ! ocean temperature … … 94 102 INTEGER, PARAMETER :: jps_ivy1 = 13 ! 95 103 INTEGER, PARAMETER :: jps_ivz1 = 14 ! 104 #if ! defined key_cpl_carbon_cycle 96 105 INTEGER, PARAMETER :: jpsnd = 14 ! total number of fields sended 97 106 #else 107 INTEGER, PARAMETER :: jps_co2 = 15 108 INTEGER, PARAMETER :: jpsnd = 15 ! total number of fields sended 109 #endif 98 110 ! !!** namelist namsbc_cpl ** 99 111 ! Send to the atmosphere ! … … 105 117 CHARACTER(len=100) :: cn_snd_crt_orient = 'local grid' ! 'eastward-northward' or 'local grid' 106 118 CHARACTER(len=100) :: cn_snd_crt_grid = 'T' ! always at 'T' point 107 119 #if defined key_cpl_carbon_cycle 120 CHARACTER(len=100) :: cn_snd_co2 = 'none' ! 'none' or 'coupled' 121 #endif 108 122 ! Recieved from the atmosphere ! 109 123 CHARACTER(len=100) :: cn_rcv_tau_nature = 'oce only' ! 'oce only' 'oce and ice' or 'mixed oce-ice' … … 118 132 CHARACTER(len=100) :: cn_rcv_rnf = 'coupled' ! 'coupled' 'climato' or 'mixed' 119 133 CHARACTER(len=100) :: cn_rcv_cal = 'none' ! 'none' or 'coupled' 134 #if defined key_cpl_carbon_cycle 135 CHARACTER(len=100) :: cn_rcv_co2 = 'none' ! 'none' or 'coupled' 136 #endif 120 137 121 138 !! CHARACTER(len=100), PUBLIC :: cn_rcv_rnf !: ??? ==>> !!gm treat this case in a different maner … … 160 177 cn_rcv_tau_nature, cn_rcv_tau_refere , cn_rcv_tau_orient, cn_rcv_tau_grid , & 161 178 cn_rcv_dqnsdt , cn_rcv_qsr , cn_rcv_qns , cn_rcv_emp , cn_rcv_rnf , cn_rcv_cal 179 #if defined key_cpl_carbon_cycle 180 NAMELIST/namsbc_cpl_co2/ cn_snd_co2, cn_rcv_co2 181 #endif 162 182 !!--------------------------------------------------------------------- 163 183 … … 195 215 ENDIF 196 216 217 #if defined key_cpl_carbon_cycle 218 REWIND( numnam ) ! ... read namlist namsbc_cpl_co2 219 READ ( numnam, namsbc_cpl_co2 ) 220 IF(lwp) THEN ! control print 221 WRITE(numout,*) 222 WRITE(numout,*)'sbc_cpl_init : namsbc_cpl_co2 namelist ' 223 WRITE(numout,*)'~~~~~~~~~~~~' 224 WRITE(numout,*)' received fields' 225 WRITE(numout,*)' atm co2 cn_rcv_co2 = ', cn_rcv_co2 226 WRITE(numout,*)' sent fields' 227 WRITE(numout,*)' oce co2 flux cn_snd_co2 = ', cn_snd_co2 228 WRITE(numout,*) 229 ENDIF 230 #endif 197 231 ! save current & stress in an array and suppress possible blank in the name 198 232 cn_snd_crt(1) = TRIM( cn_snd_crt_nature ) ; cn_snd_crt(2) = TRIM( cn_snd_crt_refere ) … … 372 406 ! ! 10m wind module ! 373 407 ! ! ------------------------- ! 374 srcv(jpr_w10m )%clname = 'O_Wind10' ; IF( TRIM(cn_rcv_w10m) == 'coupled' ) srcv(jpr_w10m)%laction = .TRUE. 408 srcv(jpr_w10m)%clname = 'O_Wind10' ; IF( TRIM(cn_rcv_w10m) == 'coupled' ) srcv(jpr_w10m)%laction = .TRUE. 409 410 #if defined key_cpl_carbon_cycle 411 ! ! ------------------------- ! 412 ! ! Atmospheric CO2 ! 413 ! ! ------------------------- ! 414 srcv(jpr_co2 )%clname = 'O_AtmCO2' ; IF( TRIM(cn_rcv_co2) == 'coupled' ) srcv(jpr_co2 )%laction = .TRUE. 415 #endif 375 416 376 417 ! ================================ ! … … 450 491 END SELECT 451 492 493 #if defined key_cpl_carbon_cycle 494 ! ! ------------------------- ! 495 ! ! CO2 flux ! 496 ! ! ------------------------- ! 497 ssnd(jps_co2)%clname = 'O_CO2FLX' ; IF( TRIM(cn_snd_co2) == 'coupled' ) ssnd(jps_co2 )%laction = .TRUE. 498 #endif 499 ! 452 500 ! ================================ ! 453 501 ! initialisation of the coupler ! … … 632 680 ! it not, we call sbc_tau2wnd in sbc_cpl_rcv (or later, after the ice???) 633 681 ! 682 #if defined key_cpl_carbon_cycle 683 ! ! atmosph. CO2 (ppm) 684 IF( srcv(jpr_co2)%laction ) atm_co2(:,:) = frcv(:,:,jpr_co2) 685 #endif 686 634 687 ENDIF 635 688 ! … … 1070 1123 IF( ssnd(jps_hsnw)%laction ) CALL cpl_prism_snd( jps_hsnw, isec, hsnif(:,:) * fr_i(:,:), info ) 1071 1124 ! 1072 ! ! ------------------------- ! 1125 #if defined key_cpl_carbon_cycle 1126 ! ! ------------------------- ! 1127 ! ! CO2 flux from PISCES ! 1128 ! ! ------------------------- ! 1129 IF( ssnd(jps_co2)%laction ) CALL cpl_prism_snd( jps_co2, isec, oce_co2 , info ) 1130 ! 1131 #endif 1073 1132 IF( ssnd(jps_ocx1)%laction ) THEN ! Surface current ! 1074 1133 ! ! ------------------------- ! … … 1197 1256 IF( ssnd(jps_ivy1)%laction ) CALL cpl_prism_snd( jps_ivy1, isec, zity1, info ) ! ice y current 1st grid 1198 1257 IF( ssnd(jps_ivz1)%laction ) CALL cpl_prism_snd( jps_ivz1, isec, zitz1, info ) ! ice z current 1st grid 1199 ! 1258 ! 1200 1259 ENDIF 1201 1260 ! … … 1239 1298 REAL(wp), INTENT(in ), DIMENSION(:,: ), OPTIONAL :: psst ! sea surface temperature [Celcius] 1240 1299 REAL(wp), INTENT(in ), DIMENSION(:,:,:), OPTIONAL :: pist ! ice surface temperature [Kelvin] 1241 WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', p_frld(1,1,1) , palbi(1,1,1), psst (1,1), pist (1,1,1)1300 WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', p_frld(1,1,1) 1242 1301 ! stupid definition to avoid warning message when compiling... 1243 1302 pqns_tot(:,:) = 0. ; pqns_ice(:,:,:) = 0. ; pdqns_ice(:,:,:) = 0. -
trunk/NEMO/TOP_SRC/PISCES/p4zflx.F90
r1457 r1534 24 24 USE p4zche 25 25 USE iom 26 26 #if defined key_cpl_carbon_cycle 27 USE sbc_oce , ONLY : atm_co2 28 #endif 27 29 USE lib_mpp 28 30 … … 35 37 atcox = 0.20946 , & !: 36 38 atcco2 = 278. !: 37 38 REAL(wp) :: & 39 xconv = 0.01/3600., & ! coefficients for conversion 40 tco2flx !: Total flux of carbon per year 39 40 REAL(wp) :: & 41 xconv = 0.01/3600 !: coefficients for conversion 42 43 #if defined key_cpl_carbon_cycle 44 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & 45 oce_co2 !: ocean carbon flux 46 REAL(wp) :: & 47 t_atm_co2_flx, & !: Total atmospheric carbon flux per year 48 t_oce_co2_flx !: Total ocean carbon flux per year 49 #endif 41 50 42 51 !!* Substitution … … 63 72 REAL(wp) :: zfld, zflu, zfld16, zflu16, zfact 64 73 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 65 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3 , ztco2flx74 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3 66 75 #if defined key_trc_diaadd && defined key_iomput 67 76 REAL(wp), DIMENSION(jpi,jpj) :: zcflx, zoflx, zkg, zdelc … … 146 155 END DO 147 156 148 #if ! defined key_iomput149 157 DO jj = 1, jpj 150 158 DO ji = 1, jpi 151 152 159 ! Compute CO2 flux for the sea and air 160 #if ! defined key_cpl_carbon_cycle 153 161 zfld = atcco2 * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 154 162 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 163 #else 164 zfld = atm_co2(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 165 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 166 ! compute flux of carbon 167 oce_co2(ji,jj) = ( zfld - zflu ) * rfact & 168 & * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 169 #endif 155 170 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 156 157 ! compute flux of carbon158 ztco2flx(ji,jj) = ( zfld - zflu ) * rfact &159 & * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000.160 171 161 172 ! Compute O2 flux … … 164 175 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + ( zfld16 - zflu16 ) / fse3t(ji,jj,1) 165 176 166 # 177 #if defined key_trc_diaadd 167 178 ! Save diagnostics 168 trc2d(ji,jj,jp_pcs0_2d ) = ( zfld - zflu ) * 1000. * tmask(ji,jj,1) 179 # if ! defined key_iomput 180 trc2d(ji,jj,jp_pcs0_2d ) = ( zfld - zflu ) * 1000. * tmask(ji,jj,1) 169 181 trc2d(ji,jj,jp_pcs0_2d + 1) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 170 182 trc2d(ji,jj,jp_pcs0_2d + 2) = zkgco2(ji,jj) * tmask(ji,jj,1) 171 183 trc2d(ji,jj,jp_pcs0_2d + 3) = atcco2 - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) * tmask(ji,jj,1) 172 # endif 173 END DO 174 END DO 175 ! 176 #else 177 DO jj = 1, jpj 178 DO ji = 1, jpi 179 ! Compute CO2 flux for the sea and air 180 zfld = atcco2 * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 181 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 182 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 183 184 ! compute flux of carbon 185 ztco2flx(ji,jj) = ( zfld - zflu ) * rfact & 186 & * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 187 188 ! Compute O2 flux 189 zfld16 = atcox * chemc(ji,jj,2) *tmask(ji,jj,1) * zkgo2(ji,jj) 190 zflu16 = trn(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 191 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + ( zfld16 - zflu16 ) / fse3t(ji,jj,1) 192 # if defined key_trc_diaadd 193 ! Save diagnostics 184 # else 194 185 zcflx(ji,jj) = ( zfld - zflu ) * 1000. * tmask(ji,jj,1) 195 186 zoflx(ji,jj) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 196 187 zkg (ji,jj) = zkgco2(ji,jj) * tmask(ji,jj,1) 197 188 zdelc(ji,jj) = atcco2 - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) * tmask(ji,jj,1) 198 # endif 189 # endif 190 #endif 199 191 END DO 200 192 END DO 201 #endif 202 193 194 #if defined key_cpl_carbon_cycle 203 195 ! Total Flux of Carbon 204 DO jj = 1, jpj 196 DO jj = 1, jpj 205 197 DO ji = 1, jpi 206 tco2flx = tco2flx + ztco2flx(ji,jj) * tmask_i(ji,jj) 198 t_atm_co2_flx = t_atm_co2_flx + atm_co2(ji,jj) * tmask_i(ji,jj) 199 t_oce_co2_flx = t_oce_co2_flx + oce_co2(ji,jj) * tmask_i(ji,jj) 207 200 END DO 208 201 END DO 209 202 210 203 IF( MOD( kt, nspyr ) == 0 ) THEN 211 IF( lk_mpp ) CALL mpp_sum( tco2flx ) ! sum over the global domain 212 204 IF( lk_mpp ) THEN 205 CALL mpp_sum( t_atm_co2_flx ) ! sum over the global domain 206 CALL mpp_sum( t_oce_co2_flx ) ! sum over the global domain 207 ENDIF 213 208 WRITE(numout,*) ' Atmospheric pCO2 :' 214 WRITE(numout,*) '-------------------- : ',kt,' ', atcco2209 WRITE(numout,*) '-------------------- : ',kt,' ',t_atm_co2_flx 215 210 WRITE(numout,*) '(ppm)' 216 211 WRITE(numout,*) 'Total Flux of Carbon :' 217 WRITE(numout,*) '-------------------- : ',t co2flx * 12. / 1e15212 WRITE(numout,*) '-------------------- : ',t_oce_co2_flx * 12. / 1e15 218 213 WRITE(numout,*) '(GtC/an)' 219 tco2flx = 0. 214 t_atm_co2_flx = 0. 215 t_oce_co2_flx = 0. 220 216 ENDIF 217 #endif 221 218 222 219 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 260 257 ENDIF 261 258 262 ! Initialization of total Flux of Carbon 263 tco2flx = 0. 259 #if defined key_cpl_carbon_cycle 260 ! Initialization of Flux of Carbon 261 oce_co2(:,:) = 0. 262 t_atm_co2_flx = 0. 263 t_oce_co2_flx = 0. 264 #endif 264 265 265 266 END SUBROUTINE p4z_flx_init
Note: See TracChangeset
for help on using the changeset viewer.