*IF DEF,OCEAN ORH1F305.345 C ******************************COPYRIGHT****************************** GTS2F400.3007 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3008 C GTS2F400.3009 C Use, duplication or disclosure of this code is subject to the GTS2F400.3010 C restrictions as set forth in the contract. GTS2F400.3011 C GTS2F400.3012 C Meteorological Office GTS2F400.3013 C London Road GTS2F400.3014 C BRACKNELL GTS2F400.3015 C Berkshire UK GTS2F400.3016 C RG12 2SZ GTS2F400.3017 C GTS2F400.3018 C If no contract has been raised with this copy of the code, the use, GTS2F400.3019 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3020 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3021 C Modelling at the above address. GTS2F400.3022 C ******************************COPYRIGHT****************************** GTS2F400.3023 C GTS2F400.3024 C*LL Subroutine FLUX_CO2 FLUX_CO2.3 CLL Can run on any FORTRAN 77 compiler with long lower case variables FLUX_CO2.4 CLL FLUX_CO2.5 CLL Author: N.K. TAYLOR FLUX_CO2.6 CLL Date 17 December 1993 FLUX_CO2.7 CLL Version 3.3 FLUX_CO2.8 CLL FLUX_CO2.9 CLL Programming standards use Cox naming convention for Cox variables FLUX_CO2.10 CLL with the addition that lower case variables are local to the FLUX_CO2.11 CLL routine. FLUX_CO2.12 CLL FLUX_CO2.13 CLL Computes the flux of CO2 from the atmosphere into the ocean, from FLUX_CO2.14 CLL the difference in partial pressure between atmosphere and ocean FLUX_CO2.15 CLL The flux is only applied to ice-free points FLUX_CO2.17 CLL - when L_SEAICE is true. ORH1F305.346 CLL The Liss & Merlivat (1986) formula is used for wind speed dependance FLUX_CO2.20 CLL - when L_OLISS is true. ORH1F305.347 CLL The Wanninkhof (1992) formula is used for wind speed dependance FLUX_CO2.23 CLL - when L_OLISS is false. ORH1F305.348 ! Modification History: ORH1F305.349 ! Version Date Details ORH1F305.350 ! ------- ------- ------------------------------------------ ORH1F305.351 ! 3.5 16.01.95 Remove *IF dependency. R.Hill ORH1F305.352 CLL 4.5 1.07.98 Allow full 2D field of atmospheric CO2 OCN1F405.27 CLL to be used in flux calculations. C.D.Jones OCN1F405.28 CLL FLUX_CO2.25 CLLEND ----------------------------------------------------------------- FLUX_CO2.26 C* FLUX_CO2.27 C*L-------------------------------- Arguments ------------------------ FLUX_CO2.28 C FLUX_CO2.29SUBROUTINE FLUX_CO2(TA, REK0, PCO2, CO2_FLUX, ATMPCO2_ROW, 1OCN1F405.29 + INVADE,EVADE, FLUX_CO2.31 + c14to12_atm, FLUX_CO2.33 + WME, FLUX_CO2.36 + AICE, FLUX_CO2.39 + BICE, FLUX_CO2.42 + IMT, KM, NT, FLUX_CO2.44 + FM, DZ, TIMESTEP ) OJP0F404.573 C FLUX_CO2.46 IMPLICIT NONE FLUX_CO2.47 C FLUX_CO2.48 *CALL CNTLOCN
ORH1F305.353 *CALL OARRYSIZ
ORH1F305.354 *CALL OTRACPNT
OJP0F404.574 *CALL UMSCALAR
OJP0F404.575 ! Use UMSCALAR to get RHO_WATER_SI = 1026.0 (set in OSETCON) OJP0F404.576 C Define constants for array sizes FLUX_CO2.49 C FLUX_CO2.50 INTEGER FLUX_CO2.51 + IMT ! IN Number of points in horizontal FLUX_CO2.52 +, KM ! IN Number of layers in model FLUX_CO2.53 +, NT ! IN Number of tracers FLUX_CO2.54 C FLUX_CO2.55 C Physical arguments FLUX_CO2.56 C FLUX_CO2.57 REAL FLUX_CO2.58 & TA (IMT, KM, NT) ! INOUT Tracer values OJP0F404.577 +, CO2_FLUX (IMT) ! OUT Air-sea CO2 flux (Moles/m2/year) FLUX_CO2.60 +, INVADE (IMT) ! OUT Invasion rate of CO2 (Moles/m2/yr) FLUX_CO2.61 +, EVADE (IMT) ! OUT Invasion rate of CO2 (Moles/m2/yr) FLUX_CO2.62 &, ATMPCO2_ROW(IMT_CAR) ! OUT Atmospheric CO2 surface conc OCN1F405.30 +, PCO2_ATM ! OUT Atmospheric CO2 pressure in ppm FLUX_CO2.63 +, REK0 (IMT) ! IN Solubility of CO2 in Sea Water FLUX_CO2.64 +, DZ (KM) ! IN Layer thicknesses (in cm) FLUX_CO2.65 &, TIMESTEP ! IN Timestep in top layer OJP0F404.578 +, FM (IMT,KM) ! IN Land-sea mask FLUX_CO2.67 +, PCO2 (IMT) ! IN Partial pressure of CO2 in ppm FLUX_CO2.68 &, WME (IMT_CAR_MIX) ! IN Wind-mixing power (W/m2) ORH1F305.355 &, AICE(IMT_CAR_ICE) ! IN Ice fraction in grid box ORH1F305.356 &, BICE(IMT_CAR_PIC) ! IN ARRAY TO BLANK OUT FLUXES AT ORH1F305.357 ! CLIMATOLOGICAL ice points ORH1F305.358 REAL c14to12_atm ! IN Atmospheric C14/C12 ratio ORH1F305.359 C* FLUX_CO2.82 C FLUX_CO2.83 C FLUX_CO2.84 C Locally defined variables FLUX_CO2.85 C FLUX_CO2.86 INTEGER FLUX_CO2.87 + i ! Horizontal loop index FLUX_CO2.88 C FLUX_CO2.89 REAL FLUX_CO2.90 + piston_vel(IMT) ! Piston velocity (m/s) FLUX_CO2.91 +, schmidt ! Schmidt Number FLUX_CO2.95 +, wind_speed ! Wind speed computed from WME (m/s) FLUX_CO2.96 +, rho_air ! Average surface density of air FLUX_CO2.97 &, fxb ! Intermediate constants OJP0F404.579 +, drag_coef ! Drag coefficient for conversion FLUX_CO2.99 C ! of wind-mixing power to wind speed FLUX_CO2.100 C FLUX_CO2.102 DATA rho_air,drag_coef / 1.2 , 1.3 e-3/ FLUX_CO2.104 C FLUX_CO2.107 CL Define conversion factor and intermediate constants FLUX_CO2.108 C FLUX_CO2.109 IF (L_OMIXLAY) THEN ORH1F305.360 fxb = sqrt ((RHO_WATER_SI**(0.333))/(drag_coef*rho_air)) OJP0F404.580 ENDIF ORH1F305.361 C FLUX_CO2.118 C FLUX_CO2.119 DO I = IFROM_CYC, ITO_CYC ORH1F305.362 IF (L_OMIXLAY) THEN ORH1F305.363 C FLUX_CO2.127 C Compute a typical "wind speed" using wind mixing power FLUX_CO2.128 C FLUX_CO2.129 ! Mask windspeed calculation to zero over land. OJP0F404.581 wind_speed = fxb*((FM(I,1)*WME(I))**(0.333)) OJP0F404.582 C FLUX_CO2.131 C Compute Schmidt Number FLUX_CO2.132 C Formula from Wanninkhof (1992) FLUX_CO2.133 C FLUX_CO2.134 ! Calculate schmidt number, with mask to make schmidt=1.0 over land. OJP0F404.583 schmidt = FM(I,1)* ( 2073.1 - 125.62*TA(I,1,1) OJP0F404.584 & + 3.6276*(TA(I,1,1)**2) - 0.043219*(TA(I,1,1)**3) ) OJP0F404.585 & + ( 1.0 - FM(I,1) ) OJP0F404.586 C FLUX_CO2.137 IF (L_OLISS) THEN ORH1F305.364 C Compute piston velocity (in m/s) (From Liss & Merlivat, 1986) FLUX_CO2.139 C FLUX_CO2.140 IF (wind_speed.LE.3.6) THEN FLUX_CO2.141 piston_vel(I) = 0.17 * wind_speed * (0.01/3600.0) OJP0F404.587 & /((schmidt/660.0)**0.667) FLUX_CO2.143 ELSE FLUX_CO2.144 IF (wind_speed.LE.13.0) THEN FLUX_CO2.145 piston_vel(I) = (2.85*wind_speed -9.65) * (0.01/3600.0) OJP0F404.588 & /(sqrt(schmidt/660.0)) FLUX_CO2.147 ELSE FLUX_CO2.148 piston_vel(I) = (5.9*wind_speed -49.3) * (0.01/3600.0) OJP0F404.589 & /(sqrt(schmidt/660.0)) FLUX_CO2.150 ENDIF FLUX_CO2.151 ENDIF FLUX_CO2.152 ELSE ORH1F305.365 ! Compute piston velocity (in m/s) (From Wanninkhof 1992, in cm/hr) OJP0F404.590 C FLUX_CO2.156 piston_vel(I) = 0.39 * wind_speed * wind_speed OJP0F404.591 & / (sqrt(schmidt/660.0)) FLUX_CO2.158 & * 0.01 / 3600.0 OJP0F404.592 ENDIF ORH1F305.366 ELSE ORH1F305.367 piston_vel(I) = 5.556e-5 FLUX_CO2.162 ENDIF ORH1F305.368 ENDDO FLUX_CO2.164 C FLUX_CO2.165 ! COMPUTE CO2 INVASION, EVASION AND NET FLUXES in moles/(m2.yr) OJP0F404.593 CL NB Flux is blanked out over land and ice points (except for leads) FLUX_CO2.167 C FLUX_CO2.168 IF (L_SEAICE) THEN ORH1F305.369 DO I = IFROM_CYC, ITO_CYC ORH1F305.370 INVADE(I) = REK0(I)*piston_vel(I)*atmpco2_row(i) OCN1F405.31 & * (1.0 - AICE(I)) * FM(I,1) ORH1F305.372 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.595 EVADE(I) = REK0(I)*piston_vel(I)*PCO2(I) OJP0F404.596 & * (1.0 - AICE(I)) * FM(I,1) ORH1F305.374 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.597 CO2_FLUX(I) = INVADE(I)-EVADE(I) ORH1F305.375 ENDDO ORH1F305.376 ELSE ORH1F305.377 IF (L_OPSEUDIC) THEN ORH1F305.378 DO I = IFROM_CYC, ITO_CYC ORH1F305.379 INVADE(I) = REK0(I)*piston_vel(I)*atmpco2_row(i) OCN1F405.32 & * BICE(I) * FM(I,1) ORH1F305.381 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.599 EVADE(I) = REK0(I)*piston_vel(I)*PCO2(I) OJP0F404.600 & * BICE(I) * FM(I,1) ORH1F305.383 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.601 CO2_FLUX(I) = INVADE(I)-EVADE(I) ORH1F305.384 ENDDO ORH1F305.385 ELSE ORH1F305.386 DO I = IFROM_CYC, ITO_CYC ORH1F305.387 INVADE(I) = REK0(I)*piston_vel(I)*atmpco2_row(i) OCN1F405.33 & * FM(I,1) OJP0F404.603 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.604 EVADE(I) = REK0(I)*piston_vel(I)*PCO2(I) OJP0F404.605 & * FM(I,1) OJP0F404.606 & * RHO_WATER_SI * 60.0*60.0*24.0*360.0 / 1.0e6 OJP0F404.607 CO2_FLUX(I) = INVADE(I)-EVADE(I) ORH1F305.390 ENDDO ORH1F305.391 ENDIF ORH1F305.392 ORH1F305.393 ENDIF ORH1F305.394 C FLUX_CO2.197 C Now update TCO2 (tracer 3) according to the net CO2 flux FLUX_CO2.198 C FLUX_CO2.199 DO I = IFROM_CYC, ITO_CYC ORH1F305.395 IF (L_OCARB14) THEN ORH1F305.396 C FLUX_CO2.207 C Compute change in the C14/C12 ratio (ie tracer 14) FLUX_CO2.208 C The C14/C12 ratio for the pre-industrial atmosphere is FLUX_CO2.209 C fixed (arbitrarily) at 100 model units FLUX_CO2.210 IF(TA(I,1,TCO2_TRACER).GT.0.0) THEN OJP0F404.608 TA(I,1,C14_TRACER) = TA(I,1,C14_TRACER) OJP0F404.609 & + INVADE(I) * TIMESTEP * 100.0/DZ(1) OJP0F404.610 & * 1000.0 / (60.0*60.0*24.0*360.0) OJP0F404.611 & * (c14to12_atm-TA(I,1,C14_TRACER)) / TA(I,1,TCO2_TRACER) OJP0F404.612 ENDIF FLUX_CO2.214 ENDIF ORH1F305.397 TA(I,1,TCO2_TRACER) = TA(I,1,TCO2_TRACER) OJP0F404.613 & + CO2_FLUX(I) * TIMESTEP * 100.0/DZ(1) OJP0F404.614 & * 1000.0/(60.0*60.0*24.0*360.0) OJP0F404.615 ENDDO FLUX_CO2.219 C FLUX_CO2.220 C FLUX_CO2.221 IF (L_OCYCLIC) THEN ORH1F305.398 C Set cyclic boundary conditions FLUX_CO2.223 CO2_FLUX(1) = CO2_FLUX(IMT-1) FLUX_CO2.224 CO2_FLUX(IMT) = CO2_FLUX(2) FLUX_CO2.225 invade(1) = invade(IMT-1) FLUX_CO2.226 invade(IMT) = invade(2) FLUX_CO2.227 evade(1) = evade(IMT-1) FLUX_CO2.228 evade(IMT) = evade(2) FLUX_CO2.229 ENDIF ORH1F305.399 C FLUX_CO2.231 CL Return from FLUXCO2 FLUX_CO2.232 C FLUX_CO2.233 RETURN FLUX_CO2.234 END FLUX_CO2.235 *ENDIF FLUX_CO2.236