Changeset 10345 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/SED/seddta.F90
- Timestamp:
- 2018-11-21T11:25:53+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/SED/seddta.F90
r7646 r10345 4 4 !! Sediment data : read sediment input data from a file 5 5 !!===================================================================== 6 #if defined key_sed 6 7 7 !! * Modules used 8 8 USE sed 9 9 USE sedarr 10 USE phycst, ONLY : rday 10 11 USE iom 12 USE lib_mpp ! distribued memory computing library 11 13 12 14 IMPLICIT NONE … … 17 19 18 20 !! * Module variables 19 REAL(wp), DIMENSION(:), ALLOCATABLE :: smask ! mask for sediments points20 21 REAL(wp) :: rsecday ! number of second per a day 21 REAL(wp) :: conv1 ! [m/day]--->[cm/s]22 22 REAL(wp) :: conv2 ! [kg/m2/month]-->[g/cm2/s] ( 1 month has 30 days ) 23 24 INTEGER :: numbio25 26 #if defined key_sed_off27 INTEGER :: numoce28 #endif29 23 30 24 !! $Id$ … … 54 48 INTEGER :: ji, jj, js, jw, ikt 55 49 56 REAL(wp), DIMENSION( :,:), ALLOCATABLE :: zdta57 REAL(wp), DIMENSION( :) , ALLOCATABLE :: zdtap, zdtag58 50 REAL(wp), DIMENSION(jpoce) :: zdtap, zdtag 51 REAL(wp), DIMENSION(jpi,jpj) :: zwsbio4, zwsbio3, zwscal 52 REAL(wp) :: zf0, zf1, zf2, zkapp, zratio, zdep 59 53 60 54 !---------------------------------------------------------------------- … … 64 58 !------------------------------------------------------------- 65 59 66 WRITE(numsed,*) 67 WRITE(numsed,*) ' sed_dta : Bottom layer fields' 68 WRITE(numsed,*) ' ~~~~~~' 69 WRITE(numsed,*) ' Data from SMS model' 70 WRITE(numsed,*) 60 IF( ln_timing ) CALL timing_start('sed_dta') 61 62 IF (lwp) THEN 63 WRITE(numsed,*) 64 WRITE(numsed,*) ' sed_dta : Bottom layer fields' 65 WRITE(numsed,*) ' ~~~~~~' 66 WRITE(numsed,*) ' Data from SMS model' 67 WRITE(numsed,*) 68 ENDIF 71 69 72 70 73 71 ! open file 74 72 IF( kt == nitsed000 ) THEN 75 WRITE(numsed,*) ' sed_dta : Sediment fields' 76 CALL iom_open ( 'data_bio_bot' , numbio ) 77 #if defined key_sed_off 78 CALL iom_open( 'data_oce_bot', numoce) 79 #endif 73 IF (lwp) WRITE(numsed,*) ' sed_dta : Sediment fields' 74 dtsed = r2dttrc 80 75 rsecday = 60.* 60. * 24. 81 conv1 = 1.0e+2 / rsecday 82 conv2 = 1.0e+3 / ( 1.0e+4 * rsecday * 30. ) 83 84 ! Compute sediment mask 85 ALLOCATE( zdta(jpi,jpj) ) 76 ! conv2 = 1.0e+3 / ( 1.0e+4 * rsecday * 30. ) 77 conv2 = 1.0e+3 / 1.0e+4 78 rdtsed(2:jpksed) = dtsed / ( denssol * por1(2:jpksed) ) 79 ENDIF 80 81 ! Initialization of temporaries arrays 82 zdtap(:) = 0. 83 zdtag(:) = 0. 84 85 ! reading variables 86 IF (lwp) WRITE(numsed,*) 87 IF (lwp) WRITE(numsed,*) ' sed_dta : Bottom layer fields at time kt = ', kt 88 ! reading variables 89 ! 90 ! Sinking speeds of detritus is increased with depth as shown 91 ! by data and from the coagulation theory 92 ! ----------------------------------------------------------- 93 IF (ln_sediment_offline) THEN 86 94 DO jj = 1, jpj 87 95 DO ji = 1, jpi 88 ikt = MAX( INT( sbathy(ji,jj) ) - 1, 1 ) 89 zdta(ji,jj) = tmask(ji,jj,ikt) 90 ENDDO 91 ENDDO 92 ALLOCATE( smask(jpoce) ) 93 smask(:) = 0. 94 CALL pack_arr( jpoce, smask(1:jpoce), zdta(1:jpi,1:jpj), iarroce(1:jpoce) ) 95 ENDIF 96 97 ! Initialization of temporaries arrays 98 ALLOCATE( zdtap(jpoce) ) ; zdtap(:) = 0. 99 ALLOCATE( zdtag(jpoce) ) ; zdtag(:) = 0. 100 101 IF( MOD( kt - 1, nfreq ) == 0 ) THEN 102 ! reading variables 103 WRITE(numsed,*) 104 WRITE(numsed,*) ' sed_dta : Bottom layer fields at time kt = ', kt 105 ! reading variables 106 trc_data(:,:,:) = 0. 107 #if ! defined key_sed_off 108 DO jj = 1,jpj 96 ikt = mbkt(ji,jj) 97 zwsbio4(ji,jj) = wsbio2 / rday 98 zwsbio3(ji,jj) = wsbio / rday 99 zwscal (ji,jj) = wsbio2 / rday 100 END DO 101 END DO 102 ELSE 103 DO jj = 1, jpj 109 104 DO ji = 1, jpi 110 105 ikt = mbkt(ji,jj) 111 IF ( tmask(ji,jj,ikt) == 1 ) THEN 112 trc_data(ji,jj,1) = trn (ji,jj,ikt,jptal) 113 trc_data(ji,jj,2) = trn (ji,jj,ikt,jpdic) 114 trc_data(ji,jj,3) = trn (ji,jj,ikt,jpno3) / 7.6 115 trc_data(ji,jj,4) = trn (ji,jj,ikt,jppo4) / 122. 116 trc_data(ji,jj,5) = trn (ji,jj,ikt,jpoxy) 117 trc_data(ji,jj,6) = trn (ji,jj,ikt,jpsil) 118 trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt) 119 trc_data(ji,jj,8 ) = sinking (ji,jj,ikt) 120 trc_data(ji,jj,9 ) = sinking2(ji,jj,ikt) 121 trc_data(ji,jj,10) = sinkcal (ji,jj,ikt) 122 trc_data(ji,jj,11) = tsn (ji,jj,ikt,jp_tem) 123 trc_data(ji,jj,12) = tsn (ji,jj,ikt,jp_sal) 124 ENDIF 125 ENDDO 106 zdep = e3t_n(ji,jj,ikt) / r2dttrc 107 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) / rday ) 108 zwscal (ji,jj) = MIN( 0.99 * zdep, wscal (ji,jj,ikt) / rday ) 109 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) / rday ) 110 END DO 111 END DO 112 ENDIF 113 114 trc_data(:,:,:) = 0. 115 DO jj = 1,jpj 116 DO ji = 1, jpi 117 ikt = mbkt(ji,jj) 118 IF ( tmask(ji,jj,ikt) == 1 ) THEN 119 trc_data(ji,jj,1) = trb(ji,jj,ikt,jpsil) 120 trc_data(ji,jj,2) = trb(ji,jj,ikt,jpoxy) 121 trc_data(ji,jj,3) = trb(ji,jj,ikt,jpdic) 122 trc_data(ji,jj,4) = trb(ji,jj,ikt,jpno3) / 7.625 123 trc_data(ji,jj,5) = trb(ji,jj,ikt,jppo4) / 122. 124 trc_data(ji,jj,6) = trb(ji,jj,ikt,jptal) 125 trc_data(ji,jj,7) = trb(ji,jj,ikt,jpnh4) / 7.625 126 trc_data(ji,jj,8) = 0.0 127 trc_data(ji,jj,9) = 28.0E-3 128 trc_data(ji,jj,10) = trb(ji,jj,ikt,jpfer) 129 trc_data(ji,jj,11 ) = MIN(trb(ji,jj,ikt,jpgsi), 1E-4) * zwsbio4(ji,jj) * 1E3 130 trc_data(ji,jj,12 ) = MIN(trb(ji,jj,ikt,jppoc), 1E-4) * zwsbio3(ji,jj) * 1E3 131 trc_data(ji,jj,13 ) = MIN(trb(ji,jj,ikt,jpgoc), 1E-4) * zwsbio4(ji,jj) * 1E3 132 trc_data(ji,jj,14) = MIN(trb(ji,jj,ikt,jpcal), 1E-4) * zwscal (ji,jj) * 1E3 133 trc_data(ji,jj,15) = tsn(ji,jj,ikt,jp_tem) 134 trc_data(ji,jj,16) = tsn(ji,jj,ikt,jp_sal) 135 trc_data(ji,jj,17 ) = ( trb(ji,jj,ikt,jpsfe) * zwsbio3(ji,jj) + trb(ji,jj,ikt,jpbfe) & 136 & * zwsbio4(ji,jj) ) * 1E3 / ( trc_data(ji,jj,12 ) + trc_data(ji,jj,13 ) + rtrn ) 137 trc_data(ji,jj,17 ) = MIN(1E-3, trc_data(ji,jj,17 ) ) 138 ENDIF 126 139 ENDDO 127 128 #else 129 CALL iom_get( numbio, jpdom_data, 'ALKBOT' , trc_data(:,:,1 ) ) 130 CALL iom_get( numbio, jpdom_data, 'DICBOT' , trc_data(:,:,2 ) ) 131 CALL iom_get( numbio, jpdom_data, 'NO3BOT' , trc_data(:,:,3 ) ) 132 CALL iom_get( numbio, jpdom_data, 'PO4BOT' , trc_data(:,:,4 ) ) 133 CALL iom_get( numbio, jpdom_data, 'O2BOT' , trc_data(:,:,5 ) ) 134 CALL iom_get( numbio, jpdom_data, 'SIBOT' , trc_data(:,:,6 ) ) 135 CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) ) 136 CALL iom_get( numbio, jpdom_data, 'POCFLXBOT' , trc_data(:,:,8 ) ) 137 CALL iom_get( numbio, jpdom_data, 'GOCFLXBOT' , trc_data(:,:,9 ) ) 138 CALL iom_get( numbio, jpdom_data, 'CACO3FLXBOT', trc_data(:,:,10) ) 139 CALL iom_get( numoce, jpdom_data, 'TBOT' , trc_data(:,:,11) ) 140 CALL iom_get( numoce, jpdom_data, 'SBOT' , trc_data(:,:,12) ) 141 #endif 142 143 ! Pore water initial concentration [mol/l] in k=1 144 !------------------------------------------------- 145 146 ! Alkalinity ( 1 umol = 10-6equivalent ) 147 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwalk), trc_data(1:jpi,1:jpj,1), iarroce(1:jpoce) ) 148 ! DIC 149 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwdic), trc_data(1:jpi,1:jpj,2), iarroce(1:jpoce) ) 150 ! Nitrates (1 umol/l = 10-6 mol/l) 151 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwno3), trc_data(1:jpi,1:jpj,3), iarroce(1:jpoce) ) 152 ! Phosphates (1 umol/l = 10-6 mol/l) 153 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwpo4), trc_data(1:jpi,1:jpj,4), iarroce(1:jpoce) ) 154 ! Oxygen (1 umol/l = 10-6 mol/l) 155 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwoxy), trc_data(1:jpi,1:jpj,5), iarroce(1:jpoce) ) 156 ! Silicic Acid [mol.l-1] 157 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwsil), trc_data(1:jpi,1:jpj,6), iarroce(1:jpoce) ) 158 ! DIC13 (mol/l)obtained from dc13 and DIC (12) and PDB 159 CALL iom_get ( numbio,jpdom_data,'DC13',zdta(:,:) ) 160 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jwc13), zdta(1:jpi,1:jpj), iarroce(1:jpoce) ) 161 pwcp_dta(1:jpoce,jwc13) = pdb * ( pwcp_dta(1:jpoce,jwc13) * 1.0e-3 + 1.0 ) & 162 & * pwcp_dta(1:jpoce,jwdic) 163 164 ! Solid components : 165 !----------------------- 166 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 167 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) ) 168 rainrm_dta(1:jpoce,jsopal) = rainrm_dta(1:jpoce,jsopal) * 1e-4 169 ! Sinking fluxes for POC in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 170 CALL pack_arr ( jpoce, zdtap(1:jpoce), trc_data(1:jpi,1:jpj,8) , iarroce(1:jpoce) ) 171 CALL pack_arr ( jpoce, zdtag(1:jpoce), trc_data(1:jpi,1:jpj,9) , iarroce(1:jpoce) ) 172 rainrm_dta(1:jpoce,jspoc) = ( zdtap(1:jpoce) + zdtag(1:jpoce) ) * 1e-4 173 ! Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 174 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,10), iarroce(1:jpoce) ) 175 rainrm_dta(1:jpoce,jscal) = rainrm_dta(1:jpoce,jscal) * 1e-4 176 ! vector temperature [°C] and salinity 177 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 178 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,12), iarroce(1:jpoce) ) 179 180 ! Clay rain rate in [mol/(cm**2.s)] 181 ! inputs data in [kg.m-2.mois-1] ---> 1e+3/(1e+4*60*24*60*60) [g.cm-2.s-1] 182 ! divided after by molecular weight g.mol-1 183 zdta(:,:) = 0. 184 CALL iom_get( numbio, jpdom_data, 'CLAY', zdta(:,:) ) 185 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsclay) , zdta(1:jpi,1:jpj), iarroce(1:jpoce) ) 186 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * conv2 / mol_wgt(jsclay) 187 188 ENDIF 140 ENDDO 141 142 ! Pore water initial concentration [mol/l] in k=1 143 !------------------------------------------------- 144 DO jw = 1, jpwat 145 CALL pack_arr ( jpoce, pwcp_dta(1:jpoce,jw), trc_data(1:jpi,1:jpj,jw), iarroce(1:jpoce) ) 146 END DO 147 ! Solid components : 148 !----------------------- 149 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 150 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 151 rainrm_dta(1:jpoce,jsopal) = rainrm_dta(1:jpoce,jsopal) * 1e-4 152 ! Sinking fluxes for POC in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 153 CALL pack_arr ( jpoce, zdtap(1:jpoce), trc_data(1:jpi,1:jpj,12) , iarroce(1:jpoce) ) 154 CALL pack_arr ( jpoce, zdtag(1:jpoce), trc_data(1:jpi,1:jpj,13) , iarroce(1:jpoce) ) 155 DO ji = 1, jpoce 156 ! zkapp = MIN( (1.0 - 0.02 ) * reac_poc, 3731.0 * max(100.0, zkbot(ji) )**(-1.011) / ( 365.0 * 24.0 * 3600.0 ) ) 157 ! zkapp = MIN( 0.98 * reac_poc, 100.0 * max(100.0, zkbot(ji) )**(-0.6) / ( 365.0 * 24.0 * 3600.0 ) ) 158 ! zratio = ( ( 1.0 - 0.02 ) * reac_poc + 0.02 * reac_poc * 0. - zkapp) / ( ( 0.02 - 1.0 ) * reac_poc / 100. - 0.02 * reac_poc * 0. + zkapp ) 159 ! zf1 = ( 0.02 * (reac_poc - reac_poc * 0.) + zkapp - reac_poc ) / ( reac_poc / 100. - reac_poc ) 160 ! zf1 = MIN(0.98, MAX(0., zf1 ) ) 161 zf1 = 0.48 162 zf0 = 1.0 - 0.02 - zf1 163 zf2 = 0.02 164 rainrm_dta(ji,jspoc) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf0 165 rainrm_dta(ji,jspos) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf1 166 rainrm_dta(ji,jspor) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf2 167 END DO 168 ! Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 169 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,14), iarroce(1:jpoce) ) 170 rainrm_dta(1:jpoce,jscal) = rainrm_dta(1:jpoce,jscal) * 1e-4 171 ! vector temperature [°C] and salinity 172 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,15), iarroce(1:jpoce) ) 173 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,16), iarroce(1:jpoce) ) 174 175 ! Clay rain rate in [mol/(cm**2.s)] 176 ! inputs data in [kg.m-2.sec-1] ---> 1e+3/(1e+4) [g.cm-2.s-1] 177 ! divided after by molecular weight g.mol-1 178 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsclay), dust(1:jpi,1:jpj), iarroce(1:jpoce) ) 179 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * conv2 / mol_wgt(jsclay) & 180 & + wacc(1:jpoce) * por1(2) * denssol / mol_wgt(jsclay) / ( rsecday * 365.0 ) 181 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * 0.965 182 rainrm_dta(1:jpoce,jsfeo) = rainrm_dta(1:jpoce,jsclay) * mol_wgt(jsclay) / mol_wgt(jsfeo) * 0.035 / 0.965 183 ! rainrm_dta(1:jpoce,jsclay) = 1.0E-4 * conv2 / mol_wgt(jsclay) 184 185 ! Iron monosulphide rain rates. Set to 0 186 rainrm_dta(1:jpoce,jsfes) = 0. 187 188 ! Fe/C ratio in sinking particles that fall to the sediments 189 CALL pack_arr ( jpoce, fecratio(1:jpoce), trc_data(1:jpi,1:jpj,17), iarroce(1:jpoce) ) 190 191 sedligand(:,1) = 1.E-9 189 192 190 193 ! sediment pore water at 1st layer (k=1) 191 194 DO jw = 1, jpwat 192 pwcp(1:jpoce,1,jw) = pwcp_dta(1:jpoce,jw) * smask(1:jpoce)195 pwcp(1:jpoce,1,jw) = pwcp_dta(1:jpoce,jw) 193 196 ENDDO 194 197 195 198 ! rain 196 199 DO js = 1, jpsol 197 rainrm(1:jpoce,js) = rainrm_dta(1:jpoce,js) * smask(1:jpoce)200 rainrm(1:jpoce,js) = rainrm_dta(1:jpoce,js) 198 201 ENDDO 199 202 … … 212 215 dzdep(1:jpoce) = raintg(1:jpoce) * rdtsed(2) 213 216 214 215 DEALLOCATE( zdta ) 216 DEALLOCATE( zdtap ) ; DEALLOCATE( zdtag ) 217 218 IF( kt == nitsedend ) THEN 219 CALL iom_close ( numbio ) 220 #if defined key_sed_off 221 CALL iom_close ( numoce ) 222 #endif 223 ENDIF 217 IF( lk_iomput ) THEN 218 IF( iom_use("sflxclay" ) ) CALL iom_put( "sflxclay", dust(:,:) * conv2 * 1E4 ) 219 IF( iom_use("sflxcal" ) ) CALL iom_put( "sflxcal", trc_data(:,:,13) ) 220 IF( iom_use("sflxbsi" ) ) CALL iom_put( "sflxbsi", trc_data(:,:,10) ) 221 IF( iom_use("sflxpoc" ) ) CALL iom_put( "sflxpoc", trc_data(:,:,11) + trc_data(:,:,12) ) 222 ENDIF 223 224 IF( ln_timing ) CALL timing_stop('sed_dta') 224 225 225 226 END SUBROUTINE sed_dta 226 227 227 #else228 !!======================================================================229 !! MODULE seddta : Dummy module230 !!======================================================================231 !! $Id$232 CONTAINS233 SUBROUTINE sed_dta ( kt )234 INTEGER, INTENT(in) :: kt235 WRITE(*,*) 'sed_stp: You should not have seen this print! error?', kt236 END SUBROUTINE sed_dta237 #endif238 239 228 END MODULE seddta
Note: See TracChangeset
for help on using the changeset viewer.