1 |
C $Header: /u/gcmpack/MITgcm/pkg/cfc/cfc12_surfforcing.F,v 1.3 2006/08/06 01:29:12 jmc Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "GCHEM_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: CFC12_SURFFORCING |
8 |
C !INTERFACE: |
9 |
SUBROUTINE CFC12_SURFFORCING( |
10 |
I pTr_CFC12, AtmosCFC12, |
11 |
O fluxCFC12, |
12 |
I bi, bj, iMin, iMax, jMin, jMax, |
13 |
I myTime, myIter, myThid ) |
14 |
|
15 |
C !DESCRIPTION: |
16 |
C *==========================================================* |
17 |
C | SUBROUTINE CFC12_SURFFORCING |
18 |
C | o Calculate the CFC12 air-sea fluxes |
19 |
C *==========================================================* |
20 |
|
21 |
C !USES: |
22 |
IMPLICIT NONE |
23 |
|
24 |
C == GLobal variables == |
25 |
#include "SIZE.h" |
26 |
#include "EEPARAMS.h" |
27 |
#include "PARAMS.h" |
28 |
#include "GRID.h" |
29 |
#include "DYNVARS.h" |
30 |
#include "CFC.h" |
31 |
|
32 |
C !INPUT/OUTPUT PARAMETERS: |
33 |
C pTr_CFC12 :: ocean CFC12 concentration |
34 |
C AtmosCFC12 :: atmospheric CFC12 field |
35 |
C fluxCFC12 :: air-sea CFC12 fluxes |
36 |
C bi, bj :: current tile indices |
37 |
C iMin,iMax :: computation domain, 1rst index bounds |
38 |
C jMin,jMax :: computation domain, 2nd index bounds |
39 |
C myTime :: current time in simulation |
40 |
C myIter :: current iteration number |
41 |
C myThid :: my Thread Id number |
42 |
_RL pTr_CFC12 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
43 |
_RL AtmosCFC12(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
44 |
_RL fluxCFC12 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
45 |
INTEGER bi, bj |
46 |
INTEGER iMin, iMax, jMin, jMax |
47 |
_RL myTime |
48 |
INTEGER myIter, myThid |
49 |
CEOP |
50 |
|
51 |
#ifdef ALLOW_PTRACERS |
52 |
#ifdef ALLOW_CFC |
53 |
|
54 |
C !LOCAL VARIABLES: |
55 |
C i, j, k - Loop counters |
56 |
INTEGER i,j,k |
57 |
C Solubility relation coefficients |
58 |
_RL SchmidtNocfc12(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
59 |
_RL SolCFC12(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
60 |
c _RL cfc12sat(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
61 |
_RL Kwexch(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
62 |
_RL Csat(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
63 |
_RL ttemp, ttemp2 |
64 |
|
65 |
k=1 |
66 |
|
67 |
C calculate SCHMIDT NO. for O2 |
68 |
DO j=jMin,jMax |
69 |
DO i=iMin,iMax |
70 |
IF ( maskC(i,j,k,bi,bj).NE.zeroRS ) THEN |
71 |
C calculate SCHMIDT NO. for CFC12 |
72 |
SchmidtNocfc12(i,j) = |
73 |
& sca_12_1 |
74 |
& + sca_12_2 * theta(i,j,k,bi,bj) |
75 |
& + sca_12_3 * theta(i,j,k,bi,bj)*theta(i,j,k,bi,bj) |
76 |
& + sca_12_4 * theta(i,j,k,bi,bj)*theta(i,j,k,bi,bj) |
77 |
& *theta(i,j,k,bi,bj) |
78 |
c calculate solubility for CFC12 |
79 |
ttemp=( theta(i,j,k,bi,bj) + 273.16 _d 0)* 0.01 _d 0 |
80 |
ttemp2=( B3_12 * ttemp + B2_12 )*ttemp + B1_12 |
81 |
SolCFC12(i,j) = |
82 |
& EXP ( A1_12 |
83 |
& + A2_12 / ttemp |
84 |
& + A3_12 * log( ttemp ) |
85 |
& + A4_12 * ttemp * ttemp |
86 |
& + Salt(i,j,k,bi,bj)* ttemp2 ) |
87 |
c conversion from mol/(l * atm) to mol/(m^3 * atm) |
88 |
SolCFC12(i,j) = 1000. _d 0 * SolCFC12(i,j) |
89 |
c conversion from mol/(m^3 * atm) to mol/(m3 * pptv) |
90 |
SolCFC12(i,j) = 1. _d -12 * SolCFC12(i,j) |
91 |
C Determine surface flux (Fcfc12) |
92 |
Csat(i,j) = SolCFC12(i,j)*AtmosP(i,j,bi,bj) |
93 |
& *AtmosCFC12(i,j) |
94 |
Kwexch(i,j) = (1. _d 0 - fIce(i,j,bi,bj)) |
95 |
& * pisVel(i,j,bi,bj) |
96 |
& / SQRT(SchmidtNoCFC12(i,j)/660. _d 0) |
97 |
fluxCFC12(i,j) = |
98 |
& Kwexch(i,j)*(Csat(i,j) - pTr_CFC12(i,j,1)) |
99 |
|
100 |
ELSE |
101 |
fluxCFC12(i,j) = 0. _d 0 |
102 |
ENDIF |
103 |
|
104 |
ENDDO |
105 |
ENDDO |
106 |
|
107 |
#endif /* ALLOW_CFC */ |
108 |
#endif /* ALLOW_PTRACERS */ |
109 |
|
110 |
RETURN |
111 |
END |