| 31 |
#include "DARWIN_SIZE.h" |
#include "DARWIN_SIZE.h" |
| 32 |
#include "DARWIN_IO.h" |
#include "DARWIN_IO.h" |
| 33 |
#include "DARWIN_FLUX.h" |
#include "DARWIN_FLUX.h" |
| 34 |
|
#ifdef USE_EXFWIND |
| 35 |
|
#include "EXF_FIELDS.h" |
| 36 |
|
#endif |
| 37 |
|
|
| 38 |
C !INPUT PARAMETERS: =================================================== |
C !INPUT PARAMETERS: =================================================== |
| 39 |
C myThid :: thread number |
C myThid :: thread number |
| 67 |
_RL surfphos(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL surfphos(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 68 |
_RL surfsi(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL surfsi(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 69 |
_RL surfsalt(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL surfsalt(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 70 |
|
_RL surftemp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 71 |
#ifdef ALLOW_OLD_VIRTUALFLUX |
#ifdef ALLOW_OLD_VIRTUALFLUX |
| 72 |
_RL VirtualFlux(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL VirtualFlux(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 73 |
#endif |
#endif |
| 91 |
C determine inorganic carbon chem coefficients |
C determine inorganic carbon chem coefficients |
| 92 |
DO j=jmin,jmax |
DO j=jmin,jmax |
| 93 |
DO i=imin,imax |
DO i=imin,imax |
| 94 |
surfdic(i,j) = max(10. _d 0 , PTR_DIC(i,j))*1e-3 |
c put bounds on tracers so pH solver doesn't blow up |
| 95 |
|
surfdic(i,j) = |
| 96 |
|
& max(400. _d 0 , min(4000. _d 0, PTR_DIC(i,j)))*1e-3 |
| 97 |
& * maskC(i,j,kLev,bi,bj) |
& * maskC(i,j,kLev,bi,bj) |
| 98 |
surfalk(i,j) = max(10. _d 0 , PTR_ALK(i,j))*1e-3 |
surfalk(i,j) = |
| 99 |
|
& max(400. _d 0 , min(4000. _d 0, PTR_ALK(i,j)))*1e-3 |
| 100 |
& * maskC(i,j,kLev,bi,bj) |
& * maskC(i,j,kLev,bi,bj) |
| 101 |
surfphos(i,j) = max(1. _d -10, PTR_PO4(i,j))*1e-3 |
surfphos(i,j) = |
| 102 |
|
& max(1. _d -10, min(10. _d 0, PTR_PO4(i,j)))*1e-3 |
| 103 |
& * maskC(i,j,kLev,bi,bj) |
& * maskC(i,j,kLev,bi,bj) |
| 104 |
surfsi(i,j) = max(1. _d -8, PTR_SIL(i,j))*1e-3 |
surfsi(i,j) = |
| 105 |
|
& max(1. _d -8, min(500. _d 0, PTR_SIL(i,j)))*1e-3 |
| 106 |
& * maskC(i,j,kLev,bi,bj) |
& * maskC(i,j,kLev,bi,bj) |
| 107 |
surfsalt(i,j) = max(4. _d 0, salt(i,j,kLev,bi,bj)) |
surfsalt(i,j) = |
| 108 |
|
& max(4. _d 0, min(50. _d 0, salt(i,j,kLev,bi,bj))) |
| 109 |
|
surftemp(i,j) = |
| 110 |
|
& max(-4. _d 0, min(39. _d 0, theta(i,j,kLev,bi,bj))) |
| 111 |
ENDDO |
ENDDO |
| 112 |
ENDDO |
ENDDO |
| 113 |
|
|
| 114 |
CALL CARBON_COEFFS( |
CALL CARBON_COEFFS( |
| 115 |
I theta,salt, |
I surftemp,surfsalt, |
| 116 |
I bi,bj,iMin,iMax,jMin,jMax,myThid) |
I bi,bj,iMin,iMax,jMin,jMax,myThid) |
| 117 |
C==================================================================== |
C==================================================================== |
| 118 |
|
|
| 131 |
|
|
| 132 |
C Pre-compute part of exchange coefficient: pisvel*(1-fice) |
C Pre-compute part of exchange coefficient: pisvel*(1-fice) |
| 133 |
C Schmidt number is accounted for later |
C Schmidt number is accounted for later |
| 134 |
|
#ifdef USE_EXFWIND |
| 135 |
|
pisvel(i,j)=0.337 _d 0 *wspeed(i,j,bi,bj)**2/3.6 _d 5 |
| 136 |
|
#else |
| 137 |
pisvel(i,j)=0.337 _d 0 *wind(i,j,bi,bj)**2/3.6 _d 5 |
pisvel(i,j)=0.337 _d 0 *wind(i,j,bi,bj)**2/3.6 _d 5 |
| 138 |
|
#endif |
| 139 |
Kwexch_Pre(i,j,bi,bj) = pisvel(i,j) |
Kwexch_Pre(i,j,bi,bj) = pisvel(i,j) |
| 140 |
& * (1. _d 0 - FIce(i,j,bi,bj)) |
& * (1. _d 0 - FIce(i,j,bi,bj)) |
| 141 |
|
|
| 150 |
|
|
| 151 |
IF ( maskC(i,j,kLev,bi,bj).NE.0. _d 0 ) THEN |
IF ( maskC(i,j,kLev,bi,bj).NE.0. _d 0 ) THEN |
| 152 |
CALL CALC_PCO2_APPROX( |
CALL CALC_PCO2_APPROX( |
| 153 |
I theta(i,j,kLev,bi,bj),surfsalt(i,j), |
I surftemp(i,j),surfsalt(i,j), |
| 154 |
I surfdic(i,j), surfphos(i,j), |
I surfdic(i,j), surfphos(i,j), |
| 155 |
I surfsi(i,j),surfalk(i,j), |
I surfsi(i,j),surfalk(i,j), |
| 156 |
I ak1(i,j,bi,bj),ak2(i,j,bi,bj), |
I ak1(i,j,bi,bj),ak2(i,j,bi,bj), |
| 176 |
C calculate SCHMIDT NO. for CO2 |
C calculate SCHMIDT NO. for CO2 |
| 177 |
SchmidtNoDIC(i,j) = |
SchmidtNoDIC(i,j) = |
| 178 |
& sca1 |
& sca1 |
| 179 |
& + sca2 * theta(i,j,kLev,bi,bj) |
& + sca2 * surftemp(i,j) |
| 180 |
& + sca3 * theta(i,j,kLev,bi,bj)*theta(i,j,kLev,bi,bj) |
& + sca3 * surftemp(i,j)*surftemp(i,j) |
| 181 |
& + sca4 * theta(i,j,kLev,bi,bj)*theta(i,j,kLev,bi,bj) |
& + sca4 * surftemp(i,j)*surftemp(i,j) |
| 182 |
& *theta(i,j,kLev,bi,bj) |
& *surftemp(i,j) |
| 183 |
|
c put positive bound on SCHMIT number (will go negative for temp>40) |
| 184 |
|
SchmidtNoDIC(i,j) = max(1. _d -2, SchmidtNoDIC(i,j)) |
| 185 |
|
|
| 186 |
C Determine surface flux (FDIC) |
C Determine surface flux (FDIC) |
| 187 |
C first correct pCO2at for surface atmos pressure |
C first correct pCO2at for surface atmos pressure |
| 189 |
& AtmosP(i,j,bi,bj)*AtmospCO2(i,j,bi,bj) |
& AtmosP(i,j,bi,bj)*AtmospCO2(i,j,bi,bj) |
| 190 |
|
|
| 191 |
C then account for Schmidt number |
C then account for Schmidt number |
| 192 |
Kwexch(i,j) = Kwexch_Pre(i,j,bi,bj) |
Kwexch(i,j) = Kwexch_Pre(i,j,bi,bj) |
| 193 |
& / sqrt(SchmidtNoDIC(i,j)/660.0 _d 0) |
& / sqrt(SchmidtNoDIC(i,j)/660.0 _d 0) |
| 194 |
|
|
|
|
|
| 195 |
#ifdef WATERVAP_BUG |
#ifdef WATERVAP_BUG |
| 196 |
C Calculate flux in terms of DIC units using K0, solubility |
C Calculate flux in terms of DIC units using K0, solubility |
| 197 |
C Flux = Vp * ([CO2sat] - [CO2]) |
C Flux = Vp * ([CO2sat] - [CO2]) |