Go to the documentation of this file.00001
00002 module cfrax
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 use kinds
00015 use sibtype
00016
00017 use sib_const_module, only: &
00018 pdb, &
00019 kieclfbl, &
00020 kiecstom, &
00021 kieclphas, &
00022 kiecdis, &
00023 kiecrbsco, &
00024 tref, &
00025 pref, &
00026 dtt
00027
00028
00029
00030 implicit none
00031
00032
00033
00034 real(kind=dbl_kind) :: co2a_conc
00035 real(kind=dbl_kind) :: co2m_conc
00036 real(kind=dbl_kind) :: rca
00037 real(kind=dbl_kind) :: rcm
00038 real(kind=dbl_kind) :: c13cm
00039
00040 real(kind=dbl_kind) :: c12cm
00041
00042 real(kind=dbl_kind) :: rcresp
00043 real(kind=dbl_kind) :: c13resp
00044
00045 real(kind=dbl_kind) :: c12resp
00046
00047 real(kind=dbl_kind) :: c13ca
00048 real(kind=dbl_kind) :: c12ca
00049
00050
00051 real(kind=dbl_kind) :: d13c_gresp
00052
00053
00054
00055
00056 contains
00057
00058 subroutine cfrax_physloop(sib,i,c3)
00059
00060 use kinds
00061 use sibtype
00062
00063 implicit none
00064
00065
00066
00067 type(sib_t), intent(inout) :: sib
00068
00069
00070
00071
00072 integer(kind=int_kind),intent(in) :: i
00073 real(kind=dbl_kind),intent(in) :: c3
00074
00075
00076
00077
00078
00079
00080
00081
00082 co2a_conc = sib%prog%pco2ap / (sib%prog%ta * 8.314)
00083 co2m_conc = sib%prog%pco2m / (sib%prog%ta * 8.314)
00084
00085
00086
00087
00088
00089
00090 rca = ((sib%prog%d13cca * pdb) / 1000.) + pdb
00091
00092 c13ca = (rca * co2a_conc) / (1. + rca)
00093 c12ca = co2a_conc / (1. + rca)
00094
00095 rcm = ((sib%prog%d13cm * pdb) / 1000.) + pdb
00096
00097 c13cm = (rcm * co2m_conc) / (1. + rcm)
00098 c12cm = co2m_conc / (1. + rcm)
00099
00100
00101
00102
00103
00104
00105
00106 d13c_gresp = ( sib%param%d13c_het * sib%diag%resp_het ) / sib%diag%resp_grnd + &
00107 ( sib%param%d13c_auto(i) * sib%diag%resp_auto ) / sib%diag%resp_grnd
00108
00109 Sib%param%d13cresp = d13c_gresp
00110
00111
00112
00113
00114
00115
00116 rcresp = ((d13c_gresp * pdb) / 1000.) + pdb
00117 c13resp = (rcresp * sib%diag%resp_grnd) / (1. + rcresp)
00118 c12resp = sib%diag%resp_grnd / (1. + rcresp)
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 if(sib%diag%assimn(i) > 0.0) then
00132
00133 if(c3 == 1.0) then
00134
00135 sib%diag%kiecps(i) = ( kieclfbl * sib%prog%pco2ap + &
00136 (kiecstom-kieclfbl) * sib%diag%pco2s(i) + &
00137 (kiecdis + kieclphas - kiecstom) * sib%diag%pco2i(i) + &
00138 (kiecrbsco-kiecdis-kieclphas) * sib%diag%pco2c(i) ) &
00139 / sib%prog%pco2ap
00140
00141 else
00142
00143 sib%diag%kiecps(i) = kiecstom
00144
00145 endif
00146
00147 sib%diag%rcassimn(i) = rca / ((-sib%diag%kiecps(i) / 1000.) + 1.)
00148 sib%diag%d13cassimn(i) = ((sib%diag%rcassimn(i) - pdb) / pdb ) * 1000.
00149
00150 else
00151
00152
00153
00154
00155
00156
00157 sib%diag%rcassimn(i) = ((sib%diag%d13cassimn(i) * pdb) / 1000.0) + pdb
00158 sib%diag%d13cassimn(i) = sib%param%d13c_auto(i)
00159
00160
00161 endif
00162
00163
00164
00165
00166
00167
00168
00169 sib%diag%c13assimn(i) = ( sib%diag%rcassimn(i) * sib%diag%assimn(i))/(1. + sib%diag%rcassimn(i))
00170
00171 sib%diag%c12assimn(i) = sib%diag%assimn(i) / (1.+ sib%diag%rcassimn(i))
00172
00173
00174
00175
00176
00177 sib%param%d13c_psn(i) = sib%param%d13c_psn(i) + &
00178 sib%diag%assimn(i) * dtt * sib%diag%d13cassimn(i)
00179
00180 sib%param%psn_accum(i) = sib%param%psn_accum(i) + &
00181 sib%diag%assimn(i) * dtt
00182
00183 sib%param%d13c_psn(6) = sib%param%d13c_psn(6) + &
00184 sib%diag%assimn(i) * dtt * sib%diag%d13cassimn(i)
00185
00186 sib%param%psn_accum(6) = sib%param%psn_accum(6) + &
00187 sib%diag%assimn(i) * dtt
00188
00189
00190
00191
00192
00193 End subroutine cfrax_physloop
00194
00195
00196
00197
00198
00199
00200
00201 subroutine cfrax_final(sib)
00202
00203 use kinds
00204 use sibtype
00205
00206 implicit none
00207
00208
00209 type(sib_t), intent(inout) :: sib
00210
00211
00212
00213
00214
00215 integer(kind=int_kind) :: i
00216
00217
00218
00219 sib%diag%c13assimn(6) = 0.0
00220 sib%diag%c12assimn(6) = 0.0
00221
00222 phys_loop: do i=1,5
00223
00224
00225 if(sib%param%physfrac(i) == 0.0) cycle phys_loop
00226
00227 sib%diag%c13assimn(6) = sib%diag%c13assimn(6) + &
00228 sib%diag%c13assimn(i) * sib%param%physfrac(i)
00229
00230 sib%diag%c12assimn(6) = sib%diag%c12assimn(6) + &
00231 sib%diag%c12assimn(i) * sib%param%physfrac(i)
00232
00233 enddo phys_loop
00234
00235
00236 sib%diag%rcassimn(6) = sib%diag%c13assimn(6)/ &
00237 sib%diag%c12assimn(6)
00238
00239
00240 sib%diag%d13cassimn(6) = ((sib%diag%rcassimn(6)/ &
00241 pdb) - 1.0_dbl_kind)*1000.0_dbl_kind
00242
00243
00244
00245
00246
00247
00248
00249 c13ca = (c13ca + (dtt / sib%param%z2) * (c13resp - &
00250 sib%diag%c13assimn(6) + (c13cm / sib%diag%ra ))) &
00251 / (1. + (dtt / sib%diag%ra ) / sib%param%z2)
00252
00253 c12ca = (c12ca + (dtt / sib%param%z2) * (c12resp - &
00254 sib%diag%c12assimn(6) + (c12cm / sib%diag%ra ))) &
00255 / (1. + (dtt / sib%diag%ra ) / sib%param%z2)
00256
00257
00258
00259
00260
00261
00262
00263
00264 sib%prog%d13cca = ((c13ca/c12ca - pdb) / pdb) *1000.
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281 sib%diag%flux13c = ( c13ca - c13cm) / sib%diag%ra
00282 sib%diag%flux12c = ( c12ca - c12cm) / sib%diag%ra
00283
00284 sib%diag%flux_turb = sib%diag%flux13c + sib%diag%flux12c
00285
00286 end subroutine cfrax_final
00287
00288
00289
00290 end module cfrax