Changeset 2715 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- Location:
- trunk/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zbio.F90
r2528 r2715 32 32 33 33 PUBLIC p4z_bio 34 35 !! * Shared module variables36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !:37 xnegtr ! Array used to indicate negative tracer values38 39 34 40 35 !!* Substitution -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zche.F90
r2528 r2715 4 4 !! TOP : PISCES Sea water chemistry computed following OCMIP protocol 5 5 !!====================================================================== 6 !! History : -! 1988 (E. Maier-Reimer) Original code6 !! History : OPA ! 1988 (E. Maier-Reimer) Original code 7 7 !! - ! 1998 (O. Aumont) addition 8 8 !! - ! 1999 (C. Le Quere) modification 9 !! 9 !! NEMO 1.0 ! 2004 (O. Aumont) modification 10 10 !! - ! 2006 (R. Gangsto) modification 11 11 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 … … 15 15 !! 'key_pisces' PISCES bio-model 16 16 !!---------------------------------------------------------------------- 17 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trc ! 21 USE sms_pisces ! 17 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trc ! 21 USE sms_pisces ! 22 USE lib_mpp ! MPP library 22 23 23 24 IMPLICIT NONE 24 25 PRIVATE 25 26 26 PUBLIC p4z_che 27 28 !! * Shared module variables 29 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 30 sio3eq, fekeq !: chemistry of Fe and Si 31 32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2) :: & !: 33 chemc !: Solubilities of O2 and CO2 34 35 !! * Module variables 36 37 REAL(wp) :: & 38 salchl = 1./1.80655 ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 39 40 REAL(wp) :: & ! coeff. for apparent solubility equilibrium 41 akcc1 = -171.9065 , & ! Millero et al. 1995 from Mucci 1983 42 akcc2 = -0.077993 , & 43 akcc3 = 2839.319 , & 44 akcc4 = 71.595 , & 45 akcc5 = -0.77712 , & 46 akcc6 = 0.0028426 , & 47 akcc7 = 178.34 , & 48 akcc8 = -0.07711 , & 49 akcc9 = 0.0041249 50 51 REAL(wp) :: & ! universal gas constants 52 rgas = 83.143, & 53 oxyco = 1./22.4144 54 55 REAL(wp) :: & ! borat constants 56 bor1 = 0.00023, & 57 bor2 = 1./10.82 58 59 REAL(wp) :: & ! 60 ca0 = -162.8301 , & 61 ca1 = 218.2968 , & 62 ca2 = 90.9241 , & 63 ca3 = -1.47696 , & 64 ca4 = 0.025695 , & 65 ca5 = -0.025225 , & 66 ca6 = 0.0049867 67 68 REAL(wp) :: & ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 69 c10 = -3670.7 , & 70 c11 = 62.008 , & 71 c12 = -9.7944 , & 72 c13 = 0.0118 , & 73 c14 = -0.000116 27 PUBLIC p4z_che ! 28 PUBLIC p4z_che_alloc ! 29 30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sio3eq ! chemistry of Si 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fekeq ! chemistry of Fe 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: chemc ! Solubilities of O2 and CO2 33 34 REAL(wp) :: salchl = 1._wp / 1.80655_wp ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 35 36 REAL(wp) :: akcc1 = -171.9065_wp ! coeff. for apparent solubility equilibrium 37 REAL(wp) :: akcc2 = -0.077993_wp ! Millero et al. 1995 from Mucci 1983 38 REAL(wp) :: akcc3 = 2839.319_wp ! 39 REAL(wp) :: akcc4 = 71.595_wp ! 40 REAL(wp) :: akcc5 = -0.77712_wp ! 41 REAL(wp) :: akcc6 = 0.0028426_wp ! 42 REAL(wp) :: akcc7 = 178.34_wp ! 43 REAL(wp) :: akcc8 = -0.07711_wp ! 44 REAL(wp) :: akcc9 = 0.0041249_wp ! 45 46 REAL(wp) :: rgas = 83.143_wp ! universal gas constants 47 REAL(wp) :: oxyco = 1._wp / 22.4144_wp 48 49 REAL(wp) :: bor1 = 0.00023_wp ! borat constants 50 REAL(wp) :: bor2 = 1._wp / 10.82_wp 51 52 REAL(wp) :: ca0 = -162.8301_wp 53 REAL(wp) :: ca1 = 218.2968_wp 54 REAL(wp) :: ca2 = 90.9241_wp 55 REAL(wp) :: ca3 = -1.47696_wp 56 REAL(wp) :: ca4 = 0.025695_wp 57 REAL(wp) :: ca5 = -0.025225_wp 58 REAL(wp) :: ca6 = 0.0049867_wp 59 60 REAL(wp) :: c10 = -3670.7_wp ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 61 REAL(wp) :: c11 = 62.008_wp 62 REAL(wp) :: c12 = -9.7944_wp 63 REAL(wp) :: c13 = 0.0118_wp 64 REAL(wp) :: c14 = -0.000116_wp 74 65 75 66 REAL(wp) :: & ! coeff. for 2. dissoc. of carbonic acid (Millero, 1995) … … 133 124 ox2 = 23.8439 , & 134 125 ox3 = -0.034892 , & 135 ox4 = 0.015568, &126 ox4 = 0.015568 , & 136 127 ox5 = -0.0019387 137 128 … … 151 142 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 152 143 !! $Id$ 153 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 154 !!---------------------------------------------------------------------- 155 144 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 145 !!---------------------------------------------------------------------- 156 146 CONTAINS 157 147 … … 179 169 !CDIR NOVERRCHK 180 170 DO ji = 1, jpi 181 182 171 ! ! SET ABSOLUTE TEMPERATURE 183 172 ztkel = tsn(ji,jj,1,jp_tem) + 273.16 … … 324 313 END SUBROUTINE p4z_che 325 314 315 316 INTEGER FUNCTION p4z_che_alloc() 317 !!---------------------------------------------------------------------- 318 !! *** ROUTINE p4z_che_alloc *** 319 !!---------------------------------------------------------------------- 320 ALLOCATE( sio3eq(jpi,jpj,jpk) , fekeq(jpi,jpj,jpk) , chemc (jpi,jpj,2), STAT=p4z_che_alloc ) 321 ! 322 IF( p4z_che_alloc /= 0 ) CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 323 ! 324 END FUNCTION p4z_che_alloc 325 326 326 #else 327 327 !!====================================================================== … … 330 330 CONTAINS 331 331 SUBROUTINE p4z_che( kt ) ! Empty routine 332 INTEGER, INTENT( in) :: kt332 INTEGER, INTENT(in) :: kt 333 333 WRITE(*,*) 'p4z_che: You should not have seen this print! error?', kt 334 334 END SUBROUTINE p4z_che -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zflx.F90
r2528 r2715 27 27 USE sbc_oce , ONLY : atm_co2 28 28 #endif 29 USE lib_mpp30 USE lib_fortran31 29 32 30 IMPLICIT NONE … … 35 33 PUBLIC p4z_flx 36 34 PUBLIC p4z_flx_init 37 38 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: oce_co2 !: ocean carbon flux 39 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: satmco2 !: atmospheric pco2 40 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 41 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 42 REAL(wp) :: area !: ocean surface 43 REAL(wp) :: atcco2 = 278. !: pre-industrial atmospheric [co2] (ppm) 44 REAL(wp) :: atcox = 0.20946 !: 45 REAL(wp) :: xconv = 0.01/3600 !: coefficients for conversion 35 PUBLIC p4z_flx_alloc 36 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oce_co2 !: ocean carbon flux 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco2 39 40 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 41 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 42 REAL(wp) :: area !: ocean surface 43 REAL(wp) :: atcco2 = 278._wp !: pre-industrial atmospheric [co2] (ppm) 44 REAL(wp) :: atcox = 0.20946_wp !: 45 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 46 46 47 47 !!* Substitution … … 50 50 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 51 51 !! $Id$ 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 !!---------------------------------------------------------------------- 54 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 !!---------------------------------------------------------------------- 55 54 CONTAINS 56 55 … … 63 62 !! ** Method : - ??? 64 63 !!--------------------------------------------------------------------- 65 INTEGER, INTENT(in) :: kt 64 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 65 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_1 , zkgo2 => wrk_2d_2 , zh2co3 => wrk_2d_3 66 USE wrk_nemo, ONLY: zoflx => wrk_2d_4 , zkg => wrk_2d_5 67 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_6 , zdpo2 => wrk_2d_7 68 ! 69 INTEGER, INTENT(in) :: kt ! 70 ! 66 71 INTEGER :: ji, jj, jrorr 67 72 REAL(wp) :: ztc, ztc2, ztc3, zws, zkgwan 68 73 REAL(wp) :: zfld, zflu, zfld16, zflu16, zfact 69 74 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 70 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co371 #if defined key_diatrc && defined key_iomput72 REAL(wp), DIMENSION(jpi,jpj) :: zoflx, zkg, zdpco2, zdpo273 #endif74 75 CHARACTER (len=25) :: charout 75 76 76 !!--------------------------------------------------------------------- 77 78 IF( wrk_in_use(2, 1,2,3,4,5,6,7) ) THEN 79 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ; RETURN 80 ENDIF 77 81 78 82 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN … … 149 153 zfld = satmco2(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 150 154 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 151 oce_co2(ji,jj) = ( zfld - zflu ) * rfact & 152 & * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 155 oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 153 156 ! compute the trend 154 157 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) … … 162 165 ! Save diagnostics 163 166 # if ! defined key_iomput 164 zfact = 1. / ( e1t(ji,jj) * e2t(ji,jj)) / rfact167 zfact = 1. / e1e2t(ji,jj) / rfact 165 168 trc2d(ji,jj,jp_pcs0_2d ) = oce_co2(ji,jj) * zfact 166 169 trc2d(ji,jj,jp_pcs0_2d + 1) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) … … 180 183 t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) ) ! Cumulative Total Flux of Carbon 181 184 IF( kt == nitend ) THEN 182 t_atm_co2_flx = glob_sum( satmco2(:,:) * e1 t(:,:) *e2t(:,:) ) ! Total atmospheric pCO2185 t_atm_co2_flx = glob_sum( satmco2(:,:) * e1e2t(:,:) ) ! Total atmospheric pCO2 183 186 ! 184 187 t_oce_co2_flx = (-1.) * t_oce_co2_flx * 12. / 1.e15 ! Conversion in PgC ; negative for out of the ocean … … 203 206 204 207 # if defined key_diatrc && defined key_iomput 205 CALL iom_put( "Cflx" , oce_co2(:,:) / ( e1t(:,:) * e2t(:,:) ) / rfact )208 CALL iom_put( "Cflx" , oce_co2(:,:) / e1e2t(:,:) / rfact ) 206 209 CALL iom_put( "Oflx" , zoflx ) 207 210 CALL iom_put( "Kg" , zkg ) … … 209 212 CALL iom_put( "Dpo2" , zdpo2 ) 210 213 #endif 211 214 ! 215 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays') 216 ! 212 217 END SUBROUTINE p4z_flx 213 218 219 214 220 SUBROUTINE p4z_flx_init 215 216 221 !!---------------------------------------------------------------------- 217 222 !! *** ROUTINE p4z_flx_init *** … … 222 227 !! called at the first timestep (nit000) 223 228 !! ** input : Namelist nampisext 224 !! 225 !!---------------------------------------------------------------------- 226 229 !!---------------------------------------------------------------------- 227 230 NAMELIST/nampisext/ atcco2 228 231 !!---------------------------------------------------------------------- 232 ! 229 233 REWIND( numnat ) ! read numnat 230 234 READ ( numnat, nampisext ) 231 235 ! 232 236 IF(lwp) THEN ! control print 233 237 WRITE(numout,*) ' ' … … 236 240 WRITE(numout,*) ' Atmospheric pCO2 atcco2 =', atcco2 237 241 ENDIF 238 239 ! interior global domain surface 240 area = glob_sum( e1t(:,:) * e2t(:,:) ) 241 242 ! Initialization of Flux of Carbon 243 oce_co2(:,:) = 0._wp 242 ! 243 area = glob_sum( e1e2t(:,:) ) ! interior global domain surface 244 ! 245 oce_co2(:,:) = 0._wp ! Initialization of Flux of Carbon 244 246 t_atm_co2_flx = 0._wp 245 ! Initialisation of atmospheric pco2246 satmco2(:,:) = atcco2 247 ! 248 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 247 249 t_oce_co2_flx = 0._wp 248 250 ! 249 251 END SUBROUTINE p4z_flx_init 252 253 254 INTEGER FUNCTION p4z_flx_alloc() 255 !!---------------------------------------------------------------------- 256 !! *** ROUTINE p4z_flx_alloc *** 257 !!---------------------------------------------------------------------- 258 ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), STAT=p4z_flx_alloc ) 259 ! 260 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 261 ! 262 END FUNCTION p4z_flx_alloc 250 263 251 264 #else -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zint.F90
r2528 r2715 21 21 22 22 PUBLIC p4z_int 23 PUBLIC p4z_int_alloc 23 24 24 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 25 tgfunc, & !: Temp. dependancy of various biological rates 26 tgfunc2 !: Temp. dependancy of mesozooplankton rates 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc !: Temp. dependancy of various biological rates 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 27 27 28 !! * Module variables 29 REAL(wp) :: & 30 xksilim = 16.5E-6 ! Half-saturation constant for the computation of the Si half-saturation constant 31 28 REAL(wp) :: xksilim = 16.5e-6_wp ! Half-saturation constant for the Si half-saturation constant computation 32 29 33 30 !!---------------------------------------------------------------------- 34 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 35 32 !! $Id$ 36 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 37 34 !!---------------------------------------------------------------------- 38 39 35 CONTAINS 40 36 … … 47 43 !! ** Method : - ??? 48 44 !!--------------------------------------------------------------------- 49 !!50 45 INTEGER :: ji, jj 51 46 REAL(wp) :: zdum … … 54 49 ! Computation of phyto and zoo metabolic rate 55 50 ! ------------------------------------------- 56 57 51 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 58 52 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) … … 61 55 ! constant for silica uptake 62 56 ! --------------------------------------------------- 63 64 57 DO ji = 1, jpi 65 58 DO jj = 1, jpj … … 68 61 END DO 69 62 END DO 70 63 ! 71 64 IF( nday_year == nyear_len(1) ) THEN 72 65 xksi = xksimax 73 xksimax = 0. e066 xksimax = 0._wp 74 67 ENDIF 75 68 ! 76 69 END SUBROUTINE p4z_int 70 71 72 INTEGER FUNCTION p4z_int_alloc() 73 !!---------------------------------------------------------------------- 74 !! *** ROUTINE p4z_int_alloc *** 75 !!---------------------------------------------------------------------- 76 ALLOCATE( tgfunc(jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=p4z_int_alloc ) 77 ! 78 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.') 79 ! 80 END FUNCTION p4z_int_alloc 77 81 78 82 #else -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zlys.F90
r2528 r2715 31 31 32 32 !! * Shared module variables 33 REAL(wp), PUBLIC :: & 34 kdca = 0.327e3_wp , & !: 35 nca = 1.0_wp !: 33 REAL(wp), PUBLIC :: kdca = 0.327e3_wp !: diss. rate constant calcite 34 REAL(wp), PUBLIC :: nca = 1.0_wp !: order of reaction for calcite dissolution 36 35 37 36 !! * Module variables 38 REAL(wp) :: & 39 calcon = 1.03E-2 ! mean calcite concentration [Ca2+] in sea water [mole/kg solution] 40 41 INTEGER :: & 42 rmtss !: number of seconds per month 37 REAL(wp) :: calcon = 1.03E-2 !: mean calcite concentration [Ca2+] in sea water [mole/kg solution] 38 39 INTEGER :: rmtss !: number of seconds per month 43 40 44 41 !!---------------------------------------------------------------------- … … 60 57 !! ** Method : - ??? 61 58 !!--------------------------------------------------------------------- 59 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 60 USE wrk_nemo, ONLY: zco3 => wrk_3d_2, zcaldiss => wrk_3d_3 61 ! 62 62 INTEGER, INTENT(in) :: kt ! ocean time step 63 63 INTEGER :: ji, jj, jk, jn … … 65 65 REAL(wp) :: zdispot, zfact, zalka 66 66 REAL(wp) :: zomegaca, zexcess, zexcess0 67 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zco368 67 #if defined key_diatrc && defined key_iomput 69 68 REAL(wp) :: zrfact2 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcaldiss71 69 #endif 72 70 CHARACTER (len=25) :: charout 73 71 !!--------------------------------------------------------------------- 74 72 73 IF( wrk_in_use(3, 2,3) ) THEN 74 CALL ctl_stop('p4z_lys: requested workspace arrays unavailable') ; RETURN 75 END IF 76 75 77 zco3(:,:,:) = 0. 76 77 78 # if defined key_diatrc && defined key_iomput 78 79 zcaldiss(:,:,:) = 0. … … 186 187 ENDIF 187 188 189 IF( wrk_not_released(3, 2,3) ) CALL ctl_stop('p4z_lys: failed to release workspace arrays') 190 ! 188 191 END SUBROUTINE p4z_lys 189 192 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zopt.F90
r2528 r2715 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.2 ! 2009-04 (C. Ethe, G. Madec) optimisa ion8 !! 3.2 ! 2009-04 (C. Ethe, G. Madec) optimisation 9 9 !!---------------------------------------------------------------------- 10 10 #if defined key_pisces … … 24 24 PUBLIC p4z_opt ! called in p4zbio.F90 module 25 25 PUBLIC p4z_opt_init ! called in trcsms_pisces.F90 module 26 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: etot, enano, ediat !: PAR for phyto, nano and diat 28 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: emoy !: averaged PAR in the mixed layer 29 30 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) 31 REAL(wp) :: parlux = 0.43 / 3.e0 32 33 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption 26 PUBLIC p4z_opt_alloc 27 28 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot, enano, ediat !: PAR for phyto, nano and diat 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 30 31 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) 32 REAL(wp) :: parlux = 0.43_wp / 3._wp 33 34 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption 34 35 35 36 !!* Substitution … … 38 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 39 40 !! $Id$ 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 42 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 43 43 CONTAINS 44 44 … … 52 52 !! ** Method : - ??? 53 53 !!--------------------------------------------------------------------- 54 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 54 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 55 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1 , zetmp => wrk_2d_2 56 USE wrk_nemo, ONLY: zekg => wrk_3d_2 , zekr => wrk_3d_3 , zekb => wrk_3d_4 57 USE wrk_nemo, ONLY: ze0 => wrk_3d_5 , ze1 => wrk_3d_6 58 USE wrk_nemo, ONLY: ze2 => wrk_3d_7 , ze3 => wrk_3d_8 59 ! 60 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 61 ! 55 62 INTEGER :: ji, jj, jk 56 63 INTEGER :: irgb 57 64 REAL(wp) :: zchl, zxsi0r 58 65 REAL(wp) :: zc0 , zc1 , zc2, zc3 59 REAL(wp), DIMENSION(jpi,jpj) :: zdepmoy, zetmp60 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zekg, zekr, zekb61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze1 , ze2 , ze3, ze062 66 !!--------------------------------------------------------------------- 63 67 68 IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 2,3,4,5,6,7,8) ) THEN 69 CALL ctl_stop('p4z_opt: requested workspace arrays unavailable') ; RETURN 70 ENDIF 64 71 65 72 ! Initialisation of variables used to compute PAR 66 73 ! ----------------------------------------------- 67 ze1 (:,:,jpk) = 0. e068 ze2 (:,:,jpk) = 0. e069 ze3 (:,:,jpk) = 0. e074 ze1 (:,:,jpk) = 0._wp 75 ze2 (:,:,jpk) = 0._wp 76 ze3 (:,:,jpk) = 0._wp 70 77 71 78 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) … … 203 210 !CDIR NOVERRCHK 204 211 DO ji = 1, jpi 205 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) & 206 & emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 212 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 207 213 END DO 208 214 END DO … … 223 229 #endif 224 230 ! 231 IF( wrk_not_released(2, 1,2) .OR. & 232 wrk_not_released(3, 2,3,4,5,6,7,8) ) CALL ctl_stop('p4z_opt: failed to release workspace arrays') 233 ! 225 234 END SUBROUTINE p4z_opt 235 226 236 227 237 SUBROUTINE p4z_opt_init … … 230 240 !! 231 241 !! ** Purpose : Initialization of tabulated attenuation coef 232 !! 233 !! 234 !!---------------------------------------------------------------------- 235 242 !!---------------------------------------------------------------------- 243 ! 236 244 CALL trc_oce_rgb( xkrgb ) ! tabulated attenuation coefficients 237 !! CALL trc_oce_rgb_read( xkrgb ) ! tabulated attenuation coefficients238 245 nksrp = trc_oce_ext_lev( r_si2, 0.33e2 ) ! max level of light extinction (Blue Chl=0.01) 246 ! 239 247 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 240 248 ! 241 etot (:,:,:) = 0. e0242 enano(:,:,:) = 0. e0243 ediat(:,:,:) = 0. e0244 IF( ln_qsr_bio ) etot3(:,:,:) = 0. e0249 etot (:,:,:) = 0._wp 250 enano(:,:,:) = 0._wp 251 ediat(:,:,:) = 0._wp 252 IF( ln_qsr_bio ) etot3(:,:,:) = 0._wp 245 253 ! 246 254 END SUBROUTINE p4z_opt_init 255 256 257 INTEGER FUNCTION p4z_opt_alloc() 258 !!---------------------------------------------------------------------- 259 !! *** ROUTINE p4z_opt_alloc *** 260 !!---------------------------------------------------------------------- 261 ALLOCATE( etot (jpi,jpj,jpk) , enano(jpi,jpj,jpk) , & 262 & ediat(jpi,jpj,jpk) , emoy (jpi,jpj,jpk) , STAT=p4z_opt_alloc ) 263 ! 264 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 265 ! 266 END FUNCTION p4z_opt_alloc 267 247 268 #else 248 269 !!---------------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90
r2528 r2715 22 22 USE iom 23 23 24 USE lib_mpp25 USE lib_fortran26 27 24 IMPLICIT NONE 28 25 PRIVATE … … 30 27 PUBLIC p4z_prod ! called in p4zbio.F90 31 28 PUBLIC p4z_prod_init ! called in trcsms_pisces.F90 32 33 !! * Shared module variables 29 PUBLIC p4z_prod_alloc 30 34 31 REAL(wp), PUBLIC :: & 35 32 pislope = 3.0_wp , & !: … … 43 40 grosip = 0.151_wp 44 41 45 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: prmax42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: 46 43 47 44 REAL(wp) :: & … … 56 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 57 54 !! $Id$ 58 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 59 !!---------------------------------------------------------------------- 60 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 !!---------------------------------------------------------------------- 61 57 CONTAINS 62 58 … … 70 66 !! ** Method : - ??? 71 67 !!--------------------------------------------------------------------- 68 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 69 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2 , zstrn => wrk_2d_3 70 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2 => wrk_3d_3 71 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5 , zysopt => wrk_3d_6 72 USE wrk_nemo, ONLY: zprorca => wrk_3d_7 , zprorcad => wrk_3d_8 73 USE wrk_nemo, ONLY: zprofed => wrk_3d_9 , zprofen => wrk_3d_10 74 USE wrk_nemo, ONLY: zprochln => wrk_3d_11 , zprochld => wrk_3d_12 75 USE wrk_nemo, ONLY: zpronew => wrk_3d_13 , zpronewd => wrk_3d_14 76 ! 72 77 INTEGER, INTENT(in) :: kt, jnt 78 ! 73 79 INTEGER :: ji, jj, jk 74 80 REAL(wp) :: zsilfac, zfact … … 81 87 REAL(wp) :: zrfact2 82 88 #endif 83 REAL(wp), DIMENSION(jpi,jpj) :: zmixnano , zmixdiat, zstrn84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopead , zpislopead285 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia , zprbio, zysopt86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorca , zprorcad, zprofed87 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprofen , zprochln, zprochld88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronew , zpronewd89 89 CHARACTER (len=25) :: charout 90 90 !!--------------------------------------------------------------------- 91 91 92 zprorca (:,:,:) = 0.0 93 zprorcad(:,:,:) = 0.0 94 zprofed(:,:,:) = 0.0 95 zprofen(:,:,:) = 0.0 96 zprochln(:,:,:) = 0.0 97 zprochld(:,:,:) = 0.0 98 zpronew (:,:,:) = 0.0 99 zpronewd(:,:,:) = 0.0 100 zprdia (:,:,:) = 0.0 101 zprbio (:,:,:) = 0.0 102 zysopt (:,:,:) = 0.0 92 IF( wrk_in_use(2, 1,2,3) .OR. & 93 wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) THEN 94 CALL ctl_stop('p4z_prod: requested workspace arrays unavailable') ; RETURN 95 ENDIF 96 97 zprorca (:,:,:) = 0._wp 98 zprorcad(:,:,:) = 0._wp 99 zprofed (:,:,:) = 0._wp 100 zprofen (:,:,:) = 0._wp 101 zprochln(:,:,:) = 0._wp 102 zprochld(:,:,:) = 0._wp 103 zpronew (:,:,:) = 0._wp 104 zpronewd(:,:,:) = 0._wp 105 zprdia (:,:,:) = 0._wp 106 zprbio (:,:,:) = 0._wp 107 zysopt (:,:,:) = 0._wp 103 108 104 109 ! Computation of the optimal production 105 106 110 # if defined key_degrad 107 111 prmax(:,:,:) = rday1 * tgfunc(:,:,:) * facvol(:,:,:) … … 111 115 112 116 ! compute the day length depending on latitude and the day 113 zrum = FLOAT( nday_year - 80 ) / REAL(nyear_len(1), wp)114 zcodel = ASIN( SIN( zrum * rpi * 2. ) * SIN( rad * 23.5) )117 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 118 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 115 119 116 120 ! day length in hours 117 zstrn(:,:) = 0. 121 zstrn(:,:) = 0._wp 118 122 DO jj = 1, jpj 119 123 DO ji = 1, jpi … … 187 191 zsilfac = MIN( 6.4,zsilfac * zsilfac2) 188 192 zysopt(ji,jj,jk) = grosip * zlim1 * zsilfac 189 190 193 ENDIF 191 194 END DO … … 357 360 #endif 358 361 359 362 IF(ln_ctl) THEN ! print mean trends (used for debugging) 360 363 WRITE(charout, FMT="('prod')") 361 364 CALL prt_ctl_trc_info(charout) 362 365 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 363 ENDIF 364 366 ENDIF 367 368 IF( wrk_not_released(2, 1,2,3) .OR. & 369 wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) & 370 CALL ctl_stop('p4z_prod: failed to release workspace arrays') 371 ! 365 372 END SUBROUTINE p4z_prod 366 373 374 367 375 SUBROUTINE p4z_prod_init 368 369 376 !!---------------------------------------------------------------------- 370 377 !! *** ROUTINE p4z_prod_init *** … … 376 383 !! 377 384 !! ** input : Namelist nampisprod 378 !!379 385 !!---------------------------------------------------------------------- 380 381 386 NAMELIST/nampisprod/ pislope, pislope2, excret, excret2, chlcnm, chlcdm, & 382 387 & fecnm, fecdm, grosip 388 !!---------------------------------------------------------------------- 383 389 384 390 REWIND( numnat ) ! read numnat … … 399 405 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 400 406 ENDIF 401 407 ! 402 408 rday1 = 0.6 / rday 403 409 texcret = 1.0 - excret 404 410 texcret2 = 1.0 - excret2 405 411 tpp = 0. 406 412 ! 407 413 END SUBROUTINE p4z_prod_init 408 414 409 415 416 INTEGER FUNCTION p4z_prod_alloc() 417 !!---------------------------------------------------------------------- 418 !! *** ROUTINE p4z_prod_alloc *** 419 !!---------------------------------------------------------------------- 420 ALLOCATE( prmax(jpi,jpj,jpk), STAT=p4z_prod_alloc ) 421 ! 422 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') 423 ! 424 END FUNCTION p4z_prod_alloc 410 425 411 426 #else -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zrem.F90
r2528 r2715 29 29 PUBLIC p4z_rem ! called in p4zbio.F90 30 30 PUBLIC p4z_rem_init ! called in trcsms_pisces.F90 31 32 !! * Shared module variables 31 PUBLIC p4z_rem_alloc 32 33 33 REAL(wp), PUBLIC :: & 34 34 xremik = 0.3_wp , & !: … … 39 39 oxymin = 1.e-6_wp !: 40 40 41 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 42 & denitr !: denitrification array 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 43 42 44 43 … … 48 47 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 49 48 !! $Id$ 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 !!---------------------------------------------------------------------- 52 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 !!---------------------------------------------------------------------- 53 51 CONTAINS 54 52 … … 61 59 !! ** Method : - ??? 62 60 !!--------------------------------------------------------------------- 61 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 62 USE wrk_nemo, ONLY: ztempbac => wrk_2d_1 63 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2 , zfesatur => wrk_3d_2 , zolimi => wrk_3d_4 64 ! 63 65 INTEGER, INTENT(in) :: kt ! ocean time step 66 ! 64 67 INTEGER :: ji, jj, jk 65 68 REAL(wp) :: zremip, zremik , zlam1b … … 72 75 #endif 73 76 REAL(wp) :: zlamfac, zonitr, zstep 74 REAL(wp), DIMENSION(jpi,jpj) :: ztempbac75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zfesatur, zolimi76 77 CHARACTER (len=25) :: charout 77 78 78 !!--------------------------------------------------------------------- 79 79 80 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 2,3,4) ) THEN 81 CALL ctl_stop('p4z_rem: requested workspace arrays unavailable') ; RETURN 82 ENDIF 80 83 81 84 ! Initialisation of temprary arrys 82 zdepbac (:,:,:) = 0. 083 zfesatur(:,:,:) = 0. 084 zolimi (:,:,:) = 0. 085 ztempbac(:,:) = 0. 085 zdepbac (:,:,:) = 0._wp 86 zfesatur(:,:,:) = 0._wp 87 zolimi (:,:,:) = 0._wp 88 ztempbac(:,:) = 0._wp 86 89 87 90 ! Computation of the mean phytoplankton concentration as 88 91 ! a crude estimate of the bacterial biomass 89 92 ! -------------------------------------------------- 90 91 93 DO jk = 1, jpkm1 92 94 DO jj = 1, jpj … … 362 364 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 363 365 #endif 364 365 END DO 366 END DO 367 END DO 368 ! 369 370 IF(ln_ctl) THEN ! print mean trends (used for debugging) 366 END DO 367 END DO 368 END DO 369 ! 370 371 IF(ln_ctl) THEN ! print mean trends (used for debugging) 371 372 WRITE(charout, FMT="('rem5')") 372 373 CALL prt_ctl_trc_info(charout) 373 374 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 374 375 376 377 375 ENDIF 376 377 ! Update the arrays TRA which contain the biological sources and sinks 378 ! -------------------------------------------------------------------- 378 379 379 380 DO jk = 1, jpkm1 … … 385 386 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi(:,:,jk) + denitr(:,:,jk) 386 387 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + denitr(:,:,jk) * rno3 * rdenit 387 END DO388 389 388 END DO 389 390 IF(ln_ctl) THEN ! print mean trends (used for debugging) 390 391 WRITE(charout, FMT="('rem6')") 391 392 CALL prt_ctl_trc_info(charout) 392 393 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 393 ENDIF 394 394 ENDIF 395 ! 396 IF( wrk_not_released(2, 1) .OR. & 397 wrk_not_released(3, 2,3,4) ) CALL ctl_stop('p4z_rem: failed to release workspace arrays') 398 ! 395 399 END SUBROUTINE p4z_rem 396 400 401 397 402 SUBROUTINE p4z_rem_init 398 399 403 !!---------------------------------------------------------------------- 400 404 !! *** ROUTINE p4z_rem_init *** … … 408 412 !! 409 413 !!---------------------------------------------------------------------- 410 411 414 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xlam1, oxymin 415 !!---------------------------------------------------------------------- 412 416 413 417 REWIND( numnat ) ! read numnat … … 425 429 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 426 430 ENDIF 427 428 nitrfac(:,:,:) = 0. 0429 denitr (:,:,:) = 0. 0430 431 ! 432 nitrfac(:,:,:) = 0._wp 433 denitr (:,:,:) = 0._wp 434 ! 431 435 END SUBROUTINE p4z_rem_init 436 437 438 INTEGER FUNCTION p4z_rem_alloc() 439 !!---------------------------------------------------------------------- 440 !! *** ROUTINE p4z_rem_alloc *** 441 !!---------------------------------------------------------------------- 442 ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 443 ! 444 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 445 ! 446 END FUNCTION p4z_rem_alloc 432 447 433 448 #else -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90
r2528 r2715 18 18 USE oce_trc ! 19 19 USE sms_pisces 20 USE lib_mpp21 USE lib_fortran22 20 USE prtctl_trc 23 21 USE p4zbio … … 27 25 USE p4zrem 28 26 USE p4zlim 29 USE lbclnk30 27 USE iom 31 28 … … 36 33 PUBLIC p4z_sed 37 34 PUBLIC p4z_sed_init 35 PUBLIC p4z_sed_alloc 38 36 39 37 !! * Shared module variables 40 LOGICAL, PUBLIC :: & 41 ln_dustfer = .FALSE. , & !: 42 ln_river = .FALSE. , & !: 43 ln_ndepo = .FALSE. , & !: 44 ln_sedinput = .FALSE. !: 45 46 REAL(wp), PUBLIC :: & 47 sedfeinput = 1.E-9_wp , & !: 48 dustsolub = 0.014_wp !: 38 LOGICAL, PUBLIC :: ln_dustfer = .FALSE. !: boolean for dust input from the atmosphere 39 LOGICAL, PUBLIC :: ln_river = .FALSE. !: boolean for river input of nutrients 40 LOGICAL, PUBLIC :: ln_ndepo = .FALSE. !: boolean for atmospheric deposition of N 41 LOGICAL, PUBLIC :: ln_sedinput = .FALSE. !: boolean for Fe input from sediments 42 43 REAL(wp), PUBLIC :: sedfeinput = 1.E-9_wp !: Coastal release of Iron 44 REAL(wp), PUBLIC :: dustsolub = 0.014_wp !: Solubility of the dust 49 45 50 46 !! * Module variables 51 REAL(wp) :: ryyss !: number of seconds per year 52 REAL(wp) :: ryyss1 !: inverse of ryyss 53 REAL(wp) :: rmtss !: number of seconds per month 54 REAL(wp) :: rday1 !: inverse of rday 55 56 INTEGER , PARAMETER :: & 57 jpmth = 12, jpyr = 1 58 INTEGER :: & 59 numdust, & !: logical unit for surface fluxes data 60 nflx1 , nflx2, & !: first and second record used 61 nflx11, nflx12 ! ??? 62 REAL(wp), DIMENSION(jpi,jpj,jpmth) :: dustmo !: set of dust fields 63 REAL(wp), DIMENSION(jpi,jpj) :: rivinp, cotdep, nitdep, dust 64 REAL(wp), DIMENSION(jpi,jpj) :: e1e2t 65 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ironsed 47 REAL(wp) :: ryyss !: number of seconds per year 48 REAL(wp) :: ryyss1 !: inverse of ryyss 49 REAL(wp) :: rmtss !: number of seconds per month 50 REAL(wp) :: rday1 !: inverse of rday 51 52 INTEGER , PARAMETER :: jpmth = 12 !: number of months per year 53 INTEGER , PARAMETER :: jpyr = 1 !: one year 54 55 INTEGER :: numdust !: logical unit for surface fluxes data 56 INTEGER :: nflx1 , nflx2 !: first and second record used 57 INTEGER :: nflx11, nflx12 58 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dustmo !: set of dust fields 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dust !: dust fields 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivinp, cotdep !: river input fields 62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: nitdep !: atmospheric N deposition 63 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ironsed !: Coastal supply of iron 64 66 65 REAL(wp) :: sumdepsi, rivalkinput, rivpo4input, nitdepinput 67 66 … … 76 75 CONTAINS 77 76 77 78 78 SUBROUTINE p4z_sed( kt, jnt ) 79 79 !!--------------------------------------------------------------------- … … 86 86 !! ** Method : - ??? 87 87 !!--------------------------------------------------------------------- 88 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 89 USE wrk_nemo, ONLY: zsidep => wrk_2d_1, zwork => wrk_2d_2, zwork1 => wrk_2d_3 90 USE wrk_nemo, ONLY: znitrpot => wrk_3d_2, zirondep => wrk_3d_3 91 ! 88 92 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 89 93 INTEGER :: ji, jj, jk, ikt … … 94 98 REAL(wp) :: zdenitot, znitrpottot, zlim, zfact 95 99 REAL(wp) :: zwsbio3, zwsbio4, zwscal 96 REAL(wp), DIMENSION(jpi,jpj) :: zsidep97 REAL(wp), DIMENSION(jpi,jpj) :: zwork, zwork198 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znitrpot, zirondep99 100 CHARACTER (len=25) :: charout 100 101 !!--------------------------------------------------------------------- 102 103 IF( ( wrk_in_use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2,3) ) ) THEN 104 CALL ctl_stop('p4z_sed: requested workspace arrays unavailable') ; RETURN 105 END IF 101 106 102 107 IF( jnt == 1 .AND. ln_dustfer ) CALL p4z_sbc( kt ) … … 288 293 ENDIF 289 294 295 IF( ( wrk_not_released(2, 1,2,3) ) .OR. ( wrk_not_released(3, 2,3) ) ) & 296 & CALL ctl_stop('p4z_sed: failed to release workspace arrays') 297 290 298 END SUBROUTINE p4z_sed 291 299 … … 474 482 ryyss1 = 1. / ryyss 475 483 ! ! ocean surface cell 476 e1e2t(:,:) = e1t(:,:) * e2t(:,:)477 484 478 485 ! total atmospheric supply of Si … … 512 519 END SUBROUTINE p4z_sed_init 513 520 521 INTEGER FUNCTION p4z_sed_alloc() 522 !!---------------------------------------------------------------------- 523 !! *** ROUTINE p4z_sed_alloc *** 524 !!---------------------------------------------------------------------- 525 526 ALLOCATE( dustmo(jpi,jpj,jpmth), dust(jpi,jpj) , & 527 & rivinp(jpi,jpj) , cotdep(jpi,jpj) , & 528 & nitdep(jpi,jpj) , ironsed(jpi,jpj,jpk), STAT=p4z_sed_alloc ) 529 530 IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc : failed to allocate arrays.') 531 532 END FUNCTION p4z_sed_alloc 514 533 #else 515 534 !!====================================================================== -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsink.F90
r2528 r2715 21 21 PUBLIC p4z_sink ! called in p4zbio.F90 22 22 PUBLIC p4z_sink_init ! called in trcsms_pisces.F90 23 24 !! * Shared module variables 25 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 26 wsbio3, wsbio4, & !: POC and GOC sinking speeds 27 wscal !: Calcite and BSi sinking speeds 28 29 !! * Module variables 30 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 31 sinking, sinking2, & !: POC sinking fluxes (different meanings depending on the parameterization 32 sinkcal, sinksil, & !: CaCO3 and BSi sinking fluxes 33 sinkfer !: Small BFe sinking flux 34 35 INTEGER :: & 36 iksed = 10 ! 23 PUBLIC p4z_sink_alloc 24 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wscal !: Calcite and BSi sinking speeds 28 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 30 ! ! (different meanings depending on the parameterization) 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 33 #if ! defined key_kriest 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 35 #endif 36 37 INTEGER :: iksed = 10 37 38 38 39 #if defined key_kriest 39 REAL(wp) :: & 40 xkr_sfact = 250. , & !: Sinking factor 41 xkr_stick = 0.2 , & !: Stickiness 42 xkr_nnano = 2.337 , & !: Nbr of cell in nano size class 43 xkr_ndiat = 3.718 , & !: Nbr of cell in diatoms size class 44 xkr_nmeso = 7.147 , & !: Nbr of cell in mesozoo size class 45 xkr_naggr = 9.877 !: Nbr of cell in aggregates size class 46 47 REAL(wp) :: & 48 xkr_frac 49 50 REAL(wp), PUBLIC :: & 51 xkr_dnano , & !: Size of particles in nano pool 52 xkr_ddiat , & !: Size of particles in diatoms pool 53 xkr_dmeso , & !: Size of particles in mesozoo pool 54 xkr_daggr , & !: Size of particles in aggregates pool 55 xkr_wsbio_min , & !: min vertical particle speed 56 xkr_wsbio_max !: max vertical particle speed 57 58 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: 59 xnumm !: maximum number of particles in aggregates 60 61 #endif 62 63 #if ! defined key_kriest 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & !: 65 sinkfer2 !: Big Fe sinking flux 66 #endif 40 REAL(wp) :: xkr_sfact = 250. !: Sinking factor 41 REAL(wp) :: xkr_stick = 0.2 !: Stickiness 42 REAL(wp) :: xkr_nnano = 2.337 !: Nbr of cell in nano size class 43 REAL(wp) :: xkr_ndiat = 3.718 !: Nbr of cell in diatoms size class 44 REAL(wp) :: xkr_nmeso = 7.147 !: Nbr of cell in mesozoo size class 45 REAL(wp) :: xkr_naggr = 9.877 !: Nbr of cell in aggregates size class 46 47 REAL(wp) :: xkr_frac 48 49 REAL(wp), PUBLIC :: xkr_dnano !: Size of particles in nano pool 50 REAL(wp), PUBLIC :: xkr_ddiat !: Size of particles in diatoms pool 51 REAL(wp), PUBLIC :: xkr_dmeso !: Size of particles in mesozoo pool 52 REAL(wp), PUBLIC :: xkr_daggr !: Size of particles in aggregates pool 53 REAL(wp), PUBLIC :: xkr_wsbio_min !: min vertical particle speed 54 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed 55 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates 57 #endif 67 58 68 59 !!* Substitution … … 71 62 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 72 63 !! $Id$ 73 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 74 65 !!---------------------------------------------------------------------- 75 76 66 CONTAINS 77 67 78 68 #if defined key_kriest 69 !!---------------------------------------------------------------------- 70 !! 'key_kriest' ??? 71 !!---------------------------------------------------------------------- 79 72 80 73 SUBROUTINE p4z_sink ( kt, jnt ) … … 87 80 !! ** Method : - ??? 88 81 !!--------------------------------------------------------------------- 89 82 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 83 USE wrk_nemo, ONLY: znum3d => wrk_3d_2 84 ! 90 85 INTEGER, INTENT(in) :: kt, jnt 86 ! 91 87 INTEGER :: ji, jj, jk 92 88 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zaggsi, zaggsh … … 99 95 INTEGER :: ik1 100 96 #endif 101 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znum3d102 97 CHARACTER (len=25) :: charout 103 104 !!--------------------------------------------------------------------- 105 98 !!--------------------------------------------------------------------- 99 ! 100 IF( wrk_in_use(3, 2 ) ) THEN 101 CALL ctl_stop('p4z_sink: requested workspace arrays unavailable') ; RETURN 102 ENDIF 103 106 104 ! Initialisation of variables used to compute Sinking Speed 107 105 ! --------------------------------------------------------- 108 106 109 110 111 112 113 114 ! Computation of the vertical sinking speed : Kriest et Evans, 2000115 ! -----------------------------------------------------------------107 znum3d(:,:,:) = 0.e0 108 zval1 = 1. + xkr_zeta 109 zval2 = 1. + xkr_zeta + xkr_eta 110 zval3 = 1. + xkr_eta 111 112 ! Computation of the vertical sinking speed : Kriest et Evans, 2000 113 ! ----------------------------------------------------------------- 116 114 117 115 DO jk = 1, jpkm1 … … 131 129 zdiv1 = zeps - zval3 132 130 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv & 133 &- xkr_wsbio_max * zgm * xkr_eta / zdiv131 & - xkr_wsbio_max * zgm * xkr_eta / zdiv 134 132 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 & 135 &- xkr_wsbio_max * zfm * xkr_eta / zdiv1133 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1 136 134 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 137 135 ENDIF … … 140 138 END DO 141 139 142 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50. )140 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50._wp ) 143 141 144 142 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS … … 305 303 #endif 306 304 ! 307 305 IF(ln_ctl) THEN ! print mean trends (used for debugging) 308 306 WRITE(charout, FMT="('sink')") 309 307 CALL prt_ctl_trc_info(charout) 310 308 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 311 ENDIF 312 309 ENDIF 310 ! 311 IF( wrk_not_released(3, 2 ) ) CALL ctl_stop('p4z_sink: failed to release workspace arrays') 312 ! 313 313 END SUBROUTINE p4z_sink 314 314 315 315 316 SUBROUTINE p4z_sink_init … … 324 325 !! 325 326 !! ** input : Namelist nampiskrs 326 !!327 327 !!---------------------------------------------------------------------- 328 328 INTEGER :: jk, jn, kiter … … 330 330 REAL(wp) :: zws, zwr, zwl,wmax, znummax 331 331 REAL(wp) :: zmin, zmax, zl, zr, xacc 332 332 ! 333 333 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , & 334 334 & xkr_nnano, xkr_ndiat, xkr_nmeso, xkr_naggr 335 336 335 !!---------------------------------------------------------------------- 336 ! 337 337 REWIND( numnat ) ! read nampiskrs 338 338 READ ( numnat, nampiskrs ) … … 347 347 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso 348 348 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr 349 ENDIF350 351 352 ! max and min vertical particle speed353 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta354 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta355 WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max356 357 !358 ! effect of the sizes of the different living pools on particle numbers359 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337360 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718361 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147362 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877363 ! doc aggregates = 1um364 ! ----------------------------------------------------------365 366 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )367 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )368 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )369 xkr_daggr = 1. / ( xkr_massp * xkr_naggr )349 ENDIF 350 351 352 ! max and min vertical particle speed 353 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta 354 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta 355 WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max 356 357 ! 358 ! effect of the sizes of the different living pools on particle numbers 359 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337 360 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718 361 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147 362 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877 363 ! doc aggregates = 1um 364 ! ---------------------------------------------------------- 365 366 xkr_dnano = 1. / ( xkr_massp * xkr_nnano ) 367 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat ) 368 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso ) 369 xkr_daggr = 1. / ( xkr_massp * xkr_naggr ) 370 370 371 371 !!--------------------------------------------------------------------- … … 379 379 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates' 380 380 381 xacc = 0.001 381 xacc = 0.001_wp 382 382 kiter = 50 383 zmin = 1.10 383 zmin = 1.10_wp 384 384 zmax = xkr_mass_max / xkr_mass_min 385 385 xkr_frac = zmax … … 402 402 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 403 403 & - wmax 404 iflag: DO jn = 1, kiter 405 IF( zwl == 0.e0 ) THEN 406 znummax = zl 407 ELSE IF ( zwr == 0.e0 ) THEN 408 znummax = zr 409 ELSE 410 znummax = ( zr + zl ) / 2. 411 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 412 znum = znummax - 1. 413 zws = xkr_wsbio_min * xkr_zeta / zdiv & 414 & - ( xkr_wsbio_max * xkr_eta * znum * & 415 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 416 & - wmax 417 IF( zws * zwl < 0. ) THEN 418 zr = znummax 419 ELSE 420 zl = znummax 421 ENDIF 422 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 423 znum = zl - 1. 424 zwl = xkr_wsbio_min * xkr_zeta / zdiv & 425 & - ( xkr_wsbio_max * xkr_eta * znum * & 426 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 427 & - wmax 428 429 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 430 znum = zr - 1. 431 zwr = xkr_wsbio_min * xkr_zeta / zdiv & 432 & - ( xkr_wsbio_max * xkr_eta * znum * & 433 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 434 & - wmax 435 436 IF ( ABS ( zws ) <= xacc ) EXIT iflag 437 438 ENDIF 439 440 END DO iflag 441 442 xnumm(jk) = znummax 443 WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 444 445 END DO 446 404 iflag: DO jn = 1, kiter 405 IF ( zwl == 0._wp ) THEN ; znummax = zl 406 ELSEIF( zwr == 0._wp ) THEN ; znummax = zr 407 ELSE 408 znummax = ( zr + zl ) / 2. 409 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 410 znum = znummax - 1. 411 zws = xkr_wsbio_min * xkr_zeta / zdiv & 412 & - ( xkr_wsbio_max * xkr_eta * znum * & 413 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 414 & - wmax 415 IF( zws * zwl < 0. ) THEN ; zr = znummax 416 ELSE ; zl = znummax 417 ENDIF 418 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 419 znum = zl - 1. 420 zwl = xkr_wsbio_min * xkr_zeta / zdiv & 421 & - ( xkr_wsbio_max * xkr_eta * znum * & 422 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 423 & - wmax 424 425 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 426 znum = zr - 1. 427 zwr = xkr_wsbio_min * xkr_zeta / zdiv & 428 & - ( xkr_wsbio_max * xkr_eta * znum * & 429 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 430 & - wmax 431 ! 432 IF ( ABS ( zws ) <= xacc ) EXIT iflag 433 ! 434 ENDIF 435 ! 436 END DO iflag 437 438 xnumm(jk) = znummax 439 WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 440 ! 441 END DO 442 ! 447 443 END SUBROUTINE p4z_sink_init 448 444 … … 476 472 DO jj = 1, jpj 477 473 DO ji=1,jpi 478 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000. 474 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000._wp 479 475 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 480 476 END DO … … 584 580 #endif 585 581 ! 586 582 IF(ln_ctl) THEN ! print mean trends (used for debugging) 587 583 WRITE(charout, FMT="('sink')") 588 584 CALL prt_ctl_trc_info(charout) 589 585 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 590 591 586 ENDIF 587 ! 592 588 END SUBROUTINE p4z_sink 589 593 590 594 591 SUBROUTINE p4z_sink_init … … 611 608 !! transport term, i.e. div(u*tra). 612 609 !!--------------------------------------------------------------------- 610 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 611 USE wrk_nemo, ONLY: ztraz => wrk_3d_2, zakz => wrk_3d_3, zwsink2 => wrk_3d_4 612 ! 613 613 INTEGER , INTENT(in ) :: jp_tra ! tracer index index 614 614 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pwsink ! sinking speed … … 617 617 INTEGER :: ji, jj, jk, jn 618 618 REAL(wp) :: zigma,zew,zign, zflx, zstep 619 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztraz, zakz 620 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwsink2 621 !!--------------------------------------------------------------------- 622 619 !!--------------------------------------------------------------------- 620 621 IF( wrk_in_use(3, 2,3,4 ) ) THEN 622 CALL ctl_stop('p4z_sink2: requested workspace arrays unavailable') 623 RETURN 624 END IF 623 625 624 626 zstep = rfact2 / 2. … … 701 703 END DO 702 704 703 trn(:,:,:,jp_tra) = trb(:,:,:,jp_tra) 704 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 705 705 trn (:,:,:,jp_tra) = trb(:,:,:,jp_tra) 706 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 707 ! 708 IF( wrk_not_released(3, 2,3,4) ) CALL ctl_stop('p4z_sink2: failed to release workspace arrays') 706 709 ! 707 710 END SUBROUTINE p4z_sink2 708 711 712 713 INTEGER FUNCTION p4z_sink_alloc() 714 !!---------------------------------------------------------------------- 715 !! *** ROUTINE p4z_sink_alloc *** 716 !!---------------------------------------------------------------------- 717 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk) , wscal(jpi,jpj,jpk) , & 718 & sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk) , & 719 & sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk) , & 720 #if defined key_kriest 721 & xnumm(jpk) , & 722 #else 723 & sinkfer2(jpi,jpj,jpk) , & 724 #endif 725 & sinkfer(jpi,jpj,jpk) , STAT=p4z_sink_alloc ) 726 ! 727 IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 728 ! 729 END FUNCTION p4z_sink_alloc 730 709 731 #else 710 732 !!====================================================================== -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r2528 r2715 7 7 !! 3.2 ! 2009-04 (C. Ethe & NEMO team) style 8 8 !!---------------------------------------------------------------------- 9 10 9 #if defined key_pisces 11 10 !!---------------------------------------------------------------------- … … 38 37 !!* Damping 39 38 LOGICAL :: ln_pisdmp !: relaxation or not of nutrients to a mean value 40 !: when initialize from a restart file41 39 LOGICAL :: ln_pisclo !: Restoring or not of nutrients to initial value 42 40 !: on close seas 43 41 44 42 !!* Biological fluxes for light 45 INTEGER , DIMENSION(jpi,jpj) ::neln !: number of T-levels + 1 in the euphotic layer46 REAL(wp), DIMENSION(jpi,jpj) ::heup !: euphotic layer depth43 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln !: number of T-levels + 1 in the euphotic layer 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: heup !: euphotic layer depth 47 45 48 46 !!* Biological fluxes for primary production 49 REAL(wp), DIMENSION(jpi,jpj):: xksi !: ???50 REAL(wp), DIMENSION(jpi,jpj):: xksimax !: ???51 REAL(wp), DIMENSION(jpi,jpj,jpk):: xnanono3 !: ???52 REAL(wp), DIMENSION(jpi,jpj,jpk):: xdiatno3 !: ???53 REAL(wp), DIMENSION(jpi,jpj,jpk):: xnanonh4 !: ???54 REAL(wp), DIMENSION(jpi,jpj,jpk):: xdiatnh4 !: ???55 REAL(wp), DIMENSION(jpi,jpj,jpk):: xlimphy !: ???56 REAL(wp), DIMENSION(jpi,jpj,jpk):: xlimdia !: ???57 REAL(wp), DIMENSION(jpi,jpj,jpk):: concdfe !: ???58 REAL(wp), DIMENSION(jpi,jpj,jpk):: concnfe !: ???47 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: ??? 48 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: ??? 49 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: ??? 50 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: ??? 51 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: ??? 52 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: ??? 53 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: ??? 54 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: ??? 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: ??? 56 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: ??? 59 57 60 58 !!* SMS for the organic matter 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: xfracal !: ??62 REAL(wp), DIMENSION(jpi,jpj,jpk) :: nitrfac !: ??63 REAL(wp), DIMENSION(jpi,jpj,jpk) :: xlimbac !: ??64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: xdiss !: ??59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: ?? 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: ?? 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: ?? 62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ?? 65 63 #if defined key_diatrc 66 REAL(wp), DIMENSION(jpi,jpj,jpk) :: prodcal !: Calcite production67 REAL(wp), DIMENSION(jpi,jpj,jpk) :: grazing !: Total zooplankton grazing64 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 65 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: grazing !: Total zooplankton grazing 68 66 #endif 69 67 70 68 !!* Variable for chemistry of the CO2 cycle 71 REAL(wp), DIMENSION(jpi,jpj,jpk) :: akb3 !: ??? 72 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ak13 !: ??? 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ak23 !: ??? 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: aksp !: ??? 75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: akw3 !: ??? 76 REAL(wp), DIMENSION(jpi,jpj,jpk) :: borat !: ??? 77 REAL(wp), DIMENSION(jpi,jpj,jpk) :: hi !: ??? 69 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: akb3 !: ??? 70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: ??? 71 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: ??? 72 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: ??? 73 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: akw3 !: ??? 74 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: borat !: ??? 75 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: ??? 76 77 !!* Array used to indicate negative tracer values 78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ??? 78 79 79 80 #if defined key_kriest … … 85 86 #endif 86 87 88 !!---------------------------------------------------------------------- 89 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 90 !! $Id$ 91 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 92 !!---------------------------------------------------------------------- 93 CONTAINS 94 95 INTEGER FUNCTION sms_pisces_alloc() 96 !!---------------------------------------------------------------------- 97 !! *** ROUTINE sms_pisces_alloc *** 98 !!---------------------------------------------------------------------- 99 USE lib_mpp , ONLY: ctl_warn 100 INTEGER :: ierr(5) ! Local variables 101 !!---------------------------------------------------------------------- 102 ierr(:) = 0 103 ! 104 !* Biological fluxes for light 105 ALLOCATE( neln(jpi,jpj), heup(jpi,jpj), STAT=ierr(1) ) 106 ! 107 !* Biological fluxes for primary production 108 ALLOCATE( xksimax(jpi,jpj) , xksi(jpi,jpj) , & 109 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), & 110 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 111 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 112 & concdfe (jpi,jpj,jpk), concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 113 ! 114 !* SMS for the organic matter 115 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac (jpi,jpj,jpk), & 116 #if defined key_diatrc 117 & prodcal(jpi,jpj,jpk) , grazing(jpi,jpj,jpk) , & 118 #endif 119 & xlimbac (jpi,jpj,jpk), xdiss(jpi,jpj,jpk) , STAT=ierr(3) ) 120 ! 121 !* Variable for chemistry of the CO2 cycle 122 ALLOCATE( akb3(jpi,jpj,jpk), ak13(jpi,jpj,jpk) , & 123 & ak23(jpi,jpj,jpk), aksp(jpi,jpj,jpk) , & 124 & akw3(jpi,jpj,jpk), borat(jpi,jpj,jpk), hi(jpi,jpj,jpk), STAT=ierr(4) ) 125 ! 126 !* Array used to indicate negative tracer values 127 ALLOCATE( xnegtr(jpi,jpj,jpk), STAT=ierr(5) ) 128 ! 129 sms_pisces_alloc = MAXVAL( ierr ) 130 ! 131 IF( sms_pisces_alloc /= 0 ) CALL ctl_warn('sms_pisces_alloc: failed to allocate arrays') 132 ! 133 END FUNCTION sms_pisces_alloc 134 87 135 #else 88 136 !!---------------------------------------------------------------------- … … 91 139 #endif 92 140 93 !!----------------------------------------------------------------------94 !! NEMO/TOP 3.3 , NEMO Consortium (2010)95 !! $Id$96 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)97 141 !!====================================================================== 98 142 END MODULE sms_pisces -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r2528 r2715 21 21 USE oce_trc ! ocean variables 22 22 USE p4zche 23 USE lib_mpp 23 USE p4zche ! 24 USE p4zsink ! 25 USE p4zopt ! 26 USE p4zprod ! 27 USE p4zrem ! 28 USE p4zsed ! 29 USE p4zflx ! 24 30 25 31 IMPLICIT NONE … … 28 34 PUBLIC trc_ini_pisces ! called by trcini.F90 module 29 35 30 !! * Module variables 31 REAL(wp) :: & 32 sco2 = 2.312e-3 , & 33 alka0 = 2.423e-3 , & 34 oxyg0 = 177.6e-6 , & 35 po4 = 2.174e-6 , & 36 bioma0 = 1.000e-8 , & 37 silic1 = 91.65e-6 , & 38 no3 = 31.04e-6 * 7.6 36 REAL(wp) :: sco2 = 2.312e-3_wp 37 REAL(wp) :: alka0 = 2.423e-3_wp 38 REAL(wp) :: oxyg0 = 177.6e-6_wp 39 REAL(wp) :: po4 = 2.174e-6_wp 40 REAL(wp) :: bioma0 = 1.000e-8_wp 41 REAL(wp) :: silic1 = 91.65e-6_wp 42 REAL(wp) :: no3 = 31.04e-6_wp * 7.6_wp 39 43 40 44 # include "top_substitute.h90" … … 42 46 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 43 47 !! $Id$ 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 49 !!---------------------------------------------------------------------- 46 47 50 CONTAINS 48 51 … … 53 56 !! ** Purpose : Initialisation of the PISCES biochemical model 54 57 !!---------------------------------------------------------------------- 55 56 57 ! Control consitency 58 CALL trc_ctl_pisces 59 60 58 ! 61 59 IF(lwp) WRITE(numout,*) 62 60 IF(lwp) WRITE(numout,*) ' trc_ini_pisces : PISCES biochemical model initialisation' 63 61 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 62 63 CALL pisces_alloc() ! Allocate PISCES arrays 64 64 65 65 ! ! Time-step … … 126 126 IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' 127 127 IF(lwp) WRITE(numout,*) ' ' 128 129 128 ! 130 129 END SUBROUTINE trc_ini_pisces 131 132 SUBROUTINE trc_ctl_pisces 130 131 132 SUBROUTINE pisces_alloc 133 133 !!---------------------------------------------------------------------- 134 !! *** ROUTINE trc_ctl_pisces***134 !! *** ROUTINE pisces_alloc *** 135 135 !! 136 !! ** Purpose : control the cpp options, namelist and files136 !! ** Purpose : Allocate all the dynamic arrays of PISCES 137 137 !!---------------------------------------------------------------------- 138 USE p4zint , ONLY : p4z_int_alloc 139 USE p4zsink, ONLY : p4z_sink_alloc 140 USE p4zopt , ONLY : p4z_opt_alloc 141 USE p4zprod, ONLY : p4z_prod_alloc 142 USE p4zrem , ONLY : p4z_rem_alloc 143 USE p4zsed , ONLY : p4z_sed_alloc 144 USE p4zflx , ONLY : p4z_flx_alloc 145 ! 146 INTEGER :: ierr 147 !!---------------------------------------------------------------------- 148 ! 149 ierr = sms_pisces_alloc() ! Start of PISCES-related alloc routines... 150 ierr = ierr + p4z_che_alloc() 151 ierr = ierr + p4z_int_alloc() 152 ierr = ierr + p4z_sink_alloc() 153 ierr = ierr + p4z_opt_alloc() 154 ierr = ierr + p4z_prod_alloc() 155 ierr = ierr + p4z_rem_alloc() 156 ierr = ierr + p4z_sed_alloc() 157 ierr = ierr + p4z_flx_alloc() 158 ! 159 IF( lk_mpp ) CALL mpp_sum( ierr ) 160 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) 161 ! 162 END SUBROUTINE pisces_alloc 138 163 139 IF(lwp) WRITE(numout,*)140 IF(lwp) WRITE(numout,*) ' use PISCES biological model '141 142 ! Check number of tracers143 ! -----------------------144 #if defined key_kriest145 IF( jp_pisces /= 23) CALL ctl_stop( ' PISCES must have 23 passive tracers. Change jp_pisces in par_pisces.F90' )146 #else147 IF( jp_pisces /= 24) CALL ctl_stop( ' PISCES must have 24 passive tracers. Change jp_pisces in par_pisces.F90' )148 #endif149 150 END SUBROUTINE trc_ctl_pisces151 152 164 #else 153 165 !!---------------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90
r2567 r2715 19 19 USE trc ! TOP variables 20 20 USE sms_pisces ! sms trends 21 USE in_out_manager ! I/O manager22 21 23 22 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcrst_pisces.F90
r2528 r2715 18 18 USE trcsms_pisces ! pisces sms trends 19 19 USE sms_pisces ! pisces sms variables 20 USE in_out_manager ! I/O manager21 20 USE iom 22 21 USE trcdta 23 USE lib_mpp24 USE lib_fortran25 22 26 23 IMPLICIT NONE … … 108 105 !! ** purpose : Relaxation of some tracers 109 106 !!---------------------------------------------------------------------- 110 INTEGER :: ji, jj, jk 111 REAL(wp) :: & 112 alkmean = 2426. , & ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 113 po4mean = 2.165 , & ! mean value of phosphates 114 no3mean = 30.90 , & ! mean value of nitrate 115 silmean = 91.51 ! mean value of silicate 116 117 REAL(wp) :: zarea, zvol, zalksum, zpo4sum, zno3sum, zsilsum 107 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 108 REAL(wp) :: po4mean = 2.165 ! mean value of phosphates 109 REAL(wp) :: no3mean = 30.90 ! mean value of nitrate 110 REAL(wp) :: silmean = 91.51 ! mean value of silicate 111 112 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 118 113 119 114 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
r2528 r2715 16 16 USE trc 17 17 USE sms_pisces 18 USE lbclnk19 USE lib_mpp20 18 21 19 USE p4zint ! … … 65 63 !! - ... 66 64 !!--------------------------------------------------------------------- 65 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: ztrpis => wrk_3d_1 ! used for pisces sms trends 67 ! 67 68 INTEGER, INTENT( in ) :: kt ! ocean time-step index 68 69 !! 69 70 INTEGER :: jnt, jn 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrpis ! used for pisces sms trends71 71 CHARACTER (len=25) :: charout 72 72 !!--------------------------------------------------------------------- 73 73 74 74 IF( kt == nit000 ) CALL trc_sms_pisces_init ! Initialization (first time-step only) 75 76 IF( wrk_in_use(3,1) ) THEN 77 CALL ctl_stop('trc_sms_pisces : requested workspace array unavailable.') ; RETURN 78 ENDIF 75 79 76 80 IF( ndayflxtr /= nday_year ) THEN ! New days … … 111 115 CALL trd_mod_trc( ztrpis, jn, jptra_trd_sms, kt ) ! save trends 112 116 END DO 117 DEALLOCATE( ztrpis ) 113 118 END IF 114 119 … … 122 127 ! 123 128 ENDIF 129 130 IF( wrk_not_released(3,1) ) CALL ctl_stop('trc_sms_pisces : failed to release workspace array.') 124 131 125 132 END SUBROUTINE trc_sms_pisces
Note: See TracChangeset
for help on using the changeset viewer.